{
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicAnalyzer.html",
    "title": "Class ArabicAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArabicAnalyzer Analyzer for Arabic. This analyzer implements light-stemming as specified by: Light Stemming for Arabic Information Retrieval http://www.mtholyoke.edu/~lballest/Pubs/arab_stem05.pdf The analysis package contains three primary components: ArabicNormalizationFilter : Arabic orthographic normalization. ArabicStemFilter : Arabic light stemming Arabic stop words file: a set of default Arabic stop words. Inheritance System.Object Analyzer StopwordAnalyzerBase ArabicAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ArabicAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source ArabicAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public ArabicAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source ArabicAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public ArabicAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source ArabicAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop word. If a none-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before ArabicStemFilter . Declaration public ArabicAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Arabic stopwords. Default stopword list is from http://members.unine.ch/jacques.savoy/clef/index.html The stopword list is BSD-Licensed. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from an StandardTokenizer filtered with LowerCaseFilter , StopFilter , ArabicNormalizationFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and ArabicStemFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicLetterTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicLetterTokenizer.html",
    "title": "Class ArabicLetterTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArabicLetterTokenizer Tokenizer that breaks text into runs of letters and diacritics. The problem with the standard Letter tokenizer is that it fails on diacritics. Handling similar to this is necessary for Indic Scripts, Hebrew, Thaana, etc. You must specify the required LuceneVersion compatibility when creating ArabicLetterTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer LetterTokenizer ArabicLetterTokenizer Implements IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ArabicLetterTokenizer : LetterTokenizer, IDisposable Constructors | Improve this Doc View Source ArabicLetterTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new ArabicLetterTokenizer using a given AttributeSource.AttributeFactory . Declaration public ArabicLetterTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match - See LuceneVersion . AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer TextReader in the input to split up into tokens | Improve this Doc View Source ArabicLetterTokenizer(LuceneVersion, TextReader) Construct a new ArabicLetterTokenizer. Declaration public ArabicLetterTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match 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 IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicLetterTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicLetterTokenizerFactory.html",
    "title": "Class ArabicLetterTokenizerFactory | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicNormalizationFilter.html",
    "title": "Class ArabicNormalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArabicNormalizationFilter A TokenFilter that applies ArabicNormalizer to normalize the orthography. Inheritance System.Object AttributeSource TokenStream TokenFilter ArabicNormalizationFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ArabicNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ArabicNormalizationFilter(TokenStream) Declaration public ArabicNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicNormalizationFilterFactory.html",
    "title": "Class ArabicNormalizationFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicNormalizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicNormalizer.html",
    "title": "Class ArabicNormalizer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ArabicNormalizer : object Fields | Improve this Doc View Source ALEF Declaration public const char ALEF = null Field Value Type Description System.Char | Improve this Doc View Source ALEF_HAMZA_ABOVE Declaration public const char ALEF_HAMZA_ABOVE = null Field Value Type Description System.Char | Improve this Doc View Source ALEF_HAMZA_BELOW Declaration public const char ALEF_HAMZA_BELOW = null Field Value Type Description System.Char | Improve this Doc View Source ALEF_MADDA Declaration public const char ALEF_MADDA = null Field Value Type Description System.Char | Improve this Doc View Source DAMMA Declaration public const char DAMMA = null Field Value Type Description System.Char | Improve this Doc View Source DAMMATAN Declaration public const char DAMMATAN = null Field Value Type Description System.Char | Improve this Doc View Source DOTLESS_YEH Declaration public const char DOTLESS_YEH = null Field Value Type Description System.Char | Improve this Doc View Source FATHA Declaration public const char FATHA = null Field Value Type Description System.Char | Improve this Doc View Source FATHATAN Declaration public const char FATHATAN = null Field Value Type Description System.Char | Improve this Doc View Source HEH Declaration public const char HEH = null Field Value Type Description System.Char | Improve this Doc View Source KASRA Declaration public const char KASRA = null Field Value Type Description System.Char | Improve this Doc View Source KASRATAN Declaration public const char KASRATAN = null Field Value Type Description System.Char | Improve this Doc View Source SHADDA Declaration public const char SHADDA = null Field Value Type Description System.Char | Improve this Doc View Source SUKUN Declaration public const char SUKUN = null Field Value Type Description System.Char | Improve this Doc View Source TATWEEL Declaration public const char TATWEEL = null Field Value Type Description System.Char | Improve this Doc View Source TEH_MARBUTA Declaration public const char TEH_MARBUTA = null Field Value Type Description System.Char | Improve this Doc View Source YEH Declaration public const char YEH = null Field Value Type Description System.Char Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalize an input buffer of Arabic text Declaration public virtual int Normalize(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicStemFilter.html",
    "title": "Class ArabicStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArabicStemFilter A TokenFilter that applies ArabicStemmer to stem Arabic words.. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter ArabicStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ArabicStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ArabicStemFilter(TokenStream) Declaration public ArabicStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicStemFilterFactory.html",
    "title": "Class ArabicStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.ArabicStemmer.html",
    "title": "Class ArabicStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ArabicStemmer : object Fields | Improve this Doc View Source ALEF Declaration public const char ALEF = null Field Value Type Description System.Char | Improve this Doc View Source BEH Declaration public const char BEH = null Field Value Type Description System.Char | Improve this Doc View Source FEH Declaration public const char FEH = null Field Value Type Description System.Char | Improve this Doc View Source HEH Declaration public const char HEH = null Field Value Type Description System.Char | Improve this Doc View Source KAF Declaration public const char KAF = null Field Value Type Description System.Char | Improve this Doc View Source LAM Declaration public const char LAM = null Field Value Type Description System.Char | Improve this Doc View Source NOON Declaration public const char NOON = null Field Value Type Description System.Char | Improve this Doc View Source prefixes Declaration public static readonly char[][] prefixes Field Value Type Description System.Char [][] | Improve this Doc View Source suffixes Declaration public static readonly char[][] suffixes Field Value Type Description System.Char [][] | Improve this Doc View Source TEH Declaration public const char TEH = null Field Value Type Description System.Char | Improve this Doc View Source TEH_MARBUTA Declaration public const char TEH_MARBUTA = null Field Value Type Description System.Char | Improve this Doc View Source WAW Declaration public const char WAW = null Field Value Type Description System.Char | Improve this Doc View Source YEH Declaration public const char YEH = null Field Value Type Description System.Char Methods | Improve this Doc View Source Stem(Char[], Int32) Stem an input buffer of Arabic text. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization | Improve this Doc View Source StemPrefix(Char[], Int32) Stem a prefix off an Arabic word. Declaration public virtual int StemPrefix(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 new length of input buffer after stemming. | Improve this Doc View Source StemSuffix(Char[], Int32) Stem suffix(es) off an Arabic word. Declaration public virtual int StemSuffix(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 new length of input buffer after stemming"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ar.html",
    "title": "Namespace Lucene.Net.Analysis.Ar | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ar <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Arabic. Classes ArabicAnalyzer Analyzer for Arabic. This analyzer implements light-stemming as specified by: Light Stemming for Arabic Information Retrieval http://www.mtholyoke.edu/~lballest/Pubs/arab_stem05.pdf The analysis package contains three primary components: ArabicNormalizationFilter : Arabic orthographic normalization. ArabicStemFilter : Arabic light stemming Arabic stop words file: a set of default Arabic stop words. ArabicLetterTokenizer Tokenizer that breaks text into runs of letters and diacritics. The problem with the standard Letter tokenizer is that it fails on diacritics. Handling similar to this is necessary for Indic Scripts, Hebrew, Thaana, etc. You must specify the required LuceneVersion compatibility when creating ArabicLetterTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. ArabicLetterTokenizerFactory Factory for ArabicLetterTokenizer ArabicNormalizationFilter A TokenFilter that applies ArabicNormalizer to normalize the orthography. ArabicNormalizationFilterFactory Factory for ArabicNormalizationFilter . <fieldType name=\"text_arnormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ArabicNormalizationFilterFactory\"/> </analyzer> </fieldType> ArabicNormalizer Normalizer for Arabic. Normalization is done in-place for efficiency, operating on a termbuffer. Normalization is defined as: Normalization of hamza with alef seat to a bare alef. Normalization of teh marbuta to heh Normalization of dotless yeh (alef maksura) to yeh. Removal of Arabic diacritics (the harakat) Removal of tatweel (stretching character). ArabicStemFilter A TokenFilter that applies ArabicStemmer to stem Arabic words.. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . ArabicStemFilterFactory Factory for ArabicStemFilter . <fieldType name=\"text_arstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ArabicNormalizationFilterFactory\"/> <filter class=\"solr.ArabicStemFilterFactory\"/> </analyzer> </fieldType> ArabicStemmer Stemmer for Arabic. Stemming is done in-place for efficiency, operating on a termbuffer. Stemming is defined as: Removal of attached definite article, conjunction, and prepositions. Stemming of common suffixes."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianAnalyzer.html",
    "title": "Class BulgarianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BulgarianAnalyzer Analyzer for Bulgarian. This analyzer implements light-stemming as specified by: Searching Strategies for the Bulgarian Language http://members.unine.ch/jacques.savoy/Papers/BUIR.pdf Inheritance System.Object Analyzer StopwordAnalyzerBase BulgarianAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Bg Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BulgarianAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source BulgarianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public BulgarianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source BulgarianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public BulgarianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords | Improve this Doc View Source BulgarianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words and a stem exclusion set. If a stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before BulgarianStemFilter . Declaration public BulgarianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords CharArraySet stemExclusionSet Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Bulgarian stopwords. Default stopword list is from http://members.unine.ch/jacques.savoy/clef/index.html The stopword list is BSD-Licensed. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and BulgarianStemFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianStemFilter.html",
    "title": "Class BulgarianStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BulgarianStemFilter A TokenFilter that applies BulgarianStemmer to stem Bulgarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter BulgarianStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Bg Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BulgarianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source BulgarianStemFilter(TokenStream) Declaration public BulgarianStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianStemFilterFactory.html",
    "title": "Class BulgarianStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.BulgarianStemmer.html",
    "title": "Class BulgarianStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Bg Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BulgarianStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Stem an input buffer of Bulgarian text. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Bg.html",
    "title": "Namespace Lucene.Net.Analysis.Bg | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Bg <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Bulgarian. Classes BulgarianAnalyzer Analyzer for Bulgarian. This analyzer implements light-stemming as specified by: Searching Strategies for the Bulgarian Language http://members.unine.ch/jacques.savoy/Papers/BUIR.pdf BulgarianStemFilter A TokenFilter that applies BulgarianStemmer to stem Bulgarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . BulgarianStemFilterFactory Factory for BulgarianStemFilter . <fieldType name=\"text_bgstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.BulgarianStemFilterFactory\"/> </analyzer> </fieldType> BulgarianStemmer Light Stemmer for Bulgarian. Implements the algorithm described in: Searching Strategies for the Bulgarian Language http://members.unine.ch/jacques.savoy/Papers/BUIR.pdf"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianAnalyzer.html",
    "title": "Class BrazilianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BrazilianAnalyzer Analyzer for Brazilian Portuguese language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (words that will not be stemmed, but indexed). NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer StopwordAnalyzerBase BrazilianAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Br Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BrazilianAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source BrazilianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( DefaultStopSet ). Declaration public BrazilianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source BrazilianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public BrazilianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source BrazilianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words and stemming exclusion words Declaration public BrazilianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Brazilian Portuguese stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with LowerCaseFilter , StandardFilter , StopFilter , and BrazilianStemFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianStemFilter.html",
    "title": "Class BrazilianStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BrazilianStemFilter A TokenFilter that applies BrazilianStemmer . To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter BrazilianStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Br Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BrazilianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source BrazilianStemFilter(TokenStream) Creates a new BrazilianStemFilter Declaration public BrazilianStemFilter(TokenStream in) Parameters Type Name Description TokenStream in the source TokenStream Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianStemFilterFactory.html",
    "title": "Class BrazilianStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.BrazilianStemmer.html",
    "title": "Class BrazilianStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BrazilianStemmer A stemmer for Brazilian Portuguese words. Inheritance System.Object BrazilianStemmer Namespace : Lucene.Net.Analysis.Br Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BrazilianStemmer : object Constructors | Improve this Doc View Source BrazilianStemmer() Declaration public BrazilianStemmer() Methods | Improve this Doc View Source Log() For log and debug purpose Declaration public virtual string Log() Returns Type Description System.String TERM, CT, RV, R1 and R2 | Improve this Doc View Source Stem(String) Stems the given term to an unique discriminator . Declaration protected virtual string Stem(string term) Parameters Type Name Description System.String term The term that should be stemmed. Returns Type Description System.String Discriminator for term"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Br.html",
    "title": "Namespace Lucene.Net.Analysis.Br | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Br <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Brazilian Portuguese. Classes BrazilianAnalyzer Analyzer for Brazilian Portuguese language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (words that will not be stemmed, but indexed). NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . BrazilianStemFilter A TokenFilter that applies BrazilianStemmer . To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . BrazilianStemFilterFactory Factory for BrazilianStemFilter . <fieldType name=\"text_brstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.BrazilianStemFilterFactory\"/> </analyzer> </fieldType> BrazilianStemmer A stemmer for Brazilian Portuguese words."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ca.CatalanAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ca.CatalanAnalyzer.html",
    "title": "Class CatalanAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CatalanAnalyzer Analyzer for Catalan. You must specify the required LuceneVersion compatibility when creating CatalanAnalyzer: Inheritance System.Object Analyzer StopwordAnalyzerBase CatalanAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Ca Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CatalanAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source CatalanAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public CatalanAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source CatalanAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public CatalanAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source CatalanAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public CatalanAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Catalan stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , ElisionFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ca.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ca.html",
    "title": "Namespace Lucene.Net.Analysis.Ca | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ca <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Catalan. Classes CatalanAnalyzer Analyzer for Catalan. You must specify the required LuceneVersion compatibility when creating CatalanAnalyzer:"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.BaseCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.BaseCharFilter.html",
    "title": "Class BaseCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseCharFilter Base utility class for implementing a CharFilter . You subclass this, and then record mappings by calling AddOffCorrectMap(Int32, Int32) , and then invoke the correct method to correct an offset. Inheritance System.Object CharFilter BaseCharFilter HTMLStripCharFilter MappingCharFilter PatternReplaceCharFilter BufferedCharFilter Inherited Members CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Read(Char[], Int32, Int32) CharFilter.Read() CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) Namespace : Lucene.Net.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class BaseCharFilter : CharFilter Constructors | Improve this Doc View Source BaseCharFilter(TextReader) Declaration public BaseCharFilter(TextReader in) Parameters Type Name Description 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"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.html",
    "title": "Namespace Lucene.Net.Analysis.CharFilters | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.CharFilters <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Normalization of text before the tokenizer. CharFilters are chainable filters that normalize text before tokenization and provide mappings between normalized text offsets and the corresponding offset in the original text. CharFilter offset mappings CharFilters modify an input stream via a series of substring replacements (including deletions and insertions) to produce an output stream. There are three possible replacement cases: the replacement string has the same length as the original substring; the replacement is shorter; and the replacement is longer. In the latter two cases (when the replacement has a different length than the original), one or more offset correction mappings are required. When the replacement is shorter than the original (e.g. when the replacement is the empty string), a single offset correction mapping should be added at the replacement's end offset in the output stream. The cumulativeDiff parameter to the addOffCorrectMapping() method will be the sum of all previous replacement offset adjustments, with the addition of the difference between the lengths of the original substring and the replacement string (a positive value). When the replacement is longer than the original (e.g. when the original is the empty string), you should add as many offset correction mappings as the difference between the lengths of the replacement string and the original substring, starting at the end offset the original substring would have had in the output stream. The cumulativeDiff parameter to the addOffCorrectMapping() method will be the sum of all previous replacement offset adjustments, with the addition of the difference between the lengths of the original substring and the replacement string so far (a negative value). Classes BaseCharFilter Base utility class for implementing a CharFilter . You subclass this, and then record mappings by calling AddOffCorrectMap(Int32, Int32) , and then invoke the correct method to correct an offset. HTMLStripCharFilter A CharFilter that wraps another and attempts to strip out HTML constructs. HTMLStripCharFilterFactory Factory for HTMLStripCharFilter . <fieldType name=\"text_html\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.HTMLStripCharFilterFactory\" escapedTags=\"a, title\" /> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType> MappingCharFilter Simplistic CharFilter that applies the mappings contained in a NormalizeCharMap to the character stream, and correcting the resulting changes to the offsets. Matching is greedy (longest pattern matching at a given point wins). Replacement is allowed to be the empty string. MappingCharFilterFactory Factory for MappingCharFilter . <fieldType name=\"text_map\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.MappingCharFilterFactory\" mapping=\"mapping.txt\"/> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType> @since Solr 1.4 NormalizeCharMap Holds a map of input to 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 @lucene.experimental"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.HTMLStripCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.HTMLStripCharFilter.html",
    "title": "Class HTMLStripCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HTMLStripCharFilter A CharFilter that wraps another and attempts to strip out HTML constructs. Inheritance System.Object CharFilter BaseCharFilter HTMLStripCharFilter Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) Namespace : Lucene.Net.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HTMLStripCharFilter : BaseCharFilter 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 TextReader source to strip html tags from. | Improve this Doc View Source HTMLStripCharFilter(TextReader, ICollection<String>) Creates a new HTMLStripCharFilter over the provided with the specified start and end tags. Declaration public HTMLStripCharFilter(TextReader source, ICollection<string> escapedTags) Parameters Type Name Description TextReader source to strip html tags from. 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 | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.HTMLStripCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.HTMLStripCharFilterFactory.html",
    "title": "Class HTMLStripCharFilterFactory | Apache Lucene.NET 4.8.0 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 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 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 TextReader input Returns Type Description TextReader Overrides CharFilterFactory.Create(TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.MappingCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.MappingCharFilter.html",
    "title": "Class MappingCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MappingCharFilter Simplistic CharFilter that applies the mappings contained in a NormalizeCharMap to the character stream, and correcting the resulting changes to the offsets. Matching is greedy (longest pattern matching at a given point wins). Replacement is allowed to be the empty string. Inheritance System.Object CharFilter BaseCharFilter MappingCharFilter Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) Namespace : Lucene.Net.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public class MappingCharFilter : BaseCharFilter Constructors | Improve this Doc View Source MappingCharFilter(NormalizeCharMap, TextReader) Default constructor that takes a . Declaration public MappingCharFilter(NormalizeCharMap normMap, TextReader in) Parameters Type Name Description NormalizeCharMap normMap TextReader in Methods | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32 | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides CharFilter.Reset()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.MappingCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.MappingCharFilterFactory.html",
    "title": "Class MappingCharFilterFactory | Apache Lucene.NET 4.8.0 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 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 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 TextReader input Returns Type Description 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 IList < System.String > rules NormalizeCharMap.Builder builder | Improve this Doc View Source ParseString(String) Declaration protected virtual string ParseString(string s) Parameters Type Name Description System.String s Returns Type Description System.String Implements IResourceLoaderAware IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.NormalizeCharMap.Builder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.NormalizeCharMap.Builder.html",
    "title": "Class NormalizeCharMap.Builder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormalizeCharMap.Builder Builds an NormalizeCharMap. Call add() until you have added all the mappings, then call build() to get a NormalizeCharMap @lucene.experimental Inheritance System.Object NormalizeCharMap.Builder Namespace : Lucene.Net.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Builder : object 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 | Improve this Doc View Source Build() Builds the NormalizeCharMap ; call this once you are done calling Add(String, String) . Declaration public virtual NormalizeCharMap Build() Returns Type Description NormalizeCharMap"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.NormalizeCharMap.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CharFilters.NormalizeCharMap.html",
    "title": "Class NormalizeCharMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormalizeCharMap Holds a map of input to output, to be used with NormalizeCharMap.Builder . Use the MappingCharFilter to create this. Inheritance System.Object NormalizeCharMap Namespace : Lucene.Net.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NormalizeCharMap : object"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKAnalyzer.html",
    "title": "Class CJKAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CJKAnalyzer An Analyzer that tokenizes text with StandardTokenizer , normalizes content with CJKWidthFilter , folds case with LowerCaseFilter , forms bigrams of CJK with CJKBigramFilter , and filters stopwords with StopFilter Inheritance System.Object Analyzer StopwordAnalyzerBase CJKAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CJKAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source CJKAnalyzer(LuceneVersion) Builds an analyzer which removes words in DefaultStopSet . Declaration public CJKAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source CJKAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public CJKAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default CJK stopwords. Currently it contains some common English words that are not usually useful for searching and some double-byte interpunctions. Declaration public const string DEFAULT_STOPWORD_FILE = null 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 TextReader reader Returns Type Description TokenStreamComponents"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKBigramFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKBigramFilter.html",
    "title": "Class CJKBigramFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CJKBigramFilter Forms bigrams of CJK terms that are generated from StandardTokenizer or ICUTokenizer. CJK types are set by these tokenizers, but you can also use CJKBigramFilter(TokenStream, CJKScript) to explicitly control which of the CJK scripts are turned into bigrams. By default, when a CJK character has no adjacent characters to form a bigram, it is output in unigram form. If you want to always output both unigrams and bigrams, set the outputUnigrams flag in CJKBigramFilter(TokenStream, CJKScript, Boolean) . This can be used for a combined unigram+bigram approach. In all cases, all non-CJK input is passed thru unmodified. Inheritance System.Object AttributeSource TokenStream TokenFilter CJKBigramFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CJKBigramFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CJKBigramFilter(TokenStream) Calls CJKBigramFilter(TokenStream, CJKScript) Declaration public CJKBigramFilter(TokenStream in) Parameters Type Name Description TokenStream in Input TokenStream | Improve this Doc View Source CJKBigramFilter(TokenStream, CJKScript) Calls CJKBigramFilter(TokenStream, CJKScript, Boolean) Declaration public CJKBigramFilter(TokenStream in, CJKScript flags) Parameters Type Name Description TokenStream in Input TokenStream CJKScript flags OR'ed set from HAN , HIRAGANA , KATAKANA , HANGUL | Improve this Doc View Source CJKBigramFilter(TokenStream, CJKScript, Boolean) Create a new CJKBigramFilter , specifying which writing systems should be bigrammed, and whether or not unigrams should also be output. Declaration public CJKBigramFilter(TokenStream in, CJKScript flags, bool outputUnigrams) Parameters Type Name Description TokenStream in Input TokenStream CJKScript flags OR'ed set from HAN , HIRAGANA , KATAKANA , HANGUL System.Boolean outputUnigrams true if unigrams for the selected writing systems should also be output. when this is false, this is only done when there are no adjacent characters to form a bigram. Fields | Improve this Doc View Source DOUBLE_TYPE when we emit a bigram, its then marked as this type Declaration public const string DOUBLE_TYPE = null 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 = null Field Value Type Description System.String Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKBigramFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKBigramFilterFactory.html",
    "title": "Class CJKBigramFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKScript.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKScript.html",
    "title": "Enum CJKScript | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum CJKScript Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public enum CJKScript : int Fields Name Description ALL bigram flag for all scripts HAN bigram flag for Han Ideographs HANGUL bigram flag for Hangul HIRAGANA bigram flag for Hiragana KATAKANA bigram flag for Katakana"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKTokenizer.html",
    "title": "Class CJKTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CJKTokenizer CJKTokenizer is designed for Chinese, Japanese, and Korean languages. The tokens returned are every two adjacent characters with overlap match. Example: \"java C1C2C3C4\" will be segmented to: \"java\" \"C1C2\" \"C2C3\" \"C3C4\". Additionally, the following is applied to Latin text (such as English): Text is converted to lowercase. Numeric digits, '+', '#', and '_' are tokenized as letters. Full-width forms are converted to half-width forms. For more info on Asian language (Chinese, Japanese, and Korean) text segmentation: please search google Inheritance System.Object AttributeSource TokenStream Tokenizer CJKTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CJKTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source CJKTokenizer(AttributeSource.AttributeFactory, TextReader) Declaration public CJKTokenizer(AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description AttributeSource.AttributeFactory factory 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 TextReader in I/O reader Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Returns true for the next token in the stream, or false at EOS. See http://java.sun.com/j2se/1.3/docs/api/java/lang/Character.UnicodeBlock.html for detail. Declaration public override bool IncrementToken() Returns Type Description System.Boolean false for end of stream, true otherwise Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKTokenizerFactory.html",
    "title": "Class CJKTokenizerFactory | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader in Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKWidthFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKWidthFilter.html",
    "title": "Class CJKWidthFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CJKWidthFilter A TokenFilter that normalizes CJK width differences: Folds fullwidth ASCII variants into the equivalent basic latin Folds halfwidth Katakana variants into the equivalent kana NOTE: this filter can be viewed as a (practical) subset of NFKC/NFKD Unicode normalization. See the normalization support in the ICU package for full normalization. Inheritance System.Object AttributeSource TokenStream TokenFilter CJKWidthFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CJKWidthFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CJKWidthFilter(TokenStream) Declaration public CJKWidthFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKWidthFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.CJKWidthFilterFactory.html",
    "title": "Class CJKWidthFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cjk.html",
    "title": "Namespace Lucene.Net.Analysis.Cjk | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cjk <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Chinese, Japanese, and Korean, which indexes bigrams. This analyzer generates bigram terms, which are overlapping groups of two adjacent Han, Hiragana, Katakana, or Hangul characters. Three analyzers are provided for Chinese, each of which treats Chinese text in a different way. * ChineseAnalyzer (in the analyzers/cn package): Index unigrams (individual Chinese characters) as a token. * CJKAnalyzer (in this package): Index bigrams (overlapping groups of two adjacent Chinese characters) as tokens. * SmartChineseAnalyzer (in the analyzers/smartcn package): Index words (attempt to segment Chinese text into words) as tokens. Example phrase： \"我是中国人\" 1. ChineseAnalyzer: 我－是－中－国－人 2. CJKAnalyzer: 我是－是中－中国－国人 3. SmartChineseAnalyzer: 我－是－中国－人 Classes CJKAnalyzer An Analyzer that tokenizes text with StandardTokenizer , normalizes content with CJKWidthFilter , folds case with LowerCaseFilter , forms bigrams of CJK with CJKBigramFilter , and filters stopwords with StopFilter CJKBigramFilter Forms bigrams of CJK terms that are generated from StandardTokenizer or ICUTokenizer. CJK types are set by these tokenizers, but you can also use CJKBigramFilter(TokenStream, CJKScript) to explicitly control which of the CJK scripts are turned into bigrams. By default, when a CJK character has no adjacent characters to form a bigram, it is output in unigram form. If you want to always output both unigrams and bigrams, set the outputUnigrams flag in CJKBigramFilter(TokenStream, CJKScript, Boolean) . This can be used for a combined unigram+bigram approach. In all cases, all non-CJK input is passed thru unmodified. CJKBigramFilterFactory Factory for CJKBigramFilter . <fieldType name=\"text_cjk\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.CJKWidthFilterFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CJKBigramFilterFactory\" han=\"true\" hiragana=\"true\" katakana=\"true\" hangul=\"true\" outputUnigrams=\"false\" /> </analyzer> </fieldType> CJKTokenizer CJKTokenizer is designed for Chinese, Japanese, and Korean languages. The tokens returned are every two adjacent characters with overlap match. Example: \"java C1C2C3C4\" will be segmented to: \"java\" \"C1C2\" \"C2C3\" \"C3C4\". Additionally, the following is applied to Latin text (such as English): Text is converted to lowercase. Numeric digits, '+', '#', and '_' are tokenized as letters. Full-width forms are converted to half-width forms. For more info on Asian language (Chinese, Japanese, and Korean) text segmentation: please search google CJKTokenizerFactory Factory for CJKTokenizer . <fieldType name=\"text_cjk\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.CJKTokenizerFactory\"/> </analyzer> </fieldType> CJKWidthFilter A TokenFilter that normalizes CJK width differences: Folds fullwidth ASCII variants into the equivalent basic latin Folds halfwidth Katakana variants into the equivalent kana NOTE: this filter can be viewed as a (practical) subset of NFKC/NFKD Unicode normalization. See the normalization support in the ICU package for full normalization. CJKWidthFilterFactory Factory for CJKWidthFilter . <fieldType name=\"text_cjk\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.CJKWidthFilterFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CJKBigramFilterFactory\"/> </analyzer> </fieldType> Enums CJKScript"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.html",
    "title": "Namespace Lucene.Net.Analysis.Ckb | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ckb <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Sorani Kurdish. Classes SoraniAnalyzer Analyzer for Sorani Kurdish. SoraniNormalizationFilter A TokenFilter that applies SoraniNormalizer to normalize the orthography. SoraniNormalizationFilterFactory Factory for SoraniNormalizationFilter . <fieldType name=\"text_ckbnormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.SoraniNormalizationFilterFactory\"/> </analyzer> </fieldType> SoraniNormalizer Normalizes the Unicode representation of Sorani text. Normalization consists of: Alternate forms of 'y' (0064, 0649) are converted to 06CC (FARSI YEH) Alternate form of 'k' (0643) is converted to 06A9 (KEHEH) Alternate forms of vowel 'e' (0647+200C, word-final 0647, 0629) are converted to 06D5 (AE) Alternate (joining) form of 'h' (06BE) is converted to 0647 Alternate forms of 'rr' (0692, word-initial 0631) are converted to 0695 (REH WITH SMALL V BELOW) Harakat, tatweel, and formatting characters such as directional controls are removed. SoraniStemFilter A TokenFilter that applies SoraniStemmer to stem Sorani words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . SoraniStemFilterFactory Factory for SoraniStemFilter . <fieldType name=\"text_ckbstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.SoraniNormalizationFilterFactory\"/> <filter class=\"solr.SoraniStemFilterFactory\"/> </analyzer> </fieldType> SoraniStemmer Light stemmer for Sorani"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniAnalyzer.html",
    "title": "Class SoraniAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SoraniAnalyzer Analyzer for Sorani Kurdish. Inheritance System.Object Analyzer StopwordAnalyzerBase SoraniAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SoraniAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source SoraniAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public SoraniAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source SoraniAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public SoraniAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source SoraniAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public SoraniAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Kurdish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , SoraniNormalizationFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SoraniStemFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniNormalizationFilter.html",
    "title": "Class SoraniNormalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SoraniNormalizationFilter A TokenFilter that applies SoraniNormalizer to normalize the orthography. Inheritance System.Object AttributeSource TokenStream TokenFilter SoraniNormalizationFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SoraniNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SoraniNormalizationFilter(TokenStream) Declaration public SoraniNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniNormalizationFilterFactory.html",
    "title": "Class SoraniNormalizationFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniNormalizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniNormalizer.html",
    "title": "Class SoraniNormalizer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SoraniNormalizer : object Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalize an input buffer of Sorani text Declaration public virtual int Normalize(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniStemFilter.html",
    "title": "Class SoraniStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SoraniStemFilter A TokenFilter that applies SoraniStemmer to stem Sorani words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter SoraniStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SoraniStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SoraniStemFilter(TokenStream) Declaration public SoraniStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniStemFilterFactory.html",
    "title": "Class SoraniStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ckb.SoraniStemmer.html",
    "title": "Class SoraniStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SoraniStemmer Light stemmer for Sorani Inheritance System.Object SoraniStemmer Namespace : Lucene.Net.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SoraniStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Stem an input buffer of Sorani text. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseAnalyzer.html",
    "title": "Class ChineseAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ChineseAnalyzer An Analyzer that tokenizes text with ChineseTokenizer and filters with ChineseFilter Inheritance System.Object Analyzer ChineseAnalyzer Inherited Members Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ChineseAnalyzer : Analyzer Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a ChineseTokenizer filtered with ChineseFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseFilter.html",
    "title": "Class ChineseFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ChineseFilter A TokenFilter with a stop word table. Numeric tokens are removed. English tokens must be larger than 1 character. One Chinese character as one Chinese word. TO DO: Add Chinese stop words, such as \\ue400 Dictionary based Chinese word extraction Intelligent Chinese word extraction Inheritance System.Object AttributeSource TokenStream TokenFilter ChineseFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ChineseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ChineseFilter(TokenStream) Declaration public ChineseFilter(TokenStream in) Parameters Type Name Description TokenStream in Fields | Improve this Doc View Source STOP_WORDS Declaration public static readonly string[] STOP_WORDS Field Value Type Description System.String [] Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseFilterFactory.html",
    "title": "Class ChineseFilterFactory | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseTokenizer.html",
    "title": "Class ChineseTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ChineseTokenizer Tokenize Chinese text as individual chinese characters. The difference between ChineseTokenizer and CJKTokenizer is that they have different token parsing logic. For example, if the Chinese text \"C1C2C3C4\" is to be indexed: The tokens returned from ChineseTokenizer are C1, C2, C3, C4. The tokens returned from the CJKTokenizer are C1C2, C2C3, C3C4. Therefore the index created by CJKTokenizer is much larger. The problem is that when searching for C1, C1C2, C1C3, C4C2, C1C2C3 ... the ChineseTokenizer works, but the CJKTokenizer will not work. Inheritance System.Object AttributeSource TokenStream Tokenizer ChineseTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ChineseTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source ChineseTokenizer(AttributeSource.AttributeFactory, TextReader) Declaration public ChineseTokenizer(AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader in | Improve this Doc View Source ChineseTokenizer(TextReader) Declaration public ChineseTokenizer(TextReader in) Parameters Type Name Description TextReader in Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.ChineseTokenizerFactory.html",
    "title": "Class ChineseTokenizerFactory | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cn.html",
    "title": "Namespace Lucene.Net.Analysis.Cn | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cn <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Chinese, which indexes unigrams (individual chinese characters). Three analyzers are provided for Chinese, each of which treats Chinese text in a different way. * StandardAnalyzer: Index unigrams (individual Chinese characters) as a token. * CJKAnalyzer (in the analyzers/cjk package): Index bigrams (overlapping groups of two adjacent Chinese characters) as tokens. * SmartChineseAnalyzer (in the analyzers/smartcn package): Index words (attempt to segment Chinese text into words) as tokens. Example phrase： \"我是中国人\" 1. StandardAnalyzer: 我－是－中－国－人 2. CJKAnalyzer: 我是－是中－中国－国人 3. SmartChineseAnalyzer: 我－是－中国－人 Classes ChineseAnalyzer An Analyzer that tokenizes text with ChineseTokenizer and filters with ChineseFilter ChineseFilter A TokenFilter with a stop word table. Numeric tokens are removed. English tokens must be larger than 1 character. One Chinese character as one Chinese word. TO DO: Add Chinese stop words, such as \\ue400 Dictionary based Chinese word extraction Intelligent Chinese word extraction ChineseFilterFactory Factory for ChineseFilter ChineseTokenizer Tokenize Chinese text as individual chinese characters. The difference between ChineseTokenizer and CJKTokenizer is that they have different token parsing logic. For example, if the Chinese text \"C1C2C3C4\" is to be indexed: The tokens returned from ChineseTokenizer are C1, C2, C3, C4. The tokens returned from the CJKTokenizer are C1C2, C2C3, C3C4. Therefore the index created by CJKTokenizer is much larger. The problem is that when searching for C1, C1C2, C1C3, C4C2, C1C2C3 ... the ChineseTokenizer works, but the CJKTokenizer will not work. ChineseTokenizerFactory Factory for ChineseTokenizer"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsFilter.html",
    "title": "Class CommonGramsFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CommonGramsFilter Construct bigrams for frequently occurring terms while indexing. Single terms are still indexed too, with bigrams overlaid. This is achieved through the use of PositionIncrement . Bigrams have a type of GRAM_TYPE Example: input:\"the quick brown fox\" output:|\"the\",\"the-quick\"|\"brown\"|\"fox\"| \"the-quick\" has a position increment of 0 so it is in the same position as \"the\" \"the-quick\" has a term.type() of \"gram\" Inheritance System.Object AttributeSource TokenStream TokenFilter CommonGramsFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.CommonGrams Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CommonGramsFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CommonGramsFilter(LuceneVersion, TokenStream, CharArraySet) Construct a token stream filtering the given input using a Set of common words to create bigrams. Outputs both unigrams with position increment and bigrams with position increment 0 type=gram where one or both of the words in a potential bigram are in the set of common words . Declaration public CommonGramsFilter(LuceneVersion matchVersion, TokenStream input, CharArraySet commonWords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream input TokenStream input in filter chain CharArraySet commonWords The set of common words. Fields | Improve this Doc View Source GRAM_TYPE Declaration public const string GRAM_TYPE = null Field Value Type Description System.String Methods | Improve this Doc View Source IncrementToken() Inserts bigrams for common words into a token stream. For each input token, output the token. If the token and/or the following token are in the list of common words also output a bigram with position increment 0 and type=\"gram\" TODO:Consider adding an option to not emit unigram stopwords as in CDL XTF BigramStopFilter, CommonGramsQueryFilter would need to be changed to work with this. TODO: Consider optimizing for the case of three commongrams i.e \"man of the year\" normally produces 3 bigrams: \"man-of\", \"of-the\", \"the-year\" but with proper management of positions we could eliminate the middle bigram \"of-the\"and save a disk seek and a whole set of position lookups. Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsFilterFactory.html",
    "title": "Class CommonGramsFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Properties | Improve this Doc View Source CommonWords Declaration public virtual CharArraySet CommonWords { get; } Property Value Type Description CharArraySet | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilter.html",
    "title": "Class CommonGramsQueryFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CommonGramsQueryFilter Wrap a CommonGramsFilter optimizing phrase queries by only returning single words when they are not a member of a bigram. Example: query input to CommonGramsFilter: \"the rain in spain falls mainly\" output of CommomGramsFilter/input to CommonGramsQueryFilter: |\"the, \"the-rain\"|\"rain\" \"rain-in\"|\"in, \"in-spain\"|\"spain\"|\"falls\"|\"mainly\" output of CommonGramsQueryFilter:\"the-rain\", \"rain-in\" ,\"in-spain\", \"falls\", \"mainly\" Inheritance System.Object AttributeSource TokenStream TokenFilter CommonGramsQueryFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.CommonGrams Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CommonGramsQueryFilter : TokenFilter, IDisposable Remarks See: http://hudson.zones.apache.org/hudson/job/Lucene-trunk/javadoc//all/org/apache/lucene/analysis/TokenStream.html and http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/analysis/package.html?revision=718798 Constructors | Improve this Doc View Source CommonGramsQueryFilter(CommonGramsFilter) Constructs a new CommonGramsQueryFilter based on the provided CommomGramsFilter Declaration public CommonGramsQueryFilter(CommonGramsFilter input) Parameters Type Name Description CommonGramsFilter input CommonGramsFilter the QueryFilter will use Properties | Improve this Doc View Source IsGramType Convenience method to check if the current type is a gram type Declaration public bool IsGramType { get; } Property Value Type Description System.Boolean true if the current type is a gram type, false otherwise Methods | Improve this Doc View Source IncrementToken() Output bigrams whenever possible to optimize queries. Only output unigrams when they are not a member of a bigram. Example: input: \"the rain in spain falls mainly\" output:\"the-rain\", \"rain-in\" ,\"in-spain\", \"falls\", \"mainly\" Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilterFactory.html",
    "title": "Class CommonGramsQueryFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Create a CommonGramsFilter and wrap it with a CommonGramsQueryFilter Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides CommonGramsFilterFactory.Create(TokenStream) Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.CommonGrams.html",
    "title": "Namespace Lucene.Net.Analysis.CommonGrams | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.CommonGrams <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Construct n-grams for frequently occurring terms and phrases. Classes CommonGramsFilter Construct bigrams for frequently occurring terms while indexing. Single terms are still indexed too, with bigrams overlaid. This is achieved through the use of PositionIncrement . Bigrams have a type of GRAM_TYPE Example: input:\"the quick brown fox\" output:|\"the\",\"the-quick\"|\"brown\"|\"fox\"| \"the-quick\" has a position increment of 0 so it is in the same position as \"the\" \"the-quick\" has a term.type() of \"gram\" CommonGramsFilterFactory Constructs a CommonGramsFilter . <fieldType name=\"text_cmmngrms\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CommonGramsFilterFactory\" words=\"commongramsstopwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> CommonGramsQueryFilter Wrap a CommonGramsFilter optimizing phrase queries by only returning single words when they are not a member of a bigram. Example: query input to CommonGramsFilter: \"the rain in spain falls mainly\" output of CommomGramsFilter/input to CommonGramsQueryFilter: |\"the, \"the-rain\"|\"rain\" \"rain-in\"|\"in, \"in-spain\"|\"spain\"|\"falls\"|\"mainly\" output of CommonGramsQueryFilter:\"the-rain\", \"rain-in\" ,\"in-spain\", \"falls\", \"mainly\" CommonGramsQueryFilterFactory Construct CommonGramsQueryFilter . <fieldType name=\"text_cmmngrmsqry\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CommonGramsQueryFilterFactory\" words=\"commongramsquerystopwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.CompoundToken.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.CompoundToken.html",
    "title": "Class CompoundWordTokenFilterBase.CompoundToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompoundWordTokenFilterBase.CompoundToken Helper class to hold decompounded token information Inheritance System.Object CompoundWordTokenFilterBase.CompoundToken Namespace : Lucene.Net.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class CompoundToken : object 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 ICharSequence"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.html",
    "title": "Class CompoundWordTokenFilterBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompoundWordTokenFilterBase Base class for decomposition token filters. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. As of 4.4, CompoundWordTokenFilterBase doesn't update offsets. Inheritance System.Object AttributeSource TokenStream TokenFilter CompoundWordTokenFilterBase DictionaryCompoundWordTokenFilter HyphenationCompoundWordTokenFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class CompoundWordTokenFilterBase : TokenFilter, IDisposable Constructors | Improve this Doc View Source CompoundWordTokenFilterBase(LuceneVersion, TokenStream, CharArraySet) Declaration protected CompoundWordTokenFilterBase(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary) Parameters Type Name Description LuceneVersion matchVersion TokenStream input CharArraySet dictionary | Improve this Doc View Source CompoundWordTokenFilterBase(LuceneVersion, TokenStream, CharArraySet, Boolean) Declaration protected CompoundWordTokenFilterBase(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary, bool onlyLongestMatch) Parameters Type Name Description LuceneVersion matchVersion TokenStream input CharArraySet dictionary System.Boolean onlyLongestMatch | Improve this Doc View Source CompoundWordTokenFilterBase(LuceneVersion, TokenStream, CharArraySet, Int32, Int32, Int32, Boolean) Declaration protected CompoundWordTokenFilterBase(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary, int minWordSize, int minSubwordSize, int maxSubwordSize, bool onlyLongestMatch) Parameters Type Name Description LuceneVersion matchVersion TokenStream input CharArraySet dictionary System.Int32 minWordSize System.Int32 minSubwordSize System.Int32 maxSubwordSize System.Boolean onlyLongestMatch Fields | Improve this Doc View Source DEFAULT_MAX_SUBWORD_SIZE The default for maximal length of subwords that get propagated to the output of this filter Declaration public const int DEFAULT_MAX_SUBWORD_SIZE = null 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 = null 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 = null Field Value Type Description System.Int32 | Improve this Doc View Source m_dictionary Declaration protected readonly CharArraySet m_dictionary Field Value Type Description CharArraySet | Improve this Doc View Source m_matchVersion Declaration protected readonly LuceneVersion m_matchVersion Field Value Type Description LuceneVersion | Improve this Doc View Source m_maxSubwordSize Declaration protected readonly int m_maxSubwordSize Field Value Type Description System.Int32 | Improve this Doc View Source m_minSubwordSize Declaration protected readonly int m_minSubwordSize Field Value Type Description System.Int32 | Improve this Doc View Source m_minWordSize Declaration protected readonly int m_minWordSize Field Value Type Description System.Int32 | Improve this Doc View Source m_offsetAtt Declaration protected readonly IOffsetAttribute m_offsetAtt Field Value Type Description IOffsetAttribute | Improve this Doc View Source m_onlyLongestMatch Declaration protected readonly bool m_onlyLongestMatch Field Value Type Description System.Boolean | Improve this Doc View Source m_termAtt Declaration protected readonly ICharTermAttribute m_termAtt Field Value Type Description ICharTermAttribute | Improve this Doc View Source m_tokens Declaration protected readonly LinkedList<CompoundWordTokenFilterBase.CompoundToken> m_tokens Field Value Type Description LinkedList < CompoundWordTokenFilterBase.CompoundToken > Methods | Improve this Doc View Source Decompose() Decomposes the current m_termAtt and places CompoundWordTokenFilterBase.CompoundToken instances in the m_tokens list. The original token may not be placed in the list, as it is automatically passed through this filter. Declaration protected abstract void Decompose() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilter.html",
    "title": "Class DictionaryCompoundWordTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DictionaryCompoundWordTokenFilter A TokenFilter that decomposes compound words found in many Germanic languages. \"Donaudampfschiff\" becomes Donau, dampf, schiff so that you can find \"Donaudampfschiff\" even when you only enter \"schiff\". It uses a brute-force algorithm to achieve this. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. Inheritance System.Object AttributeSource TokenStream TokenFilter CompoundWordTokenFilterBase DictionaryCompoundWordTokenFilter Implements IDisposable Inherited Members CompoundWordTokenFilterBase.DEFAULT_MIN_WORD_SIZE CompoundWordTokenFilterBase.DEFAULT_MIN_SUBWORD_SIZE CompoundWordTokenFilterBase.DEFAULT_MAX_SUBWORD_SIZE CompoundWordTokenFilterBase.m_matchVersion CompoundWordTokenFilterBase.m_dictionary CompoundWordTokenFilterBase.m_tokens CompoundWordTokenFilterBase.m_minWordSize CompoundWordTokenFilterBase.m_minSubwordSize CompoundWordTokenFilterBase.m_maxSubwordSize CompoundWordTokenFilterBase.m_onlyLongestMatch CompoundWordTokenFilterBase.m_termAtt CompoundWordTokenFilterBase.m_offsetAtt CompoundWordTokenFilterBase.IncrementToken() CompoundWordTokenFilterBase.Reset() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax public class DictionaryCompoundWordTokenFilter : CompoundWordTokenFilterBase, IDisposable Constructors | Improve this Doc View Source DictionaryCompoundWordTokenFilter(LuceneVersion, TokenStream, CharArraySet) Creates a new DictionaryCompoundWordTokenFilter Declaration public DictionaryCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. TokenStream input the TokenStream to process CharArraySet dictionary the word dictionary to match against. | Improve this Doc View Source DictionaryCompoundWordTokenFilter(LuceneVersion, TokenStream, CharArraySet, Int32, Int32, Int32, Boolean) Creates a new DictionaryCompoundWordTokenFilter Declaration public DictionaryCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary, int minWordSize, int minSubwordSize, int maxSubwordSize, bool onlyLongestMatch) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. TokenStream input the TokenStream to process CharArraySet dictionary the word dictionary to match against. System.Int32 minWordSize only words longer than this get processed System.Int32 minSubwordSize only subwords longer than this get to the output stream System.Int32 maxSubwordSize only subwords shorter than this get to the output stream System.Boolean onlyLongestMatch Add only the longest matching subword to the stream Methods | Improve this Doc View Source Decompose() Declaration protected override void Decompose() Overrides CompoundWordTokenFilterBase.Decompose() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilterFactory.html",
    "title": "Class DictionaryCompoundWordTokenFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.html",
    "title": "Namespace Lucene.Net.Analysis.Compound | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Compound <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> A filter that decomposes compound words you find in many Germanic languages into the word parts. This example shows what it does: Input token stream Rindfleischüberwachungsgesetz Drahtschere abba Output token stream (Rindfleischüberwachungsgesetz,0,29) (Rind,0,4,posIncr=0) (fleisch,4,11,posIncr=0) (überwachung,11,22,posIncr=0) (gesetz,23,29,posIncr=0) (Drahtschere,30,41) (Draht,30,35,posIncr=0) (schere,35,41,posIncr=0) (abba,42,46) The input token is always preserved and the filters do not alter the case of word parts. There are two variants of the filter available: HyphenationCompoundWordTokenFilter : it uses a hyphenation grammar based approach to find potential word parts of a given word. DictionaryCompoundWordTokenFilter : it uses a brute-force dictionary-only based approach to find the word parts of a given word. Compound word token filters HyphenationCompoundWordTokenFilter The HyphenationCompoundWordTokenFilter uses hyphenation grammars to find potential subwords that a worth to check against the dictionary. It can be used without a dictionary as well but then produces a lot of \"nonword\" tokens. The quality of the output tokens is directly connected to the quality of the grammar file you use. For languages like German they are quite good. Grammar file Unfortunately we cannot bundle the hyphenation grammar files with Lucene because they do not use an ASF compatible license (they use the LaTeX Project Public License instead). You can find the XML based grammar files at the Objects For Formatting Objects (OFFO) Sourceforge project (direct link to download the pattern files: http://downloads.sourceforge.net/offo/offo-hyphenation.zip ). The files you need are in the subfolder offo-hyphenation/hyph/ . Credits for the hyphenation code go to the Apache FOP project . DictionaryCompoundWordTokenFilter The DictionaryCompoundWordTokenFilter uses a dictionary-only approach to find subwords in a compound word. It is much slower than the one that uses the hyphenation grammars. You can use it as a first start to see if your dictionary is good or not because it is much simpler in design. Dictionary The output quality of both token filters is directly connected to the quality of the dictionary you use. They are language dependent of course. You always should use a dictionary that fits to the text you want to index. If you index medical text for example then you should use a dictionary that contains medical words. A good start for general text are the dictionaries you find at the OpenOffice dictionaries Wiki. Which variant should I use? This decision matrix should help you: Token filter Output quality Performance HyphenationCompoundWordTokenFilter good if grammar file is good – acceptable otherwise fast DictionaryCompoundWordTokenFilter good slow Examples public void testHyphenationCompoundWordsDE() throws Exception { String[] dict = { \"Rind\", \"Fleisch\", \"Draht\", \"Schere\", \"Gesetz\", \"Aufgabe\", \"Überwachung\" }; Reader reader = new FileReader(\"de_DR.xml\"); HyphenationTree hyphenator = HyphenationCompoundWordTokenFilter .getHyphenationTree(reader); HyphenationCompoundWordTokenFilter tf = new HyphenationCompoundWordTokenFilter( new WhitespaceTokenizer(new StringReader( \"Rindfleischüberwachungsgesetz Drahtschere abba\")), hyphenator, dict, CompoundWordTokenFilterBase.DEFAULT_MIN_WORD_SIZE, CompoundWordTokenFilterBase.DEFAULT_MIN_SUBWORD_SIZE, CompoundWordTokenFilterBase.DEFAULT_MAX_SUBWORD_SIZE, false); CharTermAttribute t = tf.addAttribute(CharTermAttribute.class); while (tf.incrementToken()) { System.out.println(t); } } public void testHyphenationCompoundWordsWithoutDictionaryDE() throws Exception { Reader reader = new FileReader(\"de_DR.xml\"); HyphenationTree hyphenator = HyphenationCompoundWordTokenFilter .getHyphenationTree(reader); HyphenationCompoundWordTokenFilter tf = new HyphenationCompoundWordTokenFilter( new WhitespaceTokenizer(new StringReader( \"Rindfleischüberwachungsgesetz Drahtschere abba\")), hyphenator); CharTermAttribute t = tf.addAttribute(CharTermAttribute.class); while (tf.incrementToken()) { System.out.println(t); } } public void testDumbCompoundWordsSE() throws Exception { String[] dict = { \"Bil\", \"Dörr\", \"Motor\", \"Tak\", \"Borr\", \"Slag\", \"Hammar\", \"Pelar\", \"Glas\", \"Ögon\", \"Fodral\", \"Bas\", \"Fiol\", \"Makare\", \"Gesäll\", \"Sko\", \"Vind\", \"Rute\", \"Torkare\", \"Blad\" }; DictionaryCompoundWordTokenFilter tf = new DictionaryCompoundWordTokenFilter( new WhitespaceTokenizer( new StringReader( \"Bildörr Bilmotor Biltak Slagborr Hammarborr Pelarborr Glasögonfodral Basfiolsfodral Basfiolsfodralmakaregesäll Skomakare Vindrutetorkare Vindrutetorkarblad abba\")), dict); CharTermAttribute t = tf.addAttribute(CharTermAttribute.class); while (tf.incrementToken()) { System.out.println(t); } } Classes CompoundWordTokenFilterBase Base class for decomposition token filters. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. As of 4.4, CompoundWordTokenFilterBase doesn't update offsets. CompoundWordTokenFilterBase.CompoundToken Helper class to hold decompounded token information DictionaryCompoundWordTokenFilter A TokenFilter that decomposes compound words found in many Germanic languages. \"Donaudampfschiff\" becomes Donau, dampf, schiff so that you can find \"Donaudampfschiff\" even when you only enter \"schiff\". It uses a brute-force algorithm to achieve this. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. DictionaryCompoundWordTokenFilterFactory Factory for DictionaryCompoundWordTokenFilter . <fieldType name=\"text_dictcomp\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DictionaryCompoundWordTokenFilterFactory\" dictionary=\"dictionary.txt\" minWordSize=\"5\" minSubwordSize=\"2\" maxSubwordSize=\"15\" onlyLongestMatch=\"true\"/> </analyzer> </fieldType> HyphenationCompoundWordTokenFilter A TokenFilter that decomposes compound words found in many Germanic languages. \"Donaudampfschiff\" becomes Donau, dampf, schiff so that you can find \"Donaudampfschiff\" even when you only enter \"schiff\". It uses a hyphenation grammar and a word dictionary to achieve this. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. HyphenationCompoundWordTokenFilterFactory Factory for HyphenationCompoundWordTokenFilter . This factory accepts the following parameters: hyphenator (mandatory): path to the FOP xml hyphenation pattern. See http://offo.sourceforge.net/hyphenation/ . encoding (optional): encoding of the xml hyphenation file. defaults to UTF-8. dictionary (optional): dictionary of words. defaults to no dictionary. minWordSize (optional): minimal word length that gets decomposed. defaults to 5. minSubwordSize (optional): minimum length of subwords. defaults to 2. maxSubwordSize (optional): maximum length of subwords. defaults to 15. onlyLongestMatch (optional): if true, adds only the longest matching subword to the stream. defaults to false. <fieldType name=\"text_hyphncomp\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.HyphenationCompoundWordTokenFilterFactory\" hyphenator=\"hyphenator.xml\" encoding=\"UTF-8\" dictionary=\"dictionary.txt\" minWordSize=\"5\" minSubwordSize=\"2\" maxSubwordSize=\"15\" onlyLongestMatch=\"false\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.ByteVector.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.ByteVector.html",
    "title": "Class ByteVector | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ByteVector : object Constructors | Improve this Doc View Source ByteVector() Declaration public ByteVector() | Improve this Doc View Source ByteVector(Byte[]) Declaration public ByteVector(byte[] a) Parameters Type Name Description System.Byte [] a | Improve this Doc View Source ByteVector(Byte[], Int32) Declaration public ByteVector(byte[] a, int capacity) Parameters Type Name Description System.Byte [] a System.Int32 capacity | Improve this Doc View Source ByteVector(Int32) Declaration public ByteVector(int capacity) Parameters Type Name Description System.Int32 capacity Properties | Improve this Doc View Source Array Declaration public virtual byte[] Array { get; } Property Value Type Description System.Byte [] | Improve this Doc View Source Capacity returns current capacity of array Declaration public virtual int Capacity { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Item[Int32] LUCENENET indexer for .NET Declaration public virtual byte this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Byte | Improve this Doc View Source Length return number of items in array Declaration public virtual int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Alloc(Int32) This is to implement memory allocation in the array. Like malloc(). Declaration public virtual int Alloc(int size) Parameters Type Name Description System.Int32 size Returns Type Description System.Int32 | Improve this Doc View Source TrimToSize() Declaration public virtual void TrimToSize()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.CharVector.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.CharVector.html",
    "title": "Class CharVector | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CharVector : object Constructors | Improve this Doc View Source CharVector() Declaration public CharVector() | Improve this Doc View Source CharVector(Char[]) Declaration public CharVector(char[] a) Parameters Type Name Description System.Char [] a | Improve this Doc View Source CharVector(Char[], Int32) Declaration public CharVector(char[] a, int capacity) Parameters Type Name Description System.Char [] a System.Int32 capacity | Improve this Doc View Source CharVector(Int32) Declaration public CharVector(int capacity) Parameters Type Name Description System.Int32 capacity Properties | Improve this Doc View Source Array Declaration public virtual char[] Array { get; } Property Value Type Description System.Char [] | Improve this Doc View Source Capacity returns current capacity of array Declaration public virtual int Capacity { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Item[Int32] LUCENENET indexer for .NET Declaration public virtual char this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length return number of items in array Declaration public virtual int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Alloc(Int32) Declaration public virtual int Alloc(int size) Parameters Type Name Description System.Int32 size Returns Type Description System.Int32 | Improve this Doc View Source Clear() Reset Vector but don't resize or clear elements Declaration public virtual void Clear() | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source TrimToSize() Declaration public virtual void TrimToSize()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.html",
    "title": "Namespace Lucene.Net.Analysis.Compound.Hyphenation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Compound.Hyphenation <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The code for the compound word hyphenation is taken from the Apache FOP project . All credits for the hyphenation code belongs to them. Classes ByteVector This class implements a simple byte vector with access to the underlying array. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. CharVector This class implements a simple char vector with access to the underlying array. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Hyphen This class represents a hyphen. A 'full' hyphen is made of 3 parts: the pre-break text, post-break text and no-break. If no line-break is generated at this position, the no-break text is used, otherwise, pre-break and post-break are used. Typically, pre-break is equal to the hyphen character and the others are empty. However, this general scheme allows support for cases in some languages where words change spelling if they're split across lines, like german's 'backen' which hyphenates 'bak-ken'. BTW, this comes from TeX. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Hyphenation This class represents a hyphenated word. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. HyphenationTree This tree structure stores the hyphenation patterns in an efficient way for fast lookup. It provides the provides the method to hyphenate a word. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. PatternParser A XMLReader document handler to read and parse hyphenation patterns from a XML file. LUCENENET: This class has been refactored from its Java counterpart to use XmlReader rather than a SAX parser. TernaryTree Ternary Search Tree. A ternary search tree is a hybrid between a binary tree and a digital search tree (trie). Keys are limited to strings. A data value of type char is stored in each leaf node. It can be used as an index (or pointer) to the data. Branches that only contain one key are compressed to one node by storing a pointer to the trailer substring of the key. This class is intended to serve as base class or helper class to implement Dictionary collections or the like. Ternary trees have some nice properties as the following: the tree can be traversed in sorted order, partial matches (wildcard) can be implemented, retrieval of all keys within a given distance from the target, etc. The storage requirements are higher than a binary tree but a lot less than a trie. Performance is comparable with a hash table, sometimes it outperforms a hash function (most of the time can determine a miss faster than a hash). The main purpose of this java port is to serve as a base for implementing TeX's hyphenation algorithm (see The TeXBook, appendix H). Each language requires from 5000 to 15000 hyphenation patterns which will be keys in this tree. The strings patterns are usually small (from 2 to 5 characters), but each char in the tree is stored in a node. Thus memory usage is the main concern. We will sacrifice 'elegance' to keep memory requirements to the minimum. Using java's char type as pointer (yes, I know pointer it is a forbidden word in java) we can keep the size of the node to be just 8 bytes (3 pointers and the data char). This gives room for about 65000 nodes. In my tests the english patterns took 7694 nodes and the german patterns 10055 nodes, so I think we are safe. All said, this is a map with strings as keys and char as value. Pretty limited!. It can be extended to a general map by using the string representation of an object and using the char value as an index to an array that contains the object values. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. TernaryTree.Iterator Enumerator for TernaryTree LUCENENET NOTE: This differs a bit from its Java counterpart to adhere to .NET IEnumerator semantics. In Java, when the TernaryTree.Iterator is instantiated, it is already positioned at the first element. However, to act like a .NET IEnumerator, the initial state is undefined and considered to be before the first element until MoveNext() is called, and if a move took place it will return true ; Interfaces IPatternConsumer This interface is used to connect the XML pattern file parser to the hyphenation tree. This interface has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.Hyphen.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.Hyphen.html",
    "title": "Class Hyphen | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Hyphen : object 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"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.Hyphenation.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.Hyphenation.html",
    "title": "Class Hyphenation | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Hyphenation : object Properties | Improve this Doc View Source HyphenationPoints the hyphenation points Declaration public virtual int[] HyphenationPoints { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Length the number of hyphenation points in the word Declaration public virtual int Length { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.HyphenationTree.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.HyphenationTree.html",
    "title": "Class HyphenationTree | Apache Lucene.NET 4.8.0 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) 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 IDictionary < System.String , 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 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 FileInfo f a object representing the file | 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 FileInfo f a object representing the file Encoding encoding The character encoding to use | 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 Stream source input source for the file | 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 Stream source input source for the file Encoding encoding The character encoding to use | 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 | 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 Encoding encoding The character encoding to use | Improve this Doc View Source LoadPatterns(XmlReader) Read hyphenation patterns from an . Declaration public virtual void LoadPatterns(XmlReader source) Parameters Type Name Description XmlReader source input source for the file | Improve this Doc View Source PackValues(String) Packs the values by storing them in 4 bits, two values into a byte Values range is from 0 to 9. We use zero as terminator, so we'll add 1 to the value. Declaration protected virtual int PackValues(string values) Parameters Type Name Description System.String values a string of digits from '0' to '9' representing the interletter values. Returns Type Description System.Int32 the index into the vspace array where the packed values are stored. | Improve this Doc View Source SearchPatterns(Char[], Int32, Byte[]) Search for all possible partial matches of word starting at index an update interletter values. In other words, it does something like: for (i=0; i<patterns.Length; i++) { if (word.Substring(index).StartsWith(patterns[i], StringComparison.Ordinal)) update_interletter_values(patterns[i]); } But it is done in an efficient way since the patterns are stored in a ternary tree. In fact, this is the whole purpose of having the tree: doing this search without having to test every single pattern. The number of patterns for languages such as English range from 4000 to 10000. Thus, doing thousands of string comparisons for each word to hyphenate would be really slow without the tree. The tradeoff is memory, but using a ternary tree instead of a trie, almost halves the the memory used by Lout or TeX. It's also faster than using a hash table Declaration protected virtual void SearchPatterns(char[] word, int index, byte[] il) Parameters Type Name Description System.Char [] word null terminated word to match System.Int32 index start index from word System.Byte [] il interletter values array to update | Improve this Doc View Source UnpackValues(Int32) Declaration protected virtual string UnpackValues(int k) Parameters Type Name Description System.Int32 k Returns Type Description System.String Implements IPatternConsumer"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.IPatternConsumer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.IPatternConsumer.html",
    "title": "Interface IPatternConsumer | Apache Lucene.NET 4.8.0 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 IList < System.Object > hyphenatedword | Improve this Doc View Source AddPattern(String, String) Add hyphenation patterns. Declaration void AddPattern(string pattern, string values) Parameters Type Name Description System.String pattern the pattern System.String values interletter values expressed as a string of digit characters."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.PatternParser.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.PatternParser.html",
    "title": "Class PatternParser | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PatternParser : object 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 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 IList <T1> ex Returns Type Description 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 FileInfo file a object representing the file | 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 FileInfo file a object representing the file Encoding encoding The character encoding to use | Improve this Doc View Source Parse(Stream) Parses a hyphenation pattern file. Declaration public virtual void Parse(Stream xmlStream) Parameters Type Name Description 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. | 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. | 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. Encoding encoding The character encoding to use | Improve this Doc View Source Parse(XmlReader) Parses a hyphenation pattern file. Declaration public virtual void Parse(XmlReader source) Parameters Type Name Description XmlReader source input source for the file | Improve this Doc View Source ReadToken(StringBuilder) Declaration protected virtual string ReadToken(StringBuilder chars) Parameters Type Name Description 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 IDictionary < System.String , System.String > attrs the attributes attached to the element. If there are no attributes, it shall be an empty Attributes object. The value of this object after startElement returns is undefined"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.html",
    "title": "Class TernaryTree | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TernaryTree : object Fields | Improve this Doc View Source BLOCK_SIZE Declaration protected const int BLOCK_SIZE = null 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 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 TextWriter out | Improve this Doc View Source StrCmp(Char[], Int32, Char[], Int32) Compares 2 null terminated char arrays Declaration public static int StrCmp(char[] a, int startA, char[] b, int startB) Parameters Type Name Description System.Char [] a System.Int32 startA System.Char [] b System.Int32 startB Returns Type Description System.Int32 | Improve this Doc View Source StrCmp(String, Char[], Int32) Compares a string with null terminated char array Declaration public static int StrCmp(string str, char[] a, int start) Parameters Type Name Description System.String str System.Char [] a System.Int32 start Returns Type Description System.Int32 | Improve this Doc View Source StrCpy(Char[], Int32, Char[], Int32) Declaration public static void StrCpy(char[] dst, int di, char[] src, int si) Parameters Type Name Description System.Char [] dst System.Int32 di System.Char [] src System.Int32 si | Improve this Doc View Source StrLen(Char[]) Declaration public static int StrLen(char[] a) Parameters Type Name Description System.Char [] a Returns Type Description System.Int32 | Improve this Doc View Source StrLen(Char[], Int32) Declaration public static int StrLen(char[] a, int start) Parameters Type Name Description System.Char [] a System.Int32 start Returns Type Description System.Int32 | Improve this Doc View Source TrimToSize() Each node stores a character (splitchar) which is part of some key(s). In a compressed branch (one that only contain a single string key) the trailer of the key which is not already in nodes is stored externally in the kv array. As items are inserted, key substrings decrease. Some substrings may completely disappear when the whole branch is totally decompressed. The tree is traversed to find the key substrings actually used. In addition, duplicate substrings are removed using a map (implemented with a TernaryTree!). Declaration public virtual void TrimToSize()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.Iterator.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.Iterator.html",
    "title": "Class TernaryTree.Iterator | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Iterator : IEnumerator<string> 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()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilter.html",
    "title": "Class HyphenationCompoundWordTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HyphenationCompoundWordTokenFilter A TokenFilter that decomposes compound words found in many Germanic languages. \"Donaudampfschiff\" becomes Donau, dampf, schiff so that you can find \"Donaudampfschiff\" even when you only enter \"schiff\". It uses a hyphenation grammar and a word dictionary to achieve this. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. Inheritance System.Object AttributeSource TokenStream TokenFilter CompoundWordTokenFilterBase HyphenationCompoundWordTokenFilter Implements IDisposable Inherited Members CompoundWordTokenFilterBase.DEFAULT_MIN_WORD_SIZE CompoundWordTokenFilterBase.DEFAULT_MIN_SUBWORD_SIZE CompoundWordTokenFilterBase.DEFAULT_MAX_SUBWORD_SIZE CompoundWordTokenFilterBase.m_matchVersion CompoundWordTokenFilterBase.m_dictionary CompoundWordTokenFilterBase.m_tokens CompoundWordTokenFilterBase.m_minWordSize CompoundWordTokenFilterBase.m_minSubwordSize CompoundWordTokenFilterBase.m_maxSubwordSize CompoundWordTokenFilterBase.m_onlyLongestMatch CompoundWordTokenFilterBase.m_termAtt CompoundWordTokenFilterBase.m_offsetAtt CompoundWordTokenFilterBase.IncrementToken() CompoundWordTokenFilterBase.Reset() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HyphenationCompoundWordTokenFilter : CompoundWordTokenFilterBase, IDisposable Constructors | Improve this Doc View Source HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree) Create a HyphenationCompoundWordTokenFilter with no dictionary. Calls HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, Int32, Int32, Int32) Declaration public HyphenationCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, HyphenationTree hyphenator) Parameters Type Name Description LuceneVersion matchVersion TokenStream input HyphenationTree hyphenator | Improve this Doc View Source HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, CharArraySet) Creates a new HyphenationCompoundWordTokenFilter instance. Declaration public HyphenationCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, HyphenationTree hyphenator, CharArraySet dictionary) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. TokenStream input the TokenStream to process HyphenationTree hyphenator the hyphenation pattern tree to use for hyphenation CharArraySet dictionary the word dictionary to match against. | Improve this Doc View Source HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, CharArraySet, Int32, Int32, Int32, Boolean) Creates a new HyphenationCompoundWordTokenFilter instance. Declaration public HyphenationCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, HyphenationTree hyphenator, CharArraySet dictionary, int minWordSize, int minSubwordSize, int maxSubwordSize, bool onlyLongestMatch) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. TokenStream input the TokenStream to process HyphenationTree hyphenator the hyphenation pattern tree to use for hyphenation CharArraySet dictionary the word dictionary to match against. System.Int32 minWordSize only words longer than this get processed System.Int32 minSubwordSize only subwords longer than this get to the output stream System.Int32 maxSubwordSize only subwords shorter than this get to the output stream System.Boolean onlyLongestMatch Add only the longest matching subword to the stream | Improve this Doc View Source HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, Int32, Int32, Int32) Create a HyphenationCompoundWordTokenFilter with no dictionary. Calls HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, CharArraySet, Int32, Int32, Int32, Boolean) Declaration public HyphenationCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, HyphenationTree hyphenator, int minWordSize, int minSubwordSize, int maxSubwordSize) Parameters Type Name Description LuceneVersion matchVersion TokenStream input HyphenationTree hyphenator System.Int32 minWordSize System.Int32 minSubwordSize System.Int32 maxSubwordSize Methods | Improve this Doc View Source Decompose() Declaration protected override void Decompose() Overrides CompoundWordTokenFilterBase.Decompose() | Improve this Doc View Source GetHyphenationTree(FileInfo) Create a hyphenator tree Declaration public static HyphenationTree GetHyphenationTree(FileInfo hyphenationFile) Parameters Type Name Description FileInfo hyphenationFile the file of the XML grammar to load Returns Type Description HyphenationTree An object representing the hyphenation patterns | 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 FileInfo hyphenationFile the file of the XML grammar to load Encoding encoding The character encoding to use Returns Type Description HyphenationTree An object representing the hyphenation patterns | Improve this Doc View Source GetHyphenationTree(Stream) Create a hyphenator tree Declaration public static HyphenationTree GetHyphenationTree(Stream hyphenationSource) Parameters Type Name Description Stream hyphenationSource the InputSource pointing to the XML grammar Returns Type Description HyphenationTree An object representing the hyphenation patterns | 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 Stream hyphenationSource the InputSource pointing to the XML grammar Encoding encoding The character encoding to use Returns Type Description HyphenationTree An object representing the hyphenation patterns | 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 | 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 Encoding encoding The character encoding to use Returns Type Description HyphenationTree An object representing the hyphenation patterns Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilterFactory.html",
    "title": "Class HyphenationCompoundWordTokenFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware See Also HyphenationCompoundWordTokenFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.html",
    "title": "Namespace Lucene.Net.Analysis.Core | Apache Lucene.NET 4.8.0 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 predicate. Note: this does a decent job for most European languages, but does a terrible job for some Asian languages, where words are not separated by spaces. You must specify the required LuceneVersion compatibility when creating LetterTokenizer : As of 3.1, CharTokenizer uses an based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. LetterTokenizerFactory Factory for LetterTokenizer . <fieldType name=\"text_letter\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.LetterTokenizerFactory\"/> </analyzer> </fieldType> LowerCaseFilter Normalizes token text to lower case. You must specify the required LuceneVersion compatibility when creating LowerCaseFilter: As of 3.1, supplementary characters are properly lowercased. LowerCaseFilterFactory Factory for LowerCaseFilter . <fieldType name=\"text_lwrcase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> </analyzer> </fieldType> LowerCaseTokenizer LowerCaseTokenizer performs the function of LetterTokenizer and LowerCaseFilter together. It divides text at non-letters and converts them to lower case. While it is functionally equivalent to the combination of LetterTokenizer and LowerCaseFilter , there is a performance advantage to doing the two tasks at once, hence this (redundant) implementation. Note: this does a decent job for most European languages, but does a terrible job for some Asian languages, where words are not separated by spaces. You must specify the required LuceneVersion compatibility when creating LowerCaseTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. LowerCaseTokenizerFactory Factory for LowerCaseTokenizer . <fieldType name=\"text_lwrcase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.LowerCaseTokenizerFactory\"/> </analyzer> </fieldType> SimpleAnalyzer An Analyzer that filters LetterTokenizer with LowerCaseFilter You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, LowerCaseTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. StopAnalyzer Filters LetterTokenizer with LowerCaseFilter and StopFilter . You must specify the required LuceneVersion compatibility when creating StopAnalyzer : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords As of 2.9, position increments are preserved StopFilter Removes stop words from a token stream. You must specify the required LuceneVersion compatibility when creating StopFilter : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords and position increments are preserved StopFilterFactory Factory for StopFilter . <fieldType name=\"text_stop\" class=\"solr.TextField\" positionIncrementGap=\"100\" autoGeneratePhraseQueries=\"true\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\" words=\"stopwords.txt\" format=\"wordset\" /> </analyzer> </fieldType> All attributes are optional: ignoreCase defaults to false words should be the name of a stopwords file to parse, if not specified the factory will use ENGLISH_STOP_WORDS_SET format defines how the words file will be parsed, and defaults to wordset . If words is not specified, then format must not be specified. The valid values for the format option are: wordset - This is the default format, which supports one word per line (including any intra-word whitespace) and allows whole line comments begining with the \"#\" character. Blank lines are ignored. See GetLines(Stream, Encoding) for details. snowball - This format allows for multiple words specified on each line, and trailing comments may be specified using the vertical line (\"|\"). Blank lines are ignored. See for details. TypeTokenFilter Removes tokens whose types appear in a set of blocked types from a token stream. TypeTokenFilterFactory Factory class for TypeTokenFilter . <fieldType name=\"chars\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.TypeTokenFilterFactory\" types=\"stoptypes.txt\" useWhitelist=\"false\"/> </analyzer> </fieldType> UpperCaseFilter Normalizes token text to UPPER CASE. You must specify the required LuceneVersion compatibility when creating UpperCaseFilter NOTE: In Unicode, this transformation may lose information when the upper case character represents more than one lower case character. Use this filter when you Require uppercase tokens. Use the LowerCaseFilter for general search matching UpperCaseFilterFactory Factory for UpperCaseFilter . <fieldType name=\"text_uppercase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.UpperCaseFilterFactory\"/> </analyzer> </fieldType> NOTE: In Unicode, this transformation may lose information when the upper case character represents more than one lower case character. Use this filter when you require uppercase tokens. Use the LowerCaseFilterFactory for general search matching WhitespaceAnalyzer An Analyzer that uses WhitespaceTokenizer . You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, WhitespaceTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. WhitespaceTokenizer A WhitespaceTokenizer is a tokenizer that divides text at whitespace. Adjacent sequences of non-Whitespace characters form tokens. You must specify the required LuceneVersion compatibility when creating WhitespaceTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. WhitespaceTokenizerFactory Factory for WhitespaceTokenizer . <fieldType name=\"text_ws\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.KeywordAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.KeywordAnalyzer.html",
    "title": "Class KeywordAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeywordAnalyzer \"Tokenizes\" the entire stream as a single token. This is useful for data like zip codes, ids, and some product names. Inheritance System.Object Analyzer KeywordAnalyzer Inherited Members Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KeywordAnalyzer : Analyzer 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 TextReader reader Returns Type Description TokenStreamComponents"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.KeywordTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.KeywordTokenizer.html",
    "title": "Class KeywordTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeywordTokenizer Emits the entire input as a single token. Inheritance System.Object AttributeSource TokenStream Tokenizer KeywordTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KeywordTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source KeywordTokenizer(AttributeSource.AttributeFactory, TextReader, Int32) Declaration public KeywordTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int bufferSize) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input System.Int32 bufferSize | Improve this Doc View Source KeywordTokenizer(TextReader) Declaration public KeywordTokenizer(TextReader input) Parameters Type Name Description TextReader input | Improve this Doc View Source KeywordTokenizer(TextReader, Int32) Declaration public KeywordTokenizer(TextReader input, int bufferSize) Parameters Type Name Description 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 = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.KeywordTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.KeywordTokenizerFactory.html",
    "title": "Class KeywordTokenizerFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LetterTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LetterTokenizer.html",
    "title": "Class LetterTokenizer | Apache Lucene.NET 4.8.0 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 predicate. Note: this does a decent job for most European languages, but does a terrible job for some Asian languages, where words are not separated by spaces. You must specify the required LuceneVersion compatibility when creating LetterTokenizer : As of 3.1, CharTokenizer uses an based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer LetterTokenizer ArabicLetterTokenizer LowerCaseTokenizer Implements IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LetterTokenizer : CharTokenizer, IDisposable Constructors | Improve this Doc View Source LetterTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new LetterTokenizer using a given AttributeSource.AttributeFactory . Declaration public LetterTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer TextReader in the input to split up into tokens | Improve this Doc View Source LetterTokenizer(LuceneVersion, TextReader) Construct a new LetterTokenizer . Declaration public LetterTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match. TextReader in the input to split up into tokens Methods | Improve this Doc View Source IsTokenChar(Int32) Collects only characters which satisfy . Declaration protected override bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean Overrides CharTokenizer.IsTokenChar(Int32) Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LetterTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LetterTokenizerFactory.html",
    "title": "Class LetterTokenizerFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseFilter.html",
    "title": "Class LowerCaseFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LowerCaseFilter Normalizes token text to lower case. You must specify the required LuceneVersion compatibility when creating LowerCaseFilter: As of 3.1, supplementary characters are properly lowercased. Inheritance System.Object AttributeSource TokenStream TokenFilter LowerCaseFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LowerCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source LowerCaseFilter(LuceneVersion, TokenStream) Create a new LowerCaseFilter , that normalizes token text to lower case. Declaration public LowerCaseFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion TokenStream in TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseFilterFactory.html",
    "title": "Class LowerCaseFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseTokenizer.html",
    "title": "Class LowerCaseTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LowerCaseTokenizer LowerCaseTokenizer performs the function of LetterTokenizer and LowerCaseFilter together. It divides text at non-letters and converts them to lower case. While it is functionally equivalent to the combination of LetterTokenizer and LowerCaseFilter , there is a performance advantage to doing the two tasks at once, hence this (redundant) implementation. Note: this does a decent job for most European languages, but does a terrible job for some Asian languages, where words are not separated by spaces. You must specify the required LuceneVersion compatibility when creating LowerCaseTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer LetterTokenizer LowerCaseTokenizer Implements IDisposable Inherited Members LetterTokenizer.IsTokenChar(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LowerCaseTokenizer : LetterTokenizer, IDisposable Constructors | Improve this Doc View Source LowerCaseTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new LowerCaseTokenizer using a given AttributeSource.AttributeFactory . Declaration public LowerCaseTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer TextReader in the input to split up into tokens | Improve this Doc View Source LowerCaseTokenizer(LuceneVersion, TextReader) Construct a new LowerCaseTokenizer . Declaration public LowerCaseTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match TextReader in the input to split up into tokens Methods | Improve this Doc View Source Normalize(Int32) Converts char to lower case . Declaration protected override int Normalize(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Int32 Overrides CharTokenizer.Normalize(Int32) Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.LowerCaseTokenizerFactory.html",
    "title": "Class LowerCaseTokenizerFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.SimpleAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.SimpleAnalyzer.html",
    "title": "Class SimpleAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleAnalyzer An Analyzer that filters LetterTokenizer with LowerCaseFilter You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, LowerCaseTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object Analyzer SimpleAnalyzer Inherited Members Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SimpleAnalyzer : Analyzer Constructors | Improve this Doc View Source SimpleAnalyzer(LuceneVersion) Creates a new SimpleAnalyzer Declaration public SimpleAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.StopAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.StopAnalyzer.html",
    "title": "Class StopAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StopAnalyzer Filters LetterTokenizer with LowerCaseFilter and StopFilter . You must specify the required LuceneVersion compatibility when creating StopAnalyzer : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords As of 2.9, position increments are preserved Inheritance System.Object Analyzer StopwordAnalyzerBase StopAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StopAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source StopAnalyzer(LuceneVersion) Builds an analyzer which removes words in ENGLISH_STOP_WORDS_SET . Declaration public StopAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion | Improve this Doc View Source StopAnalyzer(LuceneVersion, FileInfo) Builds an analyzer with the stop words from the given file. Declaration public StopAnalyzer(LuceneVersion matchVersion, FileInfo stopwordsFile) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion FileInfo stopwordsFile File to load stop words from See Also GetWordSet(TextReader, LuceneVersion) | Improve this Doc View Source StopAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the stop words from the given set. Declaration public StopAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion CharArraySet stopWords Set of stop words | Improve this Doc View Source StopAnalyzer(LuceneVersion, TextReader) Builds an analyzer with the stop words from the given reader. Declaration public StopAnalyzer(LuceneVersion matchVersion, TextReader stopwords) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion TextReader stopwords to load stop words from See Also GetWordSet(TextReader, LuceneVersion) Fields | Improve this Doc View Source ENGLISH_STOP_WORDS_SET An unmodifiable set containing some common English words that are not usually useful for searching. Declaration public static readonly CharArraySet ENGLISH_STOP_WORDS_SET Field Value Type Description CharArraySet Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a LowerCaseTokenizer filtered with StopFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.StopFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.StopFilter.html",
    "title": "Class StopFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StopFilter Removes stop words from a token stream. You must specify the required LuceneVersion compatibility when creating StopFilter : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords and position increments are preserved Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter StopFilter Implements IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StopFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source StopFilter(LuceneVersion, TokenStream, CharArraySet) Constructs a filter which removes words from the input TokenStream that are named in the CharArraySet . Declaration public StopFilter(LuceneVersion matchVersion, TokenStream in, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the stop set if Version > 3.0. See LuceneVersion > for details. TokenStream in Input TokenStream CharArraySet stopWords A CharArraySet representing the stopwords. See Also MakeStopSet(LuceneVersion, String[]) Methods | Improve this Doc View Source Accept() Returns the next input Token whose Term is not a stop word. Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() | Improve this Doc View Source MakeStopSet(LuceneVersion, String[]) Builds a CharArraySet from an array of stop words, appropriate for passing into the StopFilter constructor. This permits this stopWords construction to be cached once when an Analyzer is constructed. Declaration public static CharArraySet MakeStopSet(LuceneVersion matchVersion, params string[] stopWords) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to enable correct Unicode 4.0 behavior in the returned set if Version > 3.0 System.String [] stopWords An array of stopwords Returns Type Description CharArraySet See Also MakeStopSet(LuceneVersion, String[], Boolean) | Improve this Doc View Source MakeStopSet(LuceneVersion, String[], Boolean) Creates a stopword set from the given stopword array. Declaration public static CharArraySet MakeStopSet(LuceneVersion matchVersion, string[] stopWords, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to enable correct Unicode 4.0 behavior in the returned set if Version > 3.0 System.String [] stopWords An array of stopwords System.Boolean ignoreCase If true, all words are lower cased first. Returns Type Description CharArraySet a Set ( CharArraySet ) containing the words | Improve this Doc View Source MakeStopSet<T1>(LuceneVersion, IList<T1>) Builds a CharArraySet from an array of stop words, appropriate for passing into the StopFilter constructor. This permits this stopWords construction to be cached once when an Analyzer is constructed. Declaration public static CharArraySet MakeStopSet<T1>(LuceneVersion matchVersion, IList<T1> stopWords) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to enable correct Unicode 4.0 behavior in the returned set if Version > 3.0 IList <T1> stopWords A List of s or char[] or any other ToString()-able list representing the stopwords Returns Type Description CharArraySet A Set ( CharArraySet ) containing the words Type Parameters Name Description T1 See Also MakeStopSet(LuceneVersion, String[], Boolean) | Improve this Doc View Source MakeStopSet<T1>(LuceneVersion, IList<T1>, Boolean) Creates a stopword set from the given stopword list. Declaration public static CharArraySet MakeStopSet<T1>(LuceneVersion matchVersion, IList<T1> stopWords, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to enable correct Unicode 4.0 behavior in the returned set if Version > 3.0 IList <T1> stopWords A List of 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 IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.StopFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.StopFilterFactory.html",
    "title": "Class StopFilterFactory | Apache Lucene.NET 4.8.0 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 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 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 IDictionary < System.String , System.String > args Fields | Improve this Doc View Source FORMAT_SNOWBALL Declaration public const string FORMAT_SNOWBALL = null Field Value Type Description System.String | Improve this Doc View Source FORMAT_WORDSET Declaration public const string FORMAT_WORDSET = null Field Value Type Description System.String Properties | Improve this Doc View Source EnablePositionIncrements Declaration public virtual bool EnablePositionIncrements { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StopWords Declaration public virtual CharArraySet StopWords { get; } Property Value Type Description CharArraySet Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.TypeTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.TypeTokenFilter.html",
    "title": "Class TypeTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TypeTokenFilter Removes tokens whose types appear in a set of blocked types from a token stream. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter TypeTokenFilter Implements IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TypeTokenFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source TypeTokenFilter(LuceneVersion, TokenStream, ICollection<String>) Create a new TypeTokenFilter that filters tokens out (useWhiteList=false). Declaration public TypeTokenFilter(LuceneVersion version, TokenStream input, ICollection<string> stopTypes) Parameters Type Name Description LuceneVersion version TokenStream input ICollection < System.String > stopTypes See Also TypeTokenFilter(LuceneVersion, TokenStream, ICollection<String>, Boolean) | Improve this Doc View Source TypeTokenFilter(LuceneVersion, TokenStream, ICollection<String>, Boolean) Create a new TypeTokenFilter . Declaration public TypeTokenFilter(LuceneVersion version, TokenStream input, ICollection<string> stopTypes, bool useWhiteList) Parameters Type Name Description LuceneVersion version the LuceneVersion match version TokenStream input the TokenStream to consume 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 public TypeTokenFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream input, ICollection<string> stopTypes) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream input ICollection < System.String > stopTypes | Improve this Doc View Source TypeTokenFilter(LuceneVersion, Boolean, TokenStream, ICollection<String>, Boolean) Declaration public TypeTokenFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream input, ICollection<string> stopTypes, bool useWhiteList) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream input 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 IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.TypeTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.TypeTokenFilterFactory.html",
    "title": "Class TypeTokenFilterFactory | Apache Lucene.NET 4.8.0 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 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 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 ICollection < System.String > Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.UpperCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.UpperCaseFilter.html",
    "title": "Class UpperCaseFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UpperCaseFilter Normalizes token text to UPPER CASE. You must specify the required LuceneVersion compatibility when creating UpperCaseFilter NOTE: In Unicode, this transformation may lose information when the upper case character represents more than one lower case character. Use this filter when you Require uppercase tokens. Use the LowerCaseFilter for general search matching Inheritance System.Object AttributeSource TokenStream TokenFilter UpperCaseFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UpperCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source UpperCaseFilter(LuceneVersion, TokenStream) Create a new UpperCaseFilter , that normalizes token text to upper case. Declaration public UpperCaseFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion TokenStream in TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.UpperCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.UpperCaseFilterFactory.html",
    "title": "Class UpperCaseFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.WhitespaceAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.WhitespaceAnalyzer.html",
    "title": "Class WhitespaceAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WhitespaceAnalyzer An Analyzer that uses WhitespaceTokenizer . You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, WhitespaceTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object Analyzer WhitespaceAnalyzer Inherited Members Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WhitespaceAnalyzer : Analyzer Constructors | Improve this Doc View Source WhitespaceAnalyzer(LuceneVersion) Creates a new WhitespaceAnalyzer Declaration public WhitespaceAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.WhitespaceTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.WhitespaceTokenizer.html",
    "title": "Class WhitespaceTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WhitespaceTokenizer A WhitespaceTokenizer is a tokenizer that divides text at whitespace. Adjacent sequences of non-Whitespace characters form tokens. You must specify the required LuceneVersion compatibility when creating WhitespaceTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer WhitespaceTokenizer Implements IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WhitespaceTokenizer : CharTokenizer, IDisposable Constructors | Improve this Doc View Source WhitespaceTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new WhitespaceTokenizer using a given AttributeSource.AttributeFactory . Declaration public WhitespaceTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer TextReader in the input to split up into tokens | Improve this Doc View Source WhitespaceTokenizer(LuceneVersion, TextReader) Declaration public WhitespaceTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match TextReader in the input to split up into tokens Methods | Improve this Doc View Source IsTokenChar(Int32) Collects only characters which do not satisfy . Declaration protected override bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean Overrides CharTokenizer.IsTokenChar(Int32) Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.WhitespaceTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Core.WhitespaceTokenizerFactory.html",
    "title": "Class WhitespaceTokenizerFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechAnalyzer.html",
    "title": "Class CzechAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CzechAnalyzer Analyzer for Czech language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating CzechAnalyzer : As of 3.1, words are stemmed with CzechStemFilter As of 2.9, StopFilter preserves position increments As of 2.4, Tokens incorrectly identified as acronyms are corrected (see LUCENE-1068 ) Inheritance System.Object Analyzer StopwordAnalyzerBase CzechAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Cz Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CzechAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source CzechAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( DefaultStopSet ). Declaration public CzechAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match | Improve this Doc View Source CzechAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public CzechAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match CharArraySet stopwords a stopword set | Improve this Doc View Source CzechAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words and a set of work to be excluded from the CzechStemFilter . Declaration public CzechAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionTable) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match CharArraySet stopwords a stopword set CharArraySet stemExclusionTable a stemming exclusion set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Czech stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns a set of default Czech-stopwords Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet a set of default Czech-stopwords Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , and CzechStemFilter (only if version is >= LUCENE_31). If a version is >= LUCENE_31 and a stem exclusion set is provided via CzechAnalyzer(LuceneVersion, CharArraySet, CharArraySet) a SetKeywordMarkerFilter is added before CzechStemFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechStemFilter.html",
    "title": "Class CzechStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CzechStemFilter A TokenFilter that applies CzechStemmer to stem Czech words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NOTE : Input is expected to be in lowercase, but with diacritical marks Inheritance System.Object AttributeSource TokenStream TokenFilter CzechStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Cz Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CzechStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CzechStemFilter(TokenStream) Declaration public CzechStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechStemFilterFactory.html",
    "title": "Class CzechStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.CzechStemmer.html",
    "title": "Class CzechStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Cz Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CzechStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Stem an input buffer of Czech text. NOTE : Input is expected to be in lowercase, but with diacritical marks Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Cz.html",
    "title": "Namespace Lucene.Net.Analysis.Cz | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cz <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Czech. Classes CzechAnalyzer Analyzer for Czech language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating CzechAnalyzer : As of 3.1, words are stemmed with CzechStemFilter As of 2.9, StopFilter preserves position increments As of 2.4, Tokens incorrectly identified as acronyms are corrected (see LUCENE-1068 ) CzechStemFilter A TokenFilter that applies CzechStemmer to stem Czech words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NOTE : Input is expected to be in lowercase, but with diacritical marks CzechStemFilterFactory Factory for CzechStemFilter . <fieldType name=\"text_czstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CzechStemFilterFactory\"/> </analyzer> </fieldType> CzechStemmer Light Stemmer for Czech. Implements the algorithm described in: Indexing and stemming approaches for the Czech language http://portal.acm.org/citation.cfm?id=1598600"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Da.DanishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Da.DanishAnalyzer.html",
    "title": "Class DanishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DanishAnalyzer Analyzer for Danish. Inheritance System.Object Analyzer StopwordAnalyzerBase DanishAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Da Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class DanishAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source DanishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public DanishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source DanishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public DanishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source DanishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public DanishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Danish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Da.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Da.html",
    "title": "Namespace Lucene.Net.Analysis.Da | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Da <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Danish. Classes DanishAnalyzer Analyzer for Danish."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanAnalyzer.html",
    "title": "Class GermanAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanAnalyzer Analyzer for German language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (word that will not be stemmed, but indexed). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating GermanAnalyzer: NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer StopwordAnalyzerBase GermanAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source GermanAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DefaultStopSet . Declaration public GermanAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source GermanAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public GermanAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source GermanAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words Declaration public GermanAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a stemming exclusion set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default German stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns a set of default German-stopwords Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet a set of default German-stopwords Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, GermanNormalizationFilter and GermanLightStemFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanLightStemFilter.html",
    "title": "Class GermanLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanLightStemFilter A TokenFilter that applies GermanLightStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GermanLightStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GermanLightStemFilter(TokenStream) Declaration public GermanLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanLightStemFilterFactory.html",
    "title": "Class GermanLightStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanLightStemmer.html",
    "title": "Class GermanLightStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanLightStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanMinimalStemFilter.html",
    "title": "Class GermanMinimalStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanMinimalStemFilter A TokenFilter that applies GermanMinimalStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GermanMinimalStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GermanMinimalStemFilter(TokenStream) Declaration public GermanMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanMinimalStemFilterFactory.html",
    "title": "Class GermanMinimalStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanMinimalStemmer.html",
    "title": "Class GermanMinimalStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanMinimalStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanNormalizationFilter.html",
    "title": "Class GermanNormalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanNormalizationFilter Normalizes German characters according to the heuristics of the http://snowball.tartarus.org/algorithms/german2/stemmer.html German2 snowball algorithm . It allows for the fact that ä, ö and ü are sometimes written as ae, oe and ue. This is useful if you want this normalization without using the German2 stemmer, or perhaps no stemming at all. Inheritance System.Object AttributeSource TokenStream TokenFilter GermanNormalizationFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GermanNormalizationFilter(TokenStream) Declaration public GermanNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanNormalizationFilterFactory.html",
    "title": "Class GermanNormalizationFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanStemFilter.html",
    "title": "Class GermanStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanStemFilter A TokenFilter that stems German words. It supports a table of words that should not be stemmed at all. The stemmer used can be changed at runtime after the filter object is created (as long as it is a GermanStemmer ). To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GermanStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GermanStemFilter(TokenStream) Creates a GermanStemFilter instance Declaration public GermanStemFilter(TokenStream in) Parameters Type Name Description TokenStream in the source TokenStream Properties | Improve this Doc View Source Stemmer Set a alternative/custom GermanStemmer for this filter. Declaration public GermanStemmer Stemmer { get; set; } Property Value Type Description GermanStemmer Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Returns true for next token in the stream, or false at EOS Overrides TokenStream.IncrementToken() Implements IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanStemFilterFactory.html",
    "title": "Class GermanStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.GermanStemmer.html",
    "title": "Class GermanStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanStemmer : object Methods | Improve this Doc View Source Stem(String) Stemms the given term to an unique discriminator . Declaration protected virtual string Stem(string term) Parameters Type Name Description System.String term The term that should be stemmed. Returns Type Description System.String Discriminator for term"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.De.html",
    "title": "Namespace Lucene.Net.Analysis.De | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.De <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for German. Classes GermanAnalyzer Analyzer for German language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (word that will not be stemmed, but indexed). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating GermanAnalyzer: NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . GermanLightStemFilter A TokenFilter that applies GermanLightStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GermanLightStemFilterFactory Factory for GermanLightStemFilter . <fieldType name=\"text_delgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanLightStemFilterFactory\"/> </analyzer> </fieldType> GermanLightStemmer Light Stemmer for German. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy GermanMinimalStemFilter A TokenFilter that applies GermanMinimalStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GermanMinimalStemFilterFactory Factory for GermanMinimalStemFilter . <fieldType name=\"text_deminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanMinimalStemFilterFactory\"/> </analyzer> </fieldType> GermanMinimalStemmer Minimal Stemmer for German. This stemmer implements the following algorithm: Morphologie et recherche d'information Jacques Savoy. GermanNormalizationFilter Normalizes German characters according to the heuristics of the http://snowball.tartarus.org/algorithms/german2/stemmer.html German2 snowball algorithm . It allows for the fact that ä, ö and ü are sometimes written as ae, oe and ue. This is useful if you want this normalization without using the German2 stemmer, or perhaps no stemming at all. GermanNormalizationFilterFactory Factory for GermanNormalizationFilter . <fieldType name=\"text_denorm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanNormalizationFilterFactory\"/> </analyzer> </fieldType> GermanStemFilter A TokenFilter that stems German words. It supports a table of words that should not be stemmed at all. The stemmer used can be changed at runtime after the filter object is created (as long as it is a GermanStemmer ). To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GermanStemFilterFactory Factory for GermanStemFilter . <fieldType name=\"text_destem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanStemFilterFactory\"/> </analyzer> </fieldType> GermanStemmer A stemmer for German words. The algorithm is based on the report \"A Fast and Simple Stemming Algorithm for German Words\" by Jörg Caumanns (joerg.caumanns at isst.fhg.de)."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekAnalyzer.html",
    "title": "Class GreekAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GreekAnalyzer Analyzer for the Greek language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating GreekAnalyzer : As of 3.1, StandardFilter and GreekStemmer are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer StopwordAnalyzerBase GreekAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GreekAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source GreekAnalyzer(LuceneVersion) Builds an analyzer with the default stop words. Declaration public GreekAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version, See LuceneVersion | Improve this Doc View Source GreekAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. NOTE: The stopwords set should be pre-processed with the logic of GreekLowerCaseFilter for best results. Declaration public GreekAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version, See LuceneVersion CharArraySet stopwords a stopword set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Greek stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns a set of default Greek-stopwords Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet a set of default Greek-stopwords Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with GreekLowerCaseFilter , StandardFilter , StopFilter , and GreekStemFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekLowerCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekLowerCaseFilter.html",
    "title": "Class GreekLowerCaseFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GreekLowerCaseFilter Normalizes token text to lower case, removes some Greek diacritics, and standardizes final sigma to sigma. You must specify the required LuceneVersion compatibility when creating GreekLowerCaseFilter : As of 3.1, supplementary characters are properly lowercased. Inheritance System.Object AttributeSource TokenStream TokenFilter GreekLowerCaseFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GreekLowerCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GreekLowerCaseFilter(LuceneVersion, TokenStream) Create a GreekLowerCaseFilter that normalizes Greek token text. Declaration public GreekLowerCaseFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version, See LuceneVersion TokenStream in TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekLowerCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekLowerCaseFilterFactory.html",
    "title": "Class GreekLowerCaseFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekStemFilter.html",
    "title": "Class GreekStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GreekStemFilter A TokenFilter that applies GreekStemmer to stem Greek words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NOTE: Input is expected to be casefolded for Greek (including folding of final sigma to sigma), and with diacritics removed. This can be achieved by using either GreekLowerCaseFilter or ICUFoldingFilter before GreekStemFilter . @lucene.experimental Inheritance System.Object AttributeSource TokenStream TokenFilter GreekStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GreekStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GreekStemFilter(TokenStream) Declaration public GreekStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekStemFilterFactory.html",
    "title": "Class GreekStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.GreekStemmer.html",
    "title": "Class GreekStemmer | Apache Lucene.NET 4.8.0 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. @lucene.experimental Inheritance System.Object GreekStemmer Namespace : Lucene.Net.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GreekStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Stems a word contained in a leading portion of a char[] array. The word is passed through a number of rules that modify it's length. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s A char[] array that contains the word to be stemmed. System.Int32 len The length of the char[] array. Returns Type Description System.Int32 The new length of the stemmed word."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.El.html",
    "title": "Namespace Lucene.Net.Analysis.El | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.El <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Greek. Classes GreekAnalyzer Analyzer for the Greek language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating GreekAnalyzer : As of 3.1, StandardFilter and GreekStemmer are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . GreekLowerCaseFilter Normalizes token text to lower case, removes some Greek diacritics, and standardizes final sigma to sigma. You must specify the required LuceneVersion compatibility when creating GreekLowerCaseFilter : As of 3.1, supplementary characters are properly lowercased. GreekLowerCaseFilterFactory Factory for GreekLowerCaseFilter . <fieldType name=\"text_glc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.GreekLowerCaseFilterFactory\"/> </analyzer> </fieldType> GreekStemFilter A TokenFilter that applies GreekStemmer to stem Greek words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NOTE: Input is expected to be casefolded for Greek (including folding of final sigma to sigma), and with diacritics removed. This can be achieved by using either GreekLowerCaseFilter or ICUFoldingFilter before GreekStemFilter . @lucene.experimental 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. @lucene.experimental"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishAnalyzer.html",
    "title": "Class EnglishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnglishAnalyzer Analyzer for English. Inheritance System.Object Analyzer StopwordAnalyzerBase EnglishAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EnglishAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source EnglishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DefaultStopSet . Declaration public EnglishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source EnglishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public EnglishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source EnglishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public EnglishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , EnglishPossessiveFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and PorterStemFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishMinimalStemFilter.html",
    "title": "Class EnglishMinimalStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnglishMinimalStemFilter A TokenFilter that applies EnglishMinimalStemmer to stem English words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter EnglishMinimalStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EnglishMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source EnglishMinimalStemFilter(TokenStream) Declaration public EnglishMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishMinimalStemFilterFactory.html",
    "title": "Class EnglishMinimalStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishMinimalStemmer.html",
    "title": "Class EnglishMinimalStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EnglishMinimalStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishPossessiveFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishPossessiveFilter.html",
    "title": "Class EnglishPossessiveFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnglishPossessiveFilter TokenFilter that removes possessives (trailing 's) from words. You must specify the required LuceneVersion compatibility when creating EnglishPossessiveFilter : As of 3.6, U+2019 RIGHT SINGLE QUOTATION MARK and U+FF07 FULLWIDTH APOSTROPHE are also treated as quotation marks. Inheritance System.Object AttributeSource TokenStream TokenFilter EnglishPossessiveFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() 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 public EnglishPossessiveFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source EnglishPossessiveFilter(LuceneVersion, TokenStream) Declaration public EnglishPossessiveFilter(LuceneVersion version, TokenStream input) Parameters Type Name Description LuceneVersion version TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishPossessiveFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.EnglishPossessiveFilterFactory.html",
    "title": "Class EnglishPossessiveFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.html",
    "title": "Namespace Lucene.Net.Analysis.En | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.En <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for English. Classes EnglishAnalyzer Analyzer for English. EnglishMinimalStemFilter A TokenFilter that applies EnglishMinimalStemmer to stem English words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . EnglishMinimalStemFilterFactory Factory for EnglishMinimalStemFilter . <fieldType name=\"text_enminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.EnglishMinimalStemFilterFactory\"/> </analyzer> </fieldType> EnglishMinimalStemmer Minimal plural stemmer for English. This stemmer implements the \"S-Stemmer\" from How Effective Is Suffixing? Donna Harman. EnglishPossessiveFilter TokenFilter that removes possessives (trailing 's) from words. You must specify the required LuceneVersion compatibility when creating EnglishPossessiveFilter : As of 3.6, U+2019 RIGHT SINGLE QUOTATION MARK and U+FF07 FULLWIDTH APOSTROPHE are also treated as quotation marks. EnglishPossessiveFilterFactory Factory for EnglishPossessiveFilter . <fieldType name=\"text_enpossessive\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.EnglishPossessiveFilterFactory\"/> </analyzer> </fieldType> KStemFilter A high-performance kstem filter for english. See \"Viewing Morphology as an Inference Process\" (Krovetz, R., Proceedings of the Sixteenth Annual International ACM SIGIR Conference on Research and Development in Information Retrieval, 191-203, 1993). All terms must already be lowercased for this filter to work correctly. Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory KStemFilterFactory Factory for KStemFilter . <fieldType name=\"text_kstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.KStemFilterFactory\"/> </analyzer> </fieldType> KStemmer This class implements the Kstem algorithm PorterStemFilter Transforms the token stream as per the Porter stemming algorithm. Note: the input to the stemming filter must already be in lower case, so you will need to use LowerCaseFilter or LowerCaseTokenizer farther down the Tokenizer chain in order for this to work properly! To use this filter with other analyzers, you'll want to write an Analyzer class that sets up the TokenStream chain as you want it. To use this with LowerCaseTokenizer, for example, you'd write an analyzer like this: class MyAnalyzer : Analyzer { protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) { Tokenizer source = new LowerCaseTokenizer(version, reader); return new TokenStreamComponents(source, new PorterStemFilter(source)); } } Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory PorterStemFilterFactory Factory for PorterStemFilter . <fieldType name=\"text_porterstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PorterStemFilterFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.KStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.KStemFilter.html",
    "title": "Class KStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KStemFilter A high-performance kstem filter for english. See \"Viewing Morphology as an Inference Process\" (Krovetz, R., Proceedings of the Sixteenth Annual International ACM SIGIR Conference on Research and Development in Information Retrieval, 191-203, 1993). All terms must already be lowercased for this filter to work correctly. Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory Inheritance System.Object AttributeSource TokenStream TokenFilter KStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source KStemFilter(TokenStream) Declaration public KStemFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Returns the next, stemmed, input Token. Declaration public override bool IncrementToken() Returns Type Description System.Boolean The stemmed form of a token. Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.KStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.KStemFilterFactory.html",
    "title": "Class KStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.KStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.KStemmer.html",
    "title": "Class KStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KStemmer This class implements the Kstem algorithm Inheritance System.Object KStemmer Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public class KStemmer : object Remarks Title: Kstemmer Description: This is a java version of Bob Krovetz' kstem stemmer Copyright: Copyright 2008, Luicid Imagination, Inc. Copyright: Copyright 2003, CIIR University of Massachusetts Amherst ( http://ciir.cs.umass.edu )"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.PorterStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.PorterStemFilter.html",
    "title": "Class PorterStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PorterStemFilter Transforms the token stream as per the Porter stemming algorithm. Note: the input to the stemming filter must already be in lower case, so you will need to use LowerCaseFilter or LowerCaseTokenizer farther down the Tokenizer chain in order for this to work properly! To use this filter with other analyzers, you'll want to write an Analyzer class that sets up the TokenStream chain as you want it. To use this with LowerCaseTokenizer, for example, you'd write an analyzer like this: class MyAnalyzer : Analyzer { protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) { Tokenizer source = new LowerCaseTokenizer(version, reader); return new TokenStreamComponents(source, new PorterStemFilter(source)); } } Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory Inheritance System.Object AttributeSource TokenStream TokenFilter PorterStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PorterStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PorterStemFilter(TokenStream) Declaration public PorterStemFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.PorterStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.En.PorterStemFilterFactory.html",
    "title": "Class PorterStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.html",
    "title": "Namespace Lucene.Net.Analysis.Es | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Es <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Spanish. Classes SpanishAnalyzer Analyzer for Spanish. You must specify the required LuceneVersion compatibility when creating SpanishAnalyzer : As of 3.6, SpanishLightStemFilter is used for less aggressive stemming. SpanishLightStemFilter A TokenFilter that applies SpanishLightStemmer to stem Spanish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . SpanishLightStemFilterFactory Factory for SpanishLightStemFilter . <fieldType name=\"text_eslgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SpanishLightStemFilterFactory\"/> </analyzer> </fieldType> SpanishLightStemmer Light Stemmer for Spanish This stemmer implements the algorithm described in: Report on CLEF-2001 Experiments Jacques Savoy"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishAnalyzer.html",
    "title": "Class SpanishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanishAnalyzer Analyzer for Spanish. You must specify the required LuceneVersion compatibility when creating SpanishAnalyzer : As of 3.6, SpanishLightStemFilter is used for less aggressive stemming. Inheritance System.Object Analyzer StopwordAnalyzerBase SpanishAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Es Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SpanishAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source SpanishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public SpanishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source SpanishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public SpanishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source SpanishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public SpanishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Spanish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SpanishLightStemFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishLightStemFilter.html",
    "title": "Class SpanishLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanishLightStemFilter A TokenFilter that applies SpanishLightStemmer to stem Spanish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter SpanishLightStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Es Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SpanishLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SpanishLightStemFilter(TokenStream) Declaration public SpanishLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishLightStemFilterFactory.html",
    "title": "Class SpanishLightStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Es.SpanishLightStemmer.html",
    "title": "Class SpanishLightStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Es Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SpanishLightStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Eu.BasqueAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Eu.BasqueAnalyzer.html",
    "title": "Class BasqueAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasqueAnalyzer Analyzer for Basque. Inheritance System.Object Analyzer StopwordAnalyzerBase BasqueAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Eu Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BasqueAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source BasqueAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public BasqueAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source BasqueAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public BasqueAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source BasqueAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public BasqueAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Basque stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Eu.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Eu.html",
    "title": "Namespace Lucene.Net.Analysis.Eu | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Eu <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Basque. Classes BasqueAnalyzer Analyzer for Basque."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.html",
    "title": "Namespace Lucene.Net.Analysis.Fa | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Fa <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Persian. Classes PersianAnalyzer Analyzer for Persian. This Analyzer uses PersianCharFilter which implies tokenizing around zero-width non-joiner in addition to whitespace. Some persian-specific variant forms (such as farsi yeh and keheh) are standardized. \"Stemming\" is accomplished via stopwords. PersianCharFilter CharFilter that replaces instances of Zero-width non-joiner with an ordinary space. PersianCharFilterFactory Factory for PersianCharFilter . <fieldType name=\"text_fa\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PersianCharFilterFactory\"/> <tokenizer class=\"solr.StandardTokenizerFactory\"/> </analyzer> </fieldType> PersianNormalizationFilter A TokenFilter that applies PersianNormalizer to normalize the orthography. PersianNormalizationFilterFactory Factory for PersianNormalizationFilter . <fieldType name=\"text_fanormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PersianCharFilterFactory\"/> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.PersianNormalizationFilterFactory\"/> </analyzer> </fieldType> PersianNormalizer Normalizer for Persian. Normalization is done in-place for efficiency, operating on a termbuffer. Normalization is defined as: Normalization of various heh + hamza forms and heh goal to heh. Normalization of farsi yeh and yeh barree to arabic yeh Normalization of persian keheh to arabic kaf"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianAnalyzer.html",
    "title": "Class PersianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PersianAnalyzer Analyzer for Persian. This Analyzer uses PersianCharFilter which implies tokenizing around zero-width non-joiner in addition to whitespace. Some persian-specific variant forms (such as farsi yeh and keheh) are standardized. \"Stemming\" is accomplished via stopwords. Inheritance System.Object Analyzer StopwordAnalyzerBase PersianAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PersianAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source PersianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public PersianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source PersianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public PersianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Persian stopwords. Default stopword list is from http://members.unine.ch/jacques.savoy/clef/index.html . The stopword list is BSD-Licensed. Declaration public const string DEFAULT_STOPWORD_FILE = null 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 = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with LowerCaseFilter , ArabicNormalizationFilter , PersianNormalizationFilter and Persian Stop words | Improve this Doc View Source InitReader(String, TextReader) Wraps the with PersianCharFilter Declaration protected override TextReader InitReader(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TextReader"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianCharFilter.html",
    "title": "Class PersianCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PersianCharFilter CharFilter that replaces instances of Zero-width non-joiner with an ordinary space. Inheritance System.Object CharFilter PersianCharFilter Inherited Members CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) Namespace : Lucene.Net.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PersianCharFilter : CharFilter Constructors | Improve this Doc View Source PersianCharFilter(TextReader) Declaration public PersianCharFilter(TextReader in) Parameters Type Name Description 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 | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianCharFilterFactory.html",
    "title": "Class PersianCharFilterFactory | Apache Lucene.NET 4.8.0 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 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 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 TextReader input Returns Type Description TextReader Overrides CharFilterFactory.Create(TextReader) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianNormalizationFilter.html",
    "title": "Class PersianNormalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PersianNormalizationFilter A TokenFilter that applies PersianNormalizer to normalize the orthography. Inheritance System.Object AttributeSource TokenStream TokenFilter PersianNormalizationFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PersianNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PersianNormalizationFilter(TokenStream) Declaration public PersianNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianNormalizationFilterFactory.html",
    "title": "Class PersianNormalizationFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianNormalizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fa.PersianNormalizer.html",
    "title": "Class PersianNormalizer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PersianNormalizer : object Fields | Improve this Doc View Source FARSI_YEH Declaration public const char FARSI_YEH = null Field Value Type Description System.Char | Improve this Doc View Source HAMZA_ABOVE Declaration public const char HAMZA_ABOVE = null Field Value Type Description System.Char | Improve this Doc View Source HEH Declaration public const char HEH = null Field Value Type Description System.Char | Improve this Doc View Source HEH_GOAL Declaration public const char HEH_GOAL = null Field Value Type Description System.Char | Improve this Doc View Source HEH_YEH Declaration public const char HEH_YEH = null Field Value Type Description System.Char | Improve this Doc View Source KAF Declaration public const char KAF = null Field Value Type Description System.Char | Improve this Doc View Source KEHEH Declaration public const char KEHEH = null Field Value Type Description System.Char | Improve this Doc View Source YEH Declaration public const char YEH = null Field Value Type Description System.Char | Improve this Doc View Source YEH_BARREE Declaration public const char YEH_BARREE = null Field Value Type Description System.Char Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalize an input buffer of Persian text Declaration public virtual int Normalize(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishAnalyzer.html",
    "title": "Class FinnishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FinnishAnalyzer Analyzer for Finnish. Inheritance System.Object Analyzer StopwordAnalyzerBase FinnishAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Fi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FinnishAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source FinnishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public FinnishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source FinnishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public FinnishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source FinnishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public FinnishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Italian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishLightStemFilter.html",
    "title": "Class FinnishLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FinnishLightStemFilter A TokenFilter that applies FinnishLightStemmer to stem Finnish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter FinnishLightStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Fi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FinnishLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FinnishLightStemFilter(TokenStream) Declaration public FinnishLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishLightStemFilterFactory.html",
    "title": "Class FinnishLightStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.FinnishLightStemmer.html",
    "title": "Class FinnishLightStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Fi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FinnishLightStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fi.html",
    "title": "Namespace Lucene.Net.Analysis.Fi | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Fi <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Finnish. Classes FinnishAnalyzer Analyzer for Finnish. FinnishLightStemFilter A TokenFilter that applies FinnishLightStemmer to stem Finnish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . FinnishLightStemFilterFactory Factory for FinnishLightStemFilter . <fieldType name=\"text_filgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.FinnishLightStemFilterFactory\"/> </analyzer> </fieldType> FinnishLightStemmer Light Stemmer for Finnish. This stemmer implements the algorithm described in: Report on CLEF-2003 Monolingual Tracks Jacques Savoy"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchAnalyzer.html",
    "title": "Class FrenchAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FrenchAnalyzer Analyzer for French language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (word that will not be stemmed, but indexed). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating FrenchAnalyzer: As of 3.6, FrenchLightStemFilter is used for less aggressive stemming. As of 3.1, Snowball stemming is done with SnowballFilter , LowerCaseFilter is used prior to StopFilter , and ElisionFilter and Snowball stopwords are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer StopwordAnalyzerBase FrenchAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FrenchAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source FrenchAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( DefaultStopSet ). Declaration public FrenchAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source FrenchAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public FrenchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source FrenchAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words Declaration public FrenchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclutionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclutionSet a stemming exclusion set Fields | Improve this Doc View Source DEFAULT_ARTICLES Default set of articles for ElisionFilter Declaration public static readonly CharArraySet DEFAULT_ARTICLES Field Value Type Description CharArraySet | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default French stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , ElisionFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, and FrenchLightStemFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchLightStemFilter.html",
    "title": "Class FrenchLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FrenchLightStemFilter A TokenFilter that applies FrenchLightStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter FrenchLightStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FrenchLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FrenchLightStemFilter(TokenStream) Declaration public FrenchLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchLightStemFilterFactory.html",
    "title": "Class FrenchLightStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchLightStemmer.html",
    "title": "Class FrenchLightStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FrenchLightStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchMinimalStemFilter.html",
    "title": "Class FrenchMinimalStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FrenchMinimalStemFilter A TokenFilter that applies FrenchMinimalStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter FrenchMinimalStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FrenchMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FrenchMinimalStemFilter(TokenStream) Declaration public FrenchMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchMinimalStemFilterFactory.html",
    "title": "Class FrenchMinimalStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchMinimalStemmer.html",
    "title": "Class FrenchMinimalStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FrenchMinimalStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchStemFilter.html",
    "title": "Class FrenchStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FrenchStemFilter A TokenFilter that stems french words. The used stemmer can be changed at runtime after the filter object is created (as long as it is a FrenchStemmer ). To prevent terms from being stemmed use an instance of KeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter FrenchStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FrenchStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FrenchStemFilter(TokenStream) Declaration public FrenchStemFilter(TokenStream in) Parameters Type Name Description TokenStream in Properties | Improve this Doc View Source Stemmer Set a alternative/custom FrenchStemmer for this filter. Declaration public FrenchStemmer Stemmer { get; set; } Property Value Type Description FrenchStemmer Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Returns true for the next token in the stream, or false at EOS Overrides TokenStream.IncrementToken() Implements IDisposable See Also KeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.FrenchStemmer.html",
    "title": "Class FrenchStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FrenchStemmer : object Methods | Improve this Doc View Source Stem(String) Stems the given term to a unique discriminator . Declaration protected virtual string Stem(string term) Parameters Type Name Description System.String term The term that should be stemmed Returns Type Description System.String Discriminator for term"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Fr.html",
    "title": "Namespace Lucene.Net.Analysis.Fr | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Fr <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for French. Classes FrenchAnalyzer Analyzer for French language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (word that will not be stemmed, but indexed). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating FrenchAnalyzer: As of 3.6, FrenchLightStemFilter is used for less aggressive stemming. As of 3.1, Snowball stemming is done with SnowballFilter , LowerCaseFilter is used prior to StopFilter , and ElisionFilter and Snowball stopwords are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . FrenchLightStemFilter A TokenFilter that applies FrenchLightStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . FrenchLightStemFilterFactory Factory for FrenchLightStemFilter . <fieldType name=\"text_frlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\"/> <filter class=\"solr.FrenchLightStemFilterFactory\"/> </analyzer> </fieldType> FrenchLightStemmer Light Stemmer for French. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy FrenchMinimalStemFilter A TokenFilter that applies FrenchMinimalStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . FrenchMinimalStemFilterFactory Factory for FrenchMinimalStemFilter . <fieldType name=\"text_frminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\"/> <filter class=\"solr.FrenchMinimalStemFilterFactory\"/> </analyzer> </fieldType> FrenchMinimalStemmer Light Stemmer for French. This stemmer implements the following algorithm: A Stemming procedure and stopword list for general French corpora. Jacques Savoy. FrenchStemFilter A TokenFilter that stems french words. The used stemmer can be changed at runtime after the filter object is created (as long as it is a FrenchStemmer ). To prevent terms from being stemmed use an instance of KeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . FrenchStemmer A stemmer for French words. The algorithm is based on the work of Dr Martin Porter on his snowball project refer to http://snowball.sourceforge.net/french/stemmer.html (French stemming algorithm) for details"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.html",
    "title": "Namespace Lucene.Net.Analysis.Ga | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ga <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analysis for Irish. Classes IrishAnalyzer Analyzer for Irish. IrishLowerCaseFilter Normalises token text to lower case, handling t-prothesis and n-eclipsis (i.e., that 'nAthair' should become 'n-athair') IrishLowerCaseFilterFactory Factory for IrishLowerCaseFilter . <fieldType name=\"text_ga\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.IrishLowerCaseFilterFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.IrishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.IrishAnalyzer.html",
    "title": "Class IrishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IrishAnalyzer Analyzer for Irish. Inheritance System.Object Analyzer StopwordAnalyzerBase IrishAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Ga Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IrishAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source IrishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public IrishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source IrishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public IrishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source IrishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public IrishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Irish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , IrishLowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.IrishLowerCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.IrishLowerCaseFilter.html",
    "title": "Class IrishLowerCaseFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IrishLowerCaseFilter Normalises token text to lower case, handling t-prothesis and n-eclipsis (i.e., that 'nAthair' should become 'n-athair') Inheritance System.Object AttributeSource TokenStream TokenFilter IrishLowerCaseFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Ga Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IrishLowerCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source IrishLowerCaseFilter(TokenStream) Create an IrishLowerCaseFilter that normalises Irish token text. Declaration public IrishLowerCaseFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.IrishLowerCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ga.IrishLowerCaseFilterFactory.html",
    "title": "Class IrishLowerCaseFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianAnalyzer.html",
    "title": "Class GalicianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GalicianAnalyzer Analyzer for Galician. Inheritance System.Object Analyzer StopwordAnalyzerBase GalicianAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GalicianAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source GalicianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public GalicianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source GalicianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public GalicianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source GalicianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public GalicianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Galician stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and GalicianStemFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianMinimalStemFilter.html",
    "title": "Class GalicianMinimalStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GalicianMinimalStemFilter A TokenFilter that applies GalicianMinimalStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GalicianMinimalStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GalicianMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GalicianMinimalStemFilter(TokenStream) Declaration public GalicianMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianMinimalStemFilterFactory.html",
    "title": "Class GalicianMinimalStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianMinimalStemmer.html",
    "title": "Class GalicianMinimalStemmer | Apache Lucene.NET 4.8.0 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) Namespace : Lucene.Net.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GalicianMinimalStemmer : RSLPStemmerBase Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32 See Also RSLPStemmerBase"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianStemFilter.html",
    "title": "Class GalicianStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GalicianStemFilter A TokenFilter that applies GalicianStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GalicianStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GalicianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GalicianStemFilter(TokenStream) Declaration public GalicianStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianStemFilterFactory.html",
    "title": "Class GalicianStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.GalicianStemmer.html",
    "title": "Class GalicianStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GalicianStemmer Galician stemmer implementing \"Regras do lematizador para o galego\". Inheritance System.Object RSLPStemmerBase GalicianStemmer Inherited Members RSLPStemmerBase.Parse(Type, String) Namespace : Lucene.Net.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GalicianStemmer : RSLPStemmerBase Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s buffer, oversized to at least len+1 System.Int32 len initial valid length of buffer Returns Type Description System.Int32 new valid length, stemmed See Also RSLPStemmerBase"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Gl.html",
    "title": "Namespace Lucene.Net.Analysis.Gl | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Gl <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Galician. Classes GalicianAnalyzer Analyzer for Galician. GalicianMinimalStemFilter A TokenFilter that applies GalicianMinimalStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GalicianMinimalStemFilterFactory Factory for GalicianMinimalStemFilter . <fieldType name=\"text_glplural\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GalicianMinimalStemFilterFactory\"/> </analyzer> </fieldType> GalicianMinimalStemmer Minimal Stemmer for Galician This follows the \"RSLP-S\" algorithm, but modified for Galician. Hence this stemmer only applies the plural reduction step of: \"Regras do lematizador para o galego\" GalicianStemFilter A TokenFilter that applies GalicianStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GalicianStemFilterFactory Factory for GalicianStemFilter . <fieldType name=\"text_glstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GalicianStemFilterFactory\"/> </analyzer> </fieldType> GalicianStemmer Galician stemmer implementing \"Regras do lematizador para o galego\"."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiAnalyzer.html",
    "title": "Class HindiAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HindiAnalyzer Analyzer for Hindi. You must specify the required LuceneVersion compatibility when creating HindiAnalyzer: As of 3.6, StandardTokenizer is used for tokenization Inheritance System.Object Analyzer StopwordAnalyzerBase HindiAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HindiAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source HindiAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public HindiAnalyzer(LuceneVersion version) Parameters Type Name Description LuceneVersion version | Improve this Doc View Source HindiAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public HindiAnalyzer(LuceneVersion version, CharArraySet stopwords) Parameters Type Name Description LuceneVersion version lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source HindiAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words Declaration public HindiAnalyzer(LuceneVersion version, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion version lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a stemming exclusion set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Hindi stopwords. Default stopword list is from http://members.unine.ch/jacques.savoy/clef/index.html The stopword list is BSD-Licensed. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with LowerCaseFilter , IndicNormalizationFilter , HindiNormalizationFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, HindiStemFilter , and Hindi Stop words"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiNormalizationFilter.html",
    "title": "Class HindiNormalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HindiNormalizationFilter A TokenFilter that applies HindiNormalizer to normalize the orthography. In some cases the normalization may cause unrelated terms to conflate, so to prevent terms from being normalized use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter HindiNormalizationFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HindiNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HindiNormalizationFilter(TokenStream) Declaration public HindiNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable See Also HindiNormalizer"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiNormalizationFilterFactory.html",
    "title": "Class HindiNormalizationFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiNormalizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiNormalizer.html",
    "title": "Class HindiNormalizer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HindiNormalizer : object Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalize an input buffer of Hindi text Declaration public virtual int Normalize(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiStemFilter.html",
    "title": "Class HindiStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HindiStemFilter A TokenFilter that applies HindiStemmer to stem Hindi words. Inheritance System.Object AttributeSource TokenStream TokenFilter HindiStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HindiStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HindiStemFilter(TokenStream) Declaration public HindiStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiStemFilterFactory.html",
    "title": "Class HindiStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.HindiStemmer.html",
    "title": "Class HindiStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HindiStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] buffer, int len) Parameters Type Name Description System.Char [] buffer System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hi.html",
    "title": "Namespace Lucene.Net.Analysis.Hi | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Hi <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Hindi. Classes HindiAnalyzer Analyzer for Hindi. You must specify the required LuceneVersion compatibility when creating HindiAnalyzer: As of 3.6, StandardTokenizer is used for tokenization HindiNormalizationFilter A TokenFilter that applies HindiNormalizer to normalize the orthography. In some cases the normalization may cause unrelated terms to conflate, so to prevent terms from being normalized use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . HindiNormalizationFilterFactory Factory for HindiNormalizationFilter . <fieldType name=\"text_hinormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.HindiNormalizationFilterFactory\"/> </analyzer> </fieldType> HindiNormalizer Normalizer for Hindi. Normalizes text to remove some differences in spelling variations. Implements the Hindi-language specific algorithm specified in: Word normalization in Indian languages Prasad Pingali and Vasudeva Varma. http://web2py.iiit.ac.in/publications/default/download/inproceedings.pdf.3fe5b38c-02ee-41ce-9a8f-3e745670be32.pdf with the following additions from Hindi CLIR in Thirty Days Leah S. Larkey, Margaret E. Connell, and Nasreen AbdulJaleel. http://maroo.cs.umass.edu/pub/web/getpdf.php?id=454 : Internal Zero-width joiner and Zero-width non-joiners are removed In addition to chandrabindu, NA+halant is normalized to anusvara HindiStemFilter A TokenFilter that applies HindiStemmer to stem Hindi words. HindiStemFilterFactory Factory for HindiStemFilter . <fieldType name=\"text_histem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.HindiStemFilterFactory\"/> </analyzer> </fieldType> HindiStemmer Light Stemmer for Hindi. Implements the algorithm specified in: A Lightweight Stemmer for Hindi Ananthakrishnan Ramanathan and Durgesh D Rao. http://computing.open.ac.uk/Sites/EACLSouthAsia/Papers/p6-Ramanathan.pdf"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.html",
    "title": "Namespace Lucene.Net.Analysis.Hu | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Hu <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Hungarian. Classes HungarianAnalyzer Analyzer for Hungarian. HungarianLightStemFilter A TokenFilter that applies HungarianLightStemmer to stem Hungarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . HungarianLightStemFilterFactory Factory for HungarianLightStemFilter . <fieldType name=\"text_hulgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.HungarianLightStemFilterFactory\"/> </analyzer> </fieldType> HungarianLightStemmer Light Stemmer for Hungarian. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianAnalyzer.html",
    "title": "Class HungarianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HungarianAnalyzer Analyzer for Hungarian. Inheritance System.Object Analyzer StopwordAnalyzerBase HungarianAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Hu Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HungarianAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source HungarianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public HungarianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source HungarianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public HungarianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source HungarianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public HungarianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Hungarian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianLightStemFilter.html",
    "title": "Class HungarianLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HungarianLightStemFilter A TokenFilter that applies HungarianLightStemmer to stem Hungarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter HungarianLightStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Hu Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HungarianLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HungarianLightStemFilter(TokenStream) Declaration public HungarianLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianLightStemFilterFactory.html",
    "title": "Class HungarianLightStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hu.HungarianLightStemmer.html",
    "title": "Class HungarianLightStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Hu Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HungarianLightStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.Dictionary.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.Dictionary.html",
    "title": "Class Dictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Dictionary In-memory structure for the dictionary (.dic) and affix (.aff) data of a hunspell dictionary. Inheritance System.Object Dictionary Namespace : Lucene.Net.Analysis.Hunspell Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Dictionary : object Constructors | Improve this Doc View Source Dictionary(Stream, IList<Stream>, Boolean) Creates a new Dictionary containing the information read from the provided s to hunspell affix and dictionary files. You have to dispose the provided s yourself. Declaration public Dictionary(Stream affix, IList<Stream> dictionaries, bool ignoreCase) Parameters Type Name Description Stream affix for reading the hunspell affix file (won't be disposed). IList < Stream > dictionaries for reading the hunspell dictionary files (won't be disposed). System.Boolean ignoreCase ignore case? | Improve this Doc View Source Dictionary(Stream, Stream) Creates a new Dictionary containing the information read from the provided s to hunspell affix and dictionary files. You have to dispose the provided s yourself. Declaration public Dictionary(Stream affix, Stream dictionary) Parameters Type Name Description Stream affix for reading the hunspell affix file (won't be disposed). Stream dictionary for reading the hunspell dictionary file (won't be disposed)."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.html",
    "title": "Namespace Lucene.Net.Analysis.Hunspell | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Hunspell <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Stemming TokenFilter using a Java implementation of the Hunspell stemming algorithm. Dictionaries can be found on OpenOffice's wiki Classes Dictionary In-memory structure for the dictionary (.dic) and affix (.aff) data of a hunspell dictionary. HunspellStemFilter TokenFilter that uses hunspell affix rules and words to stem tokens. Since hunspell supports a word having multiple stems, this filter can emit multiple tokens for each consumed token Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory This is a Lucene.NET EXPERIMENTAL API, use at your own risk HunspellStemFilterFactory TokenFilterFactory that creates instances of HunspellStemFilter . Example config for British English: <filter class=\"solr.HunspellStemFilterFactory\" dictionary=\"en_GB.dic,my_custom.dic\" affix=\"en_GB.aff\" ignoreCase=\"false\" longestOnly=\"false\" /> Both parameters dictionary and affix are mandatory. Dictionaries for many languages are available through the OpenOffice project. See http://wiki.apache.org/solr/Hunspell This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.HunspellStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.HunspellStemFilter.html",
    "title": "Class HunspellStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HunspellStemFilter TokenFilter that uses hunspell affix rules and words to stem tokens. Since hunspell supports a word having multiple stems, this filter can emit multiple tokens for each consumed token Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream TokenFilter HunspellStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Hunspell Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HunspellStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HunspellStemFilter(TokenStream, Dictionary) Create a HunspellStemFilter outputting all possible stems. Declaration public HunspellStemFilter(TokenStream input, Dictionary dictionary) Parameters Type Name Description TokenStream input Dictionary dictionary See Also HunspellStemFilter(TokenStream, Dictionary, Boolean) | Improve this Doc View Source HunspellStemFilter(TokenStream, Dictionary, Boolean) Create a HunspellStemFilter outputting all possible stems. Declaration public HunspellStemFilter(TokenStream input, Dictionary dictionary, bool dedup) Parameters Type Name Description TokenStream input Dictionary dictionary System.Boolean dedup See Also HunspellStemFilter(TokenStream, Dictionary, Boolean, Boolean) | Improve this Doc View Source HunspellStemFilter(TokenStream, Dictionary, Boolean, Boolean) Creates a new HunspellStemFilter that will stem tokens from the given TokenStream using affix rules in the provided Dictionary Declaration public HunspellStemFilter(TokenStream input, Dictionary dictionary, bool dedup, bool longestOnly) Parameters Type Name Description TokenStream input TokenStream whose tokens will be stemmed Dictionary dictionary Hunspell Dictionary containing the affix rules and words that will be used to stem the tokens System.Boolean dedup remove duplicates System.Boolean longestOnly true if only the longest term should be output. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.HunspellStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hunspell.HunspellStemFilterFactory.html",
    "title": "Class HunspellStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hy.ArmenianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hy.ArmenianAnalyzer.html",
    "title": "Class ArmenianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArmenianAnalyzer Analyzer for Armenian. Inheritance System.Object Analyzer StopwordAnalyzerBase ArmenianAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Hy Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ArmenianAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source ArmenianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public ArmenianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source ArmenianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public ArmenianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source ArmenianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public ArmenianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Armenian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hy.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Hy.html",
    "title": "Namespace Lucene.Net.Analysis.Hy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Hy <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Armenian. Classes ArmenianAnalyzer Analyzer for Armenian."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.html",
    "title": "Namespace Lucene.Net.Analysis.Id | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Id <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Indonesian. Classes IndonesianAnalyzer Analyzer for Indonesian (Bahasa) IndonesianStemFilter A TokenFilter that applies IndonesianStemmer to stem Indonesian words. IndonesianStemFilterFactory Factory for IndonesianStemFilter . <fieldType name=\"text_idstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.IndonesianStemFilterFactory\" stemDerivational=\"true\"/> </analyzer> </fieldType> IndonesianStemmer Stemmer for Indonesian. Stems Indonesian words with the algorithm presented in: A Study of Stemming Effects on Information Retrieval in Bahasa Indonesia , Fadillah Z Tala. http://www.illc.uva.nl/Publications/ResearchReports/MoL-2003-02.text.pdf"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianAnalyzer.html",
    "title": "Class IndonesianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndonesianAnalyzer Analyzer for Indonesian (Bahasa) Inheritance System.Object Analyzer StopwordAnalyzerBase IndonesianAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Id Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IndonesianAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source IndonesianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public IndonesianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source IndonesianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public IndonesianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source IndonesianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop word. If a none-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before IndonesianStemFilter . Declaration public IndonesianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Indonesian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and IndonesianStemFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianStemFilter.html",
    "title": "Class IndonesianStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndonesianStemFilter A TokenFilter that applies IndonesianStemmer to stem Indonesian words. Inheritance System.Object AttributeSource TokenStream TokenFilter IndonesianStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Id Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IndonesianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source IndonesianStemFilter(TokenStream) Calls IndonesianStemFilter(TokenStream, Boolean) Declaration public IndonesianStemFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source IndonesianStemFilter(TokenStream, Boolean) Create a new IndonesianStemFilter . If stemDerivational is false, only inflectional suffixes (particles and possessive pronouns) are stemmed. Declaration public IndonesianStemFilter(TokenStream input, bool stemDerivational) Parameters Type Name Description TokenStream input System.Boolean stemDerivational Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianStemFilterFactory.html",
    "title": "Class IndonesianStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Id.IndonesianStemmer.html",
    "title": "Class IndonesianStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Id Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IndonesianStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32, Boolean) Stem a term (returning its new length). Use stemDerivational to control whether full stemming or only light inflectional stemming is done. Declaration public virtual int Stem(char[] text, int length, bool stemDerivational) Parameters Type Name Description System.Char [] text System.Int32 length System.Boolean stemDerivational Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.html",
    "title": "Namespace Lucene.Net.Analysis.In | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.In <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analysis components for Indian languages. Classes IndicNormalizationFilter A TokenFilter that applies IndicNormalizer to normalize text in Indian Languages. IndicNormalizationFilterFactory Factory for IndicNormalizationFilter . <fieldType name=\"text_innormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.IndicNormalizationFilterFactory\"/> </analyzer> </fieldType> IndicNormalizer Normalizes the Unicode representation of text in Indian languages. Follows guidelines from Unicode 5.2, chapter 6, South Asian Scripts I and graphical decompositions from http://ldc.upenn.edu/myl/IndianScriptsUnicode.html IndicTokenizer Simple Tokenizer for text in Indian Languages."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicNormalizationFilter.html",
    "title": "Class IndicNormalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndicNormalizationFilter A TokenFilter that applies IndicNormalizer to normalize text in Indian Languages. Inheritance System.Object AttributeSource TokenStream TokenFilter IndicNormalizationFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.In Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IndicNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source IndicNormalizationFilter(TokenStream) Declaration public IndicNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicNormalizationFilterFactory.html",
    "title": "Class IndicNormalizationFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicNormalizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicNormalizer.html",
    "title": "Class IndicNormalizer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.In Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IndicNormalizer : object Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalizes input text, and returns the new length. The length will always be less than or equal to the existing length. Declaration public virtual int Normalize(char[] text, int len) Parameters Type Name Description System.Char [] text input text System.Int32 len valid length Returns Type Description System.Int32 normalized length"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.In.IndicTokenizer.html",
    "title": "Class IndicTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndicTokenizer Simple Tokenizer for text in Indian Languages. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer IndicTokenizer Implements IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.In Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IndicTokenizer : CharTokenizer, IDisposable Constructors | Improve this Doc View Source IndicTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Declaration public IndicTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description LuceneVersion matchVersion AttributeSource.AttributeFactory factory TextReader input | Improve this Doc View Source IndicTokenizer(LuceneVersion, TextReader) Declaration public IndicTokenizer(LuceneVersion matchVersion, TextReader input) Parameters Type Name Description LuceneVersion matchVersion 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 IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.html",
    "title": "Namespace Lucene.Net.Analysis.It | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.It <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Italian. Classes ItalianAnalyzer Analyzer for Italian. You must specify the required LuceneVersion compatibility when creating ItalianAnalyzer : As of 3.6, ItalianLightStemFilter is used for less aggressive stemming. As of 3.2, ElisionFilter with a set of Italian contractions is used by default. ItalianLightStemFilter A TokenFilter that applies ItalianLightStemmer to stem Italian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . ItalianLightStemFilterFactory Factory for ItalianLightStemFilter . <fieldType name=\"text_itlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ItalianLightStemFilterFactory\"/> </analyzer> </fieldType> ItalianLightStemmer Light Stemmer for Italian. This stemmer implements the algorithm described in: Report on CLEF-2001 Experiments Jacques Savoy"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianAnalyzer.html",
    "title": "Class ItalianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ItalianAnalyzer Analyzer for Italian. You must specify the required LuceneVersion compatibility when creating ItalianAnalyzer : As of 3.6, ItalianLightStemFilter is used for less aggressive stemming. As of 3.2, ElisionFilter with a set of Italian contractions is used by default. Inheritance System.Object Analyzer StopwordAnalyzerBase ItalianAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.It Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ItalianAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source ItalianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public ItalianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source ItalianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public ItalianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source ItalianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public ItalianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Italian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , ElisionFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and ItalianLightStemFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianLightStemFilter.html",
    "title": "Class ItalianLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ItalianLightStemFilter A TokenFilter that applies ItalianLightStemmer to stem Italian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter ItalianLightStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.It Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ItalianLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ItalianLightStemFilter(TokenStream) Declaration public ItalianLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianLightStemFilterFactory.html",
    "title": "Class ItalianLightStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.It.ItalianLightStemmer.html",
    "title": "Class ItalianLightStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.It Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ItalianLightStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.html",
    "title": "Namespace Lucene.Net.Analysis.Lv | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Lv <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Latvian. Classes LatvianAnalyzer Analyzer for Latvian. LatvianStemFilter A TokenFilter that applies LatvianStemmer to stem Latvian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . LatvianStemFilterFactory Factory for LatvianStemFilter . <fieldType name=\"text_lvstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.LatvianStemFilterFactory\"/> </analyzer> </fieldType> LatvianStemmer Light stemmer for Latvian. This is a light version of the algorithm in Karlis Kreslin's PhD thesis A stemming algorithm for Latvian with the following modifications: Only explicitly stems noun and adjective morphology Stricter length/vowel checks for the resulting stems (verb etc suffix stripping is removed) Removes only the primary inflectional suffixes: case and number for nouns ; case, number, gender, and definitiveness for adjectives. Palatalization is only handled when a declension II,V,VI noun suffix is removed."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianAnalyzer.html",
    "title": "Class LatvianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LatvianAnalyzer Analyzer for Latvian. Inheritance System.Object Analyzer StopwordAnalyzerBase LatvianAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Lv Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LatvianAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source LatvianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public LatvianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source LatvianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public LatvianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source LatvianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public LatvianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Latvian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and LatvianStemFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianStemFilter.html",
    "title": "Class LatvianStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LatvianStemFilter A TokenFilter that applies LatvianStemmer to stem Latvian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter LatvianStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Lv Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LatvianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source LatvianStemFilter(TokenStream) Declaration public LatvianStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianStemFilterFactory.html",
    "title": "Class LatvianStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Lv.LatvianStemmer.html",
    "title": "Class LatvianStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Lv Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LatvianStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Stem a latvian word. returns the new adjusted length. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilter.html",
    "title": "Class ASCIIFoldingFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ASCIIFoldingFilter This class converts alphabetic, numeric, and symbolic Unicode characters which are not in the first 127 ASCII characters (the \"Basic Latin\" Unicode block) into their ASCII equivalents, if one exists. Characters from the following Unicode blocks are converted; however, only those characters with reasonable ASCII alternatives are converted: C1 Controls and Latin-1 Supplement: http://www.unicode.org/charts/PDF/U0080.pdf Latin Extended-A: http://www.unicode.org/charts/PDF/U0100.pdf Latin Extended-B: http://www.unicode.org/charts/PDF/U0180.pdf Latin Extended Additional: http://www.unicode.org/charts/PDF/U1E00.pdf Latin Extended-C: http://www.unicode.org/charts/PDF/U2C60.pdf Latin Extended-D: http://www.unicode.org/charts/PDF/UA720.pdf IPA Extensions: http://www.unicode.org/charts/PDF/U0250.pdf Phonetic Extensions: http://www.unicode.org/charts/PDF/U1D00.pdf Phonetic Extensions Supplement: http://www.unicode.org/charts/PDF/U1D80.pdf General Punctuation: http://www.unicode.org/charts/PDF/U2000.pdf Superscripts and Subscripts: http://www.unicode.org/charts/PDF/U2070.pdf Enclosed Alphanumerics: http://www.unicode.org/charts/PDF/U2460.pdf Dingbats: http://www.unicode.org/charts/PDF/U2700.pdf Supplemental Punctuation: http://www.unicode.org/charts/PDF/U2E00.pdf Alphabetic Presentation Forms: http://www.unicode.org/charts/PDF/UFB00.pdf Halfwidth and Fullwidth Forms: http://www.unicode.org/charts/PDF/UFF00.pdf See: http://en.wikipedia.org/wiki/Latin_characters_in_Unicode For example, '&agrave;' will be replaced by 'a'. Inheritance System.Object AttributeSource TokenStream TokenFilter ASCIIFoldingFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ASCIIFoldingFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ASCIIFoldingFilter(TokenStream) Declaration public ASCIIFoldingFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source ASCIIFoldingFilter(TokenStream, Boolean) Create a new ASCIIFoldingFilter . Declaration public ASCIIFoldingFilter(TokenStream input, bool preserveOriginal) Parameters Type Name Description TokenStream input TokenStream to filter System.Boolean preserveOriginal should the original tokens be kept on the input stream with a 0 position increment from the folded tokens? Properties | Improve this Doc View Source PreserveOriginal Does the filter preserve the original tokens? Declaration public bool PreserveOriginal { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source FoldToASCII(Char[], Int32) Converts characters above ASCII to their ASCII equivalents. For example, accents are removed from accented characters. Declaration public void FoldToASCII(char[] input, int length) Parameters Type Name Description System.Char [] input The string to fold System.Int32 length The number of characters in the input string | Improve this Doc View Source FoldToASCII(Char[], Int32, Char[], Int32, Int32) Converts characters above ASCII to their ASCII equivalents. For example, accents are removed from accented characters. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static int FoldToASCII(char[] input, int inputPos, char[] output, int outputPos, int length) Parameters Type Name Description System.Char [] input The characters to fold System.Int32 inputPos Index of the first character to fold System.Char [] output The result of the folding. Should be of size >= length * 4 . System.Int32 outputPos Index of output where to put the result of the folding System.Int32 length The number of characters to fold Returns Type Description System.Int32 length of output | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilterFactory.html",
    "title": "Class ASCIIFoldingFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CapitalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CapitalizationFilter.html",
    "title": "Class CapitalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CapitalizationFilter A filter to apply normal capitalization rules to Tokens. It will make the first letter capital and the rest lower case. This filter is particularly useful to build nice looking facet parameters. This filter is not appropriate if you intend to use a prefix query. Inheritance System.Object AttributeSource TokenStream TokenFilter CapitalizationFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CapitalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CapitalizationFilter(TokenStream) Creates a CapitalizationFilter with the default parameters using the culture from the current thread. Calls CapitalizationFilter(TokenStream, Boolean, CharArraySet, Boolean, ICollection<Char[]>, Int32, Int32, Int32) Declaration public CapitalizationFilter(TokenStream in) Parameters Type Name Description TokenStream in | Improve this Doc View Source CapitalizationFilter(TokenStream, CultureInfo) Creates a CapitalizationFilter with the default parameters and the specified culture . Calls CapitalizationFilter(TokenStream, Boolean, CharArraySet, Boolean, ICollection<Char[]>, Int32, Int32, Int32) Declaration public CapitalizationFilter(TokenStream in, CultureInfo culture) Parameters Type Name Description TokenStream in input tokenstream 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, Boolean, CharArraySet, Boolean, ICollection<Char[]>, Int32, Int32, Int32) Creates a CapitalizationFilter with the specified parameters using the culture from the current thread. Declaration public CapitalizationFilter(TokenStream in, bool onlyFirstWord, CharArraySet keep, bool forceFirstLetter, ICollection<char[]> okPrefix, int minWordLength, int maxWordCount, int maxTokenLength) Parameters Type Name Description TokenStream in input tokenstream System.Boolean onlyFirstWord should each word be capitalized or all of the words? CharArraySet keep a keep word list. Each word that should be kept separated by whitespace. System.Boolean forceFirstLetter Force the first letter to be capitalized even if it is in the keep list. ICollection < System.Char []> okPrefix do not change word capitalization if a word begins with something in this list. System.Int32 minWordLength how long the word needs to be to get capitalization applied. If the minWordLength is 3, \"and\" > \"And\" but \"or\" stays \"or\". System.Int32 maxWordCount if the token contains more then maxWordCount words, the capitalization is assumed to be correct. System.Int32 maxTokenLength The maximum length for an individual token. Tokens that exceed this length will not have the capitalization operation performed. | Improve this Doc View Source CapitalizationFilter(TokenStream, Boolean, CharArraySet, Boolean, ICollection<Char[]>, Int32, Int32, Int32, CultureInfo) Creates a CapitalizationFilter with the specified parameters and the specified culture . Declaration public CapitalizationFilter(TokenStream in, bool onlyFirstWord, CharArraySet keep, bool forceFirstLetter, ICollection<char[]> okPrefix, int minWordLength, int maxWordCount, int maxTokenLength, CultureInfo culture) Parameters Type Name Description TokenStream in input tokenstream System.Boolean onlyFirstWord should each word be capitalized or all of the words? CharArraySet keep a keep word list. Each word that should be kept separated by whitespace. System.Boolean forceFirstLetter Force the first letter to be capitalized even if it is in the keep list. 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. CultureInfo culture The culture to use for the casing operation. If null, the culture of the current thread will be used. Fields | Improve this Doc View Source DEFAULT_MAX_TOKEN_LENGTH Declaration public static readonly int DEFAULT_MAX_TOKEN_LENGTH Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MAX_WORD_COUNT Declaration public static readonly int DEFAULT_MAX_WORD_COUNT Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CapitalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CapitalizationFilterFactory.html",
    "title": "Class CapitalizationFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Fields | Improve this Doc View Source CULTURE Declaration public const string CULTURE = null Field Value Type Description System.String | Improve this Doc View Source FORCE_FIRST_LETTER Declaration public const string FORCE_FIRST_LETTER = null Field Value Type Description System.String | Improve this Doc View Source KEEP Declaration public const string KEEP = null Field Value Type Description System.String | Improve this Doc View Source KEEP_IGNORE_CASE Declaration public const string KEEP_IGNORE_CASE = null Field Value Type Description System.String | Improve this Doc View Source MAX_TOKEN_LENGTH Declaration public const string MAX_TOKEN_LENGTH = null Field Value Type Description System.String | Improve this Doc View Source MAX_WORD_COUNT Declaration public const string MAX_WORD_COUNT = null Field Value Type Description System.String | Improve this Doc View Source MIN_WORD_LENGTH Declaration public const string MIN_WORD_LENGTH = null Field Value Type Description System.String | Improve this Doc View Source OK_PREFIX Declaration public const string OK_PREFIX = null Field Value Type Description System.String | Improve this Doc View Source ONLY_FIRST_WORD Declaration public const string ONLY_FIRST_WORD = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CodepointCountFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CodepointCountFilter.html",
    "title": "Class CodepointCountFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CodepointCountFilter Removes words that are too long or too short from the stream. Note: Length is calculated as the number of Unicode codepoints. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter CodepointCountFilter Implements IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() 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 ( < min) or too long ( > max). Declaration public CodepointCountFilter(LuceneVersion version, TokenStream in, int min, int max) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the TokenStream to consume System.Int32 min the minimum length System.Int32 max the maximum length Methods | Improve this Doc View Source Accept() Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CodepointCountFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.CodepointCountFilterFactory.html",
    "title": "Class CodepointCountFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Fields | Improve this Doc View Source MAX_KEY Declaration public const string MAX_KEY = null Field Value Type Description System.String | Improve this Doc View Source MIN_KEY Declaration public const string MIN_KEY = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.EmptyTokenStream.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.EmptyTokenStream.html",
    "title": "Class EmptyTokenStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EmptyTokenStream An always exhausted token stream. Inheritance System.Object AttributeSource TokenStream EmptyTokenStream Implements IDisposable Inherited Members TokenStream.End() TokenStream.Reset() TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EmptyTokenStream : TokenStream, IDisposable Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.html",
    "title": "Namespace Lucene.Net.Analysis.Miscellaneous | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Miscellaneous <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Miscellaneous TokenStreams Classes ASCIIFoldingFilter This class converts alphabetic, numeric, and symbolic Unicode characters which are not in the first 127 ASCII characters (the \"Basic Latin\" Unicode block) into their ASCII equivalents, if one exists. Characters from the following Unicode blocks are converted; however, only those characters with reasonable ASCII alternatives are converted: C1 Controls and Latin-1 Supplement: http://www.unicode.org/charts/PDF/U0080.pdf Latin Extended-A: http://www.unicode.org/charts/PDF/U0100.pdf Latin Extended-B: http://www.unicode.org/charts/PDF/U0180.pdf Latin Extended Additional: http://www.unicode.org/charts/PDF/U1E00.pdf Latin Extended-C: http://www.unicode.org/charts/PDF/U2C60.pdf Latin Extended-D: http://www.unicode.org/charts/PDF/UA720.pdf IPA Extensions: http://www.unicode.org/charts/PDF/U0250.pdf Phonetic Extensions: http://www.unicode.org/charts/PDF/U1D00.pdf Phonetic Extensions Supplement: http://www.unicode.org/charts/PDF/U1D80.pdf General Punctuation: http://www.unicode.org/charts/PDF/U2000.pdf Superscripts and Subscripts: http://www.unicode.org/charts/PDF/U2070.pdf Enclosed Alphanumerics: http://www.unicode.org/charts/PDF/U2460.pdf Dingbats: http://www.unicode.org/charts/PDF/U2700.pdf Supplemental Punctuation: http://www.unicode.org/charts/PDF/U2E00.pdf Alphabetic Presentation Forms: http://www.unicode.org/charts/PDF/UFB00.pdf Halfwidth and Fullwidth Forms: http://www.unicode.org/charts/PDF/UFF00.pdf See: http://en.wikipedia.org/wiki/Latin_characters_in_Unicode For example, '&agrave;' will be replaced by 'a'. ASCIIFoldingFilterFactory Factory for ASCIIFoldingFilter . <fieldType name=\"text_ascii\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ASCIIFoldingFilterFactory\" preserveOriginal=\"false\"/> </analyzer> </fieldType> CapitalizationFilter A filter to apply normal capitalization rules to Tokens. It will make the first letter capital and the rest lower case. This filter is particularly useful to build nice looking facet parameters. This filter is not appropriate if you intend to use a prefix query. CapitalizationFilterFactory Factory for CapitalizationFilter . The factory takes parameters: \"onlyFirstWord\" - should each word be capitalized or all of the words? \"keep\" - a keep word list. Each word that should be kept separated by whitespace. \"keepIgnoreCase - true or false. If true, the keep list will be considered case-insensitive. \"forceFirstLetter\" - Force the first letter to be capitalized even if it is in the keep list \"okPrefix\" - do not change word capitalization if a word begins with something in this list. for example if \"McK\" is on the okPrefix list, the word \"McKinley\" should not be changed to \"Mckinley\" \"minWordLength\" - how long the word needs to be to get capitalization applied. If the minWordLength is 3, \"and\" > \"And\" but \"or\" stays \"or\" \"maxWordCount\" - if the token contains more then maxWordCount words, the capitalization is assumed to be correct. <fieldType name=\"text_cptlztn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CapitalizationFilterFactory\" onlyFirstWord=\"true\" keep=\"java solr lucene\" keepIgnoreCase=\"false\" okPrefix=\"McK McD McA\"/> </analyzer> </fieldType> @since solr 1.3 CodepointCountFilter Removes words that are too long or too short from the stream. Note: Length is calculated as the number of Unicode codepoints. CodepointCountFilterFactory Factory for CodepointCountFilter . <fieldType name=\"text_lngth\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CodepointCountFilterFactory\" min=\"0\" max=\"1\" /> </analyzer> </fieldType> EmptyTokenStream An always exhausted token stream. HyphenatedWordsFilter When the plain text is extracted from documents, we will often have many words hyphenated and broken into two lines. This is often the case with documents where narrow text columns are used, such as newsletters. In order to increase search efficiency, this filter puts hyphenated words broken into two lines back together. This filter should be used on indexing time only. Example field definition in schema.xml: <fieldtype name=\"text\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer type=\"index\"> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"index_synonyms.txt\" ignoreCase=\"true\" expand=\"false\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\"/> <filter class=\"solr.HyphenatedWordsFilterFactory\"/> <filter class=\"solr.WordDelimiterFilterFactory\" generateWordParts=\"1\" generateNumberParts=\"1\" catenateWords=\"1\" catenateNumbers=\"1\" catenateAll=\"0\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"synonyms.txt\" ignoreCase=\"true\" expand=\"true\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\"/> <filter class=\"solr.WordDelimiterFilterFactory\" generateWordParts=\"1\" generateNumberParts=\"1\" catenateWords=\"0\" catenateNumbers=\"0\" catenateAll=\"0\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldtype> HyphenatedWordsFilterFactory Factory for HyphenatedWordsFilter . <fieldType name=\"text_hyphn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.HyphenatedWordsFilterFactory\"/> </analyzer> </fieldType> KeepWordFilter A TokenFilter that only keeps tokens with text contained in the required words. This filter behaves like the inverse of StopFilter . @since solr 1.3 KeepWordFilterFactory Factory for KeepWordFilter . <fieldType name=\"text_keepword\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.KeepWordFilterFactory\" words=\"keepwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> KeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . KeywordMarkerFilterFactory Factory for KeywordMarkerFilter . <fieldType name=\"text_keyword\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.KeywordMarkerFilterFactory\" protected=\"protectedkeyword.txt\" pattern=\"^.+er$\" ignoreCase=\"false\"/> </analyzer> </fieldType> KeywordRepeatFilter This TokenFilter emits each incoming token twice once as keyword and once non-keyword, in other words once with IsKeyword set to true and once set to false . This is useful if used with a stem filter that respects the KeywordAttribute to index the stemmed and the un-stemmed version of a term into the same field. KeywordRepeatFilterFactory Factory for KeywordRepeatFilter . Since KeywordRepeatFilter emits two tokens for every input token, and any tokens that aren't transformed later in the analysis chain will be in the document twice. Therefore, consider adding RemoveDuplicatesTokenFilterFactory later in the analysis chain. LengthFilter Removes words that are too long or too short from the stream. Note: Length is calculated as the number of UTF-16 code units. LengthFilterFactory Factory for LengthFilter . <fieldType name=\"text_lngth\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LengthFilterFactory\" min=\"0\" max=\"1\" /> </analyzer> </fieldType> LimitTokenCountAnalyzer This Analyzer limits the number of tokens while indexing. It is a replacement for the maximum field length setting inside IndexWriter . LimitTokenCountFilter This TokenFilter limits the number of tokens while indexing. It is a replacement for the maximum field length setting inside IndexWriter . By default, this filter ignores any tokens in the wrapped TokenStream once the limit has been reached, which can result in Reset() being called prior to IncrementToken() returning false . For most TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a TokenStream which requires that the full stream of tokens be exhausted in order to function properly, use the LimitTokenCountFilter(TokenStream, Int32, Boolean) consumeAllTokens option. LimitTokenCountFilterFactory Factory for LimitTokenCountFilter . <fieldType name=\"text_lngthcnt\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LimitTokenCountFilterFactory\" maxTokenCount=\"10\" consumeAllTokens=\"false\" /> </analyzer> </fieldType> The Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilterFactory.consumeAllTokens property is optional and defaults to false . See LimitTokenCountFilter for an explanation of it's use. LimitTokenPositionFilter This TokenFilter limits its emitted tokens to those with positions that are not greater than the configured limit. By default, this filter ignores any tokens in the wrapped TokenStream once the limit has been exceeded, which can result in Reset() being called prior to IncrementToken() returning false . For most TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a TokenStream which requires that the full stream of tokens be exhausted in order to function properly, use the LimitTokenPositionFilter(TokenStream, Int32, Boolean) consumeAllTokens option. LimitTokenPositionFilterFactory Factory for LimitTokenPositionFilter . <fieldType name=\"text_limit_pos\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LimitTokenPositionFilterFactory\" maxTokenPosition=\"3\" consumeAllTokens=\"false\" /> </analyzer> </fieldType> The Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilterFactory.consumeAllTokens property is optional and defaults to false . See LimitTokenPositionFilter for an explanation of its use. Lucene47WordDelimiterFilter Old Broken version of WordDelimiterFilter PatternAnalyzer Efficient Lucene analyzer/tokenizer that preferably operates on a rather than a , that can flexibly separate text into terms via a regular expression (with behaviour similar to ), 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 . Once you are satisfied, give that regex to PatternAnalyzer . Also see Regular Expression Tutorial . This class can be considerably faster than the \"normal\" Lucene tokenizers. It can also serve as a building block in a compound Lucene TokenFilter chain. For example as in this stemming example: PatternAnalyzer pat = ... TokenStream tokenStream = new SnowballFilter( pat.GetTokenStream(\"content\", \"James is running round in the woods\"), \"English\")); PatternKeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Each token that matches the provided pattern is marked as a keyword by setting IsKeyword to true . PerFieldAnalyzerWrapper This analyzer is used to facilitate scenarios where different fields Require different analysis techniques. Use the Map argument in PerFieldAnalyzerWrapper(Analyzer, IDictionary<String, Analyzer>) to add non-default analyzers for fields. Example usage: IDictionary<string, Analyzer> analyzerPerField = new Dictionary<string, Analyzer>(); analyzerPerField[\"firstname\"] = new KeywordAnalyzer(); analyzerPerField[\"lastname\"] = new KeywordAnalyzer(); PerFieldAnalyzerWrapper aWrapper = new PerFieldAnalyzerWrapper(new StandardAnalyzer(version), analyzerPerField); In this example, StandardAnalyzer will be used for all fields except \"firstname\" and \"lastname\", for which KeywordAnalyzer will be used. A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing and query parsing. PrefixAndSuffixAwareTokenFilter Links two PrefixAwareTokenFilter . NOTE: This filter might not behave correctly if used with custom IAttribute s, i.e. IAttribute s other than the ones located in Lucene.Net.Analysis.TokenAttributes. PrefixAwareTokenFilter Joins two token streams and leaves the last token of the first stream available to be used when updating the token values in the second stream based on that token. The default implementation adds last prefix token end offset to the suffix token start and end offsets. NOTE: This filter might not behave correctly if used with custom IAttribute s, i.e. IAttribute s other than the ones located in Lucene.Net.Analysis.TokenAttributes. RemoveDuplicatesTokenFilter A TokenFilter which filters out Token s at the same position and Term text as the previous token in the stream. RemoveDuplicatesTokenFilterFactory Factory for RemoveDuplicatesTokenFilter . <fieldType name=\"text_rmdup\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldType> ScandinavianFoldingFilter This filter folds Scandinavian characters åÅäæÄÆ->a and öÖøØ->o. It also discriminate against use of double vowels aa, ae, ao, oe and oo, leaving just the first one. It's is a semantically more destructive solution than ScandinavianNormalizationFilter but can in addition help with matching raksmorgas as räksmörgås. blåbærsyltetøj == blåbärsyltetöj == blaabaarsyltetoej == blabarsyltetoj räksmörgås == ræksmørgås == ræksmörgaos == raeksmoergaas == raksmorgas Background: Swedish åäö are in fact the same letters as Norwegian and Danish åæø and thus interchangeable when used between these languages. They are however folded differently when people type them on a keyboard lacking these characters. In that situation almost all Swedish people use a, a, o instead of å, ä, ö. Norwegians and Danes on the other hand usually type aa, ae and oe instead of å, æ and ø. Some do however use a, a, o, oo, ao and sometimes permutations of everything above. This filter solves that mismatch problem, but might also cause new. ScandinavianFoldingFilterFactory Factory for ScandinavianFoldingFilter . <fieldType name=\"text_scandfold\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ScandinavianFoldingFilterFactory\"/> </analyzer> </fieldType> ScandinavianNormalizationFilter This filter normalize use of the interchangeable Scandinavian characters æÆäÄöÖøØ and folded variants (aa, ao, ae, oe and oo) by transforming them to åÅæÆøØ. It's a semantically less destructive solution than ScandinavianFoldingFilter , most useful when a person with a Norwegian or Danish keyboard queries a Swedish index and vice versa. This filter does not the common Swedish folds of å and ä to a nor ö to o. blåbærsyltetøj == blåbärsyltetöj == blaabaarsyltetoej but not blabarsyltetoj räksmörgås == ræksmørgås == ræksmörgaos == raeksmoergaas but not raksmorgas ScandinavianNormalizationFilterFactory Factory for ScandinavianNormalizationFilter . <fieldType name=\"text_scandnorm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ScandinavianNormalizationFilterFactory\"/> </analyzer> </fieldType> SetKeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Each token contained in the provided set is marked as a keyword by setting IsKeyword to true . SingleTokenTokenStream A TokenStream containing a single token. StemmerOverrideFilter Provides the ability to override any KeywordAttribute aware stemmer with custom dictionary-based stemming. StemmerOverrideFilter.Builder This builder builds an FST for the StemmerOverrideFilter StemmerOverrideFilter.StemmerOverrideMap A read-only 4-byte FST backed map that allows fast case-insensitive key value lookups for StemmerOverrideFilter StemmerOverrideFilterFactory Factory for StemmerOverrideFilter . <fieldType name=\"text_dicstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.StemmerOverrideFilterFactory\" dictionary=\"dictionary.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> TrimFilter Trims leading and trailing whitespace from Tokens in the stream. As of Lucene 4.4, this filter does not support updateOffsets=true anymore as it can lead to broken token streams. TrimFilterFactory Factory for TrimFilter . <fieldType name=\"text_trm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.NGramTokenizerFactory\"/> <filter class=\"solr.TrimFilterFactory\" /> </analyzer> </fieldType> TruncateTokenFilter A token filter for truncating the terms into a specific length. Fixed prefix truncation, as a stemming method, produces good results on Turkish language. It is reported that F5, using first 5 characters, produced best results in Information Retrieval on Turkish Texts TruncateTokenFilterFactory Factory for TruncateTokenFilter . The following type is recommended for \" diacritics-insensitive search \" for Turkish. <fieldType name=\"text_tr_ascii_f5\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ApostropheFilterFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> <filter class=\"solr.ASCIIFoldingFilterFactory\" preserveOriginal=\"true\"/> <filter class=\"solr.KeywordRepeatFilterFactory\"/> <filter class=\"solr.TruncateTokenFilterFactory\" prefixLength=\"5\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldType> WordDelimiterFilter Splits words into subwords and performs optional transformations on subword groups. Words are split into subwords with the following rules: split on intra-word delimiters (by default, all non alpha-numeric characters): \"Wi-Fi\" → \"Wi\", \"Fi\" split on case transitions: \"PowerShot\" → \"Power\", \"Shot\" split on letter-number transitions: \"SD500\" → \"SD\", \"500\" leading and trailing intra-word delimiters on each subword are ignored: \"//hello---there, 'dude'\" → \"hello\", \"there\", \"dude\" trailing \"'s\" are removed for each subword: \"O'Neil's\" → \"O\", \"Neil\" Note: this step isn't performed in a separate filter because of possible subword combinations. The combinations parameter affects how subwords are combined: combinations=\"0\" causes no subword combinations: \"PowerShot\" → 0:\"Power\", 1:\"Shot\" (0 and 1 are the token positions) combinations=\"1\" means that in addition to the subwords, maximum runs of non-numeric subwords are catenated and produced at the same position of the last subword in the run: \"PowerShot\" → 0:\"Power\", 1:\"Shot\" 1:\"PowerShot\" \"A's+B's&C's\" -gt; 0:\"A\", 1:\"B\", 2:\"C\", 2:\"ABC\" \"Super-Duper-XL500-42-AutoCoder!\" → 0:\"Super\", 1:\"Duper\", 2:\"XL\", 2:\"SuperDuperXL\", 3:\"500\" 4:\"42\", 5:\"Auto\", 6:\"Coder\", 6:\"AutoCoder\" One use for WordDelimiterFilter is to help match words with different subword delimiters. For example, if the source text contained \"wi-fi\" one may want \"wifi\" \"WiFi\" \"wi-fi\" \"wi+fi\" queries to all match. One way of doing so is to specify combinations=\"1\" in the analyzer used for indexing, and combinations=\"0\" (the default) in the analyzer used for querying. Given that the current StandardTokenizer immediately removes many intra-word delimiters, it is recommended that this filter be used after a tokenizer that does not do this (such as WhitespaceTokenizer ). WordDelimiterFilterFactory Factory for WordDelimiterFilter . <fieldType name=\"text_wd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.WordDelimiterFilterFactory\" protected=\"protectedword.txt\" preserveOriginal=\"0\" splitOnNumerics=\"1\" splitOnCaseChange=\"1\" catenateWords=\"0\" catenateNumbers=\"0\" catenateAll=\"0\" generateWordParts=\"1\" generateNumberParts=\"1\" stemEnglishPossessive=\"1\" types=\"wdfftypes.txt\" /> </analyzer> </fieldType> WordDelimiterIterator A BreakIterator-like API for iterating over subwords in text, according to WordDelimiterFilter rules. This is a Lucene.NET INTERNAL API, use at your own risk Enums WordDelimiterFlags Configuration options for the WordDelimiterFilter . LUCENENET specific - these options were passed as int constant flags in Lucene."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilter.html",
    "title": "Class HyphenatedWordsFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HyphenatedWordsFilter When the plain text is extracted from documents, we will often have many words hyphenated and broken into two lines. This is often the case with documents where narrow text columns are used, such as newsletters. In order to increase search efficiency, this filter puts hyphenated words broken into two lines back together. This filter should be used on indexing time only. Example field definition in schema.xml: <fieldtype name=\"text\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer type=\"index\"> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"index_synonyms.txt\" ignoreCase=\"true\" expand=\"false\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\"/> <filter class=\"solr.HyphenatedWordsFilterFactory\"/> <filter class=\"solr.WordDelimiterFilterFactory\" generateWordParts=\"1\" generateNumberParts=\"1\" catenateWords=\"1\" catenateNumbers=\"1\" catenateAll=\"0\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"synonyms.txt\" ignoreCase=\"true\" expand=\"true\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\"/> <filter class=\"solr.WordDelimiterFilterFactory\" generateWordParts=\"1\" generateNumberParts=\"1\" catenateWords=\"0\" catenateNumbers=\"0\" catenateAll=\"0\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldtype> Inheritance System.Object AttributeSource TokenStream TokenFilter HyphenatedWordsFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HyphenatedWordsFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HyphenatedWordsFilter(TokenStream) Creates a new HyphenatedWordsFilter Declaration public HyphenatedWordsFilter(TokenStream in) Parameters Type Name Description TokenStream in TokenStream that will be filtered Methods | Improve this Doc View Source IncrementToken() Consumers (i.e., IndexWriter ) use this method to advance the stream to the next token. Implementing classes must implement this method and update the appropriate Attribute s with the attributes of the next token. The producer must make no assumptions about the attributes after the method has been returned: the caller may arbitrarily change it. If the producer needs to preserve the state for subsequent calls, it can use CaptureState() to create a copy of the current attribute state. this method is called for every token of a document, so an efficient implementation is crucial for good performance. To avoid calls to AddAttribute<T>() and GetAttribute<T>() , references to all Attribute s that this stream uses should be retrieved during instantiation. To ensure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . Declaration public override bool IncrementToken() Returns Type Description System.Boolean false for end of stream; true otherwise Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilterFactory.html",
    "title": "Class HyphenatedWordsFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeepWordFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeepWordFilter.html",
    "title": "Class KeepWordFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeepWordFilter A TokenFilter that only keeps tokens with text contained in the required words. This filter behaves like the inverse of StopFilter . @since solr 1.3 Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter KeepWordFilter Implements IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KeepWordFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source KeepWordFilter(LuceneVersion, TokenStream, CharArraySet) Create a new KeepWordFilter . NOTE : The words set passed to this constructor will be directly used by this filter and should not be modified. Declaration public KeepWordFilter(LuceneVersion version, TokenStream in, CharArraySet words) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the TokenStream to consume CharArraySet words the words to keep | Improve this Doc View Source KeepWordFilter(LuceneVersion, Boolean, TokenStream, CharArraySet) Declaration public KeepWordFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream in, CharArraySet words) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream in CharArraySet words Methods | Improve this Doc View Source Accept() Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeepWordFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeepWordFilterFactory.html",
    "title": "Class KeepWordFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Properties | Improve this Doc View Source EnablePositionIncrements Declaration public virtual bool EnablePositionIncrements { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Words Declaration public virtual CharArraySet Words { get; } Property Value Type Description CharArraySet Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilter.html",
    "title": "Class KeywordMarkerFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Inheritance System.Object AttributeSource TokenStream TokenFilter KeywordMarkerFilter PatternKeywordMarkerFilter SetKeywordMarkerFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class KeywordMarkerFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source KeywordMarkerFilter(TokenStream) Creates a new KeywordMarkerFilter Declaration protected KeywordMarkerFilter(TokenStream in) Parameters Type Name Description TokenStream in the input stream Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IsKeyword() Declaration protected abstract bool IsKeyword() Returns Type Description System.Boolean Implements IDisposable See Also KeywordAttribute"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilterFactory.html",
    "title": "Class KeywordMarkerFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Fields | Improve this Doc View Source PATTERN Declaration public const string PATTERN = null Field Value Type Description System.String | Improve this Doc View Source PROTECTED_TOKENS Declaration public const string PROTECTED_TOKENS = null Field Value Type Description System.String Properties | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilter.html",
    "title": "Class KeywordRepeatFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeywordRepeatFilter This TokenFilter emits each incoming token twice once as keyword and once non-keyword, in other words once with IsKeyword set to true and once set to false . This is useful if used with a stem filter that respects the KeywordAttribute to index the stemmed and the un-stemmed version of a term into the same field. Inheritance System.Object AttributeSource TokenStream TokenFilter KeywordRepeatFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KeywordRepeatFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source KeywordRepeatFilter(TokenStream) Construct a token stream filtering the given input. Declaration public KeywordRepeatFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilterFactory.html",
    "title": "Class KeywordRepeatFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LengthFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LengthFilter.html",
    "title": "Class LengthFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LengthFilter Removes words that are too long or too short from the stream. Note: Length is calculated as the number of UTF-16 code units. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter LengthFilter Implements IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LengthFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source LengthFilter(LuceneVersion, TokenStream, Int32, Int32) Create a new LengthFilter . This will filter out tokens whose CharTermAttribute is either too short ( Length < min) or too long ( Length > max). Declaration public LengthFilter(LuceneVersion version, TokenStream in, int min, int max) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the TokenStream to consume System.Int32 min the minimum length System.Int32 max the maximum length | Improve this Doc View Source LengthFilter(LuceneVersion, Boolean, TokenStream, Int32, Int32) Declaration public LengthFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream in, int min, int max) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream in System.Int32 min System.Int32 max Methods | Improve this Doc View Source Accept() Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LengthFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LengthFilterFactory.html",
    "title": "Class LengthFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Fields | Improve this Doc View Source MAX_KEY Declaration public const string MAX_KEY = null Field Value Type Description System.String | Improve this Doc View Source MIN_KEY Declaration public const string MIN_KEY = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountAnalyzer.html",
    "title": "Class LimitTokenCountAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LimitTokenCountAnalyzer This Analyzer limits the number of tokens while indexing. It is a replacement for the maximum field length setting inside IndexWriter . Inheritance System.Object Analyzer AnalyzerWrapper LimitTokenCountAnalyzer Inherited Members AnalyzerWrapper.WrapReader(String, TextReader) AnalyzerWrapper.CreateComponents(String, TextReader) AnalyzerWrapper.GetPositionIncrementGap(String) AnalyzerWrapper.GetOffsetGap(String) AnalyzerWrapper.InitReader(String, TextReader) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LimitTokenCountAnalyzer : AnalyzerWrapper Constructors | Improve this Doc View Source LimitTokenCountAnalyzer(Analyzer, Int32) Build an analyzer that limits the maximum number of tokens per field. This analyzer will not consume any tokens beyond the maxTokenCount limit Declaration public LimitTokenCountAnalyzer(Analyzer delegate, int maxTokenCount) Parameters Type Name Description Analyzer delegate System.Int32 maxTokenCount See Also LimitTokenCountAnalyzer(Analyzer, Int32, Boolean) | Improve this Doc View Source LimitTokenCountAnalyzer(Analyzer, Int32, Boolean) Build an analyzer that limits the maximum number of tokens per field. Declaration public LimitTokenCountAnalyzer(Analyzer delegate, int maxTokenCount, bool consumeAllTokens) Parameters Type Name Description Analyzer delegate the analyzer to wrap System.Int32 maxTokenCount max number of tokens to produce System.Boolean consumeAllTokens whether all tokens from the delegate should be consumed even if maxTokenCount is reached. Methods | Improve this Doc View Source GetWrappedAnalyzer(String) Declaration protected override Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Analyzer | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source WrapComponents(String, TokenStreamComponents) Declaration protected override TokenStreamComponents WrapComponents(string fieldName, TokenStreamComponents components) Parameters Type Name Description System.String fieldName TokenStreamComponents components Returns Type Description TokenStreamComponents See Also LimitTokenCountFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilter.html",
    "title": "Class LimitTokenCountFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LimitTokenCountFilter This TokenFilter limits the number of tokens while indexing. It is a replacement for the maximum field length setting inside IndexWriter . By default, this filter ignores any tokens in the wrapped TokenStream once the limit has been reached, which can result in Reset() being called prior to IncrementToken() returning false . For most TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a TokenStream which requires that the full stream of tokens be exhausted in order to function properly, use the LimitTokenCountFilter(TokenStream, Int32, Boolean) consumeAllTokens option. Inheritance System.Object AttributeSource TokenStream TokenFilter LimitTokenCountFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LimitTokenCountFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source LimitTokenCountFilter(TokenStream, Int32) Build a filter that only accepts tokens up to a maximum number. This filter will not consume any tokens beyond the maxTokenCount limit Declaration public LimitTokenCountFilter(TokenStream in, int maxTokenCount) Parameters Type Name Description TokenStream in the stream to wrap System.Int32 maxTokenCount max number of tokens to produce See Also LimitTokenCountFilter(TokenStream, Int32, Boolean) | Improve this Doc View Source LimitTokenCountFilter(TokenStream, Int32, Boolean) Build an filter that limits the maximum number of tokens per field. Declaration public LimitTokenCountFilter(TokenStream in, int maxTokenCount, bool consumeAllTokens) Parameters Type Name Description TokenStream in the stream to wrap System.Int32 maxTokenCount max number of tokens to produce System.Boolean consumeAllTokens whether all tokens from the input must be consumed even if maxTokenCount is reached. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilterFactory.html",
    "title": "Class LimitTokenCountFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Fields | Improve this Doc View Source CONSUME_ALL_TOKENS_KEY Declaration public const string CONSUME_ALL_TOKENS_KEY = null Field Value Type Description System.String | Improve this Doc View Source MAX_TOKEN_COUNT_KEY Declaration public const string MAX_TOKEN_COUNT_KEY = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilter.html",
    "title": "Class LimitTokenPositionFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LimitTokenPositionFilter This TokenFilter limits its emitted tokens to those with positions that are not greater than the configured limit. By default, this filter ignores any tokens in the wrapped TokenStream once the limit has been exceeded, which can result in Reset() being called prior to IncrementToken() returning false . For most TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a TokenStream which requires that the full stream of tokens be exhausted in order to function properly, use the LimitTokenPositionFilter(TokenStream, Int32, Boolean) consumeAllTokens option. Inheritance System.Object AttributeSource TokenStream TokenFilter LimitTokenPositionFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LimitTokenPositionFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source LimitTokenPositionFilter(TokenStream, Int32) Build a filter that only accepts tokens up to and including the given maximum position. This filter will not consume any tokens with position greater than the maxTokenPosition limit. Declaration public LimitTokenPositionFilter(TokenStream in, int maxTokenPosition) Parameters Type Name Description TokenStream in the stream to wrap System.Int32 maxTokenPosition max position of tokens to produce (1st token always has position 1) See Also LimitTokenPositionFilter(TokenStream, Int32, Boolean) | Improve this Doc View Source LimitTokenPositionFilter(TokenStream, Int32, Boolean) Build a filter that limits the maximum position of tokens to emit. Declaration public LimitTokenPositionFilter(TokenStream in, int maxTokenPosition, bool consumeAllTokens) Parameters Type Name Description TokenStream in the stream to wrap System.Int32 maxTokenPosition max position of tokens to produce (1st token always has position 1) System.Boolean consumeAllTokens whether all tokens from the wrapped input stream must be consumed even if maxTokenPosition is exceeded. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilterFactory.html",
    "title": "Class LimitTokenPositionFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Fields | Improve this Doc View Source CONSUME_ALL_TOKENS_KEY Declaration public const string CONSUME_ALL_TOKENS_KEY = null Field Value Type Description System.String | Improve this Doc View Source MAX_TOKEN_POSITION_KEY Declaration public const string MAX_TOKEN_POSITION_KEY = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.Lucene47WordDelimiterFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.Lucene47WordDelimiterFilter.html",
    "title": "Class Lucene47WordDelimiterFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene47WordDelimiterFilter Old Broken version of WordDelimiterFilter Inheritance System.Object AttributeSource TokenStream TokenFilter Lucene47WordDelimiterFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class Lucene47WordDelimiterFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source Lucene47WordDelimiterFilter(TokenStream, WordDelimiterFlags, CharArraySet) Creates a new Lucene47WordDelimiterFilter using DEFAULT_WORD_DELIM_TABLE as its charTypeTable Declaration public Lucene47WordDelimiterFilter(TokenStream in, WordDelimiterFlags configurationFlags, CharArraySet protWords) Parameters Type Name Description TokenStream in TokenStream to be filtered WordDelimiterFlags configurationFlags Flags configuring the filter CharArraySet protWords If not null is the set of tokens to protect from being delimited | Improve this Doc View Source Lucene47WordDelimiterFilter(TokenStream, Byte[], WordDelimiterFlags, CharArraySet) Creates a new Lucene47WordDelimiterFilter Declaration public Lucene47WordDelimiterFilter(TokenStream in, byte[] charTypeTable, WordDelimiterFlags configurationFlags, CharArraySet protWords) Parameters Type Name Description TokenStream in TokenStream to be filtered System.Byte [] charTypeTable table containing character types WordDelimiterFlags configurationFlags Flags configuring the filter CharArraySet protWords If not null is the set of tokens to protect from being delimited Fields | Improve this Doc View Source ALPHA Declaration public const int ALPHA = null Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = null Field Value Type Description System.Int32 | Improve this Doc View Source DIGIT Declaration public const int DIGIT = null Field Value Type Description System.Int32 | Improve this Doc View Source LOWER Declaration public const int LOWER = null Field Value Type Description System.Int32 | Improve this Doc View Source SUBWORD_DELIM Declaration public const int SUBWORD_DELIM = null Field Value Type Description System.Int32 | Improve this Doc View Source UPPER Declaration public const int UPPER = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PatternAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PatternAnalyzer.html",
    "title": "Class PatternAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternAnalyzer Efficient Lucene analyzer/tokenizer that preferably operates on a rather than a , that can flexibly separate text into terms via a regular expression (with behaviour similar to ), 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 . Once you are satisfied, give that regex to PatternAnalyzer . Also see Regular Expression Tutorial . This class can be considerably faster than the \"normal\" Lucene tokenizers. It can also serve as a building block in a compound Lucene TokenFilter chain. For example as in this stemming example: PatternAnalyzer pat = ... TokenStream tokenStream = new SnowballFilter( pat.GetTokenStream(\"content\", \"James is running round in the woods\"), \"English\")); Inheritance System.Object Analyzer PatternAnalyzer Inherited Members Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PatternAnalyzer : Analyzer Constructors | Improve this Doc View Source PatternAnalyzer(LuceneVersion, Regex, Boolean, CharArraySet) Constructs a new instance with the given parameters. Declaration public PatternAnalyzer(LuceneVersion matchVersion, Regex pattern, bool toLowerCase, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion currently does nothing 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 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 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 and is less efficient than . 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). TextReader reader the reader delivering the text Returns Type Description TokenStreamComponents a new token stream | 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). TextReader reader reader (e.g. charfilter) of the original text. can be null. System.String text the string to tokenize Returns Type Description TokenStreamComponents a new token stream | Improve this Doc View Source Equals(Object) Indicates whether some other object is \"equal to\" this one. Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other the reference object with which to compare. Returns Type Description System.Boolean true if equal, false otherwise | 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."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PatternKeywordMarkerFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PatternKeywordMarkerFilter.html",
    "title": "Class PatternKeywordMarkerFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternKeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Each token that matches the provided pattern is marked as a keyword by setting IsKeyword to true . Inheritance System.Object AttributeSource TokenStream TokenFilter KeywordMarkerFilter PatternKeywordMarkerFilter Implements IDisposable Inherited Members KeywordMarkerFilter.IncrementToken() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() 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 via the KeywordAttribute . Declaration public PatternKeywordMarkerFilter(TokenStream in, Regex pattern) Parameters Type Name Description TokenStream in TokenStream to filter 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 IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PerFieldAnalyzerWrapper.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PerFieldAnalyzerWrapper.html",
    "title": "Class PerFieldAnalyzerWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PerFieldAnalyzerWrapper This analyzer is used to facilitate scenarios where different fields Require different analysis techniques. Use the Map argument in PerFieldAnalyzerWrapper(Analyzer, IDictionary<String, Analyzer>) to add non-default analyzers for fields. Example usage: IDictionary<string, Analyzer> analyzerPerField = new Dictionary<string, Analyzer>(); analyzerPerField[\"firstname\"] = new KeywordAnalyzer(); analyzerPerField[\"lastname\"] = new KeywordAnalyzer(); PerFieldAnalyzerWrapper aWrapper = new PerFieldAnalyzerWrapper(new StandardAnalyzer(version), analyzerPerField); In this example, StandardAnalyzer will be used for all fields except \"firstname\" and \"lastname\", for which KeywordAnalyzer will be used. A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing and query parsing. Inheritance System.Object Analyzer AnalyzerWrapper PerFieldAnalyzerWrapper Inherited Members AnalyzerWrapper.WrapComponents(String, TokenStreamComponents) AnalyzerWrapper.WrapReader(String, TextReader) AnalyzerWrapper.CreateComponents(String, TextReader) AnalyzerWrapper.GetPositionIncrementGap(String) AnalyzerWrapper.GetOffsetGap(String) AnalyzerWrapper.InitReader(String, TextReader) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PerFieldAnalyzerWrapper : AnalyzerWrapper Constructors | Improve this Doc View Source PerFieldAnalyzerWrapper(Analyzer) Constructs with default analyzer. Declaration public PerFieldAnalyzerWrapper(Analyzer defaultAnalyzer) Parameters Type Name Description Analyzer defaultAnalyzer Any fields not specifically defined to use a different analyzer will use the one provided here. | Improve this Doc View Source PerFieldAnalyzerWrapper(Analyzer, IDictionary<String, Analyzer>) Constructs with default analyzer and a map of analyzers to use for specific fields. The type of supplied will determine the type of behavior. General use. null keys are not supported. Use when sorted keys are required. null keys are not supported. HashMap<TKey, TValue> Similar behavior as . null keys are supported. TreeDictionary<TKey, TValue> Use when sorted keys are required. null keys are supported. LinkedHashMap<TKey, TValue> Use when insertion order must be preserved ( preserves insertion order only until items are removed). null keys are supported. Or, use a 3rd party or custom if other behavior is desired. Declaration public PerFieldAnalyzerWrapper(Analyzer defaultAnalyzer, IDictionary<string, Analyzer> fieldAnalyzers) Parameters Type Name Description Analyzer defaultAnalyzer Any fields not specifically defined to use a different analyzer will use the one provided here. IDictionary < System.String , Analyzer > fieldAnalyzers A (String field name to the Analyzer) to be used for those fields. Methods | Improve this Doc View Source GetWrappedAnalyzer(String) Declaration protected override Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Analyzer | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PrefixAndSuffixAwareTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PrefixAndSuffixAwareTokenFilter.html",
    "title": "Class PrefixAndSuffixAwareTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixAndSuffixAwareTokenFilter Links two PrefixAwareTokenFilter . NOTE: This filter might not behave correctly if used with custom IAttribute s, i.e. IAttribute s other than the ones located in Lucene.Net.Analysis.TokenAttributes. Inheritance System.Object AttributeSource TokenStream PrefixAndSuffixAwareTokenFilter Implements IDisposable Inherited Members TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PrefixAndSuffixAwareTokenFilter : TokenStream, IDisposable Constructors | Improve this Doc View Source PrefixAndSuffixAwareTokenFilter(TokenStream, TokenStream, TokenStream) Declaration public PrefixAndSuffixAwareTokenFilter(TokenStream prefix, TokenStream input, TokenStream suffix) Parameters Type Name Description TokenStream prefix TokenStream input TokenStream suffix Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source UpdateInputToken(Token, Token) Declaration public virtual Token UpdateInputToken(Token inputToken, Token lastPrefixToken) Parameters Type Name Description Token inputToken Token lastPrefixToken Returns Type Description Token | Improve this Doc View Source UpdateSuffixToken(Token, Token) Declaration public virtual Token UpdateSuffixToken(Token suffixToken, Token lastInputToken) Parameters Type Name Description Token suffixToken Token lastInputToken Returns Type Description Token Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PrefixAwareTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.PrefixAwareTokenFilter.html",
    "title": "Class PrefixAwareTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixAwareTokenFilter Joins two token streams and leaves the last token of the first stream available to be used when updating the token values in the second stream based on that token. The default implementation adds last prefix token end offset to the suffix token start and end offsets. NOTE: This filter might not behave correctly if used with custom IAttribute s, i.e. IAttribute s other than the ones located in Lucene.Net.Analysis.TokenAttributes. Inheritance System.Object AttributeSource TokenStream PrefixAwareTokenFilter Implements IDisposable Inherited Members TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PrefixAwareTokenFilter : TokenStream, IDisposable Constructors | Improve this Doc View Source PrefixAwareTokenFilter(TokenStream, TokenStream) Declaration public PrefixAwareTokenFilter(TokenStream prefix, TokenStream suffix) Parameters Type Name Description TokenStream prefix TokenStream suffix Properties | Improve this Doc View Source Prefix Declaration public virtual TokenStream Prefix { get; set; } Property Value Type Description TokenStream | Improve this Doc View Source Suffix Declaration public virtual TokenStream Suffix { get; set; } Property Value Type Description TokenStream Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source UpdateSuffixToken(Token, Token) The default implementation adds last prefix token end offset to the suffix token start and end offsets. Declaration public virtual Token UpdateSuffixToken(Token suffixToken, Token lastPrefixToken) Parameters Type Name Description Token suffixToken a token from the suffix stream Token lastPrefixToken the last token from the prefix stream Returns Type Description Token consumer token Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilter.html",
    "title": "Class RemoveDuplicatesTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RemoveDuplicatesTokenFilter A TokenFilter which filters out Token s at the same position and Term text as the previous token in the stream. Inheritance System.Object AttributeSource TokenStream TokenFilter RemoveDuplicatesTokenFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RemoveDuplicatesTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source RemoveDuplicatesTokenFilter(TokenStream) Creates a new RemoveDuplicatesTokenFilter Declaration public RemoveDuplicatesTokenFilter(TokenStream in) Parameters Type Name Description TokenStream in TokenStream that will be filtered Methods | Improve this Doc View Source IncrementToken() Consumers (i.e., IndexWriter ) use this method to advance the stream to the next token. Implementing classes must implement this method and update the appropriate IAttribute s with the attributes of the next token. The producer must make no assumptions about the attributes after the method has been returned: the caller may arbitrarily change it. If the producer needs to preserve the state for subsequent calls, it can use CaptureState() to create a copy of the current attribute state. this method is called for every token of a document, so an efficient implementation is crucial for good performance. To avoid calls to AddAttribute<T>() and GetAttribute<T>() , references to all IAttribute s that this stream uses should be retrieved during instantiation. To ensure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean false for end of stream; true otherwise Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilterFactory.html",
    "title": "Class RemoveDuplicatesTokenFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilter.html",
    "title": "Class ScandinavianFoldingFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScandinavianFoldingFilter This filter folds Scandinavian characters åÅäæÄÆ->a and öÖøØ->o. It also discriminate against use of double vowels aa, ae, ao, oe and oo, leaving just the first one. It's is a semantically more destructive solution than ScandinavianNormalizationFilter but can in addition help with matching raksmorgas as räksmörgås. blåbærsyltetøj == blåbärsyltetöj == blaabaarsyltetoej == blabarsyltetoj räksmörgås == ræksmørgås == ræksmörgaos == raeksmoergaas == raksmorgas Background: Swedish åäö are in fact the same letters as Norwegian and Danish åæø and thus interchangeable when used between these languages. They are however folded differently when people type them on a keyboard lacking these characters. In that situation almost all Swedish people use a, a, o instead of å, ä, ö. Norwegians and Danes on the other hand usually type aa, ae and oe instead of å, æ and ø. Some do however use a, a, o, oo, ao and sometimes permutations of everything above. This filter solves that mismatch problem, but might also cause new. Inheritance System.Object AttributeSource TokenStream TokenFilter ScandinavianFoldingFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ScandinavianFoldingFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ScandinavianFoldingFilter(TokenStream) Declaration public ScandinavianFoldingFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable See Also ScandinavianNormalizationFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilterFactory.html",
    "title": "Class ScandinavianFoldingFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilter.html",
    "title": "Class ScandinavianNormalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScandinavianNormalizationFilter This filter normalize use of the interchangeable Scandinavian characters æÆäÄöÖøØ and folded variants (aa, ao, ae, oe and oo) by transforming them to åÅæÆøØ. It's a semantically less destructive solution than ScandinavianFoldingFilter , most useful when a person with a Norwegian or Danish keyboard queries a Swedish index and vice versa. This filter does not the common Swedish folds of å and ä to a nor ö to o. blåbærsyltetøj == blåbärsyltetöj == blaabaarsyltetoej but not blabarsyltetoj räksmörgås == ræksmørgås == ræksmörgaos == raeksmoergaas but not raksmorgas Inheritance System.Object AttributeSource TokenStream TokenFilter ScandinavianNormalizationFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ScandinavianNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ScandinavianNormalizationFilter(TokenStream) Declaration public ScandinavianNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable See Also ScandinavianFoldingFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilterFactory.html",
    "title": "Class ScandinavianNormalizationFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.SetKeywordMarkerFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.SetKeywordMarkerFilter.html",
    "title": "Class SetKeywordMarkerFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SetKeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Each token contained in the provided set is marked as a keyword by setting IsKeyword to true . Inheritance System.Object AttributeSource TokenStream TokenFilter KeywordMarkerFilter SetKeywordMarkerFilter Implements IDisposable Inherited Members KeywordMarkerFilter.IncrementToken() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SetKeywordMarkerFilter : KeywordMarkerFilter, IDisposable Constructors | Improve this Doc View Source SetKeywordMarkerFilter(TokenStream, CharArraySet) Create a new SetKeywordMarkerFilter , that marks the current token as a keyword if the tokens term buffer is contained in the given set via the KeywordAttribute . Declaration public SetKeywordMarkerFilter(TokenStream in, CharArraySet keywordSet) Parameters Type Name Description TokenStream in TokenStream to filter CharArraySet keywordSet the keywords set to lookup the current termbuffer Methods | Improve this Doc View Source IsKeyword() Declaration protected override bool IsKeyword() Returns Type Description System.Boolean Overrides KeywordMarkerFilter.IsKeyword() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.SingleTokenTokenStream.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.SingleTokenTokenStream.html",
    "title": "Class SingleTokenTokenStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleTokenTokenStream A TokenStream containing a single token. Inheritance System.Object AttributeSource TokenStream SingleTokenTokenStream Implements IDisposable Inherited Members TokenStream.End() TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SingleTokenTokenStream : TokenStream, IDisposable Constructors | Improve this Doc View Source SingleTokenTokenStream(Token) Declaration public SingleTokenTokenStream(Token token) Parameters Type Name Description Token token Methods | Improve this Doc View Source GetToken() Declaration public Token GetToken() Returns Type Description Token | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source SetToken(Token) Declaration public void SetToken(Token token) Parameters Type Name Description Token token Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.Builder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.Builder.html",
    "title": "Class StemmerOverrideFilter.Builder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StemmerOverrideFilter.Builder This builder builds an FST for the StemmerOverrideFilter Inheritance System.Object StemmerOverrideFilter.Builder Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Builder : object 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"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.html",
    "title": "Class StemmerOverrideFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StemmerOverrideFilter Provides the ability to override any KeywordAttribute aware stemmer with custom dictionary-based stemming. Inheritance System.Object AttributeSource TokenStream TokenFilter StemmerOverrideFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StemmerOverrideFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source StemmerOverrideFilter(TokenStream, StemmerOverrideFilter.StemmerOverrideMap) Create a new StemmerOverrideFilter , performing dictionary-based stemming with the provided dictionary ( stemmerOverrideMap ). Any dictionary-stemmed terms will be marked with KeywordAttribute so that they will not be stemmed with stemmers down the chain. Declaration public StemmerOverrideFilter(TokenStream input, StemmerOverrideFilter.StemmerOverrideMap stemmerOverrideMap) Parameters Type Name Description TokenStream input StemmerOverrideFilter.StemmerOverrideMap stemmerOverrideMap Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.StemmerOverrideMap.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.StemmerOverrideMap.html",
    "title": "Class StemmerOverrideFilter.StemmerOverrideMap | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StemmerOverrideMap : object Constructors | Improve this Doc View Source StemmerOverrideMap(FST<BytesRef>, Boolean) Creates a new StemmerOverrideFilter.StemmerOverrideMap Declaration public StemmerOverrideMap(FST<BytesRef> fst, bool ignoreCase) Parameters Type Name Description FST < BytesRef > fst the fst to lookup the overrides System.Boolean ignoreCase if the keys case should be ingored Methods | Improve this Doc View Source Get(Char[], Int32, FST.Arc<BytesRef>, FST.BytesReader) Returns the value mapped to the given key or null if the key is not in the FST dictionary. Declaration public BytesRef Get(char[] buffer, int bufferLen, FST.Arc<BytesRef> scratchArc, FST.BytesReader fstReader) Parameters Type Name Description System.Char [] buffer System.Int32 bufferLen FST.Arc < BytesRef > scratchArc FST.BytesReader fstReader Returns Type Description BytesRef | Improve this Doc View Source GetBytesReader() Returns a FST.BytesReader to pass to the Get(Char[], Int32, FST.Arc<BytesRef>, FST.BytesReader) method. Declaration public FST.BytesReader GetBytesReader() Returns Type Description FST.BytesReader"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilterFactory.html",
    "title": "Class StemmerOverrideFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Properties | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TrimFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TrimFilter.html",
    "title": "Class TrimFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrimFilter Trims leading and trailing whitespace from Tokens in the stream. As of Lucene 4.4, this filter does not support updateOffsets=true anymore as it can lead to broken token streams. Inheritance System.Object AttributeSource TokenStream TokenFilter TrimFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TrimFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TrimFilter(LuceneVersion, TokenStream) Create a new TrimFilter on top of in . Declaration public TrimFilter(LuceneVersion version, TokenStream in) Parameters Type Name Description LuceneVersion version TokenStream in | Improve this Doc View Source TrimFilter(LuceneVersion, TokenStream, Boolean) Create a new TrimFilter . Declaration public TrimFilter(LuceneVersion version, TokenStream in, bool updateOffsets) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the stream to consume System.Boolean updateOffsets whether to update offsets Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TrimFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TrimFilterFactory.html",
    "title": "Class TrimFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Fields | Improve this Doc View Source m_updateOffsets Declaration protected readonly bool m_updateOffsets Field Value Type Description System.Boolean Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also TrimFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilter.html",
    "title": "Class TruncateTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TruncateTokenFilter A token filter for truncating the terms into a specific length. Fixed prefix truncation, as a stemming method, produces good results on Turkish language. It is reported that F5, using first 5 characters, produced best results in Information Retrieval on Turkish Texts Inheritance System.Object AttributeSource TokenStream TokenFilter TruncateTokenFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TruncateTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TruncateTokenFilter(TokenStream, Int32) Declaration public TruncateTokenFilter(TokenStream input, int length) Parameters Type Name Description TokenStream input System.Int32 length Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilterFactory.html",
    "title": "Class TruncateTokenFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Fields | Improve this Doc View Source PREFIX_LENGTH_KEY Declaration public const string PREFIX_LENGTH_KEY = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilter.html",
    "title": "Class WordDelimiterFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WordDelimiterFilter Splits words into subwords and performs optional transformations on subword groups. Words are split into subwords with the following rules: split on intra-word delimiters (by default, all non alpha-numeric characters): \"Wi-Fi\" → \"Wi\", \"Fi\" split on case transitions: \"PowerShot\" → \"Power\", \"Shot\" split on letter-number transitions: \"SD500\" → \"SD\", \"500\" leading and trailing intra-word delimiters on each subword are ignored: \"//hello---there, 'dude'\" → \"hello\", \"there\", \"dude\" trailing \"'s\" are removed for each subword: \"O'Neil's\" → \"O\", \"Neil\" Note: this step isn't performed in a separate filter because of possible subword combinations. The combinations parameter affects how subwords are combined: combinations=\"0\" causes no subword combinations: \"PowerShot\" → 0:\"Power\", 1:\"Shot\" (0 and 1 are the token positions) combinations=\"1\" means that in addition to the subwords, maximum runs of non-numeric subwords are catenated and produced at the same position of the last subword in the run: \"PowerShot\" → 0:\"Power\", 1:\"Shot\" 1:\"PowerShot\" \"A's+B's&C's\" -gt; 0:\"A\", 1:\"B\", 2:\"C\", 2:\"ABC\" \"Super-Duper-XL500-42-AutoCoder!\" → 0:\"Super\", 1:\"Duper\", 2:\"XL\", 2:\"SuperDuperXL\", 3:\"500\" 4:\"42\", 5:\"Auto\", 6:\"Coder\", 6:\"AutoCoder\" One use for WordDelimiterFilter is to help match words with different subword delimiters. For example, if the source text contained \"wi-fi\" one may want \"wifi\" \"WiFi\" \"wi-fi\" \"wi+fi\" queries to all match. One way of doing so is to specify combinations=\"1\" in the analyzer used for indexing, and combinations=\"0\" (the default) in the analyzer used for querying. Given that the current StandardTokenizer immediately removes many intra-word delimiters, it is recommended that this filter be used after a tokenizer that does not do this (such as WhitespaceTokenizer ). Inheritance System.Object AttributeSource TokenStream TokenFilter WordDelimiterFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WordDelimiterFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source WordDelimiterFilter(LuceneVersion, TokenStream, WordDelimiterFlags, CharArraySet) Creates a new WordDelimiterFilter using DEFAULT_WORD_DELIM_TABLE as its charTypeTable Declaration public WordDelimiterFilter(LuceneVersion matchVersion, TokenStream in, WordDelimiterFlags configurationFlags, CharArraySet protWords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream in TokenStream to be filtered WordDelimiterFlags configurationFlags Flags configuring the filter CharArraySet protWords If not null is the set of tokens to protect from being delimited | Improve this Doc View Source WordDelimiterFilter(LuceneVersion, TokenStream, Byte[], WordDelimiterFlags, CharArraySet) Creates a new WordDelimiterFilter Declaration public WordDelimiterFilter(LuceneVersion matchVersion, TokenStream in, byte[] charTypeTable, WordDelimiterFlags configurationFlags, CharArraySet protWords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream in TokenStream to be filtered System.Byte [] charTypeTable table containing character types WordDelimiterFlags configurationFlags Flags configuring the filter CharArraySet protWords If not null is the set of tokens to protect from being delimited Fields | Improve this Doc View Source ALPHA Declaration public const int ALPHA = null Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = null Field Value Type Description System.Int32 | Improve this Doc View Source DIGIT Declaration public const int DIGIT = null Field Value Type Description System.Int32 | Improve this Doc View Source LOWER Declaration public const int LOWER = null Field Value Type Description System.Int32 | Improve this Doc View Source SUBWORD_DELIM Declaration public const int SUBWORD_DELIM = null Field Value Type Description System.Int32 | Improve this Doc View Source UPPER Declaration public const int UPPER = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilterFactory.html",
    "title": "Class WordDelimiterFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Fields | Improve this Doc View Source PROTECTED_TOKENS Declaration public const string PROTECTED_TOKENS = null Field Value Type Description System.String | Improve this Doc View Source TYPES Declaration public const string TYPES = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFlags.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFlags.html",
    "title": "Enum WordDelimiterFlags | Apache Lucene.NET 4.8.0 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 public enum WordDelimiterFlags : int Fields Name Description CATENATE_ALL Causes all subword parts to be catenated: \"wi-fi-4000\" => \"wifi4000\" CATENATE_NUMBERS Causes maximum runs of word parts to be catenated: \"wi-fi\" => \"wifi\" CATENATE_WORDS Causes maximum runs of word parts to be catenated: \"wi-fi\" => \"wifi\" GENERATE_NUMBER_PARTS Causes number subwords to be generated: \"500-42\" => \"500\" \"42\" GENERATE_WORD_PARTS Causes parts of words to be generated: \"PowerShot\" => \"Power\" \"Shot\" PRESERVE_ORIGINAL Causes original words are preserved and added to the subword list (Defaults to false) \"500-42\" => \"500\" \"42\" \"500-42\" SPLIT_ON_CASE_CHANGE If not set, causes case changes to be ignored (subwords will only be generated given SUBWORD_DELIM tokens) SPLIT_ON_NUMERICS If not set, causes numeric changes to be ignored (subwords will only be generated given SUBWORD_DELIM tokens). STEM_ENGLISH_POSSESSIVE Causes trailing \"'s\" to be removed for each subword \"O'Neil's\" => \"O\", \"Neil\""
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterIterator.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Miscellaneous.WordDelimiterIterator.html",
    "title": "Class WordDelimiterIterator | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WordDelimiterIterator : object 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 = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetType(Int32) Computes the type of the given character Declaration public static byte GetType(int ch) Parameters Type Name Description System.Int32 ch Character whose type is to be determined Returns Type Description System.Byte Type of the character"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramFilterFactory.html",
    "title": "Class EdgeNGramFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.html",
    "title": "Class EdgeNGramTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EdgeNGramTokenFilter Tokenizes the given token into n-grams of given size(s). This TokenFilter create n-grams from the beginning edge or ending edge of a input token. As of Lucene 4.4, this filter does not support BACK (you can use ReverseStringFilter up-front and afterward to get the same behavior), handles supplementary characters correctly and does not update offsets anymore. Inheritance System.Object AttributeSource TokenStream TokenFilter EdgeNGramTokenFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.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 public EdgeNGramTokenFilter(LuceneVersion version, TokenStream input, EdgeNGramTokenFilter.Side side, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion TokenStream input TokenStream holding the input to be tokenized EdgeNGramTokenFilter.Side side the EdgeNGramTokenFilter.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source EdgeNGramTokenFilter(LuceneVersion, TokenStream, Int32, Int32) Creates EdgeNGramTokenFilter that can generate n-grams in the sizes of the given range Declaration public EdgeNGramTokenFilter(LuceneVersion version, TokenStream input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion TokenStream input TokenStream holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source EdgeNGramTokenFilter(LuceneVersion, TokenStream, String, Int32, Int32) Creates EdgeNGramTokenFilter that can generate n-grams in the sizes of the given range Declaration public EdgeNGramTokenFilter(LuceneVersion version, TokenStream input, string sideLabel, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion TokenStream input TokenStream holding the input to be tokenized System.String sideLabel the name of the EdgeNGramTokenFilter.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate Fields | Improve this Doc View Source DEFAULT_MAX_GRAM_SIZE Declaration public const int DEFAULT_MAX_GRAM_SIZE = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_GRAM_SIZE Declaration public const int DEFAULT_MIN_GRAM_SIZE = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_SIDE Declaration public const EdgeNGramTokenFilter.Side DEFAULT_SIDE = EdgeNGramTokenFilter.Side.FRONT Field Value Type Description EdgeNGramTokenFilter.Side Methods | Improve this Doc View Source GetSide(String) Get the appropriate EdgeNGramTokenFilter.Side from a string Declaration public static EdgeNGramTokenFilter.Side GetSide(string sideName) Parameters Type Name Description System.String sideName Returns Type Description EdgeNGramTokenFilter.Side | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.Side.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.Side.html",
    "title": "Enum EdgeNGramTokenFilter.Side | Apache Lucene.NET 4.8.0 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 : int Fields Name Description BACK Get the n-gram from the end of the input FRONT Get the n-gram from the front of the input"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenizer.html",
    "title": "Class EdgeNGramTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EdgeNGramTokenizer Tokenizes the input from an edge into n-grams of given size(s). This Tokenizer create n-grams from the beginning edge or ending edge of a input token. As of Lucene 4.4, this tokenizer can handle maxGram larger than 1024 chars, but beware that this will result in increased memory usage doesn't trim the input, sets position increments equal to 1 instead of 1 for the first token and 0 for all other ones doesn't support backward n-grams anymore. supports IsTokenChar(Int32) pre-tokenization, correctly handles supplementary characters. Although highly discouraged, it is still possible to use the old behavior through Lucene43EdgeNGramTokenizer . Inheritance System.Object AttributeSource TokenStream Tokenizer NGramTokenizer EdgeNGramTokenizer Implements IDisposable Inherited Members NGramTokenizer.DEFAULT_MIN_NGRAM_SIZE NGramTokenizer.DEFAULT_MAX_NGRAM_SIZE NGramTokenizer.IncrementToken() NGramTokenizer.IsTokenChar(Int32) NGramTokenizer.End() NGramTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EdgeNGramTokenizer : NGramTokenizer, IDisposable Constructors | Improve this Doc View Source EdgeNGramTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader, Int32, Int32) Creates EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration public EdgeNGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use TextReader input holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source EdgeNGramTokenizer(LuceneVersion, TextReader, Int32, Int32) Creates EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration public EdgeNGramTokenizer(LuceneVersion version, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion TextReader input 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 = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_GRAM_SIZE Declaration public const int DEFAULT_MIN_GRAM_SIZE = null Field Value Type Description System.Int32 Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.EdgeNGramTokenizerFactory.html",
    "title": "Class EdgeNGramTokenizerFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.html",
    "title": "Namespace Lucene.Net.Analysis.NGram | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.NGram <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Character n-gram tokenizers and filters. Classes EdgeNGramFilterFactory Creates new instances of EdgeNGramTokenFilter . <fieldType name=\"text_edgngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.EdgeNGramFilterFactory\" minGramSize=\"1\" maxGramSize=\"1\"/> </analyzer> </fieldType> EdgeNGramTokenFilter Tokenizes the given token into n-grams of given size(s). This TokenFilter create n-grams from the beginning edge or ending edge of a input token. As of Lucene 4.4, this filter does not support BACK (you can use ReverseStringFilter up-front and afterward to get the same behavior), handles supplementary characters correctly and does not update offsets anymore. EdgeNGramTokenizer Tokenizes the input from an edge into n-grams of given size(s). This Tokenizer create n-grams from the beginning edge or ending edge of a input token. As of Lucene 4.4, this tokenizer can handle maxGram larger than 1024 chars, but beware that this will result in increased memory usage doesn't trim the input, sets position increments equal to 1 instead of 1 for the first token and 0 for all other ones doesn't support backward n-grams anymore. supports IsTokenChar(Int32) pre-tokenization, correctly handles supplementary characters. Although highly discouraged, it is still possible to use the old behavior through Lucene43EdgeNGramTokenizer . EdgeNGramTokenizerFactory Creates new instances of EdgeNGramTokenizer . <fieldType name=\"text_edgngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.EdgeNGramTokenizerFactory\" minGramSize=\"1\" maxGramSize=\"1\"/> </analyzer> </fieldType> Lucene43EdgeNGramTokenizer Old version of EdgeNGramTokenizer which doesn't handle correctly supplementary characters. Lucene43NGramTokenizer Old broken version of NGramTokenizer . NGramFilterFactory Factory for NGramTokenFilter . <fieldType name=\"text_ngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.NGramFilterFactory\" minGramSize=\"1\" maxGramSize=\"2\"/> </analyzer> </fieldType> NGramTokenFilter Tokenizes the input into n-grams of the given size(s). You must specify the required LuceneVersion compatibility when creating a NGramTokenFilter . As of Lucene 4.4, this token filters: handles supplementary characters correctly, emits all n-grams for the same token at the same position, does not modify offsets, sorts n-grams by their offset in the original token first, then increasing length (meaning that \"abc\" will give \"a\", \"ab\", \"abc\", \"b\", \"bc\", \"c\"). You can make this filter use the old behavior by providing a version < LUCENE_44 in the constructor but this is not recommended as it will lead to broken TokenStream s that will cause highlighting bugs. If you were using this TokenFilter to perform partial highlighting, this won't work anymore since this filter doesn't update offsets. You should modify your analysis chain to use NGramTokenizer , and potentially override IsTokenChar(Int32) to perform pre-tokenization. NGramTokenizer Tokenizes the input into n-grams of the given size(s). On the contrary to NGramTokenFilter , this class sets offsets so that characters between startOffset and endOffset in the original stream are the same as the term chars. For example, \"abcde\" would be tokenized as (minGram=2, maxGram=3): TermPosition incrementPosition lengthOffsets ab11[0,2[ abc11[0,3[ bc11[1,3[ bcd11[1,4[ cd11[2,4[ cde11[2,5[ de11[3,5[ This tokenizer changed a lot in Lucene 4.4 in order to: tokenize in a streaming fashion to support streams which are larger than 1024 chars (limit of the previous version), count grams based on unicode code points instead of java chars (and never split in the middle of surrogate pairs), give the ability to pre-tokenize the stream ( IsTokenChar(Int32) ) before computing n-grams. Additionally, this class doesn't trim trailing whitespaces and emits tokens in a different order, tokens are now emitted by increasing start offsets while they used to be emitted by increasing lengths (which prevented from supporting large input streams). Although highly discouraged, it is still possible to use the old behavior through Lucene43NGramTokenizer . NGramTokenizerFactory Factory for NGramTokenizer . <fieldType name=\"text_ngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.NGramTokenizerFactory\" minGramSize=\"1\" maxGramSize=\"2\"/> </analyzer> </fieldType> Enums EdgeNGramTokenFilter.Side Specifies which side of the input the n-gram should be generated from Lucene43EdgeNGramTokenizer.Side Specifies which side of the input the n-gram should be generated from"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.html",
    "title": "Class Lucene43EdgeNGramTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene43EdgeNGramTokenizer Old version of EdgeNGramTokenizer which doesn't handle correctly supplementary characters. Inheritance System.Object AttributeSource TokenStream Tokenizer Lucene43EdgeNGramTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax 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 public Lucene43EdgeNGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, Lucene43EdgeNGramTokenizer.Side side, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use TextReader input holding the input to be tokenized Lucene43EdgeNGramTokenizer.Side side the Lucene43EdgeNGramTokenizer.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source Lucene43EdgeNGramTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader, Int32, Int32) Creates Lucene43EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration public Lucene43EdgeNGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use TextReader input 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 public Lucene43EdgeNGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, string sideLabel, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use TextReader input 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 public Lucene43EdgeNGramTokenizer(LuceneVersion version, TextReader input, Lucene43EdgeNGramTokenizer.Side side, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion TextReader input holding the input to be tokenized Lucene43EdgeNGramTokenizer.Side side the Lucene43EdgeNGramTokenizer.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source Lucene43EdgeNGramTokenizer(LuceneVersion, TextReader, Int32, Int32) Creates Lucene43EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration public Lucene43EdgeNGramTokenizer(LuceneVersion version, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion TextReader input 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 public Lucene43EdgeNGramTokenizer(LuceneVersion version, TextReader input, string sideLabel, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion TextReader input 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 = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_GRAM_SIZE Declaration public const int DEFAULT_MIN_GRAM_SIZE = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_SIDE Declaration public const Lucene43EdgeNGramTokenizer.Side DEFAULT_SIDE = Lucene43EdgeNGramTokenizer.Side.FRONT Field Value Type Description Lucene43EdgeNGramTokenizer.Side Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source GetSide(String) Declaration public static Lucene43EdgeNGramTokenizer.Side GetSide(string sideName) Parameters Type Name Description System.String sideName Returns Type Description Lucene43EdgeNGramTokenizer.Side | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS. Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.Side.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.Side.html",
    "title": "Enum Lucene43EdgeNGramTokenizer.Side | Apache Lucene.NET 4.8.0 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 : int Fields Name Description BACK Get the n-gram from the end of the input FRONT Get the n-gram from the front of the input"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.Lucene43NGramTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.Lucene43NGramTokenizer.html",
    "title": "Class Lucene43NGramTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene43NGramTokenizer Old broken version of NGramTokenizer . Inheritance System.Object AttributeSource TokenStream Tokenizer Lucene43NGramTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class Lucene43NGramTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source Lucene43NGramTokenizer(AttributeSource.AttributeFactory, TextReader, Int32, Int32) Creates Lucene43NGramTokenizer with given min and max n-grams. Declaration public Lucene43NGramTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int minGram, int maxGram) Parameters Type Name Description AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use TextReader input 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 TextReader input 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 TextReader input 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 = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_NGRAM_SIZE Declaration public const int DEFAULT_MIN_NGRAM_SIZE = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS. Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramFilterFactory.html",
    "title": "Class NGramFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramTokenFilter.html",
    "title": "Class NGramTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NGramTokenFilter Tokenizes the input into n-grams of the given size(s). You must specify the required LuceneVersion compatibility when creating a NGramTokenFilter . As of Lucene 4.4, this token filters: handles supplementary characters correctly, emits all n-grams for the same token at the same position, does not modify offsets, sorts n-grams by their offset in the original token first, then increasing length (meaning that \"abc\" will give \"a\", \"ab\", \"abc\", \"b\", \"bc\", \"c\"). You can make this filter use the old behavior by providing a version < LUCENE_44 in the constructor but this is not recommended as it will lead to broken TokenStream s that will cause highlighting bugs. If you were using this TokenFilter to perform partial highlighting, this won't work anymore since this filter doesn't update offsets. You should modify your analysis chain to use NGramTokenizer , and potentially override IsTokenChar(Int32) to perform pre-tokenization. Inheritance System.Object AttributeSource TokenStream TokenFilter NGramTokenFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class NGramTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source NGramTokenFilter(LuceneVersion, TokenStream) Creates NGramTokenFilter with default min and max n-grams. Declaration public NGramTokenFilter(LuceneVersion version, TokenStream input) Parameters Type Name Description LuceneVersion version Lucene version to enable correct position increments. See NGramTokenFilter for details. TokenStream input TokenStream holding the input to be tokenized | Improve this Doc View Source NGramTokenFilter(LuceneVersion, TokenStream, Int32, Int32) Creates NGramTokenFilter with given min and max n-grams. Declaration public NGramTokenFilter(LuceneVersion version, TokenStream input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version Lucene version to enable correct position increments. See NGramTokenFilter for details. TokenStream input TokenStream holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate Fields | Improve this Doc View Source DEFAULT_MAX_NGRAM_SIZE Declaration public const int DEFAULT_MAX_NGRAM_SIZE = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_NGRAM_SIZE Declaration public const int DEFAULT_MIN_NGRAM_SIZE = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS. Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramTokenizer.html",
    "title": "Class NGramTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NGramTokenizer Tokenizes the input into n-grams of the given size(s). On the contrary to NGramTokenFilter , this class sets offsets so that characters between startOffset and endOffset in the original stream are the same as the term chars. For example, \"abcde\" would be tokenized as (minGram=2, maxGram=3): TermPosition incrementPosition lengthOffsets ab11[0,2[ abc11[0,3[ bc11[1,3[ bcd11[1,4[ cd11[2,4[ cde11[2,5[ de11[3,5[ This tokenizer changed a lot in Lucene 4.4 in order to: tokenize in a streaming fashion to support streams which are larger than 1024 chars (limit of the previous version), count grams based on unicode code points instead of java chars (and never split in the middle of surrogate pairs), give the ability to pre-tokenize the stream ( IsTokenChar(Int32) ) before computing n-grams. Additionally, this class doesn't trim trailing whitespaces and emits tokens in a different order, tokens are now emitted by increasing start offsets while they used to be emitted by increasing lengths (which prevented from supporting large input streams). Although highly discouraged, it is still possible to use the old behavior through Lucene43NGramTokenizer . Inheritance System.Object AttributeSource TokenStream Tokenizer NGramTokenizer EdgeNGramTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NGramTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source NGramTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader, Int32, Int32) Creates NGramTokenizer with given min and max n-grams. Declaration public NGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the lucene compatibility version AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use TextReader input holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source NGramTokenizer(LuceneVersion, TextReader) Creates NGramTokenizer with default min and max n-grams. Declaration public NGramTokenizer(LuceneVersion version, TextReader input) Parameters Type Name Description LuceneVersion version the lucene compatibility version TextReader input holding the input to be tokenized | Improve this Doc View Source NGramTokenizer(LuceneVersion, TextReader, Int32, Int32) Creates NGramTokenizer with given min and max n-grams. Declaration public NGramTokenizer(LuceneVersion version, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the lucene compatibility version TextReader input 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 = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_NGRAM_SIZE Declaration public const int DEFAULT_MIN_NGRAM_SIZE = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IsTokenChar(Int32) Only collect characters which satisfy this condition. Declaration protected virtual bool IsTokenChar(int chr) Parameters Type Name Description System.Int32 chr Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override sealed void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.NGram.NGramTokenizerFactory.html",
    "title": "Class NGramTokenizerFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Creates the TokenStream of n-grams from the given and AttributeSource.AttributeFactory . Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.DutchAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.DutchAnalyzer.html",
    "title": "Class DutchAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DutchAnalyzer Analyzer for Dutch language. Supports an external list of stopwords (words that will not be indexed at all), an external list of exclusions (word that will not be stemmed, but indexed) and an external list of word-stem pairs that overrule the algorithm (dictionary stemming). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating DutchAnalyzer : As of 3.6, DutchAnalyzer(LuceneVersion, CharArraySet) and DutchAnalyzer(LuceneVersion, CharArraySet, CharArraySet) also populate the default entries for the stem override dictionary As of 3.1, Snowball stemming is done with SnowballFilter, LowerCaseFilter is used prior to StopFilter, and Snowball stopwords are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer DutchAnalyzer Inherited Members Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Nl Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class DutchAnalyzer : Analyzer Constructors | Improve this Doc View Source DutchAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( DefaultStopSet ) and a few default entries for the stem exclusion table. Declaration public DutchAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source DutchAnalyzer(LuceneVersion, CharArraySet) Declaration public DutchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords | Improve this Doc View Source DutchAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Declaration public DutchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionTable) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords CharArraySet stemExclusionTable | Improve this Doc View Source DutchAnalyzer(LuceneVersion, CharArraySet, CharArraySet, CharArrayMap<String>) Declaration public DutchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionTable, CharArrayMap<string> stemOverrideDict) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords CharArraySet stemExclusionTable CharArrayMap < System.String > stemOverrideDict Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Dutch stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Returns a (possibly reused) TokenStream which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader aReader) Parameters Type Name Description System.String fieldName TextReader aReader Returns Type Description TokenStreamComponents A TokenStream built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, StemmerOverrideFilter , and SnowballFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.DutchStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.DutchStemFilter.html",
    "title": "Class DutchStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DutchStemFilter A TokenFilter that stems Dutch words. It supports a table of words that should not be stemmed at all. The stemmer used can be changed at runtime after the filter object is created (as long as it is a DutchStemmer ). To prevent terms from being stemmed use an instance of KeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter DutchStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Nl Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class DutchStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source DutchStemFilter(TokenStream) Declaration public DutchStemFilter(TokenStream in) Parameters Type Name Description TokenStream in Input TokenStream | Improve this Doc View Source DutchStemFilter(TokenStream, IDictionary<String, String>) Declaration public DutchStemFilter(TokenStream in, IDictionary<string, string> stemdictionary) Parameters Type Name Description TokenStream in Input TokenStream IDictionary < System.String , System.String > stemdictionary Dictionary of word stem pairs, that overrule the algorithm Properties | Improve this Doc View Source StemDictionary Set dictionary for stemming, this dictionary overrules the algorithm, so you can correct for a particular unwanted word-stem pair. Declaration public CharArrayMap<string> StemDictionary { get; set; } Property Value Type Description CharArrayMap < System.String > | Improve this Doc View Source Stemmer Set a alternative/custom DutchStemmer for this filter. Declaration public DutchStemmer Stemmer { get; set; } Property Value Type Description DutchStemmer Methods | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable See Also KeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.DutchStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.DutchStemmer.html",
    "title": "Class DutchStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Nl Assembly : Lucene.Net.Analysis.Common.dll Syntax public class DutchStemmer : object Methods | Improve this Doc View Source Stem(String) Stems the given term to an unique discriminator . Declaration public virtual string Stem(string term) Parameters Type Name Description System.String term The term that should be stemmed. Returns Type Description System.String Discriminator for term"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Nl.html",
    "title": "Namespace Lucene.Net.Analysis.Nl | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Nl <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Dutch. Classes DutchAnalyzer Analyzer for Dutch language. Supports an external list of stopwords (words that will not be indexed at all), an external list of exclusions (word that will not be stemmed, but indexed) and an external list of word-stem pairs that overrule the algorithm (dictionary stemming). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating DutchAnalyzer : As of 3.6, DutchAnalyzer(LuceneVersion, CharArraySet) and DutchAnalyzer(LuceneVersion, CharArraySet, CharArraySet) also populate the default entries for the stem override dictionary As of 3.1, Snowball stemming is done with SnowballFilter, LowerCaseFilter is used prior to StopFilter, and Snowball stopwords are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . DutchStemFilter A TokenFilter that stems Dutch words. It supports a table of words that should not be stemmed at all. The stemmer used can be changed at runtime after the filter object is created (as long as it is a DutchStemmer ). To prevent terms from being stemmed use an instance of KeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . DutchStemmer A stemmer for Dutch words. The algorithm is an implementation of the dutch stemming algorithm in Martin Porter's snowball project."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.html",
    "title": "Namespace Lucene.Net.Analysis.No | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.No <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Norwegian. Classes NorwegianAnalyzer Analyzer for Norwegian. NorwegianLightStemFilter A TokenFilter that applies NorwegianLightStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NorwegianLightStemFilterFactory Factory for NorwegianLightStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.NorwegianLightStemFilterFactory\" variant=\"nb\"/> </analyzer> </fieldType> NorwegianLightStemmer Light Stemmer for Norwegian. Parts of this stemmer is adapted from SwedishLightStemFilter , except that while the Swedish one has a pre-defined rule set and a corresponding corpus to validate against whereas the Norwegian one is hand crafted. NorwegianMinimalStemFilter A TokenFilter that applies NorwegianMinimalStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NorwegianMinimalStemFilterFactory Factory for NorwegianMinimalStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.NorwegianMinimalStemFilterFactory\" variant=\"nb\"/> </analyzer> </fieldType> NorwegianMinimalStemmer Minimal Stemmer for Norwegian Bokmål (no-nb) and Nynorsk (no-nn) Stems known plural forms for Norwegian nouns only, together with genitiv -s Enums NorwegianStandard"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianAnalyzer.html",
    "title": "Class NorwegianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NorwegianAnalyzer Analyzer for Norwegian. Inheritance System.Object Analyzer StopwordAnalyzerBase NorwegianAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class NorwegianAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source NorwegianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public NorwegianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source NorwegianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public NorwegianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source NorwegianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public NorwegianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Norwegian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianLightStemFilter.html",
    "title": "Class NorwegianLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NorwegianLightStemFilter A TokenFilter that applies NorwegianLightStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter NorwegianLightStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class NorwegianLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source NorwegianLightStemFilter(TokenStream) Calls NorwegianLightStemFilter(TokenStream, NorwegianStandard) NorwegianLightStemFilter(input, BOKMAAL) Declaration public NorwegianLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input the source TokenStream to filter | Improve this Doc View Source NorwegianLightStemFilter(TokenStream, NorwegianStandard) Creates a new NorwegianLightStemFilter Declaration public NorwegianLightStemFilter(TokenStream input, NorwegianStandard flags) Parameters Type Name Description TokenStream input the source TokenStream to filter NorwegianStandard flags set to BOKMAAL , NYNORSK , or both. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianLightStemFilterFactory.html",
    "title": "Class NorwegianLightStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianLightStemmer.html",
    "title": "Class NorwegianLightStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NorwegianLightStemmer : object Constructors | Improve this Doc View Source NorwegianLightStemmer(NorwegianStandard) Creates a new NorwegianLightStemmer Declaration public NorwegianLightStemmer(NorwegianStandard flags) Parameters Type Name Description NorwegianStandard flags set to BOKMAAL , NYNORSK , or both. Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianMinimalStemFilter.html",
    "title": "Class NorwegianMinimalStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NorwegianMinimalStemFilter A TokenFilter that applies NorwegianMinimalStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter NorwegianMinimalStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class NorwegianMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source NorwegianMinimalStemFilter(TokenStream) Calls NorwegianLightStemFilter(TokenStream, NorwegianStandard) - NorwegianMinimalStemFilter(input, BOKMAAL) Declaration public NorwegianMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source NorwegianMinimalStemFilter(TokenStream, NorwegianStandard) Creates a new NorwegianLightStemFilter Declaration public NorwegianMinimalStemFilter(TokenStream input, NorwegianStandard flags) Parameters Type Name Description TokenStream input the source TokenStream to filter NorwegianStandard flags set to BOKMAAL , NYNORSK , or both. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianMinimalStemFilterFactory.html",
    "title": "Class NorwegianMinimalStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianMinimalStemmer.html",
    "title": "Class NorwegianMinimalStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NorwegianMinimalStemmer : object Constructors | Improve this Doc View Source NorwegianMinimalStemmer(NorwegianStandard) Creates a new NorwegianMinimalStemmer Declaration public NorwegianMinimalStemmer(NorwegianStandard flags) Parameters Type Name Description NorwegianStandard flags set to BOKMAAL , NYNORSK , or both. Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianStandard.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.No.NorwegianStandard.html",
    "title": "Enum NorwegianStandard | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum NorwegianStandard Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public enum NorwegianStandard : int Fields Name Description BOKMAAL Constant to remove Bokmål-specific endings NYNORSK Constant to remove Nynorsk-specific endings"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.html",
    "title": "Namespace Lucene.Net.Analysis.Path | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Path <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analysis components for path-like strings such as filenames. Classes PathHierarchyTokenizer Tokenizer for path-like hierarchies. Take something like: /something/something/else and make: /something /something/something /something/something/else PathHierarchyTokenizerFactory Factory for PathHierarchyTokenizer . This factory is typically configured for use only in the index Analyzer (or only in the query Analyzer, but never both). For example, in the configuration below a query for Books/NonFic will match documents indexed with values like Books/NonFic , Books/NonFic/Law , Books/NonFic/Science/Physics , etc. But it will not match documents indexed with values like Books , or Books/Fic ... <fieldType name=\"descendent_path\" class=\"solr.TextField\"> <analyzer type=\"index\"> <tokenizer class=\"solr.PathHierarchyTokenizerFactory\" delimiter=\"/\" /> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.KeywordTokenizerFactory\" /> </analyzer> </fieldType> In this example however we see the oposite configuration, so that a query for Books/NonFic/Science/Physics would match documents containing Books/NonFic , Books/NonFic/Science , or Books/NonFic/Science/Physics , but not Books/NonFic/Science/Physics/Theory or Books/NonFic/Law . <fieldType name=\"descendent_path\" class=\"solr.TextField\"> <analyzer type=\"index\"> <tokenizer class=\"solr.KeywordTokenizerFactory\" /> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.PathHierarchyTokenizerFactory\" delimiter=\"/\" /> </analyzer> </fieldType> ReversePathHierarchyTokenizer Tokenizer for domain-like hierarchies. Take something like: www.site.co.uk and make: www.site.co.uk site.co.uk co.uk uk"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.PathHierarchyTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.PathHierarchyTokenizer.html",
    "title": "Class PathHierarchyTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PathHierarchyTokenizer Tokenizer for path-like hierarchies. Take something like: /something/something/else and make: /something /something/something /something/something/else Inheritance System.Object AttributeSource TokenStream Tokenizer PathHierarchyTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Path Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PathHierarchyTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source PathHierarchyTokenizer(AttributeSource.AttributeFactory, TextReader, Char, Char, Int32) Declaration public PathHierarchyTokenizer(AttributeSource.AttributeFactory factory, TextReader input, char delimiter, char replacement, int skip) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input System.Char delimiter System.Char replacement System.Int32 skip | Improve this Doc View Source PathHierarchyTokenizer(AttributeSource.AttributeFactory, TextReader, Int32, Char, Char, Int32) Declaration public PathHierarchyTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int bufferSize, char delimiter, char replacement, int skip) Parameters Type Name Description AttributeSource.AttributeFactory factory 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 TextReader input | Improve this Doc View Source PathHierarchyTokenizer(TextReader, Char, Char) Declaration public PathHierarchyTokenizer(TextReader input, char delimiter, char replacement) Parameters Type Name Description 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 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 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 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 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 = null Field Value Type Description System.Char | Improve this Doc View Source DEFAULT_SKIP Declaration public const int DEFAULT_SKIP = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.PathHierarchyTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.PathHierarchyTokenizerFactory.html",
    "title": "Class PathHierarchyTokenizerFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.ReversePathHierarchyTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Path.ReversePathHierarchyTokenizer.html",
    "title": "Class ReversePathHierarchyTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReversePathHierarchyTokenizer Tokenizer for domain-like hierarchies. Take something like: www.site.co.uk and make: www.site.co.uk site.co.uk co.uk uk Inheritance System.Object AttributeSource TokenStream Tokenizer ReversePathHierarchyTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Path Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ReversePathHierarchyTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source ReversePathHierarchyTokenizer(AttributeSource.AttributeFactory, TextReader, Char, Char, Int32) Declaration public ReversePathHierarchyTokenizer(AttributeSource.AttributeFactory factory, TextReader input, char delimiter, char replacement, int skip) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input System.Char delimiter System.Char replacement System.Int32 skip | Improve this Doc View Source ReversePathHierarchyTokenizer(AttributeSource.AttributeFactory, TextReader, Int32, Char, Char, Int32) Declaration public ReversePathHierarchyTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int bufferSize, char delimiter, char replacement, int skip) Parameters Type Name Description AttributeSource.AttributeFactory factory 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 TextReader input | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Char, Char) Declaration public ReversePathHierarchyTokenizer(TextReader input, char delimiter, char replacement) Parameters Type Name Description 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 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 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 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 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 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 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 = null Field Value Type Description System.Char | Improve this Doc View Source DEFAULT_SKIP Declaration public const int DEFAULT_SKIP = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.html",
    "title": "Namespace Lucene.Net.Analysis.Pattern | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Pattern <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Set of components for pattern-based (regex) analysis. Classes PatternCaptureGroupFilterFactory Factory for PatternCaptureGroupTokenFilter . <fieldType name=\"text_ptncapturegroup\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> <filter class=\"solr.PatternCaptureGroupFilterFactory\" pattern=\"([^a-z])\" preserve_original=\"true\"/> </analyzer> </fieldType> PatternCaptureGroupTokenFilter CaptureGroup uses .NET regexes to emit multiple tokens - one for each capture group in one or more patterns. For example, a pattern like: \"(https?://([a-zA-Z-_0-9.]+))\" when matched against the string \" http://www.foo.com/index&quot ; would return the tokens \"https://www.foo.com\" and \"www.foo.com\". If none of the patterns match, or if preserveOriginal is true, the original token will be preserved. Each pattern is matched as often as it can be, so the pattern \"(...)\" , when matched against \"abcdefghi\" would produce [\"abc\",\"def\",\"ghi\"] A camelCaseFilter could be written as: \"([A-Z]{2,})\", \"(?<![A-Z])([A-Z][a-z]+)\", \"(?:^|\\\\b|(?<=[0-9_])|(?<=[A-Z]{2}))([a-z]+)\", \"([0-9]+)\" plus if Lucene.Net.Analysis.Pattern.PatternCaptureGroupTokenFilter.preserveOriginal is true, it would also return camelCaseFilter PatternReplaceCharFilter CharFilter that uses a regular expression for the target of replace string. The pattern match will be done in each \"block\" in char stream. ex1) source=\"aa bb aa bb\", pattern=\"(aa)\\s+(bb)\" replacement=\"$1#$2\" output=\"aa#bb aa#bb\" NOTE: If you produce a phrase that has different length to source string and the field is used for highlighting for a term of the phrase, you will face a trouble. ex2) source=\"aa123bb\", pattern=\"(aa)\\d+(bb)\" replacement=\"$1 $2\" output=\"aa bb\" and you want to search bb and highlight it, you will get highlight snippet=\"aa1<em>23bb</em>\" @since Solr 1.5 PatternReplaceCharFilterFactory Factory for PatternReplaceCharFilter . <fieldType name=\"text_ptnreplace\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PatternReplaceCharFilterFactory\" pattern=\"([^a-z])\" replacement=\"\"/> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> </analyzer> </fieldType> @since Solr 3.1 PatternReplaceFilter A TokenFilter which applies a to each token in the stream, replacing match occurances with the specified replacement string. Note: Depending on the input and the pattern used and the input TokenStream , this TokenFilter may produce Token s whose text is the empty string. PatternReplaceFilterFactory Factory for PatternReplaceFilter . <fieldType name=\"text_ptnreplace\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> <filter class=\"solr.PatternReplaceFilterFactory\" pattern=\"([^a-z])\" replacement=\"\" replace=\"all\"/> </analyzer> </fieldType> PatternTokenizer This tokenizer uses regex pattern matching to construct distinct tokens for the input stream. It takes two arguments: \"pattern\" and \"group\". \"pattern\" is the regular expression. \"group\" says which group to extract into tokens. group=-1 (the default) is equivalent to \"split\". In this case, the tokens will be equivalent to the output from (without empty tokens): Using group >= 0 selects the matching group as the token. For example, if you have: pattern = \\'([^\\']+)\\' group = 0 input = aaa 'bbb' 'ccc' the output will be two tokens: 'bbb' and 'ccc' (including the ' marks). With the same input but using group=1, the output would be: bbb and ccc (no ' marks) NOTE: This Tokenizer does not output tokens that are of zero length. PatternTokenizerFactory Factory for PatternTokenizer . This tokenizer uses regex pattern matching to construct distinct tokens for the input stream. It takes two arguments: \"pattern\" and \"group\". \"pattern\" is the regular expression. \"group\" says which group to extract into tokens. group=-1 (the default) is equivalent to \"split\". In this case, the tokens will be equivalent to the output from (without empty tokens): Using group >= 0 selects the matching group as the token. For example, if you have: pattern = \\'([^\\']+)\\' group = 0 input = aaa 'bbb' 'ccc' the output will be two tokens: 'bbb' and 'ccc' (including the ' marks). With the same input but using group=1, the output would be: bbb and ccc (no ' marks) NOTE: This Tokenizer does not output tokens that are of zero length. <fieldType name=\"text_ptn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.PatternTokenizerFactory\" pattern=\"\\'([^\\']+)\\'\" group=\"1\"/> </analyzer> </fieldType> @since solr1.2"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternCaptureGroupFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternCaptureGroupFilterFactory.html",
    "title": "Class PatternCaptureGroupFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also PatternCaptureGroupTokenFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternCaptureGroupTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternCaptureGroupTokenFilter.html",
    "title": "Class PatternCaptureGroupTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternCaptureGroupTokenFilter CaptureGroup uses .NET regexes to emit multiple tokens - one for each capture group in one or more patterns. For example, a pattern like: \"(https?://([a-zA-Z-_0-9.]+))\" when matched against the string \" http://www.foo.com/index&quot ; would return the tokens \"https://www.foo.com\" and \"www.foo.com\". If none of the patterns match, or if preserveOriginal is true, the original token will be preserved. Each pattern is matched as often as it can be, so the pattern \"(...)\" , when matched against \"abcdefghi\" would produce [\"abc\",\"def\",\"ghi\"] A camelCaseFilter could be written as: \"([A-Z]{2,})\", \"(?<![A-Z])([A-Z][a-z]+)\", \"(?:^|\\\\b|(?<=[0-9_])|(?<=[A-Z]{2}))([a-z]+)\", \"([0-9]+)\" plus if Lucene.Net.Analysis.Pattern.PatternCaptureGroupTokenFilter.preserveOriginal is true, it would also return camelCaseFilter Inheritance System.Object AttributeSource TokenStream TokenFilter PatternCaptureGroupTokenFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PatternCaptureGroupTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PatternCaptureGroupTokenFilter(TokenStream, Boolean, Regex[]) Creates a new PatternCaptureGroupTokenFilter Declaration public PatternCaptureGroupTokenFilter(TokenStream input, bool preserveOriginal, params Regex[] patterns) Parameters Type Name Description TokenStream input the input TokenStream System.Boolean preserveOriginal set to true to return the original token even if one of the patterns matches Regex [] patterns an array of Lucene.Net.Analysis.Pattern objects to match against each token Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceCharFilter.html",
    "title": "Class PatternReplaceCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternReplaceCharFilter CharFilter that uses a regular expression for the target of replace string. The pattern match will be done in each \"block\" in char stream. ex1) source=\"aa bb aa bb\", pattern=\"(aa)\\s+(bb)\" replacement=\"$1#$2\" output=\"aa#bb aa#bb\" NOTE: If you produce a phrase that has different length to source string and the field is used for highlighting for a term of the phrase, you will face a trouble. ex2) source=\"aa123bb\", pattern=\"(aa)\\d+(bb)\" replacement=\"$1 $2\" output=\"aa bb\" and you want to search bb and highlight it, you will get highlight snippet=\"aa1<em>23bb</em>\" @since Solr 1.5 Inheritance System.Object CharFilter BaseCharFilter PatternReplaceCharFilter Inherited Members BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PatternReplaceCharFilter : BaseCharFilter Constructors | Improve this Doc View Source PatternReplaceCharFilter(Regex, String, Int32, String, TextReader) Declaration public PatternReplaceCharFilter(Regex pattern, string replacement, int maxBlockChars, string blockDelimiter, TextReader in) Parameters Type Name Description Regex pattern System.String replacement System.Int32 maxBlockChars System.String blockDelimiter TextReader in | Improve this Doc View Source PatternReplaceCharFilter(Regex, String, TextReader) Declaration public PatternReplaceCharFilter(Regex pattern, string replacement, TextReader in) Parameters Type Name Description Regex pattern System.String replacement TextReader in Fields | Improve this Doc View Source DEFAULT_MAX_BLOCK_CHARS Declaration public const int DEFAULT_MAX_BLOCK_CHARS = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source Correct(Int32) Declaration protected override int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 Overrides BaseCharFilter.Correct(Int32) | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceCharFilterFactory.html",
    "title": "Class PatternReplaceCharFilterFactory | Apache Lucene.NET 4.8.0 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 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 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 TextReader input Returns Type Description TextReader Overrides CharFilterFactory.Create(TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceFilter.html",
    "title": "Class PatternReplaceFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternReplaceFilter A TokenFilter which applies a to each token in the stream, replacing match occurances with the specified replacement string. Note: Depending on the input and the pattern used and the input TokenStream , this TokenFilter may produce Token s whose text is the empty string. Inheritance System.Object AttributeSource TokenStream TokenFilter PatternReplaceFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PatternReplaceFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PatternReplaceFilter(TokenStream, Regex, String, Boolean) Constructs an instance to replace either the first, or all occurances Declaration public PatternReplaceFilter(TokenStream in, Regex pattern, string replacement, bool all) Parameters Type Name Description TokenStream in the TokenStream to process Regex pattern the pattern (a object) to apply to each Token System.String replacement the \"replacement string\" to substitute, if null a blank string will be used. Note that this is not the literal string that will be used, '$' and '&apos; have special meaning. System.Boolean all if true, all matches will be replaced otherwise just the first match. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternReplaceFilterFactory.html",
    "title": "Class PatternReplaceFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also PatternReplaceFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternTokenizer.html",
    "title": "Class PatternTokenizer | Apache Lucene.NET 4.8.0 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): Using group >= 0 selects the matching group as the token. For example, if you have: pattern = \\'([^\\']+)\\' group = 0 input = aaa 'bbb' 'ccc' the output will be two tokens: 'bbb' and 'ccc' (including the ' marks). With the same input but using group=1, the output would be: bbb and ccc (no ' marks) NOTE: This Tokenizer does not output tokens that are of zero length. Inheritance System.Object AttributeSource TokenStream Tokenizer PatternTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PatternTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source PatternTokenizer(AttributeSource.AttributeFactory, TextReader, Regex, Int32) creates a new PatternTokenizer returning tokens from group (-1 for split functionality) Declaration public PatternTokenizer(AttributeSource.AttributeFactory factory, TextReader input, Regex pattern, int group) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input 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 TextReader input Regex pattern System.Int32 group Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pattern.PatternTokenizerFactory.html",
    "title": "Class PatternTokenizerFactory | Apache Lucene.NET 4.8.0 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): 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 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 IDictionary < System.String , System.String > args Fields | Improve this Doc View Source GROUP Declaration public const string GROUP = null 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 Regex | Improve this Doc View Source PATTERN Declaration public const string PATTERN = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Split the input using configured pattern Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) See Also PatternTokenizer"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.AbstractEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.AbstractEncoder.html",
    "title": "Class AbstractEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractEncoder Base class for payload encoders. Inheritance System.Object AbstractEncoder IdentityEncoder IntegerEncoder SingleEncoder Implements IPayloadEncoder Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class AbstractEncoder : object, IPayloadEncoder Methods | Improve this Doc View Source Encode(Char[]) Declaration public virtual BytesRef Encode(char[] buffer) Parameters Type Name Description System.Char [] buffer Returns Type Description BytesRef | Improve this Doc View Source Encode(Char[], Int32, Int32) Declaration public abstract BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef Implements IPayloadEncoder"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilter.html",
    "title": "Class DelimitedPayloadTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DelimitedPayloadTokenFilter Characters before the delimiter are the \"token\", those after are the payload. For example, if the delimiter is '|', then for the string \"foo|bar\", foo is the token and \"bar\" is a payload. Note, you can also include a IPayloadEncoder to convert the payload in an appropriate way (from characters to bytes). Note make sure your Tokenizer doesn't split on the delimiter, or this won't work Inheritance System.Object AttributeSource TokenStream TokenFilter DelimitedPayloadTokenFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class DelimitedPayloadTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source DelimitedPayloadTokenFilter(TokenStream, Char, IPayloadEncoder) Declaration public DelimitedPayloadTokenFilter(TokenStream input, char delimiter, IPayloadEncoder encoder) Parameters Type Name Description TokenStream input System.Char delimiter IPayloadEncoder encoder Fields | Improve this Doc View Source DEFAULT_DELIMITER Declaration public const char DEFAULT_DELIMITER = null Field Value Type Description System.Char Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable See Also IPayloadEncoder"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilterFactory.html",
    "title": "Class DelimitedPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Fields | Improve this Doc View Source DELIMITER_ATTR Declaration public const string DELIMITER_ATTR = null Field Value Type Description System.String | Improve this Doc View Source ENCODER_ATTR Declaration public const string ENCODER_ATTR = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.html",
    "title": "Namespace Lucene.Net.Analysis.Payloads | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Payloads <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Provides various convenience classes for creating payloads on Tokens. Classes AbstractEncoder Base class for payload encoders. DelimitedPayloadTokenFilter Characters before the delimiter are the \"token\", those after are the payload. For example, if the delimiter is '|', then for the string \"foo|bar\", foo is the token and \"bar\" is a payload. Note, you can also include a IPayloadEncoder to convert the payload in an appropriate way (from characters to bytes). Note make sure your Tokenizer doesn't split on the delimiter, or this won't work DelimitedPayloadTokenFilterFactory Factory for DelimitedPayloadTokenFilter . <fieldType name=\"text_dlmtd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DelimitedPayloadTokenFilterFactory\" encoder=\"float\" delimiter=\"|\"/> </analyzer> </fieldType> IdentityEncoder Does nothing other than convert the char array to a byte array using the specified encoding. IntegerEncoder Encode a character array as a BytesRef . See EncodeInt32(Int32, Byte[], Int32) . NumericPayloadTokenFilter Assigns a payload to a token based on the Type NumericPayloadTokenFilterFactory Factory for NumericPayloadTokenFilter . <fieldType name=\"text_numpayload\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.NumericPayloadTokenFilterFactory\" payload=\"24\" typeMatch=\"word\"/> </analyzer> </fieldType> PayloadHelper Utility methods for encoding payloads. SingleEncoder Encode a character array as a BytesRef . NOTE: This was FloatEncoder in Lucene TokenOffsetPayloadTokenFilter Adds the StartOffset and EndOffset First 4 bytes are the start TokenOffsetPayloadTokenFilterFactory Factory for TokenOffsetPayloadTokenFilter . <fieldType name=\"text_tokenoffset\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.TokenOffsetPayloadTokenFilterFactory\"/> </analyzer> </fieldType> TypeAsPayloadTokenFilter Makes the Type a payload. Encodes the type using System.Text.Encoding.UTF8.GetBytes(string) TypeAsPayloadTokenFilterFactory Factory for TypeAsPayloadTokenFilter . <fieldType name=\"text_typeaspayload\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.TypeAsPayloadTokenFilterFactory\"/> </analyzer> </fieldType> Interfaces IPayloadEncoder Mainly for use with the DelimitedPayloadTokenFilter , converts char buffers to BytesRef . NOTE: This interface is subject to change"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.IdentityEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.IdentityEncoder.html",
    "title": "Class IdentityEncoder | Apache Lucene.NET 4.8.0 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[]) 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 Encoding charset Fields | Improve this Doc View Source m_charset Declaration protected Encoding m_charset Field Value Type Description Encoding Methods | Improve this Doc View Source Encode(Char[], Int32, Int32) Declaration public override BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef Overrides AbstractEncoder.Encode(Char[], Int32, Int32) Implements IPayloadEncoder"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.IntegerEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.IntegerEncoder.html",
    "title": "Class IntegerEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IntegerEncoder Encode a character array as a BytesRef . See EncodeInt32(Int32, Byte[], Int32) . Inheritance System.Object AbstractEncoder IntegerEncoder Implements IPayloadEncoder Inherited Members AbstractEncoder.Encode(Char[]) Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IntegerEncoder : AbstractEncoder, IPayloadEncoder Methods | Improve this Doc View Source Encode(Char[], Int32, Int32) Declaration public override BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef Overrides AbstractEncoder.Encode(Char[], Int32, Int32) Implements IPayloadEncoder"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.IPayloadEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.IPayloadEncoder.html",
    "title": "Interface IPayloadEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPayloadEncoder Mainly for use with the DelimitedPayloadTokenFilter , converts char buffers to BytesRef . NOTE: This interface is subject to change Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IPayloadEncoder Methods | Improve this Doc View Source Encode(Char[]) Declaration BytesRef Encode(char[] buffer) Parameters Type Name Description System.Char [] buffer Returns Type Description BytesRef | Improve this Doc View Source Encode(Char[], Int32, Int32) Convert a char array to a BytesRef Declaration BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef encoded BytesRef"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilter.html",
    "title": "Class NumericPayloadTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericPayloadTokenFilter Assigns a payload to a token based on the Type Inheritance System.Object AttributeSource TokenStream TokenFilter NumericPayloadTokenFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NumericPayloadTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source NumericPayloadTokenFilter(TokenStream, Single, String) Declaration public NumericPayloadTokenFilter(TokenStream input, float payload, string typeMatch) Parameters Type Name Description TokenStream input System.Single payload System.String typeMatch Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilterFactory.html",
    "title": "Class NumericPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.PayloadHelper.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.PayloadHelper.html",
    "title": "Class PayloadHelper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadHelper Utility methods for encoding payloads. Inheritance System.Object PayloadHelper Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PayloadHelper : object Methods | Improve this Doc View Source DecodeInt32(Byte[], Int32) NOTE: This was decodeInt() in Lucene Declaration public static int DecodeInt32(byte[] bytes, int offset) Parameters Type Name Description System.Byte [] bytes System.Int32 offset Returns Type Description System.Int32 | Improve this Doc View Source DecodeSingle(Byte[]) NOTE: This was decodeFloat() in Lucene Declaration public static float DecodeSingle(byte[] bytes) Parameters Type Name Description System.Byte [] bytes Returns Type Description System.Single the decoded float See Also DecodeSingle(Byte[], Int32) EncodeSingle(Single) | Improve this Doc View Source DecodeSingle(Byte[], Int32) Decode the payload that was encoded using EncodeSingle(Single) . NOTE: the length of the array must be at least offset + 4 long. NOTE: This was decodeFloat() in Lucene Declaration public static float DecodeSingle(byte[] bytes, int offset) Parameters Type Name Description System.Byte [] bytes The bytes to decode System.Int32 offset The offset into the array. Returns Type Description System.Single The float that was encoded See Also EncodeSingle(Single) | Improve this Doc View Source EncodeInt32(Int32) NOTE: This was encodeInt() in Lucene Declaration public static byte[] EncodeInt32(int payload) Parameters Type Name Description System.Int32 payload Returns Type Description System.Byte [] | Improve this Doc View Source EncodeInt32(Int32, Byte[], Int32) NOTE: This was encodeInt() in Lucene Declaration public static byte[] EncodeInt32(int payload, byte[] data, int offset) Parameters Type Name Description System.Int32 payload System.Byte [] data System.Int32 offset Returns Type Description System.Byte [] | Improve this Doc View Source EncodeSingle(Single) NOTE: This was encodeFloat() in Lucene Declaration public static byte[] EncodeSingle(float payload) Parameters Type Name Description System.Single payload Returns Type Description System.Byte [] | Improve this Doc View Source EncodeSingle(Single, Byte[], Int32) NOTE: This was encodeFloat() in Lucene Declaration public static byte[] EncodeSingle(float payload, byte[] data, int offset) Parameters Type Name Description System.Single payload System.Byte [] data System.Int32 offset Returns Type Description System.Byte []"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.SingleEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.SingleEncoder.html",
    "title": "Class SingleEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleEncoder Encode a character array as a BytesRef . NOTE: This was FloatEncoder in Lucene Inheritance System.Object AbstractEncoder SingleEncoder Implements IPayloadEncoder Inherited Members AbstractEncoder.Encode(Char[]) Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SingleEncoder : AbstractEncoder, IPayloadEncoder Methods | Improve this Doc View Source Encode(Char[], Int32, Int32) Declaration public override BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef Overrides AbstractEncoder.Encode(Char[], Int32, Int32) Implements IPayloadEncoder See Also EncodeSingle(Single, Byte[], Int32)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilter.html",
    "title": "Class TokenOffsetPayloadTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenOffsetPayloadTokenFilter Adds the StartOffset and EndOffset First 4 bytes are the start Inheritance System.Object AttributeSource TokenStream TokenFilter TokenOffsetPayloadTokenFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TokenOffsetPayloadTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TokenOffsetPayloadTokenFilter(TokenStream) Declaration public TokenOffsetPayloadTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilterFactory.html",
    "title": "Class TokenOffsetPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilter.html",
    "title": "Class TypeAsPayloadTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TypeAsPayloadTokenFilter Makes the Type a payload. Encodes the type using System.Text.Encoding.UTF8.GetBytes(string) Inheritance System.Object AttributeSource TokenStream TokenFilter TypeAsPayloadTokenFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TypeAsPayloadTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TypeAsPayloadTokenFilter(TokenStream) Declaration public TypeAsPayloadTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilterFactory.html",
    "title": "Class TypeAsPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Position.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Position.html",
    "title": "Namespace Lucene.Net.Analysis.Position | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Position <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Filter for assigning position increments. Classes PositionFilter Set the positionIncrement of all tokens to the \"positionIncrement\", except the first return token which retains its original positionIncrement value. The default positionIncrement value is zero. PositionFilterFactory Factory for PositionFilter . Set the positionIncrement of all tokens to the \"positionIncrement\", except the first return token which retains its original positionIncrement value. The default positionIncrement value is zero. <fieldType name=\"text_position\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.PositionFilterFactory\" positionIncrement=\"0\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Position.PositionFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Position.PositionFilter.html",
    "title": "Class PositionFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PositionFilter Set the positionIncrement of all tokens to the \"positionIncrement\", except the first return token which retains its original positionIncrement value. The default positionIncrement value is zero. Inheritance System.Object AttributeSource TokenStream TokenFilter PositionFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Position Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PositionFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PositionFilter(TokenStream) Constructs a PositionFilter that assigns a position increment of zero to all but the first token from the given input stream. Declaration public PositionFilter(TokenStream input) Parameters Type Name Description TokenStream input the input stream | Improve this Doc View Source PositionFilter(TokenStream, Int32) Constructs a PositionFilter that assigns the given position increment to all but the first token from the given input stream. Declaration public PositionFilter(TokenStream input, int positionIncrement) Parameters Type Name Description TokenStream input the input stream System.Int32 positionIncrement position increment to assign to all but the first token from the input stream Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Position.PositionFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Position.PositionFilterFactory.html",
    "title": "Class PositionFilterFactory | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Position Assembly : Lucene.Net.Analysis.Common.dll Syntax 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also PositionFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.html",
    "title": "Namespace Lucene.Net.Analysis.Pt | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Pt <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Portuguese. Classes PortugueseAnalyzer Analyzer for Portuguese. You must specify the required LuceneVersion compatibility when creating PortugueseAnalyzer : As of 3.6, PortugueseLightStemFilter is used for less aggressive stemming. PortugueseLightStemFilter A TokenFilter that applies PortugueseLightStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . PortugueseLightStemFilterFactory Factory for PortugueseLightStemFilter . <fieldType name=\"text_ptlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseLightStemFilterFactory\"/> </analyzer> </fieldType> PortugueseLightStemmer Light Stemmer for Portuguese This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy PortugueseMinimalStemFilter A TokenFilter that applies PortugueseMinimalStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . PortugueseMinimalStemFilterFactory Factory for PortugueseMinimalStemFilter . <fieldType name=\"text_ptminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseMinimalStemFilterFactory\"/> </analyzer> </fieldType> PortugueseMinimalStemmer Minimal Stemmer for Portuguese This follows the \"RSLP-S\" algorithm presented in: A study on the Use of Stemming for Monolingual Ad-Hoc Portuguese Information Retrieval (Orengo, et al) which is just the plural reduction step of the RSLP algorithm from A Stemming Algorithm for the Portuguese Language , Orengo et al. PortugueseStemFilter A TokenFilter that applies PortugueseStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . PortugueseStemFilterFactory Factory for PortugueseStemFilter . <fieldType name=\"text_ptstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseStemFilterFactory\"/> </analyzer> </fieldType> PortugueseStemmer Portuguese stemmer implementing the RSLP (Removedor de Sufixos da Lingua Portuguesa) algorithm. This is sometimes also referred to as the Orengo stemmer. RSLPStemmerBase Base class for stemmers that use a set of RSLP-like stemming steps. RSLP (Removedor de Sufixos da Lingua Portuguesa) is an algorithm designed originally for stemming the Portuguese language, described in the paper A Stemming Algorithm for the Portuguese Language , Orengo et. al. Since this time a plural-only modification (RSLP-S) as well as a modification for the Galician language have been implemented. This class parses a configuration file that describes RSLPStemmerBase.Step s, where each RSLPStemmerBase.Step contains a set of RSLPStemmerBase.Rule s. The general rule format is: { \"suffix\", N, \"replacement\", { \"exception1\", \"exception2\", ...}} where: suffix is the suffix to be removed (such as \"inho\"). N is the min stem size, where stem is defined as the candidate stem after removing the suffix (but before appending the replacement!) replacement is an optimal string to append after removing the suffix. This can be the empty string. exceptions is an optional list of exceptions, patterns that should not be stemmed. These patterns can be specified as whole word or suffix (ends-with) patterns, depending upon the exceptions format flag in the step header. A step is an ordered list of rules, with a structure in this format: { \"name\", N, B, { \"cond1\", \"cond2\", ... } ... rules ... }; where: name is a name for the step (such as \"Plural\"). N is the min word size. Words that are less than this length bypass the step completely, as an optimization. Note: N can be zero, in this case this implementation will automatically calculate the appropriate value from the underlying rules. B is a \"boolean\" flag specifying how exceptions in the rules are matched. A value of 1 indicates whole-word pattern matching, a value of 0 indicates that exceptions are actually suffixes and should be matched with ends-with. conds are an optional list of conditions to enter the step at all. If the list is non-empty, then a word must end with one of these conditions or it will bypass the step completely as an optimization. RSLP description This is a Lucene.NET INTERNAL API, use at your own risk RSLPStemmerBase.Rule A basic rule, with no exceptions. RSLPStemmerBase.RuleWithSetExceptions A rule with a set of whole-word exceptions. RSLPStemmerBase.RuleWithSuffixExceptions A rule with a set of exceptional suffixes. RSLPStemmerBase.Step A step containing a list of rules."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseAnalyzer.html",
    "title": "Class PortugueseAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseAnalyzer Analyzer for Portuguese. You must specify the required LuceneVersion compatibility when creating PortugueseAnalyzer : As of 3.6, PortugueseLightStemFilter is used for less aggressive stemming. Inheritance System.Object Analyzer StopwordAnalyzerBase PortugueseAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PortugueseAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source PortugueseAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public PortugueseAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source PortugueseAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public PortugueseAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source PortugueseAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public PortugueseAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Portuguese stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and PortugueseLightStemFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseLightStemFilter.html",
    "title": "Class PortugueseLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseLightStemFilter A TokenFilter that applies PortugueseLightStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter PortugueseLightStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PortugueseLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PortugueseLightStemFilter(TokenStream) Declaration public PortugueseLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseLightStemFilterFactory.html",
    "title": "Class PortugueseLightStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseLightStemmer.html",
    "title": "Class PortugueseLightStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseLightStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilter.html",
    "title": "Class PortugueseMinimalStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseMinimalStemFilter A TokenFilter that applies PortugueseMinimalStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter PortugueseMinimalStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PortugueseMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PortugueseMinimalStemFilter(TokenStream) Declaration public PortugueseMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilterFactory.html",
    "title": "Class PortugueseMinimalStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseMinimalStemmer.html",
    "title": "Class PortugueseMinimalStemmer | Apache Lucene.NET 4.8.0 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) Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseMinimalStemmer : RSLPStemmerBase Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32 See Also RSLPStemmerBase"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseStemFilter.html",
    "title": "Class PortugueseStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseStemFilter A TokenFilter that applies PortugueseStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter PortugueseStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PortugueseStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PortugueseStemFilter(TokenStream) Declaration public PortugueseStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseStemFilterFactory.html",
    "title": "Class PortugueseStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.PortugueseStemmer.html",
    "title": "Class PortugueseStemmer | Apache Lucene.NET 4.8.0 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) Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseStemmer : RSLPStemmerBase Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s buffer, oversized to at least len+1 System.Int32 len initial valid length of buffer Returns Type Description System.Int32 new valid length, stemmed See Also RSLPStemmerBase"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.html",
    "title": "Class RSLPStemmerBase | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class RSLPStemmerBase : object 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 Type clazz System.String resource Returns Type Description IDictionary < System.String , RSLPStemmerBase.Step > a Map containing the named RSLPStemmerBase.Step s in this description."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.Rule.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.Rule.html",
    "title": "Class RSLPStemmerBase.Rule | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RSLPStemmerBase.Rule A basic rule, with no exceptions. Inheritance System.Object RSLPStemmerBase.Rule RSLPStemmerBase.RuleWithSetExceptions RSLPStemmerBase.RuleWithSuffixExceptions Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class Rule : object Constructors | Improve this Doc View Source Rule(String, Int32, String) Create a rule. Declaration public Rule(string suffix, int min, string replacement) Parameters Type Name Description System.String suffix suffix to remove System.Int32 min minimum stem length System.String replacement replacement string Fields | Improve this Doc View Source m_min Declaration protected readonly int m_min Field Value Type Description System.Int32 | Improve this Doc View Source m_replacement Declaration protected readonly char[] m_replacement Field Value Type Description System.Char [] | Improve this Doc View Source m_suffix Declaration protected readonly char[] m_suffix Field Value Type Description System.Char [] Methods | Improve this Doc View Source Matches(Char[], Int32) Declaration public virtual bool Matches(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Boolean true if the word matches this rule. | Improve this Doc View Source Replace(Char[], Int32) Declaration public virtual int Replace(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32 new valid length of the string after firing this rule."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSetExceptions.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSetExceptions.html",
    "title": "Class RSLPStemmerBase.RuleWithSetExceptions | Apache Lucene.NET 4.8.0 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) Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class RuleWithSetExceptions : RSLPStemmerBase.Rule Constructors | Improve this Doc View Source RuleWithSetExceptions(String, Int32, String, String[]) Declaration public RuleWithSetExceptions(string suffix, int min, string replacement, string[] exceptions) Parameters Type Name Description System.String suffix System.Int32 min System.String replacement System.String [] exceptions Fields | Improve this Doc View Source m_exceptions Declaration protected readonly CharArraySet m_exceptions Field Value Type Description CharArraySet Methods | Improve this Doc View Source Matches(Char[], Int32) Declaration public override bool Matches(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Boolean Overrides RSLPStemmerBase.Rule.Matches(Char[], Int32)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSuffixExceptions.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSuffixExceptions.html",
    "title": "Class RSLPStemmerBase.RuleWithSuffixExceptions | Apache Lucene.NET 4.8.0 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) Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class RuleWithSuffixExceptions : RSLPStemmerBase.Rule Constructors | Improve this Doc View Source RuleWithSuffixExceptions(String, Int32, String, String[]) Declaration public RuleWithSuffixExceptions(string suffix, int min, string replacement, string[] exceptions) Parameters Type Name Description System.String suffix System.Int32 min System.String replacement System.String [] exceptions Fields | Improve this Doc View Source m_exceptions Declaration protected readonly char[][] m_exceptions Field Value Type Description System.Char [][] Methods | Improve this Doc View Source Matches(Char[], Int32) Declaration public override bool Matches(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Boolean Overrides RSLPStemmerBase.Rule.Matches(Char[], Int32)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.Step.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Pt.RSLPStemmerBase.Step.html",
    "title": "Class RSLPStemmerBase.Step | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RSLPStemmerBase.Step A step containing a list of rules. Inheritance System.Object RSLPStemmerBase.Step Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class Step : object Constructors | Improve this Doc View Source Step(String, RSLPStemmerBase.Rule[], Int32, String[]) Create a new step Declaration public Step(string name, RSLPStemmerBase.Rule[] rules, int min, string[] suffixes) Parameters Type Name Description System.String name Step's name. RSLPStemmerBase.Rule [] rules an ordered list of rules. System.Int32 min minimum word size. if this is 0 it is automatically calculated. System.String [] suffixes optional list of conditional suffixes. may be null. Fields | Improve this Doc View Source m_min Declaration protected readonly int m_min Field Value Type Description System.Int32 | Improve this Doc View Source m_name Declaration protected readonly string m_name Field Value Type Description System.String | Improve this Doc View Source m_rules Declaration protected readonly RSLPStemmerBase.Rule[] m_rules Field Value Type Description RSLPStemmerBase.Rule [] | Improve this Doc View Source m_suffixes Declaration protected readonly char[][] m_suffixes Field Value Type Description System.Char [][] Methods | Improve this Doc View Source Apply(Char[], Int32) Declaration public virtual int Apply(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32 new valid length of the string after applying the entire step."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Query.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Query.html",
    "title": "Namespace Lucene.Net.Analysis.Query | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Query <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Automatically filter high-frequency stopwords. Classes QueryAutoStopWordAnalyzer An Analyzer used primarily at query time to wrap another analyzer and provide a layer of protection which prevents very common words from being passed into queries. For very large indexes the cost of reading TermDocs for a very common word can be high. This analyzer was created after experience with a 38 million doc index which had a term in around 50% of docs and was causing TermQueries for this term to take 2 seconds."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Query.QueryAutoStopWordAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Query.QueryAutoStopWordAnalyzer.html",
    "title": "Class QueryAutoStopWordAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryAutoStopWordAnalyzer An Analyzer used primarily at query time to wrap another analyzer and provide a layer of protection which prevents very common words from being passed into queries. For very large indexes the cost of reading TermDocs for a very common word can be high. This analyzer was created after experience with a 38 million doc index which had a term in around 50% of docs and was causing TermQueries for this term to take 2 seconds. Inheritance System.Object Analyzer AnalyzerWrapper QueryAutoStopWordAnalyzer Inherited Members AnalyzerWrapper.WrapReader(String, TextReader) AnalyzerWrapper.CreateComponents(String, TextReader) AnalyzerWrapper.GetPositionIncrementGap(String) AnalyzerWrapper.GetOffsetGap(String) AnalyzerWrapper.InitReader(String, TextReader) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Query Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class QueryAutoStopWordAnalyzer : AnalyzerWrapper Constructors | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for all indexed fields from terms with a document frequency percentage greater than defaultMaxDocFreqPercent Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader, ICollection<String>, Int32) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for the given selection of fields from terms with a document frequency greater than the given maxDocFreq Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader, ICollection<string> fields, int maxDocFreq) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from 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 | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader, ICollection<String>, Single) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for the given selection of fields from terms with a document frequency percentage greater than the given maxPercentDocs Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader, ICollection<string> fields, float maxPercentDocs) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from 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 | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader, Int32) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for all indexed fields from terms with a document frequency greater than the given maxDocFreq Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader, int maxDocFreq) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from System.Int32 maxDocFreq Document frequency terms should be above in order to be stopwords | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader, Single) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for all indexed fields from terms with a document frequency percentage greater than the given maxPercentDocs Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader, float maxPercentDocs) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from System.Single maxPercentDocs The maximum percentage (between 0.0 and 1.0) of index documents which contain a term, after which the word is considered to be a stop word Fields | Improve this Doc View Source defaultMaxDocFreqPercent Declaration public const float defaultMaxDocFreqPercent = null Field Value Type Description System.Single Methods | Improve this Doc View Source GetStopWords() Provides information on which stop words have been identified for all fields Declaration public Term[] GetStopWords() Returns Type Description Term [] the stop words (as terms) | Improve this Doc View Source GetStopWords(String) Provides information on which stop words have been identified for a field Declaration public string[] GetStopWords(string fieldName) Parameters Type Name Description System.String fieldName The field for which stop words identified in \"addStopWords\" method calls will be returned Returns Type Description System.String [] the stop words identified for a field | Improve this Doc View Source GetWrappedAnalyzer(String) Declaration protected override Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Analyzer | Improve this Doc View Source WrapComponents(String, TokenStreamComponents) Declaration protected override TokenStreamComponents WrapComponents(string fieldName, TokenStreamComponents components) Parameters Type Name Description System.String fieldName TokenStreamComponents components Returns Type Description TokenStreamComponents"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Reverse.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Reverse.html",
    "title": "Namespace Lucene.Net.Analysis.Reverse | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Reverse <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Filter to reverse token text. Classes ReverseStringFilter Reverse token string, for example \"country\" => \"yrtnuoc\". If Lucene.Net.Analysis.Reverse.ReverseStringFilter.marker is supplied, then tokens will be also prepended by that character. For example, with a marker of \\u0001, \"country\" => \"\\u0001yrtnuoc\". This is useful when implementing efficient leading wildcards search. You must specify the required LuceneVersion compatibility when creating ReverseStringFilter , or when using any of its static methods: As of 3.1, supplementary characters are handled correctly ReverseStringFilterFactory Factory for ReverseStringFilter . <fieldType name=\"text_rvsstr\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ReverseStringFilterFactory\"/> </analyzer> </fieldType> @since solr 1.4"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Reverse.ReverseStringFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Reverse.ReverseStringFilter.html",
    "title": "Class ReverseStringFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReverseStringFilter Reverse token string, for example \"country\" => \"yrtnuoc\". If Lucene.Net.Analysis.Reverse.ReverseStringFilter.marker is supplied, then tokens will be also prepended by that character. For example, with a marker of \\u0001, \"country\" => \"\\u0001yrtnuoc\". This is useful when implementing efficient leading wildcards search. You must specify the required LuceneVersion compatibility when creating ReverseStringFilter , or when using any of its static methods: As of 3.1, supplementary characters are handled correctly Inheritance System.Object AttributeSource TokenStream TokenFilter ReverseStringFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Reverse Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ReverseStringFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ReverseStringFilter(LuceneVersion, TokenStream) Create a new ReverseStringFilter that reverses all tokens in the supplied TokenStream . The reversed tokens will not be marked. Declaration public ReverseStringFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream in TokenStream to filter | Improve this Doc View Source ReverseStringFilter(LuceneVersion, TokenStream, Char) Create a new ReverseStringFilter that reverses and marks all tokens in the supplied TokenStream . The reversed tokens will be prepended (marked) by the marker character. Declaration public ReverseStringFilter(LuceneVersion matchVersion, TokenStream in, char marker) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream in TokenStream to filter System.Char marker A character used to mark reversed tokens Fields | Improve this Doc View Source INFORMATION_SEPARATOR_MARKER Example marker character: U+001F (INFORMATION SEPARATOR ONE) Declaration public const char INFORMATION_SEPARATOR_MARKER = null 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 = null 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 = null 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 = null Field Value Type Description System.Char Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reverse(LuceneVersion, Char[]) Reverses the given input buffer in-place Declaration public static void Reverse(LuceneVersion matchVersion, char[] buffer) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.Char [] buffer the input char array to reverse | Improve this Doc View Source Reverse(LuceneVersion, Char[], Int32) Partially reverses the given input buffer in-place from offset 0 up to the given length. Declaration public static void Reverse(LuceneVersion matchVersion, char[] buffer, int len) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.Char [] buffer the input char array to reverse System.Int32 len the length in the buffer up to where the buffer should be reversed | Improve this Doc View Source Reverse(LuceneVersion, Char[], Int32, Int32) Partially reverses the given input buffer in-place from the given offset up to the given length. Declaration public static void Reverse(LuceneVersion matchVersion, char[] buffer, int start, int len) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.Char [] buffer the input char array to reverse System.Int32 start the offset from where to reverse the buffer System.Int32 len the length in the buffer up to where the buffer should be reversed | Improve this Doc View Source Reverse(LuceneVersion, String) Reverses the given input string Declaration public static string Reverse(LuceneVersion matchVersion, string input) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.String input the string to reverse Returns Type Description System.String the given input string in reversed order Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Reverse.ReverseStringFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Reverse.ReverseStringFilterFactory.html",
    "title": "Class ReverseStringFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ro.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ro.html",
    "title": "Namespace Lucene.Net.Analysis.Ro | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ro <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Romanian. Classes RomanianAnalyzer Analyzer for Romanian."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ro.RomanianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ro.RomanianAnalyzer.html",
    "title": "Class RomanianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RomanianAnalyzer Analyzer for Romanian. Inheritance System.Object Analyzer StopwordAnalyzerBase RomanianAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Ro Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RomanianAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source RomanianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public RomanianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source RomanianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public RomanianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source RomanianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public RomanianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Romanian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.html",
    "title": "Namespace Lucene.Net.Analysis.Ru | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ru <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Russian. Classes RussianAnalyzer Analyzer for Russian language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating RussianAnalyzer : As of 3.1, StandardTokenizer is used, Snowball stemming is done with SnowballFilter , and Snowball stopwords are used by default. RussianLetterTokenizer A RussianLetterTokenizer is a Tokenizer that extends LetterTokenizer by also allowing the basic Latin digits 0-9. You must specify the required LuceneVersion compatibility when creating RussianLetterTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. RussianLetterTokenizerFactory RussianLightStemFilter A TokenFilter that applies RussianLightStemmer to stem Russian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . RussianLightStemFilterFactory Factory for RussianLightStemFilter . <fieldType name=\"text_rulgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RussianLightStemFilterFactory\"/> </analyzer> </fieldType> RussianLightStemmer Light Stemmer for Russian. This stemmer implements the following algorithm: Indexing and Searching Strategies for the Russian Language. Ljiljana Dolamic and Jacques Savoy."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianAnalyzer.html",
    "title": "Class RussianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RussianAnalyzer Analyzer for Russian language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating RussianAnalyzer : As of 3.1, StandardTokenizer is used, Snowball stemming is done with SnowballFilter , and Snowball stopwords are used by default. Inheritance System.Object Analyzer StopwordAnalyzerBase RussianAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RussianAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source RussianAnalyzer(LuceneVersion) Declaration public RussianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source RussianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public RussianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source RussianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words Declaration public RussianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of words not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Russian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, and SnowballFilter"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLetterTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLetterTokenizer.html",
    "title": "Class RussianLetterTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RussianLetterTokenizer A RussianLetterTokenizer is a Tokenizer that extends LetterTokenizer by also allowing the basic Latin digits 0-9. You must specify the required LuceneVersion compatibility when creating RussianLetterTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer RussianLetterTokenizer Implements IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax public class RussianLetterTokenizer : CharTokenizer, IDisposable Constructors | Improve this Doc View Source RussianLetterTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new RussianLetterTokenizer using a given AttributeSource.AttributeFactory . Declaration public RussianLetterTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer TextReader in the input to split up into tokens | Improve this Doc View Source RussianLetterTokenizer(LuceneVersion, TextReader) Construct a new RussianLetterTokenizer . Declaration public RussianLetterTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TextReader in the input to split up into tokens Methods | Improve this Doc View Source IsTokenChar(Int32) Collects only characters which satisfy . Declaration protected override bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean Overrides CharTokenizer.IsTokenChar(Int32) Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLetterTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLetterTokenizerFactory.html",
    "title": "Class RussianLetterTokenizerFactory | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLightStemFilter.html",
    "title": "Class RussianLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RussianLightStemFilter A TokenFilter that applies RussianLightStemmer to stem Russian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter RussianLightStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RussianLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source RussianLightStemFilter(TokenStream) Declaration public RussianLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLightStemFilterFactory.html",
    "title": "Class RussianLightStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Ru.RussianLightStemmer.html",
    "title": "Class RussianLightStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax public class RussianLightStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.html",
    "title": "Namespace Lucene.Net.Analysis.Shingle | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Shingle <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Word n-gram filters Classes ShingleAnalyzerWrapper A ShingleAnalyzerWrapper wraps a ShingleFilter around another Analyzer . A shingle is another name for a token based n-gram. ShingleFilter A ShingleFilter constructs shingles (token n-grams) from a token stream. In other words, it creates combinations of tokens as a single token. For example, the sentence \"please divide this sentence into shingles\" might be tokenized into shingles \"please divide\", \"divide this\", \"this sentence\", \"sentence into\", and \"into shingles\". This filter handles position increments > 1 by inserting filler tokens (tokens with termtext \"_\"). It does not handle a position increment of 0. ShingleFilterFactory Factory for ShingleFilter . <fieldType name=\"text_shingle\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ShingleFilterFactory\" minShingleSize=\"2\" maxShingleSize=\"2\" outputUnigrams=\"true\" outputUnigramsIfNoShingles=\"false\" tokenSeparator=\" \" fillerToken=\"_\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.ShingleAnalyzerWrapper.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.ShingleAnalyzerWrapper.html",
    "title": "Class ShingleAnalyzerWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShingleAnalyzerWrapper A ShingleAnalyzerWrapper wraps a ShingleFilter around another Analyzer . A shingle is another name for a token based n-gram. Inheritance System.Object Analyzer AnalyzerWrapper ShingleAnalyzerWrapper Inherited Members AnalyzerWrapper.WrapReader(String, TextReader) AnalyzerWrapper.CreateComponents(String, TextReader) AnalyzerWrapper.GetPositionIncrementGap(String) AnalyzerWrapper.GetOffsetGap(String) AnalyzerWrapper.InitReader(String, TextReader) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Shingle Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ShingleAnalyzerWrapper : AnalyzerWrapper Constructors | Improve this Doc View Source ShingleAnalyzerWrapper(Analyzer) Declaration public ShingleAnalyzerWrapper(Analyzer defaultAnalyzer) Parameters Type Name Description Analyzer defaultAnalyzer | Improve this Doc View Source ShingleAnalyzerWrapper(Analyzer, Int32) Declaration public ShingleAnalyzerWrapper(Analyzer defaultAnalyzer, int maxShingleSize) Parameters Type Name Description Analyzer defaultAnalyzer System.Int32 maxShingleSize | Improve this Doc View Source ShingleAnalyzerWrapper(Analyzer, Int32, Int32) Declaration public ShingleAnalyzerWrapper(Analyzer defaultAnalyzer, int minShingleSize, int maxShingleSize) Parameters Type Name Description Analyzer defaultAnalyzer System.Int32 minShingleSize System.Int32 maxShingleSize | Improve this Doc View Source ShingleAnalyzerWrapper(Analyzer, Int32, Int32, String, Boolean, Boolean, String) Creates a new ShingleAnalyzerWrapper Declaration public ShingleAnalyzerWrapper(Analyzer delegate, int minShingleSize, int maxShingleSize, string tokenSeparator, bool outputUnigrams, bool outputUnigramsIfNoShingles, string fillerToken) Parameters Type Name Description Analyzer delegate Analyzer whose TokenStream is to be filtered System.Int32 minShingleSize Min shingle (token ngram) size System.Int32 maxShingleSize Max shingle size System.String tokenSeparator Used to separate input stream tokens in output shingles System.Boolean outputUnigrams Whether or not the filter shall pass the original tokens to the output stream System.Boolean outputUnigramsIfNoShingles Overrides the behavior of outputUnigrams==false for those times when no shingles are available (because there are fewer than minShingleSize tokens in the input stream)? Note that if outputUnigrams==true, then unigrams are always output, regardless of whether any shingles are available. System.String fillerToken filler token to use when positionIncrement is more than 1 | Improve this Doc View Source ShingleAnalyzerWrapper(LuceneVersion) Wraps StandardAnalyzer . Declaration public ShingleAnalyzerWrapper(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source ShingleAnalyzerWrapper(LuceneVersion, Int32, Int32) Wraps StandardAnalyzer . Declaration public ShingleAnalyzerWrapper(LuceneVersion matchVersion, int minShingleSize, int maxShingleSize) Parameters Type Name Description LuceneVersion matchVersion System.Int32 minShingleSize System.Int32 maxShingleSize Properties | Improve this Doc View Source FillerToken Declaration public string FillerToken { get; } Property Value Type Description System.String | Improve this Doc View Source MaxShingleSize The max shingle (token ngram) size Declaration public int MaxShingleSize { get; } Property Value Type Description System.Int32 The max shingle (token ngram) size | Improve this Doc View Source MinShingleSize The min shingle (token ngram) size Declaration public int MinShingleSize { get; } Property Value Type Description System.Int32 The min shingle (token ngram) size | Improve this Doc View Source OutputUnigrams Declaration public bool OutputUnigrams { get; } Property Value Type Description System.Boolean | Improve this Doc View Source OutputUnigramsIfNoShingles Declaration public bool OutputUnigramsIfNoShingles { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TokenSeparator Declaration public string TokenSeparator { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetWrappedAnalyzer(String) Declaration protected override sealed Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Analyzer | Improve this Doc View Source WrapComponents(String, TokenStreamComponents) Declaration protected override TokenStreamComponents WrapComponents(string fieldName, TokenStreamComponents components) Parameters Type Name Description System.String fieldName TokenStreamComponents components Returns Type Description TokenStreamComponents"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.ShingleFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.ShingleFilter.html",
    "title": "Class ShingleFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShingleFilter A ShingleFilter constructs shingles (token n-grams) from a token stream. In other words, it creates combinations of tokens as a single token. For example, the sentence \"please divide this sentence into shingles\" might be tokenized into shingles \"please divide\", \"divide this\", \"this sentence\", \"sentence into\", and \"into shingles\". This filter handles position increments > 1 by inserting filler tokens (tokens with termtext \"_\"). It does not handle a position increment of 0. Inheritance System.Object AttributeSource TokenStream TokenFilter ShingleFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Shingle Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ShingleFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ShingleFilter(TokenStream) Construct a ShingleFilter with default shingle size: 2. Declaration public ShingleFilter(TokenStream input) Parameters Type Name Description TokenStream input input stream | Improve this Doc View Source ShingleFilter(TokenStream, Int32) Constructs a ShingleFilter with the specified shingle size from the TokenStream input Declaration public ShingleFilter(TokenStream input, int maxShingleSize) Parameters Type Name Description TokenStream input input stream System.Int32 maxShingleSize maximum shingle size produced by the filter. | Improve this Doc View Source ShingleFilter(TokenStream, Int32, Int32) Constructs a ShingleFilter with the specified shingle size from the TokenStream input Declaration public ShingleFilter(TokenStream input, int minShingleSize, int maxShingleSize) Parameters Type Name Description TokenStream input input stream System.Int32 minShingleSize minimum shingle size produced by the filter. System.Int32 maxShingleSize maximum shingle size produced by the filter. | Improve this Doc View Source ShingleFilter(TokenStream, String) Construct a ShingleFilter with the specified token type for shingle tokens and the default shingle size: 2 Declaration public ShingleFilter(TokenStream input, string tokenType) Parameters Type Name Description TokenStream input input stream System.String tokenType token type for shingle tokens Fields | Improve this Doc View Source DEFAULT_FILLER_TOKEN filler token for when positionIncrement is more than 1 Declaration public const string DEFAULT_FILLER_TOKEN = null 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 = null 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 = null 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 = null 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 = null Field Value Type Description System.String Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() | Improve this Doc View Source SetFillerToken(String) Sets the string to insert for each position at which there is no token (i.e., when position increment is greater than one). Declaration public void SetFillerToken(string fillerToken) Parameters Type Name Description System.String fillerToken string to insert at each position where there is no token | Improve this Doc View Source SetMaxShingleSize(Int32) Set the max shingle size (default: 2) Declaration public void SetMaxShingleSize(int maxShingleSize) Parameters Type Name Description System.Int32 maxShingleSize max size of output shingles | Improve this Doc View Source SetMinShingleSize(Int32) Set the min shingle size (default: 2). This method requires that the passed in minShingleSize is not greater than maxShingleSize, so make sure that maxShingleSize is set before calling this method. The unigram output option is independent of the min shingle size. Declaration public void SetMinShingleSize(int minShingleSize) Parameters Type Name Description System.Int32 minShingleSize min size of output shingles | Improve this Doc View Source SetOutputUnigrams(Boolean) Shall the output stream contain the input tokens (unigrams) as well as shingles? (default: true.) Declaration public void SetOutputUnigrams(bool outputUnigrams) Parameters Type Name Description System.Boolean outputUnigrams Whether or not the output stream shall contain the input tokens (unigrams) | Improve this Doc View Source SetOutputUnigramsIfNoShingles(Boolean) Shall we override the behavior of outputUnigrams==false for those times when no shingles are available (because there are fewer than minShingleSize tokens in the input stream)? (default: false.) Note that if outputUnigrams==true, then unigrams are always output, regardless of whether any shingles are available. Declaration public void SetOutputUnigramsIfNoShingles(bool outputUnigramsIfNoShingles) Parameters Type Name Description System.Boolean outputUnigramsIfNoShingles Whether or not to output a single unigram when no shingles are available. | Improve this Doc View Source SetTokenSeparator(String) Sets the string to use when joining adjacent tokens to form a shingle Declaration public void SetTokenSeparator(string tokenSeparator) Parameters Type Name Description System.String tokenSeparator used to separate input stream tokens in output shingles | Improve this Doc View Source SetTokenType(String) Set the type of the shingle tokens produced by this filter. (default: \"shingle\") Declaration public void SetTokenType(string tokenType) Parameters Type Name Description System.String tokenType token tokenType Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.ShingleFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Shingle.ShingleFilterFactory.html",
    "title": "Class ShingleFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.DateRecognizerSinkFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.DateRecognizerSinkFilter.html",
    "title": "Class DateRecognizerSinkFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DateRecognizerSinkFilter Attempts to parse the ToString() as a Date using either the or methods. If a format is passed, 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() 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 . Loosely matches standard DateTime formats using . Declaration public DateRecognizerSinkFilter() | Improve this Doc View Source DateRecognizerSinkFilter(IFormatProvider) Creates a new instance of DateRecognizerSinkFilter using the supplied culture and . Loosely matches standard DateTime formats using . Declaration public DateRecognizerSinkFilter(IFormatProvider culture) Parameters Type Name Description 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 . Loosely matches standard DateTime formats using . Declaration public DateRecognizerSinkFilter(IFormatProvider culture, DateTimeStyles style) Parameters Type Name Description IFormatProvider culture An object that supplies culture-specific format information DateTimeStyles style A bitwise combination of enumeration values that indicates the permitted format of s. A typical value to specify is | Improve this Doc View Source DateRecognizerSinkFilter(String) Creates a new instance of DateRecognizerSinkFilter using the current culture and . Strictly matches the supplied DateTime formats using . 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 . Strictly matches the supplied DateTime formats using . 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. 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 . Strictly matches the supplied DateTime formats using . 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. IFormatProvider culture An object that supplies culture-specific format information DateTimeStyles style A bitwise combination of enumeration values that indicates the permitted format of s. A typical value to specify is | Improve this Doc View Source DateRecognizerSinkFilter(String[]) Creates a new instance of DateRecognizerSinkFilter using the current culture and . Strictly matches the supplied DateTime formats using . 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 . Strictly matches the supplied DateTime formats using . 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. 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 . Strictly matches the supplied DateTime formats using . 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. IFormatProvider culture An object that supplies culture-specific format information DateTimeStyles style A bitwise combination of enumeration values that indicates the permitted format of s. A typical value to specify is Fields | Improve this Doc View Source m_culture Declaration protected IFormatProvider m_culture Field Value Type Description 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 DateTimeStyles | Improve this Doc View Source m_termAtt Declaration protected ICharTermAttribute m_termAtt Field Value Type Description ICharTermAttribute Methods | Improve this Doc View Source Accept(AttributeSource) Declaration public override bool Accept(AttributeSource source) Parameters Type Name Description AttributeSource source Returns Type Description System.Boolean Overrides TeeSinkTokenFilter.SinkFilter.Accept(AttributeSource)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.html",
    "title": "Namespace Lucene.Net.Analysis.Sinks | Apache Lucene.NET 4.8.0 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 or methods. If a format is passed, will be used, and the format must strictly match one of the specified formats as specified in the MSDN documentation. If the value is a Date, it will add it to the sink. TeeSinkTokenFilter This TokenFilter provides the ability to set aside attribute states that have already been analyzed. This is useful in situations where multiple fields share many common analysis steps and then go their separate ways. It is also useful for doing things like entity extraction or proper noun analysis as part of the analysis workflow and saving off those tokens for use in another field. TeeSinkTokenFilter source1 = new TeeSinkTokenFilter(new WhitespaceTokenizer(version, reader1)); TeeSinkTokenFilter.SinkTokenStream sink1 = source1.NewSinkTokenStream(); TeeSinkTokenFilter.SinkTokenStream sink2 = source1.NewSinkTokenStream(); TeeSinkTokenFilter source2 = new TeeSinkTokenFilter(new WhitespaceTokenizer(version, reader2)); source2.AddSinkTokenStream(sink1); source2.AddSinkTokenStream(sink2); TokenStream final1 = new LowerCaseFilter(version, source1); TokenStream final2 = source2; TokenStream final3 = new EntityDetect(sink1); TokenStream final4 = new URLDetect(sink2); d.Add(new TextField(\"f1\", final1, Field.Store.NO)); d.Add(new TextField(\"f2\", final2, Field.Store.NO)); d.Add(new TextField(\"f3\", final3, Field.Store.NO)); d.Add(new TextField(\"f4\", final4, Field.Store.NO)); In this example, sink1 and sink2 will both get tokens from both reader1 and reader2 after whitespace tokenizer and now we can further wrap any of these in extra analysis, and more \"sources\" can be inserted if desired. It is important, that tees are consumed before sinks (in the above example, the field names must be less the sink's field names). If you are not sure, which stream is consumed first, you can simply add another sink and then pass all tokens to the sinks at once using ConsumeAllTokens() . This TokenFilter is exhausted after this. In the above example, change the example above to: ... TokenStream final1 = new LowerCaseFilter(version, source1.NewSinkTokenStream()); TokenStream final2 = source2.NewSinkTokenStream(); sink1.ConsumeAllTokens(); sink2.ConsumeAllTokens(); ... In this case, the fields can be added in any order, because the sources are not used anymore and all sinks are ready. Note, the EntityDetect and URLDetect TokenStreams are for the example and do not currently exist in Lucene. TeeSinkTokenFilter.SinkFilter A filter that decides which AttributeSource states to store in the sink. TeeSinkTokenFilter.SinkTokenStream TokenStream output from a tee with optional filtering. TokenRangeSinkFilter Counts the tokens as they go by and saves to the internal list those between the range of lower and upper, exclusive of upper TokenTypeSinkFilter Adds a token to the sink if it has a specific type."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.html",
    "title": "Class TeeSinkTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TeeSinkTokenFilter This TokenFilter provides the ability to set aside attribute states that have already been analyzed. This is useful in situations where multiple fields share many common analysis steps and then go their separate ways. It is also useful for doing things like entity extraction or proper noun analysis as part of the analysis workflow and saving off those tokens for use in another field. TeeSinkTokenFilter source1 = new TeeSinkTokenFilter(new WhitespaceTokenizer(version, reader1)); TeeSinkTokenFilter.SinkTokenStream sink1 = source1.NewSinkTokenStream(); TeeSinkTokenFilter.SinkTokenStream sink2 = source1.NewSinkTokenStream(); TeeSinkTokenFilter source2 = new TeeSinkTokenFilter(new WhitespaceTokenizer(version, reader2)); source2.AddSinkTokenStream(sink1); source2.AddSinkTokenStream(sink2); TokenStream final1 = new LowerCaseFilter(version, source1); TokenStream final2 = source2; TokenStream final3 = new EntityDetect(sink1); TokenStream final4 = new URLDetect(sink2); d.Add(new TextField(\"f1\", final1, Field.Store.NO)); d.Add(new TextField(\"f2\", final2, Field.Store.NO)); d.Add(new TextField(\"f3\", final3, Field.Store.NO)); d.Add(new TextField(\"f4\", final4, Field.Store.NO)); In this example, sink1 and sink2 will both get tokens from both reader1 and reader2 after whitespace tokenizer and now we can further wrap any of these in extra analysis, and more \"sources\" can be inserted if desired. It is important, that tees are consumed before sinks (in the above example, the field names must be less the sink's field names). If you are not sure, which stream is consumed first, you can simply add another sink and then pass all tokens to the sinks at once using ConsumeAllTokens() . This TokenFilter is exhausted after this. In the above example, change the example above to: ... TokenStream final1 = new LowerCaseFilter(version, source1.NewSinkTokenStream()); TokenStream final2 = source2.NewSinkTokenStream(); sink1.ConsumeAllTokens(); sink2.ConsumeAllTokens(); ... In this case, the fields can be added in any order, because the sources are not used anymore and all sinks are ready. Note, the EntityDetect and URLDetect TokenStreams are for the example and do not currently exist in Lucene. Inheritance System.Object AttributeSource TokenStream TokenFilter TeeSinkTokenFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TeeSinkTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TeeSinkTokenFilter(TokenStream) Instantiates a new TeeSinkTokenFilter . Declaration public TeeSinkTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source AddSinkTokenStream(TeeSinkTokenFilter.SinkTokenStream) Adds a TeeSinkTokenFilter.SinkTokenStream created by another TeeSinkTokenFilter to this one. The supplied stream will also receive all consumed tokens. This method can be used to pass tokens from two different tees to one sink. Declaration public void AddSinkTokenStream(TeeSinkTokenFilter.SinkTokenStream sink) Parameters Type Name Description TeeSinkTokenFilter.SinkTokenStream sink | Improve this Doc View Source ConsumeAllTokens() TeeSinkTokenFilter passes all tokens to the added sinks when itself is consumed. To be sure, that all tokens from the input stream are passed to the sinks, you can call this methods. This instance is exhausted after this, but all sinks are instant available. Declaration public void ConsumeAllTokens() | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source NewSinkTokenStream() Returns a new TeeSinkTokenFilter.SinkTokenStream that receives all tokens consumed by this stream. Declaration public TeeSinkTokenFilter.SinkTokenStream NewSinkTokenStream() Returns Type Description TeeSinkTokenFilter.SinkTokenStream | Improve this Doc View Source NewSinkTokenStream(TeeSinkTokenFilter.SinkFilter) Returns a new TeeSinkTokenFilter.SinkTokenStream that receives all tokens consumed by this stream that pass the supplied filter. Declaration public TeeSinkTokenFilter.SinkTokenStream NewSinkTokenStream(TeeSinkTokenFilter.SinkFilter filter) Parameters Type Name Description TeeSinkTokenFilter.SinkFilter filter Returns Type Description TeeSinkTokenFilter.SinkTokenStream See Also TeeSinkTokenFilter.SinkFilter Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkFilter.html",
    "title": "Class TeeSinkTokenFilter.SinkFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TeeSinkTokenFilter.SinkFilter A filter that decides which AttributeSource states to store in the sink. Inheritance System.Object TeeSinkTokenFilter.SinkFilter DateRecognizerSinkFilter TokenRangeSinkFilter TokenTypeSinkFilter Namespace : Lucene.Net.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class SinkFilter : object Methods | Improve this Doc View Source Accept(AttributeSource) Returns true, iff the current state of the passed-in AttributeSource shall be stored in the sink. Declaration public abstract bool Accept(AttributeSource source) Parameters Type Name Description AttributeSource source Returns Type Description System.Boolean | Improve this Doc View Source Reset() Called by Reset() . This method does nothing by default and can optionally be overridden. Declaration public virtual void Reset()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkTokenStream.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkTokenStream.html",
    "title": "Class TeeSinkTokenFilter.SinkTokenStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TeeSinkTokenFilter.SinkTokenStream TokenStream output from a tee with optional filtering. Inheritance System.Object AttributeSource TokenStream TeeSinkTokenFilter.SinkTokenStream Implements IDisposable Inherited Members TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SinkTokenStream : TokenStream, IDisposable Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override sealed void Reset() Overrides TokenStream.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TokenRangeSinkFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TokenRangeSinkFilter.html",
    "title": "Class TokenRangeSinkFilter | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TokenRangeSinkFilter : TeeSinkTokenFilter.SinkFilter Constructors | Improve this Doc View Source TokenRangeSinkFilter(Int32, Int32) Declaration public TokenRangeSinkFilter(int lower, int upper) Parameters Type Name Description System.Int32 lower System.Int32 upper Methods | Improve this Doc View Source Accept(AttributeSource) Declaration public override bool Accept(AttributeSource source) Parameters Type Name Description AttributeSource source Returns Type Description System.Boolean Overrides TeeSinkTokenFilter.SinkFilter.Accept(AttributeSource) | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TeeSinkTokenFilter.SinkFilter.Reset()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TokenTypeSinkFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sinks.TokenTypeSinkFilter.html",
    "title": "Class TokenTypeSinkFilter | Apache Lucene.NET 4.8.0 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() Namespace : Lucene.Net.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TokenTypeSinkFilter : TeeSinkTokenFilter.SinkFilter Constructors | Improve this Doc View Source TokenTypeSinkFilter(String) Declaration public TokenTypeSinkFilter(string typeToMatch) Parameters Type Name Description System.String typeToMatch Methods | Improve this Doc View Source Accept(AttributeSource) Declaration public override bool Accept(AttributeSource source) Parameters Type Name Description AttributeSource source Returns Type Description System.Boolean Overrides TeeSinkTokenFilter.SinkFilter.Accept(AttributeSource)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.html",
    "title": "Namespace Lucene.Net.Analysis.Snowball | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Snowball <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> TokenFilter and Analyzer implementations that use Snowball stemmers. This project provides pre-compiled version of the Snowball stemmers based on revision 500 of the Tartarus Snowball repository, together with classes integrating them with the Lucene search engine. A few changes has been made to the static Snowball code and compiled stemmers: Class SnowballProgram is made abstract and contains new abstract method stem() to avoid reflection in Lucene filter class SnowballFilter. All use of StringBuffers has been refactored to StringBuilder for speed. Snowball BSD license header has been added to the Java classes to avoid having RAT adding ASL headers. See the Snowball home page for more information about the algorithms. IMPORTANT NOTICE ON BACKWARDS COMPATIBILITY! An index created using the Snowball module in Lucene 2.3.2 and below might not be compatible with the Snowball module in Lucene 2.4 or greater. For more information about this issue see: https://issues.apache.org/jira/browse/LUCENE-1142 Classes SnowballAnalyzer Filters StandardTokenizer with StandardFilter , LowerCaseFilter , StopFilter and SnowballFilter . Available stemmers are listed in org.tartarus.snowball.ext. The name of a stemmer is the part of the class name before \"Stemmer\", e.g., the stemmer in EnglishStemmer is named \"English\". NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer , with the following addition: As of 3.1, uses TurkishLowerCaseFilter for Turkish language. SnowballFilter A filter that stems words using a Snowball-generated stemmer. Available stemmers are listed in Lucene.Net.Tartarus.Snowball.Ext. NOTE : SnowballFilter expects lowercased text. For the Turkish language, see TurkishLowerCaseFilter . For other languages, see LowerCaseFilter . Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory SnowballPorterFilterFactory Factory for SnowballFilter , with configurable language Note: Use of the \"Lovins\" stemmer is not recommended, as it is implemented with reflection. <fieldType name=\"text_snowballstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SnowballPorterFilterFactory\" protected=\"protectedkeyword.txt\" language=\"English\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.SnowballAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.SnowballAnalyzer.html",
    "title": "Class SnowballAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SnowballAnalyzer Filters StandardTokenizer with StandardFilter , LowerCaseFilter , StopFilter and SnowballFilter . Available stemmers are listed in org.tartarus.snowball.ext. The name of a stemmer is the part of the class name before \"Stemmer\", e.g., the stemmer in EnglishStemmer is named \"English\". NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer , with the following addition: As of 3.1, uses TurkishLowerCaseFilter for Turkish language. Inheritance System.Object Analyzer SnowballAnalyzer Inherited Members Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Snowball Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SnowballAnalyzer : Analyzer Constructors | Improve this Doc View Source SnowballAnalyzer(LuceneVersion, String) Builds the named analyzer with no stop words. Declaration public SnowballAnalyzer(LuceneVersion matchVersion, string name) Parameters Type Name Description LuceneVersion matchVersion System.String name | Improve this Doc View Source SnowballAnalyzer(LuceneVersion, String, CharArraySet) Builds the named analyzer with the given stop words. Declaration public SnowballAnalyzer(LuceneVersion matchVersion, string name, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion System.String name CharArraySet stopWords Methods | Improve this Doc View Source CreateComponents(String, TextReader) Constructs a StandardTokenizer filtered by a StandardFilter , a LowerCaseFilter , a StopFilter , and a SnowballFilter Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.SnowballFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.SnowballFilter.html",
    "title": "Class SnowballFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SnowballFilter A filter that stems words using a Snowball-generated stemmer. Available stemmers are listed in Lucene.Net.Tartarus.Snowball.Ext. NOTE : SnowballFilter expects lowercased text. For the Turkish language, see TurkishLowerCaseFilter . For other languages, see LowerCaseFilter . Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory Inheritance System.Object AttributeSource TokenStream TokenFilter SnowballFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Snowball Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SnowballFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SnowballFilter(TokenStream, SnowballProgram) Declaration public SnowballFilter(TokenStream input, SnowballProgram stemmer) Parameters Type Name Description TokenStream input SnowballProgram stemmer | Improve this Doc View Source SnowballFilter(TokenStream, String) Construct the named stemming filter. Available stemmers are listed in Lucene.Net.Tartarus.Snowball.Ext. The name of a stemmer is the part of the class name before \"Stemmer\", e.g., the stemmer in EnglishStemmer is named \"English\". Declaration public SnowballFilter(TokenStream in, string name) Parameters Type Name Description TokenStream in the input tokens to stem System.String name the name of a stemmer Methods | Improve this Doc View Source IncrementToken() Returns the next input Token , after being stemmed Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.SnowballPorterFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Snowball.SnowballPorterFilterFactory.html",
    "title": "Class SnowballPorterFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Fields | Improve this Doc View Source PROTECTED_TOKENS Declaration public const string PROTECTED_TOKENS = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicAnalyzer.html",
    "title": "Class ClassicAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClassicAnalyzer Filters ClassicTokenizer with ClassicFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating ClassicAnalyzer : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords As of 2.9, StopFilter preserves position increments As of 2.4, Token s incorrectly identified as acronyms are corrected (see LUCENE-1068 ) ClassicAnalyzer was named StandardAnalyzer in Lucene versions prior to 3.1. As of 3.1, StandardAnalyzer implements Unicode text segmentation, as specified by UAX#29. Inheritance System.Object Analyzer StopwordAnalyzerBase ClassicAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ClassicAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source ClassicAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( STOP_WORDS_SET ). Declaration public ClassicAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See ClassicAnalyzer | Improve this Doc View Source ClassicAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public ClassicAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See ClassicAnalyzer CharArraySet stopWords stop words | Improve this Doc View Source ClassicAnalyzer(LuceneVersion, TextReader) Builds an analyzer with the stop words from the given reader. Declaration public ClassicAnalyzer(LuceneVersion matchVersion, TextReader stopwords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See ClassicAnalyzer TextReader stopwords 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 = null 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 TextReader reader Returns Type Description TokenStreamComponents"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicFilter.html",
    "title": "Class ClassicFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClassicFilter Normalizes tokens extracted with ClassicTokenizer . Inheritance System.Object AttributeSource TokenStream TokenFilter ClassicFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ClassicFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ClassicFilter(TokenStream) Construct filtering in . Declaration public ClassicFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS. Removes 's from the end of words. Removes dots from acronyms. Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicFilterFactory.html",
    "title": "Class ClassicFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicTokenizer.html",
    "title": "Class ClassicTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClassicTokenizer A grammar-based tokenizer constructed with JFlex (and then ported to .NET) This should be a good tokenizer for most European-language documents: Splits words at punctuation characters, removing punctuation. However, a dot that's not followed by whitespace is considered part of a token. Splits words at hyphens, unless there's a number in the token, in which case the whole token is interpreted as a product number and is not split. Recognizes email addresses and internet hostnames as one token. Many applications have specific tokenizer needs. If this tokenizer does not suit your application, please consider copying this source code directory to your project and maintaining your own grammar-based tokenizer. ClassicTokenizer was named StandardTokenizer in Lucene versions prior to 3.1. As of 3.1, StandardTokenizer implements Unicode text segmentation, as specified by UAX#29. Inheritance System.Object AttributeSource TokenStream Tokenizer ClassicTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() 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, System.IO.TextReader) Creates a new ClassicTokenizer with a given AttributeSource.AttributeFactory Declaration public ClassicTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, System.IO.TextReader input) Parameters Type Name Description LuceneVersion matchVersion AttributeSource.AttributeFactory factory System.IO.TextReader input | Improve this Doc View Source ClassicTokenizer(LuceneVersion, System.IO.TextReader) Creates a new instance of the ClassicTokenizer . Attaches the input to the newly created JFlex scanner. Declaration public ClassicTokenizer(LuceneVersion matchVersion, System.IO.TextReader input) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.IO.TextReader input The input reader See http://issues.apache.org/jira/browse/LUCENE-1068 Fields | Improve this Doc View Source ACRONYM Declaration public const int ACRONYM = null Field Value Type Description System.Int32 | Improve this Doc View Source ACRONYM_DEP Declaration public const int ACRONYM_DEP = null Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = null Field Value Type Description System.Int32 | Improve this Doc View Source APOSTROPHE Declaration public const int APOSTROPHE = null Field Value Type Description System.Int32 | Improve this Doc View Source CJ Declaration public const int CJ = null Field Value Type Description System.Int32 | Improve this Doc View Source COMPANY Declaration public const int COMPANY = null Field Value Type Description System.Int32 | Improve this Doc View Source EMAIL Declaration public const int EMAIL = null Field Value Type Description System.Int32 | Improve this Doc View Source HOST Declaration public const int HOST = null Field Value Type Description System.Int32 | Improve this Doc View Source NUM Declaration public const int NUM = null 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 | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.ClassicTokenizerFactory.html",
    "title": "Class ClassicTokenizerFactory | Apache Lucene.NET 4.8.0 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) TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, System.IO.TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, System.IO.TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.html",
    "title": "Namespace Lucene.Net.Analysis.Standard | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Fast, general-purpose grammar-based tokenizers. The org.apache.lucene.analysis.standard package contains three fast grammar-based tokenizers constructed with JFlex: StandardTokenizer : as of Lucene 3.1, implements the Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . Unlike UAX29URLEmailTokenizer , URLs and email addresses are not tokenized as single tokens, but are instead split up into tokens according to the UAX#29 word break rules. [StandardAnalyzer](xref:Lucene.Net.Analysis.Standard.StandardAnalyzer) includes [StandardTokenizer](xref:Lucene.Net.Analysis.Standard.StandardTokenizer), [StandardFilter](xref:Lucene.Net.Analysis.Standard.StandardFilter), [LowerCaseFilter](xref:Lucene.Net.Analysis.Core.LowerCaseFilter) and [StopFilter](xref:Lucene.Net.Analysis.Core.StopFilter). When the `Version` specified in the constructor is lower than 3.1, the ClassicTokenizer implementation is invoked. ClassicTokenizer : this class was formerly (prior to Lucene 3.1) named StandardTokenizer . (Its tokenization rules are not based on the Unicode Text Segmentation algorithm.) ClassicAnalyzer includes ClassicTokenizer , StandardFilter , LowerCaseFilter and StopFilter . UAX29URLEmailTokenizer : implements the Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . URLs and email addresses are also tokenized according to the relevant RFCs. [UAX29URLEmailAnalyzer](xref:Lucene.Net.Analysis.Standard.UAX29URLEmailAnalyzer) includes [UAX29URLEmailTokenizer](xref:Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizer), [StandardFilter](xref:Lucene.Net.Analysis.Standard.StandardFilter), [LowerCaseFilter](xref:Lucene.Net.Analysis.Core.LowerCaseFilter) and [StopFilter](xref:Lucene.Net.Analysis.Core.StopFilter). Classes ClassicAnalyzer Filters ClassicTokenizer with ClassicFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating ClassicAnalyzer : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords As of 2.9, StopFilter preserves position increments As of 2.4, Token s incorrectly identified as acronyms are corrected (see LUCENE-1068 ) ClassicAnalyzer was named StandardAnalyzer in Lucene versions prior to 3.1. As of 3.1, StandardAnalyzer implements Unicode text segmentation, as specified by UAX#29. ClassicFilter Normalizes tokens extracted with ClassicTokenizer . ClassicFilterFactory Factory for ClassicFilter . <fieldType name=\"text_clssc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ClassicTokenizerFactory\"/> <filter class=\"solr.ClassicFilterFactory\"/> </analyzer> </fieldType> ClassicTokenizer A grammar-based tokenizer constructed with JFlex (and then ported to .NET) This should be a good tokenizer for most European-language documents: Splits words at punctuation characters, removing punctuation. However, a dot that's not followed by whitespace is considered part of a token. Splits words at hyphens, unless there's a number in the token, in which case the whole token is interpreted as a product number and is not split. Recognizes email addresses and internet hostnames as one token. Many applications have specific tokenizer needs. If this tokenizer does not suit your application, please consider copying this source code directory to your project and maintaining your own grammar-based tokenizer. ClassicTokenizer was named StandardTokenizer in Lucene versions prior to 3.1. As of 3.1, StandardTokenizer implements Unicode text segmentation, as specified by UAX#29. ClassicTokenizerFactory Factory for ClassicTokenizer . <fieldType name=\"text_clssc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ClassicTokenizerFactory\" maxTokenLength=\"120\"/> </analyzer> </fieldType> StandardAnalyzer Filters StandardTokenizer with StandardFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating StandardAnalyzer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. As of 3.1, StandardTokenizer implements Unicode text segmentation, and StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords. ClassicTokenizer and ClassicAnalyzer are the pre-3.1 implementations of StandardTokenizer and StandardAnalyzer . As of 2.9, StopFilter preserves position increments As of 2.4, Token s incorrectly identified as acronyms are corrected (see LUCENE-1068 ) StandardFilter Normalizes tokens extracted with StandardTokenizer . StandardFilterFactory Factory for StandardFilter . <fieldType name=\"text_stndrd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.StandardFilterFactory\"/> </analyzer> </fieldType> StandardTokenizer A grammar-based tokenizer constructed with JFlex. As of Lucene version 3.1, this class implements the Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . Many applications have specific tokenizer needs. If this tokenizer does not suit your application, please consider copying this source code directory to your project and maintaining your own grammar-based tokenizer. You must specify the required LuceneVersion compatibility when creating StandardTokenizer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. As of 3.1, StandardTokenizer implements Unicode text segmentation. If you use a previous version number, you get the exact behavior of ClassicTokenizer for backwards compatibility. StandardTokenizerFactory Factory for StandardTokenizer . <fieldType name=\"text_stndrd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\" maxTokenLength=\"255\"/> </analyzer> </fieldType> StandardTokenizerImpl This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character <KATAKANA>: A sequence of katakana characters <HANGUL>: A sequence of Hangul characters StandardTokenizerInterface UAX29URLEmailAnalyzer Filters UAX29URLEmailTokenizer with StandardFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating UAX29URLEmailAnalyzer UAX29URLEmailTokenizer This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in ` Unicode Standard Annex #29 URLs and email addresses are also tokenized according to the relevant RFCs. Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <URL>: A URL <EMAIL>: An email address <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character You must specify the required LuceneVersion compatibility when creating UAX29URLEmailTokenizer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. UAX29URLEmailTokenizerFactory Factory for UAX29URLEmailTokenizer . <fieldType name=\"text_urlemail\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.UAX29URLEmailTokenizerFactory\" maxTokenLength=\"255\"/> </analyzer> </fieldType> UAX29URLEmailTokenizerImpl This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 URLs and email addresses are also tokenized according to the relevant RFCs. Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <URL>: A URL <EMAIL>: An email address <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character <KATAKANA>: A sequence of katakana characters <HANGUL>: A sequence of Hangul characters Interfaces IStandardTokenizerInterface Internal interface for supporting versioned grammars. @lucene.internal"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.IStandardTokenizerInterface.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.IStandardTokenizerInterface.html",
    "title": "Interface IStandardTokenizerInterface | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IStandardTokenizerInterface Internal interface for supporting versioned grammars. @lucene.internal 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 | Improve this Doc View Source GetText(ICharTermAttribute) Copies the matched text into the ICharTermAttribute Declaration void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Declaration void YyReset(TextReader reader) Parameters Type Name Description TextReader reader the new input stream"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardAnalyzer.html",
    "title": "Class StandardAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardAnalyzer Filters StandardTokenizer with StandardFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating StandardAnalyzer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. As of 3.1, StandardTokenizer implements Unicode text segmentation, and StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords. ClassicTokenizer and ClassicAnalyzer are the pre-3.1 implementations of StandardTokenizer and StandardAnalyzer . As of 2.9, StopFilter preserves position increments As of 2.4, Token s incorrectly identified as acronyms are corrected (see LUCENE-1068 ) Inheritance System.Object Analyzer StopwordAnalyzerBase StandardAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StandardAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source StandardAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( STOP_WORDS_SET ). Declaration public StandardAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See StandardAnalyzer | Improve this Doc View Source StandardAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public StandardAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See StandardAnalyzer CharArraySet stopWords stop words | Improve this Doc View Source StandardAnalyzer(LuceneVersion, TextReader) Builds an analyzer with the stop words from the given reader. Declaration public StandardAnalyzer(LuceneVersion matchVersion, TextReader stopwords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See StandardAnalyzer TextReader stopwords 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 = null 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 TextReader reader Returns Type Description TokenStreamComponents"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardFilter.html",
    "title": "Class StandardFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardFilter Normalizes tokens extracted with StandardTokenizer . Inheritance System.Object AttributeSource TokenStream TokenFilter StandardFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class StandardFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source StandardFilter(LuceneVersion, TokenStream) Declaration public StandardFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IncrementTokenClassic() Declaration public bool IncrementTokenClassic() Returns Type Description System.Boolean Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardFilterFactory.html",
    "title": "Class StandardFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizer.html",
    "title": "Class StandardTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardTokenizer A grammar-based tokenizer constructed with JFlex. As of Lucene version 3.1, this class implements the Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . Many applications have specific tokenizer needs. If this tokenizer does not suit your application, please consider copying this source code directory to your project and maintaining your own grammar-based tokenizer. You must specify the required LuceneVersion compatibility when creating StandardTokenizer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. As of 3.1, StandardTokenizer implements Unicode text segmentation. If you use a previous version number, you get the exact behavior of ClassicTokenizer for backwards compatibility. Inheritance System.Object AttributeSource TokenStream Tokenizer StandardTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StandardTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source StandardTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Creates a new StandardTokenizer with a given AttributeSource.AttributeFactory Declaration public StandardTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description LuceneVersion matchVersion AttributeSource.AttributeFactory factory TextReader input | Improve this Doc View Source StandardTokenizer(LuceneVersion, TextReader) Creates a new instance of the StandardTokenizer . Attaches the input to the newly created JFlex-generated (then ported to .NET) scanner. Declaration public StandardTokenizer(LuceneVersion matchVersion, TextReader input) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See StandardTokenizer 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 = null Field Value Type Description System.Int32 | Improve this Doc View Source ACRONYM_DEP Declaration public const int ACRONYM_DEP = null Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = null Field Value Type Description System.Int32 | Improve this Doc View Source APOSTROPHE Declaration public const int APOSTROPHE = null Field Value Type Description System.Int32 | Improve this Doc View Source CJ Declaration public const int CJ = null Field Value Type Description System.Int32 | Improve this Doc View Source COMPANY Declaration public const int COMPANY = null Field Value Type Description System.Int32 | Improve this Doc View Source EMAIL Declaration public const int EMAIL = null Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL Declaration public const int HANGUL = null Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA Declaration public const int HIRAGANA = null Field Value Type Description System.Int32 | Improve this Doc View Source HOST Declaration public const int HOST = null Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC Declaration public const int IDEOGRAPHIC = null Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA Declaration public const int KATAKANA = null Field Value Type Description System.Int32 | Improve this Doc View Source NUM Declaration public const int NUM = null Field Value Type Description System.Int32 | Improve this Doc View Source SOUTHEAST_ASIAN Declaration public const int SOUTHEAST_ASIAN = null 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 | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizerFactory.html",
    "title": "Class StandardTokenizerFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizerImpl.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizerImpl.html",
    "title": "Class StandardTokenizerImpl | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StandardTokenizerImpl : object, IStandardTokenizerInterface Constructors | Improve this Doc View Source StandardTokenizerImpl(TextReader) Creates a new scanner Declaration public StandardTokenizerImpl(TextReader in) Parameters Type Name Description 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 = null 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 | Improve this Doc View Source GetText(ICharTermAttribute) Fills CharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizerInterface.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.StandardTokenizerInterface.html",
    "title": "Class StandardTokenizerInterface | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardTokenizerInterface Inheritance System.Object StandardTokenizerInterface Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public static class StandardTokenizerInterface : object Fields | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public const int YYEOF = null Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std31.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std31.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std31 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard.Std31 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Backwards-compatible implementation to match #LUCENE_31 Classes StandardTokenizerImpl31 This class implements StandardTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3358 ) where Han and Hiragana characters would be split from combining characters: @deprecated This class is only for exact backwards compatibility UAX29URLEmailTokenizerImpl31 This class implements UAX29URLEmailTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3358 ) where Han and Hiragana characters would be split from combining characters: @deprecated This class is only for exact backwards compatibility"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std31.StandardTokenizerImpl31.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std31.StandardTokenizerImpl31.html",
    "title": "Class StandardTokenizerImpl31 | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Standard.Std31 Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StandardTokenizerImpl31 : object, IStandardTokenizerInterface Constructors | Improve this Doc View Source StandardTokenizerImpl31(TextReader) Creates a new scanner Declaration public StandardTokenizerImpl31(TextReader in) Parameters Type Name Description 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 = null 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 | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std31.UAX29URLEmailTokenizerImpl31.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std31.UAX29URLEmailTokenizerImpl31.html",
    "title": "Class UAX29URLEmailTokenizerImpl31 | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Standard.Std31 Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UAX29URLEmailTokenizerImpl31 : object, IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl31(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl31(TextReader in) Parameters Type Name Description 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 = null 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 | Improve this Doc View Source GetText(ICharTermAttribute) Fills CharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Closes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std34.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std34.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std34 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard.Std34 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Backwards-compatible implementation to match #LUCENE_34 Classes StandardTokenizerImpl34 This class implements StandardTokenizer using Unicode 6.0.0. @deprecated This class is only for exact backwards compatibility UAX29URLEmailTokenizerImpl34 This class implements UAX29URLEmailTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3880 ) where \"mailto:\" URI scheme prepended to an email address will disrupt recognition of the email address. @deprecated This class is only for exact backwards compatibility"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std34.StandardTokenizerImpl34.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std34.StandardTokenizerImpl34.html",
    "title": "Class StandardTokenizerImpl34 | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Standard.Std34 Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StandardTokenizerImpl34 : object, IStandardTokenizerInterface Constructors | Improve this Doc View Source StandardTokenizerImpl34(TextReader) Creates a new scanner Declaration public StandardTokenizerImpl34(TextReader in) Parameters Type Name Description 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 = null 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 | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std34.UAX29URLEmailTokenizerImpl34.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std34.UAX29URLEmailTokenizerImpl34.html",
    "title": "Class UAX29URLEmailTokenizerImpl34 | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Standard.Std34 Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UAX29URLEmailTokenizerImpl34 : object, IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl34(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl34(TextReader in) Parameters Type Name Description 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 = null 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 | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std36.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std36.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std36 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard.Std36 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Backwards-compatible implementation to match #LUCENE_36 Classes UAX29URLEmailTokenizerImpl36 This class implements UAX29URLEmailTokenizer using Unicode 6.0.0. @deprecated This class is only for exact backwards compatibility"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std36.UAX29URLEmailTokenizerImpl36.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std36.UAX29URLEmailTokenizerImpl36.html",
    "title": "Class UAX29URLEmailTokenizerImpl36 | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Standard.Std36 Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UAX29URLEmailTokenizerImpl36 : object, IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl36(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl36(TextReader in) Parameters Type Name Description 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 = null 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 | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std40.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std40.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std40 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard.Std40 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Backwards-compatible implementation to match #LUCENE_40 Classes StandardTokenizerImpl40 This class implements StandardTokenizer using Unicode 6.1.0. @deprecated This class is only for exact backwards compatibility UAX29URLEmailTokenizerImpl40 This class implements UAX29URLEmailTokenizer using Unicode 6.1.0. @deprecated This class is only for exact backwards compatibility"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std40.StandardTokenizerImpl40.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std40.StandardTokenizerImpl40.html",
    "title": "Class StandardTokenizerImpl40 | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Standard.Std40 Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StandardTokenizerImpl40 : object, IStandardTokenizerInterface Constructors | Improve this Doc View Source StandardTokenizerImpl40(TextReader) Creates a new scanner Declaration public StandardTokenizerImpl40(TextReader in) Parameters Type Name Description 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 = null 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 | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std40.UAX29URLEmailTokenizerImpl40.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.Std40.UAX29URLEmailTokenizerImpl40.html",
    "title": "Class UAX29URLEmailTokenizerImpl40 | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Standard.Std40 Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UAX29URLEmailTokenizerImpl40 : object, IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl40(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl40(TextReader in) Parameters Type Name Description 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 = null 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 | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailAnalyzer.html",
    "title": "Class UAX29URLEmailAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UAX29URLEmailAnalyzer Filters UAX29URLEmailTokenizer with StandardFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating UAX29URLEmailAnalyzer Inheritance System.Object Analyzer StopwordAnalyzerBase UAX29URLEmailAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UAX29URLEmailAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source UAX29URLEmailAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( STOP_WORDS_SET . Declaration public UAX29URLEmailAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match - See UAX29URLEmailAnalyzer | Improve this Doc View Source UAX29URLEmailAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public UAX29URLEmailAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match - See UAX29URLEmailAnalyzer CharArraySet stopWords stop words | Improve this Doc View Source UAX29URLEmailAnalyzer(LuceneVersion, TextReader) Builds an analyzer with the stop words from the given reader. Declaration public UAX29URLEmailAnalyzer(LuceneVersion matchVersion, TextReader stopwords) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match - See UAX29URLEmailAnalyzer TextReader stopwords 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 = null 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 TextReader reader Returns Type Description TokenStreamComponents"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizer.html",
    "title": "Class UAX29URLEmailTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UAX29URLEmailTokenizer This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in ` Unicode Standard Annex #29 URLs and email addresses are also tokenized according to the relevant RFCs. Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <URL>: A URL <EMAIL>: An email address <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character You must specify the required LuceneVersion compatibility when creating UAX29URLEmailTokenizer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. Inheritance System.Object AttributeSource TokenStream Tokenizer UAX29URLEmailTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UAX29URLEmailTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source UAX29URLEmailTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Creates a new UAX29URLEmailTokenizer with a given AttributeSource.AttributeFactory Declaration public UAX29URLEmailTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description LuceneVersion matchVersion AttributeSource.AttributeFactory factory TextReader input | Improve this Doc View Source UAX29URLEmailTokenizer(LuceneVersion, TextReader) Creates a new instance of the UAX29URLEmailTokenizer . Attaches the input to the newly created JFlex scanner. Declaration public UAX29URLEmailTokenizer(LuceneVersion matchVersion, TextReader input) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version TextReader input The input reader Fields | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = null Field Value Type Description System.Int32 | Improve this Doc View Source EMAIL Declaration public const int EMAIL = null Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL Declaration public const int HANGUL = null Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA Declaration public const int HIRAGANA = null Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC Declaration public const int IDEOGRAPHIC = null Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA Declaration public const int KATAKANA = null Field Value Type Description System.Int32 | Improve this Doc View Source NUM Declaration public const int NUM = null Field Value Type Description System.Int32 | Improve this Doc View Source SOUTHEAST_ASIAN Declaration public const int SOUTHEAST_ASIAN = null 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 = null 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 | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerFactory.html",
    "title": "Class UAX29URLEmailTokenizerFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerImpl.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerImpl.html",
    "title": "Class UAX29URLEmailTokenizerImpl | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UAX29URLEmailTokenizerImpl : object, IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl(TextReader in) Parameters Type Name Description TextReader in the TextReader to read input from. Fields | Improve this Doc View Source AVOID_BAD_URL Declaration public const int AVOID_BAD_URL = null 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 = null 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 | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.html",
    "title": "Namespace Lucene.Net.Analysis.Sv | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Sv <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Swedish. Classes SwedishAnalyzer Analyzer for Swedish. SwedishLightStemFilter A TokenFilter that applies SwedishLightStemmer to stem Swedish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . SwedishLightStemFilterFactory Factory for SwedishLightStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SwedishLightStemFilterFactory\"/> </analyzer> </fieldType> SwedishLightStemmer Light Stemmer for Swedish. This stemmer implements the algorithm described in: Report on CLEF-2003 Monolingual Tracks Jacques Savoy"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishAnalyzer.html",
    "title": "Class SwedishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SwedishAnalyzer Analyzer for Swedish. Inheritance System.Object Analyzer StopwordAnalyzerBase SwedishAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Sv Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SwedishAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source SwedishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public SwedishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source SwedishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public SwedishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source SwedishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public SwedishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Swedish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishLightStemFilter.html",
    "title": "Class SwedishLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SwedishLightStemFilter A TokenFilter that applies SwedishLightStemmer to stem Swedish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter SwedishLightStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Sv Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SwedishLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SwedishLightStemFilter(TokenStream) Declaration public SwedishLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishLightStemFilterFactory.html",
    "title": "Class SwedishLightStemFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Sv.SwedishLightStemmer.html",
    "title": "Class SwedishLightStemmer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Sv Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SwedishLightStemmer : object Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.html",
    "title": "Namespace Lucene.Net.Analysis.Synonym | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Synonym <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analysis components for Synonyms. Classes SolrSynonymParser Parser for the Solr synonyms format. Blank lines and lines starting with '#' are comments. Explicit mappings match any token sequence on the LHS of \"=>\" and replace with all alternatives on the RHS. These types of mappings ignore the expand parameter in the constructor. Example: i-pod, i pod => ipod Equivalent synonyms may be separated with commas and give no explicit mapping. In this case the mapping behavior will be taken from the expand parameter in the constructor. This allows the same synonym file to be used in different synonym handling strategies. Example: ipod, i-pod, i pod Multiple synonym mapping entries are merged. Example: foo => foo bar foo => baz is equivalent to foo => foo bar, baz This is a Lucene.NET EXPERIMENTAL API, use at your own risk SynonymFilter Matches single or multi word synonyms in a token stream. This token stream cannot properly handle position increments != 1, ie, you should place this filter before filtering out stop words. Note that with the current implementation, parsing is greedy, so whenever multiple parses would apply, the rule starting the earliest and parsing the most tokens wins. For example if you have these rules: a -> x a b -> y b c d -> z Then input a b c d e parses to y b c d , ie the 2nd rule \"wins\" because it started earliest and matched the most input tokens of other rules starting at that point. A future improvement to this filter could allow non-greedy parsing, such that the 3rd rule would win, and also separately allow multiple parses, such that all 3 rules would match, perhaps even on a rule by rule basis. NOTE : when a match occurs, the output tokens associated with the matching rule are \"stacked\" on top of the input stream (if the rule had keepOrig=true ) and also on top of another matched rule's output tokens. This is not a correct solution, as really the output should be an arbitrary graph/lattice. For example, with the above match, you would expect an exact PhraseQuery \"y b c\" to match the parsed tokens, but it will fail to do so. This limitation is necessary because Lucene's TokenStream (and index) cannot yet represent an arbitrary graph. NOTE : If multiple incoming tokens arrive on the same position, only the first token at that position is used for parsing. Subsequent tokens simply pass through and are not parsed. A future improvement would be to allow these tokens to also be matched. SynonymFilterFactory Factory for SynonymFilter . <fieldType name=\"text_synonym\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"synonyms.txt\" format=\"solr\" ignoreCase=\"false\" expand=\"true\" tokenizerFactory=\"solr.WhitespaceTokenizerFactory\" [optional tokenizer factory parameters]/> </analyzer> </fieldType> An optional param name prefix of \"tokenizerFactory.\" may be used for any init params that the SynonymFilterFactory needs to pass to the specified TokenizerFactory . If the TokenizerFactory expects an init parameters with the same name as an init param used by the SynonymFilterFactory , the prefix is mandatory. The optional format parameter controls how the synonyms will be parsed: It supports the short names of solr for SolrSynonymParser and wordnet for and WordnetSynonymParser , or your own SynonymMap.Parser class name. The default is solr . A custom SynonymMap.Parser is expected to have a constructor taking: dedup - true if duplicates should be ignored, false otherwise expand - true if conflation groups should be expanded, false if they are one-directional Analyzer analyzer - an analyzer used for each raw synonym SynonymMap A map of synonyms, keys and values are phrases. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SynonymMap.Builder Builds an FSTSynonymMap. Call Add(CharsRef, CharsRef, Boolean) until you have added all the mappings, then call Build() to get an FSTSynonymMap @lucene.experimental 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. @lucene.experimental"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SolrSynonymParser.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SolrSynonymParser.html",
    "title": "Class SolrSynonymParser | Apache Lucene.NET 4.8.0 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() Namespace : Lucene.Net.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SolrSynonymParser : SynonymMap.Parser Constructors | Improve this Doc View Source SolrSynonymParser(Boolean, Boolean, Analyzer) Declaration public SolrSynonymParser(bool dedup, bool expand, Analyzer analyzer) Parameters Type Name Description System.Boolean dedup System.Boolean expand Analyzer analyzer Methods | Improve this Doc View Source Parse(TextReader) Declaration public override void Parse(TextReader in) Parameters Type Name Description TextReader in Overrides SynonymMap.Parser.Parse(TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymFilter.html",
    "title": "Class SynonymFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SynonymFilter Matches single or multi word synonyms in a token stream. This token stream cannot properly handle position increments != 1, ie, you should place this filter before filtering out stop words. Note that with the current implementation, parsing is greedy, so whenever multiple parses would apply, the rule starting the earliest and parsing the most tokens wins. For example if you have these rules: a -> x a b -> y b c d -> z Then input a b c d e parses to y b c d , ie the 2nd rule \"wins\" because it started earliest and matched the most input tokens of other rules starting at that point. A future improvement to this filter could allow non-greedy parsing, such that the 3rd rule would win, and also separately allow multiple parses, such that all 3 rules would match, perhaps even on a rule by rule basis. NOTE : when a match occurs, the output tokens associated with the matching rule are \"stacked\" on top of the input stream (if the rule had keepOrig=true ) and also on top of another matched rule's output tokens. This is not a correct solution, as really the output should be an arbitrary graph/lattice. For example, with the above match, you would expect an exact PhraseQuery \"y b c\" to match the parsed tokens, but it will fail to do so. This limitation is necessary because Lucene's TokenStream (and index) cannot yet represent an arbitrary graph. NOTE : If multiple incoming tokens arrive on the same position, only the first token at that position is used for parsing. Subsequent tokens simply pass through and are not parsed. A future improvement would be to allow these tokens to also be matched. Inheritance System.Object AttributeSource TokenStream TokenFilter SynonymFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SynonymFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SynonymFilter(TokenStream, SynonymMap, Boolean) Declaration public SynonymFilter(TokenStream input, SynonymMap synonyms, bool ignoreCase) Parameters Type Name Description TokenStream input input tokenstream SynonymMap synonyms synonym map System.Boolean ignoreCase case-folds input for matching with . 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 = null Field Value Type Description System.String Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymFilterFactory.html",
    "title": "Class SynonymFilterFactory | Apache Lucene.NET 4.8.0 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: dedup - true if duplicates should be ignored, false otherwise expand - true if conflation groups should be expanded, false if they are one-directional Analyzer analyzer - an analyzer used for each raw synonym Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SynonymFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymMap.Builder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymMap.Builder.html",
    "title": "Class SynonymMap.Builder | Apache Lucene.NET 4.8.0 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 @lucene.experimental Inheritance System.Object SynonymMap.Builder SynonymMap.Parser Namespace : Lucene.Net.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Builder : object Constructors | Improve this Doc View Source Builder(Boolean) If dedup is true then identical rules (same input, same output) will be added only once. Declaration public Builder(bool dedup) Parameters Type Name Description System.Boolean dedup Methods | Improve this Doc View Source Add(CharsRef, CharsRef, Boolean) Add a phrase->phrase synonym mapping. Phrases are character sequences where words are separated with character zero (U+0000). Empty words (two U+0000s in a row) are not allowed in the input nor the output! Declaration public virtual void Add(CharsRef input, CharsRef output, bool includeOrig) Parameters Type Name Description CharsRef input input phrase CharsRef output output phrase System.Boolean includeOrig true if the original should be included | Improve this Doc View Source Build() Builds an SynonymMap and returns it. Declaration public virtual SynonymMap Build() Returns Type Description SynonymMap | Improve this Doc View Source Join(String[], CharsRef) Sugar: just joins the provided terms with WORD_SEPARATOR . reuse and its chars must not be null. Declaration public static CharsRef Join(string[] words, CharsRef reuse) Parameters Type Name Description System.String [] words CharsRef reuse Returns Type Description CharsRef"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymMap.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymMap.html",
    "title": "Class SynonymMap | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SynonymMap : object Constructors | Improve this Doc View Source SynonymMap(FST<BytesRef>, BytesRefHash, Int32) Declaration public SynonymMap(FST<BytesRef> fst, BytesRefHash words, int maxHorizontalContext) Parameters Type Name Description FST < BytesRef > fst BytesRefHash words System.Int32 maxHorizontalContext Fields | Improve this Doc View Source WORD_SEPARATOR for multiword support, you must separate words with this separator Declaration public const char WORD_SEPARATOR = null Field Value Type Description System.Char Properties | Improve this Doc View Source Fst map<input word, list<ord>> Declaration public FST<BytesRef> Fst { get; } Property Value Type Description FST < BytesRef > | Improve this Doc View Source MaxHorizontalContext maxHorizontalContext: maximum context we need on the tokenstream Declaration public int MaxHorizontalContext { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Words map<ord, outputword> Declaration public BytesRefHash Words { get; } Property Value Type Description BytesRefHash"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymMap.Parser.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.SynonymMap.Parser.html",
    "title": "Class SynonymMap.Parser | Apache Lucene.NET 4.8.0 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() Namespace : Lucene.Net.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class Parser : SynonymMap.Builder Constructors | Improve this Doc View Source Parser(Boolean, Analyzer) Declaration public Parser(bool dedup, Analyzer analyzer) Parameters Type Name Description System.Boolean dedup Analyzer analyzer Methods | Improve this Doc View Source Analyze(String, CharsRef) Sugar: analyzes the text with the analyzer and separates by WORD_SEPARATOR . reuse and its chars must not be null. Declaration public virtual CharsRef Analyze(string text, CharsRef reuse) Parameters Type Name Description System.String text CharsRef reuse Returns Type Description CharsRef | Improve this Doc View Source Parse(TextReader) Parse the given input, adding synonyms to the inherited SynonymMap.Builder . Declaration public abstract void Parse(TextReader in) Parameters Type Name Description TextReader in The input to parse"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.WordnetSynonymParser.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Synonym.WordnetSynonymParser.html",
    "title": "Class WordnetSynonymParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WordnetSynonymParser Parser for wordnet prolog format See http://wordnet.princeton.edu/man/prologdb.5WN.html for a description of the format. @lucene.experimental 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() Namespace : Lucene.Net.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public class WordnetSynonymParser : SynonymMap.Parser Constructors | Improve this Doc View Source WordnetSynonymParser(Boolean, Boolean, Analyzer) Declaration public WordnetSynonymParser(bool dedup, bool expand, Analyzer analyzer) Parameters Type Name Description System.Boolean dedup System.Boolean expand Analyzer analyzer Methods | Improve this Doc View Source Parse(TextReader) Declaration public override void Parse(TextReader in) Parameters Type Name Description TextReader in Overrides SynonymMap.Parser.Parse(TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.ApostropheFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.ApostropheFilter.html",
    "title": "Class ApostropheFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ApostropheFilter Strips all characters after an apostrophe (including the apostrophe itself). In Turkish, apostrophe is used to separate suffixes from proper names (continent, sea, river, lake, mountain, upland, proper names related to religion and mythology). This filter intended to be used before stem filters. For more information, see Role of Apostrophes in Turkish Information Retrieval Inheritance System.Object AttributeSource TokenStream TokenFilter ApostropheFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Tr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ApostropheFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ApostropheFilter(TokenStream) Declaration public ApostropheFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.ApostropheFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.ApostropheFilterFactory.html",
    "title": "Class ApostropheFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.html",
    "title": "Namespace Lucene.Net.Analysis.Tr | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Tr <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Turkish. Classes ApostropheFilter Strips all characters after an apostrophe (including the apostrophe itself). In Turkish, apostrophe is used to separate suffixes from proper names (continent, sea, river, lake, mountain, upland, proper names related to religion and mythology). This filter intended to be used before stem filters. For more information, see Role of Apostrophes in Turkish Information Retrieval ApostropheFilterFactory Factory for ApostropheFilter . <fieldType name=\"text_tr_lower_apostrophes\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ApostropheFilterFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> </analyzer> </fieldType> TurkishAnalyzer Analyzer for Turkish. TurkishLowerCaseFilter Normalizes Turkish token text to lower case. Turkish and Azeri have unique casing behavior for some characters. This filter applies Turkish lowercase rules. For more information, see http://en.wikipedia.org/wiki/Turkish_dotted_and_dotless_I TurkishLowerCaseFilterFactory Factory for TurkishLowerCaseFilter . <fieldType name=\"text_trlwr\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.TurkishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.TurkishAnalyzer.html",
    "title": "Class TurkishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TurkishAnalyzer Analyzer for Turkish. Inheritance System.Object Analyzer StopwordAnalyzerBase TurkishAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Tr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TurkishAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source TurkishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public TurkishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source TurkishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public TurkishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source TurkishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public TurkishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Turkish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , TurkishLowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.TurkishLowerCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.TurkishLowerCaseFilter.html",
    "title": "Class TurkishLowerCaseFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TurkishLowerCaseFilter Normalizes Turkish token text to lower case. Turkish and Azeri have unique casing behavior for some characters. This filter applies Turkish lowercase rules. For more information, see http://en.wikipedia.org/wiki/Turkish_dotted_and_dotless_I Inheritance System.Object AttributeSource TokenStream TokenFilter TurkishLowerCaseFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Tr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TurkishLowerCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TurkishLowerCaseFilter(TokenStream) Create a new TurkishLowerCaseFilter , that normalizes Turkish token text to lower case. Declaration public TurkishLowerCaseFilter(TokenStream in) Parameters Type Name Description TokenStream in TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.TurkishLowerCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Tr.TurkishLowerCaseFilterFactory.html",
    "title": "Class TurkishLowerCaseFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.AbstractAnalysisFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.AbstractAnalysisFactory.html",
    "title": "Class AbstractAnalysisFactory | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class AbstractAnalysisFactory : object 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 IDictionary < System.String , System.String > args Fields | Improve this Doc View Source LUCENE_MATCH_VERSION_PARAM Declaration public const string LUCENE_MATCH_VERSION_PARAM = null Field Value Type Description System.String | Improve this Doc View Source m_luceneMatchVersion the luceneVersion arg Declaration protected readonly LuceneVersion m_luceneMatchVersion Field Value Type Description LuceneVersion Properties | Improve this Doc View Source IsExplicitLuceneMatchVersion Declaration public virtual bool IsExplicitLuceneMatchVersion { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source LuceneMatchVersion Declaration public LuceneVersion LuceneMatchVersion { get; } Property Value Type Description LuceneVersion | Improve this Doc View Source OriginalArgs Declaration public IDictionary<string, string> OriginalArgs { get; } Property Value Type Description 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 IDictionary < System.String , System.String > args System.String name 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 IDictionary < System.String , System.String > args System.String name 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 IDictionary < System.String , System.String > args System.String name 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 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 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 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 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 IDictionary < System.String , System.String > args System.String name CultureInfo defaultVal Returns Type Description 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 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 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 IDictionary < System.String , System.String > args System.String name Returns Type Description 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 IDictionary < System.String , System.String > args System.String name Returns Type Description 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 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 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 IDictionary < System.String , System.String > args System.String name 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 IDictionary < System.String , System.String > args System.String name 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 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 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 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 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 IList < System.String > a list of file names with the escaping backslashed removed"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.BufferedCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.BufferedCharFilter.html",
    "title": "Class BufferedCharFilter | Apache Lucene.NET 4.8.0 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 CharFilter BaseCharFilter BufferedCharFilter Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.CorrectOffset(Int32) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BufferedCharFilter : BaseCharFilter 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 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 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 = null Field Value Type Description System.Int32 | Improve this Doc View Source m_lock The object used to synchronize access to the reader. Declaration protected object m_lock Field Value Type Description System.Object Properties | Improve this Doc View Source IsMarkSupported Indicates whether this reader supports the Mark(Int32) and Reset() methods. This implementation returns true . Declaration public override bool IsMarkSupported { get; } Property Value Type Description System.Boolean Overrides CharFilter.IsMarkSupported See Also Mark(Int32) Reset() | Improve this Doc View Source IsReady Indicates whether this reader is ready to be read without blocking. Declaration public override bool IsReady { get; } Property Value Type Description System.Boolean true if this reader will not block when Read() is called, false if unknown or blocking will occur. Overrides CharFilter.IsReady Methods | Improve this Doc View Source Close() Declaration public override void Close() | 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 | Improve this Doc View Source InitializeLifetimeService() Declaration public override object InitializeLifetimeService() Returns Type Description System.Object | 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. | Improve this Doc View Source Peek() Declaration public override int Peek() Returns Type Description System.Int32 | Improve this Doc View Source Read() Reads a single character from this reader and returns it with the two higher-order bytes set to 0. If possible, BufferedCharFilter returns a character from the buffer. If there are no characters available in the buffer, it fills the buffer and then returns a character. It returns -1 if there are no more characters in the source reader. Declaration public override int Read() Returns Type Description System.Int32 The character read or -1 if the end of the source reader has been reached. Overrides CharFilter.Read() | 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. | 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 Task < 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 | 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 Task < 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. | Improve this Doc View Source ReadLineAsync() Declaration public override Task<string> ReadLineAsync() Returns Type Description Task < System.String > | Improve this Doc View Source ReadToEnd() Declaration public override string ReadToEnd() Returns Type Description System.String | Improve this Doc View Source ReadToEndAsync() Declaration public override Task<string> ReadToEndAsync() Returns Type Description Task < System.String > | Improve this Doc View Source Reset() Resets this reader's position to the last Mark(Int32) location. Invocations of Read() and Skip(Int32) will occur from this new location. Declaration public override void Reset() Overrides CharFilter.Reset() 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. See Also Mark(Int32) IsMarkSupported Reset()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharacterUtils.CharacterBuffer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharacterUtils.CharacterBuffer.html",
    "title": "Class CharacterUtils.CharacterBuffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharacterUtils.CharacterBuffer A simple IO buffer to use with Fill(CharacterUtils.CharacterBuffer, TextReader) . Inheritance System.Object CharacterUtils.CharacterBuffer Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CharacterBuffer : object Properties | Improve this Doc View Source Buffer Returns the internal buffer Declaration public char[] Buffer { get; } Property Value Type Description System.Char [] the buffer | Improve this Doc View Source Length Return the length of the data in the internal buffer starting at Offset Declaration public int Length { get; } Property Value Type Description System.Int32 the length | Improve this Doc View Source Offset Returns the data offset in the internal buffer. Declaration public int Offset { get; } Property Value Type Description System.Int32 the offset Methods | Improve this Doc View Source Reset() Resets the CharacterBuffer. All internals are reset to its default values. Declaration public void Reset()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharacterUtils.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharacterUtils.html",
    "title": "Class CharacterUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharacterUtils CharacterUtils provides a unified interface to Character-related operations to implement backwards compatible character operations based on a LuceneVersion instance. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CharacterUtils Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class CharacterUtils : object Methods | Improve this Doc View Source CodePointAt(ICharSequence, Int32) Declaration public abstract int CodePointAt(ICharSequence seq, int offset) Parameters Type Name Description ICharSequence seq System.Int32 offset Returns Type Description System.Int32 | Improve this Doc View Source CodePointAt(Char[], Int32, Int32) Returns the code point at the given index of the char array where only elements with index less than the limit are used. Depending on the LuceneVersion passed to GetInstance(LuceneVersion) this method mimics the behavior of Character.CodePointAt(char[], int) as it would have been available on a Java 1.4 JVM or on a later virtual machine version. Declaration public abstract int CodePointAt(char[] chars, int offset, int limit) Parameters Type Name Description System.Char [] chars a character array System.Int32 offset the offset to the char values in the chars array to be converted System.Int32 limit the index afer the last element that should be used to calculate codepoint. Returns Type Description System.Int32 the Unicode code point at the given index | Improve this Doc View Source CodePointAt(String, Int32) Returns the code point at the given index of the ICharSequence . Depending on the LuceneVersion passed to GetInstance(LuceneVersion) this method mimics the behavior of Character.CodePointAt(char[], int) as it would have been available on a Java 1.4 JVM or on a later virtual machine version. Declaration public abstract int CodePointAt(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 | Improve this Doc View Source CodePointCount(String) Return the number of characters in seq . Declaration public abstract int CodePointCount(string seq) Parameters Type Name Description System.String seq Returns Type Description System.Int32 | Improve this Doc View Source Fill(CharacterUtils.CharacterBuffer, TextReader) Convenience method which calls Fill(buffer, reader, buffer.Buffer.Length) . Declaration public virtual bool Fill(CharacterUtils.CharacterBuffer buffer, TextReader reader) Parameters Type Name Description CharacterUtils.CharacterBuffer buffer 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 . 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 . Depending on the LuceneVersion passed to GetInstance(LuceneVersion) this method implements supplementary character awareness when filling the given buffer. For all LuceneVersion > 3.0 Fill(CharacterUtils.CharacterBuffer, TextReader, Int32) guarantees that the given CharacterUtils.CharacterBuffer will never contain a high surrogate character as the last element in the buffer unless it is the last available character in the reader. In other words, high and low surrogate pairs will always be preserved across buffer boarders. A return value of false means that this method call exhausted the reader, but there may be some bytes which have been read, which can be verified by checking whether buffer.Length > 0 . Declaration public abstract bool Fill(CharacterUtils.CharacterBuffer buffer, TextReader reader, int numChars) Parameters Type Name Description CharacterUtils.CharacterBuffer buffer the buffer to fill. 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 | Improve this Doc View Source GetInstance(LuceneVersion) Returns a CharacterUtils implementation according to the given LuceneVersion instance. Declaration public static CharacterUtils GetInstance(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion a version instance Returns Type Description CharacterUtils a CharacterUtils implementation according to the given LuceneVersion instance. | Improve this Doc View Source GetJava4Instance(LuceneVersion) Return a CharacterUtils instance compatible with Java 1.4. Declaration public static CharacterUtils GetJava4Instance(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Returns Type Description CharacterUtils | Improve this Doc View Source NewCharacterBuffer(Int32) Creates a new CharacterUtils.CharacterBuffer and allocates a char[] of the given bufferSize. Declaration public static CharacterUtils.CharacterBuffer NewCharacterBuffer(int bufferSize) Parameters Type Name Description System.Int32 bufferSize the internal char buffer size, must be >= 2 Returns Type Description CharacterUtils.CharacterBuffer a new CharacterUtils.CharacterBuffer instance. | Improve this Doc View Source OffsetByCodePoints(Char[], Int32, Int32, Int32, Int32) Return the index within buf[start:start+count] which is by offset code points from index . Declaration public abstract int OffsetByCodePoints(char[] buf, int start, int count, int index, int offset) Parameters Type Name Description System.Char [] buf System.Int32 start System.Int32 count System.Int32 index System.Int32 offset Returns Type Description System.Int32 | Improve this Doc View Source ToChars(Int32[], Int32, Int32, Char[], Int32) Converts a sequence of unicode code points to a sequence of .NET characters. Declaration public int ToChars(int[] src, int srcOff, int srcLen, char[] dest, int destOff) Parameters Type Name Description System.Int32 [] src System.Int32 srcOff System.Int32 srcLen System.Char [] dest System.Int32 destOff Returns Type Description System.Int32 the number of chars written to the destination buffer | Improve this Doc View Source ToCodePoints(Char[], Int32, Int32, Int32[], Int32) Converts a sequence of .NET characters to a sequence of unicode code points. Declaration public int ToCodePoints(char[] src, int srcOff, int srcLen, int[] dest, int destOff) Parameters Type Name Description System.Char [] src System.Int32 srcOff System.Int32 srcLen System.Int32 [] dest System.Int32 destOff Returns Type Description System.Int32 the number of code points written to the destination buffer | Improve this Doc View Source ToLower(Char[], Int32, Int32) Converts each unicode codepoint to lowerCase via starting at the given offset. Declaration public virtual void ToLower(char[] buffer, int offset, int limit) Parameters Type Name Description System.Char [] buffer the char buffer to lowercase System.Int32 offset the offset to start at System.Int32 limit the max char in the buffer to lower case | Improve this Doc View Source ToUpper(Char[], Int32, Int32) Converts each unicode codepoint to UpperCase via starting at the given offset. Declaration public virtual void ToUpper(char[] buffer, int offset, int limit) Parameters Type Name Description System.Char [] buffer the char buffer to UPPERCASE System.Int32 offset the offset to start at System.Int32 limit the max char in the buffer to lower case"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap.html",
    "title": "Class CharArrayMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArrayMap Inheritance System.Object CharArrayMap Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CharArrayMap : object Methods | Improve this Doc View Source Copy<TValue>(LuceneVersion, IDictionary<String, TValue>) Returns a copy of the given map as a CharArrayMap<TValue> . If the given map is a CharArrayMap<TValue> the ignoreCase property will be preserved. Note: If you intend to create a copy of another CharArrayMap<TValue> where the LuceneVersion of the source map differs from its copy CharArrayMap(LuceneVersion, IDictionary<String, TValue>, Boolean) should be used instead. The Copy<TValue>(LuceneVersion, IDictionary<String, TValue>) will preserve the LuceneVersion of the source map if it is an instance of CharArrayMap<TValue> . Declaration public static CharArrayMap<TValue> Copy<TValue>(LuceneVersion matchVersion, IDictionary<string, TValue> map) Parameters Type Name Description LuceneVersion matchVersion compatibility match version see Version note above for details. This argument will be ignored if the given map is a CharArrayMap<TValue> . 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"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap-1.EntryIterator.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap-1.EntryIterator.html",
    "title": "Class CharArrayMap<TValue>.EntryIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArrayMap<TValue>.EntryIterator public iterator class so efficient methods are exposed to users Inheritance System.Object CharArrayMap<TValue>.EntryIterator Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EntryIterator : IEnumerator<KeyValuePair<string, TValue>> Properties | Improve this Doc View Source Current Declaration public virtual KeyValuePair<string, TValue> Current { get; } Property Value Type Description 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 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"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap-1.EntrySet_.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap-1.EntrySet_.html",
    "title": "Class CharArrayMap<TValue>.EntrySet_ | Apache Lucene.NET 4.8.0 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 rather than 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 , and while there is no EntrySet() method or property in .NET, if there were it would certainly return . Inheritance System.Object CharArrayMap<TValue>.EntrySet_ Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EntrySet_ : ICollection<KeyValuePair<string, TValue>> 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 KeyValuePair < System.String , TValue> item | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Contains(KeyValuePair<String, TValue>) Declaration public bool Contains(KeyValuePair<string, TValue> item) Parameters Type Name Description KeyValuePair < System.String , TValue> item Returns Type Description System.Boolean | 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 KeyValuePair < System.String , TValue>[] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator GetEnumerator() Returns Type Description IEnumerator | Improve this Doc View Source Remove(KeyValuePair<String, TValue>) Declaration public bool Remove(KeyValuePair<string, TValue> item) Parameters Type Name Description KeyValuePair < System.String , TValue> item Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap-1.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMap-1.html",
    "title": "Class CharArrayMap<TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArrayMap<TValue> A simple class that stores key 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 first. You must specify the required LuceneVersion compatibility when creating CharArrayMap : As of 3.1, supplementary characters are properly lowercased. Before 3.1 supplementary characters could not be lowercased correctly due to the lack of Unicode 4 support in JDK 1.4. To use instances of CharArrayMap with the behavior before Lucene 3.1 pass a LuceneVersion < 3.1 to the constructors. Inheritance System.Object CharArrayMap<TValue> Implements IDictionary < System.String , TValue> Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CharArrayMap<TValue> : object, ICharArrayMap, IDictionary<string, TValue> Type Parameters Name Description TValue Constructors | Improve this Doc View Source CharArrayMap(LuceneVersion, IDictionary<String, TValue>, Boolean) Creates a map from the mappings in another map. Declaration public CharArrayMap(LuceneVersion matchVersion, IDictionary<string, TValue> c, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion compatibility match version see Version note above for details. IDictionary < System.String , TValue> c a map ( ) whose mappings to be copied System.Boolean ignoreCase false if and only if the set should be case sensitive; otherwise true . | Improve this Doc View Source CharArrayMap(LuceneVersion, Int32, Boolean) Create map with enough capacity to hold startSize terms Declaration public CharArrayMap(LuceneVersion matchVersion, int startSize, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version - see CharArrayMap<TValue> for details. System.Int32 startSize the initial capacity System.Boolean ignoreCase false if and only if the set should be case sensitive; otherwise true . Properties | Improve this Doc View Source Count Gets the number of key/value pairs contained in the CharArrayMap<TValue> . Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly true if the CharArrayMap<TValue> is read-only; otherwise false . Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[ICharSequence] Gets or sets the value associated with the specified key. Declaration public virtual TValue this[ICharSequence key] { get; set; } Parameters Type Name Description 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 ICollection < System.String > | Improve this Doc View Source MatchVersion The Lucene version corresponding to the compatibility behavior that this instance emulates Declaration public virtual LuceneVersion MatchVersion { get; } Property Value Type Description LuceneVersion | Improve this Doc View Source OriginalKeySet helper for CharArraySet to not produce endless recursion Declaration public ICollection<string> OriginalKeySet { get; } Property Value Type Description ICollection < System.String > | 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 in order to display a string representation of the values. Declaration public ICollection<TValue> Values { get; } Property Value Type Description 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 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 . Declaration public virtual void Clear() | Improve this Doc View Source Contains(KeyValuePair<String, TValue>) Not supported. Declaration public virtual bool Contains(KeyValuePair<string, TValue> item) Parameters Type Name Description KeyValuePair < System.String , TValue> item Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(ICharSequence) true if the text ICharSequence is in the Keys ; otherwise false Declaration public virtual bool ContainsKey(ICharSequence text) Parameters Type Name Description 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 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 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(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 will be thrown. Declaration public virtual void CopyTo(KeyValuePair<string, TValue>[] array, int arrayIndex) Parameters Type Name Description 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 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 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 | Improve this Doc View Source Get(ICharSequence) returns the value of the mapping of the chars inside this ICharSequence Declaration public virtual TValue Get(ICharSequence text) Parameters Type Name Description 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 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 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 IEnumerator < 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 | 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 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 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 representation of o in the . 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 IDictionary < 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 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 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 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 IEnumerable < KeyValuePair < 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 IEnumerable < 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 IEnumerable < 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 IEnumerable < KeyValuePair < System.String , TValue>> collection The values to add/update in the current map. | Improve this Doc View Source Remove(KeyValuePair<String, TValue>) Declaration public virtual bool Remove(KeyValuePair<string, TValue> item) Parameters Type Name Description KeyValuePair < System.String , TValue> item Returns Type Description System.Boolean | Improve this Doc View Source Remove(String) Declaration public virtual bool Remove(string key) Parameters Type Name Description System.String key Returns Type Description System.Boolean | Improve this Doc View Source ToString() Returns a string that represents the current object. (Inherited from .) Declaration public override string ToString() Returns Type Description System.String | 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 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 . Implements IDictionary<, > Extension Methods CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Boolean) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Byte) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Char) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Int32) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Int64) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, SByte) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Int16) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, UInt32) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, UInt64) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, UInt16) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Boolean) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Byte) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Char) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Decimal) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Double) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Single) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Int32) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Int64) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, SByte) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Int16) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, UInt32) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, UInt64) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, UInt16) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Boolean, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Byte, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Char, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Int32, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Int64, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, SByte, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Int16, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, UInt32, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, UInt64, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, UInt16, TValue) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Boolean, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Byte, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Char, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int32, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int64, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<SByte, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int16, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt32, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt64, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt16, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Boolean, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Byte, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Char, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int32, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int64, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<SByte, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int16, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt32, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt64, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt16, TValue>>) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Boolean, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Byte, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Char, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Int32, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Int64, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, SByte, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Int16, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, UInt32, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, UInt64, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, UInt16, out TValue)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMapExtensions.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArrayMapExtensions.html",
    "title": "Class CharArrayMapExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArrayMapExtensions LUCENENET specific extension methods for CharArrayMap Inheritance System.Object CharArrayMapExtensions Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public static class CharArrayMapExtensions : object Methods | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, Boolean) true if the key 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 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 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 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 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 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 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration 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 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration 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 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration 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 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<sbyte, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map 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 public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<ushort, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map 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 public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<uint, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map 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 public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<ulong, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map 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 IEnumerable < 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 IEnumerable < 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 IEnumerable < 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 IEnumerable < 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 IEnumerable < 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 IEnumerable < 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 public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<sbyte, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map IEnumerable < 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 public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<ushort, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map IEnumerable < 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 public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<uint, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map IEnumerable < 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 public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<ulong, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map IEnumerable < 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 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 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 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 public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, ulong key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.UInt64 key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArraySet.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArraySet.html",
    "title": "Class CharArraySet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArraySet A simple class that stores 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 first. You must specify the required LuceneVersion compatibility when creating CharArraySet : As of 3.1, supplementary characters are properly lowercased. Before 3.1 supplementary characters could not be lowercased correctly due to the lack of Unicode 4 support in JDK 1.4. To use instances of CharArraySet with the behavior before Lucene 3.1 pass a LuceneVersion to the constructors. Please note: This class implements but does not behave like it should in all cases. The generic type is , because you can add any object to it, that has a string representation (which is converted to a string). The add methods will use 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 Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CharArraySet : ISet<string> Constructors | Improve this Doc View Source CharArraySet(LuceneVersion, ICollection<String>, Boolean) Creates a set from a collection of objects. Declaration public CharArraySet(LuceneVersion matchVersion, ICollection<string> c, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion compatibility match version see CharArraySet for details. ICollection < System.String > c a collection whose elements to be placed into the set System.Boolean ignoreCase false if and only if the set should be case sensitive otherwise true . | Improve this Doc View Source CharArraySet(LuceneVersion, Int32, Boolean) Create set with enough capacity to hold startSize terms Declaration public CharArraySet(LuceneVersion matchVersion, int startSize, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion compatibility match version see CharArraySet for details. System.Int32 startSize the initial capacity System.Boolean ignoreCase false if and only if the set should be case sensitive otherwise true . Fields | Improve this Doc View Source EMPTY_SET Declaration public static readonly CharArraySet EMPTY_SET Field Value Type Description CharArraySet Properties | Improve this Doc View Source Count Gets the number of elements contained in the CharArraySet . Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly true if the CharArraySet is read-only; otherwise false . Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Add(ICharSequence) Add this ICharSequence into the set Declaration public virtual bool Add(ICharSequence text) Parameters Type Name Description 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 representation of o into the set. The method is called after setting the thread to . If the type of o is a value type, it will be converted using the . 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 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 ICharSequence is in the set Declaration public virtual bool Contains(ICharSequence cs) Parameters Type Name Description 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 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 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 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 IEnumerable <T> other collection to be checked for containment in this collection Returns Type Description System.Boolean true if this CharArraySet contains all of the elements in the specified collection; otherwise, false . Type Parameters Name Description T | Improve this Doc View Source Copy<T>(LuceneVersion, ICollection<T>) Returns a copy of the given set as a CharArraySet . If the given set is a CharArraySet the ignoreCase property will be preserved. Note: If you intend to create a copy of another CharArraySet where the LuceneVersion of the source set differs from its copy CharArraySet(LuceneVersion, ICollection<String>, Boolean) should be used instead. The Copy<T>(LuceneVersion, ICollection<T>) will preserve the LuceneVersion of the source set it is an instance of CharArraySet . Declaration public static CharArraySet Copy<T>(LuceneVersion matchVersion, ICollection<T> set) Parameters Type Name Description LuceneVersion matchVersion compatibility match version. This argument will be ignored if the given set is a CharArraySet . 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 ). 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 | Improve this Doc View Source ExceptWith(IEnumerable<String>) Declaration public void ExceptWith(IEnumerable<string> other) Parameters Type Name Description IEnumerable < System.String > other | Improve this Doc View Source GetEnumerator() Returns an for char[] instances in this set. Declaration public virtual IEnumerator GetEnumerator() Returns Type Description 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 | Improve this Doc View Source IntersectWith(IEnumerable<String>) Declaration public void IntersectWith(IEnumerable<string> other) Parameters Type Name Description IEnumerable < System.String > other | 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 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 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 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 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 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 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 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 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 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 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 Remove(String) Declaration public virtual bool Remove(string item) Parameters Type Name Description System.String item Returns Type Description System.Boolean | 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 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 SymmetricExceptWith(IEnumerable<String>) Declaration public void SymmetricExceptWith(IEnumerable<string> other) Parameters Type Name Description IEnumerable < System.String > other | Improve this Doc View Source ToString() Returns a string that represents the current object. (Inherited from .) Declaration public override string ToString() Returns Type Description System.String | 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 IEnumerable < 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 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 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 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 . Extension Methods CharArraySetExtensions.Add(CharArraySet, Boolean) CharArraySetExtensions.Add(CharArraySet, Byte) CharArraySetExtensions.Add(CharArraySet, Char) CharArraySetExtensions.Add(CharArraySet, Int32) CharArraySetExtensions.Add(CharArraySet, Int64) CharArraySetExtensions.Add(CharArraySet, SByte) CharArraySetExtensions.Add(CharArraySet, Int16) CharArraySetExtensions.Add(CharArraySet, UInt32) CharArraySetExtensions.Add(CharArraySet, UInt64) CharArraySetExtensions.Add(CharArraySet, UInt16) CharArraySetExtensions.Contains(CharArraySet, Boolean) CharArraySetExtensions.Contains(CharArraySet, Byte) CharArraySetExtensions.Contains(CharArraySet, Char) CharArraySetExtensions.Contains(CharArraySet, Int32) CharArraySetExtensions.Contains(CharArraySet, Int64) CharArraySetExtensions.Contains(CharArraySet, SByte) CharArraySetExtensions.Contains(CharArraySet, Int16) CharArraySetExtensions.Contains(CharArraySet, UInt32) CharArraySetExtensions.Contains(CharArraySet, UInt64) CharArraySetExtensions.Contains(CharArraySet, UInt16) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Byte>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Char>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Int32>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Int64>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<SByte>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Int16>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<UInt32>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<UInt64>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<UInt16>)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArraySetExtensions.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharArraySetExtensions.html",
    "title": "Class CharArraySetExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArraySetExtensions LUCENENET specific extension methods for CharArraySet Inheritance System.Object CharArraySetExtensions Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public static class CharArraySetExtensions : object Methods | Improve this Doc View Source Add(CharArraySet, Boolean) Add this 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 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 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 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 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 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 into the set Declaration 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 into the set Declaration 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 into the set Declaration 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 into the set Declaration 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 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 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 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 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 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 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 is in the set Declaration 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 is in the set Declaration 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 is in the set Declaration 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 is in the set Declaration 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 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 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 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 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 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 public static bool UnionWith(this CharArraySet set, IEnumerable<sbyte> other) Parameters Type Name Description CharArraySet set this CharArraySet 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 public static bool UnionWith(this CharArraySet set, IEnumerable<ushort> other) Parameters Type Name Description CharArraySet set this CharArraySet 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 public static bool UnionWith(this CharArraySet set, IEnumerable<uint> other) Parameters Type Name Description CharArraySet set this CharArraySet 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 public static bool UnionWith(this CharArraySet set, IEnumerable<ulong> other) Parameters Type Name Description CharArraySet set this CharArraySet IEnumerable < System.UInt64 > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharFilterFactory.html",
    "title": "Class CharFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharFilterFactory Abstract parent class for analysis factories that create CharFilter instances. Inheritance System.Object AbstractAnalysisFactory CharFilterFactory HTMLStripCharFilterFactory MappingCharFilterFactory PersianCharFilterFactory PatternReplaceCharFilterFactory Inherited Members AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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 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 ICollection < System.String > Methods | Improve this Doc View Source Create(TextReader) Wraps the given with a CharFilter . Declaration public abstract TextReader Create(TextReader input) Parameters Type Name Description TextReader input Returns Type Description 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 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 Type | Improve this Doc View Source ReloadCharFilters() Reloads the factory list. Changes to the factories are visible after the method ends, all iterators ( AvailableCharFilters ,...) stay consistent. NOTE: Only new factories are added, existing ones are never removed or replaced. This method is expensive and should only be called for discovery of new factories on the given classpath/classloader! Declaration public static void ReloadCharFilters()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.CharTokenizer.html",
    "title": "Class CharTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharTokenizer An abstract base class for simple, character-oriented tokenizers. You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. A new CharTokenizer API has been introduced with Lucene 3.1. This API moved from UTF-16 code units to UTF-32 codepoints to eventually add support for supplementary characters . The old char based API has been deprecated and should be replaced with the int based methods IsTokenChar(Int32) and Normalize(Int32) . As of Lucene 3.1 each CharTokenizer - constructor expects a LuceneVersion argument. Based on the given LuceneVersion either the new API or a backwards compatibility layer is used at runtime. For LuceneVersion < 3.1 the backwards compatibility layer ensures correct behavior even for indexes build with previous versions of Lucene. If a LuceneVersion >= 3.1 is used CharTokenizer requires the new API to be implemented by the instantiated class. Yet, the old char based API is not required anymore even if backwards compatibility must be preserved. CharTokenizer subclasses implementing the new API are fully backwards compatible if instantiated with LuceneVersion < 3.1. Note: If you use a subclass of CharTokenizer with LuceneVersion >= 3.1 on an index build with a version < 3.1, created tokens might not be compatible with the terms in your index. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer LetterTokenizer WhitespaceTokenizer IndicTokenizer RussianLetterTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class CharTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source CharTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Creates a new CharTokenizer instance Declaration public CharTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer TextReader input the input to split up into tokens | Improve this Doc View Source CharTokenizer(LuceneVersion, TextReader) Creates a new CharTokenizer instance Declaration public CharTokenizer(LuceneVersion matchVersion, TextReader input) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match TextReader input the input to split up into tokens Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IsTokenChar(Int32) Returns true iff a codepoint should be included in a token. This tokenizer generates as tokens adjacent sequences of codepoints which satisfy this predicate. Codepoints for which this is false are used to define token boundaries and are not included in tokens. Declaration protected abstract bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean | Improve this Doc View Source Normalize(Int32) Called on each token character to normalize it before it is added to the token. The default implementation does nothing. Subclasses may use this to, e.g., lowercase tokens. Declaration protected virtual int Normalize(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Int32 | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.ClasspathResourceLoader.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.ClasspathResourceLoader.html",
    "title": "Class ClasspathResourceLoader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClasspathResourceLoader Simple IResourceLoader that uses and to open resources and s, respectively. Inheritance System.Object ClasspathResourceLoader Implements IResourceLoader Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ClasspathResourceLoader : object, 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 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 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 Stream Implements IResourceLoader"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.ElisionFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.ElisionFilter.html",
    "title": "Class ElisionFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ElisionFilter Removes elisions from a TokenStream . For example, \"l'avion\" (the plane) will be tokenized as \"avion\" (plane). Elision in Wikipedia Inheritance System.Object AttributeSource TokenStream TokenFilter ElisionFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ElisionFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ElisionFilter(TokenStream, CharArraySet) Constructs an elision filter with a CharArraySet of stop words Declaration public ElisionFilter(TokenStream input, CharArraySet articles) Parameters Type Name Description TokenStream input the source TokenStream CharArraySet articles a set of stopword articles Methods | Improve this Doc View Source IncrementToken() Increments the TokenStream with a CharTermAttribute without elisioned start Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.ElisionFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.ElisionFilterFactory.html",
    "title": "Class ElisionFilterFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.FilesystemResourceLoader.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.FilesystemResourceLoader.html",
    "title": "Class FilesystemResourceLoader | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FilesystemResourceLoader : object, 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 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 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 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 Stream Implements IResourceLoader"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.FilteringTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.FilteringTokenFilter.html",
    "title": "Class FilteringTokenFilter | Apache Lucene.NET 4.8.0 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 is thrown when trying to disable position increments when filtering terms. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter StopFilter TypeTokenFilter CodepointCountFilter KeepWordFilter LengthFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class FilteringTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FilteringTokenFilter(LuceneVersion, TokenStream) Create a new FilteringTokenFilter . Declaration public FilteringTokenFilter(LuceneVersion version, TokenStream in) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the TokenStream to consume | Improve this Doc View Source FilteringTokenFilter(LuceneVersion, Boolean, TokenStream) Create a new FilteringTokenFilter . Declaration public FilteringTokenFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream input) Parameters Type Name Description LuceneVersion version the Lucene match version System.Boolean enablePositionIncrements whether to increment position increments when filtering out terms TokenStream input the input to consume Fields | Improve this Doc View Source m_version Declaration protected readonly LuceneVersion m_version Field Value Type Description LuceneVersion Properties | Improve this Doc View Source EnablePositionIncrements Declaration public virtual bool EnablePositionIncrements { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Accept() Override this method and return if the current input token should be returned by IncrementToken() . Declaration protected abstract bool Accept() Returns Type Description System.Boolean | Improve this Doc View Source End() Declaration public override void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() | Improve this Doc View Source SetEnablePositionIncrements(Boolean) If true , this TokenFilter will preserve positions of the incoming tokens (ie, accumulate and set position increments of the removed tokens). Generally, true is best as it does not lose information (positions of the original tokens) during indexing. When set, when a token is stopped (omitted), the position increment of the following token is incremented. Declaration public virtual void SetEnablePositionIncrements(bool enable) Parameters Type Name Description System.Boolean enable Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.html",
    "title": "Namespace Lucene.Net.Analysis.Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Util <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Utility functions for text analysis. Classes AbstractAnalysisFactory Abstract parent class for analysis factories TokenizerFactory , TokenFilterFactory and CharFilterFactory . The typical lifecycle for a factory consumer is: Create factory via its constructor (or via XXXFactory.ForName) (Optional) If the factory uses resources such as files, Inform(IResourceLoader) is called to initialize those resources. Consumer calls create() to obtain instances. BufferedCharFilter LUCENENET specific class to mimic Java's BufferedReader (that is, a reader that is seekable) so it supports Mark() and Reset() (which are part of the Java Reader class), but also provide the Correct() method of BaseCharFilter. CharacterUtils CharacterUtils provides a unified interface to Character-related operations to implement backwards compatible character operations based on a LuceneVersion instance. This is a Lucene.NET INTERNAL API, use at your own risk CharacterUtils.CharacterBuffer A simple IO buffer to use with Fill(CharacterUtils.CharacterBuffer, TextReader) . CharArrayMap CharArrayMap<TValue> A simple class that stores key 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 first. You must specify the required LuceneVersion compatibility when creating CharArrayMap : As of 3.1, supplementary characters are properly lowercased. Before 3.1 supplementary characters could not be lowercased correctly due to the lack of Unicode 4 support in JDK 1.4. To use instances of CharArrayMap with the behavior before Lucene 3.1 pass a LuceneVersion < 3.1 to the constructors. CharArrayMap<TValue>.EntryIterator public iterator class so efficient methods are exposed to users CharArrayMap<TValue>.EntrySet_ public EntrySet_ class so efficient methods are exposed to users NOTE: In .NET this was renamed to EntrySet_ because it conflicted with the method EntrySet(). Since there is also an extension method named IDictionary{K,V}.EntrySet() that this class needs to override, changing the name of the method was not possible because the extension method would produce incorrect results if it were inadvertently called, leading to hard-to-diagnose bugs. Another difference between this set and the Java counterpart is that it implements rather than 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 , and while there is no EntrySet() method or property in .NET, if there were it would certainly return . CharArrayMapExtensions LUCENENET specific extension methods for CharArrayMap CharArraySet A simple class that stores 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 first. You must specify the required LuceneVersion compatibility when creating CharArraySet : As of 3.1, supplementary characters are properly lowercased. Before 3.1 supplementary characters could not be lowercased correctly due to the lack of Unicode 4 support in JDK 1.4. To use instances of CharArraySet with the behavior before Lucene 3.1 pass a LuceneVersion to the constructors. Please note: This class implements but does not behave like it should in all cases. The generic type is , because you can add any object to it, that has a string representation (which is converted to a string). The add methods will use and store the result using a char[] buffer. The same behavior have the Contains(String) methods. The GetEnumerator() returns an IEnumerator{char[]} CharArraySetExtensions LUCENENET specific extension methods for CharArraySet CharFilterFactory Abstract parent class for analysis factories that create CharFilter instances. CharTokenizer An abstract base class for simple, character-oriented tokenizers. You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. A new CharTokenizer API has been introduced with Lucene 3.1. This API moved from UTF-16 code units to UTF-32 codepoints to eventually add support for supplementary characters . The old char based API has been deprecated and should be replaced with the int based methods IsTokenChar(Int32) and Normalize(Int32) . As of Lucene 3.1 each CharTokenizer - constructor expects a LuceneVersion argument. Based on the given LuceneVersion either the new API or a backwards compatibility layer is used at runtime. For LuceneVersion < 3.1 the backwards compatibility layer ensures correct behavior even for indexes build with previous versions of Lucene. If a LuceneVersion >= 3.1 is used CharTokenizer requires the new API to be implemented by the instantiated class. Yet, the old char based API is not required anymore even if backwards compatibility must be preserved. CharTokenizer subclasses implementing the new API are fully backwards compatible if instantiated with LuceneVersion < 3.1. Note: If you use a subclass of CharTokenizer with LuceneVersion >= 3.1 on an index build with a version < 3.1, created tokens might not be compatible with the terms in your index. ClasspathResourceLoader Simple IResourceLoader that uses and to open resources and s, respectively. ElisionFilter Removes elisions from a TokenStream . For example, \"l'avion\" (the plane) will be tokenized as \"avion\" (plane). Elision in Wikipedia ElisionFilterFactory Factory for ElisionFilter . <fieldType name=\"text_elsn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\" articles=\"stopwordarticles.txt\" ignoreCase=\"true\"/> </analyzer> </fieldType> FilesystemResourceLoader Simple IResourceLoader that opens resource files from the local file system, optionally resolving against a base directory. This loader wraps a delegate IResourceLoader that is used to resolve all files, the current base directory does not contain. NewInstance<T>(String) is always resolved against the delegate, as an System.Assembly is needed. You can chain several FilesystemResourceLoader s to allow lookup of files in more than one base directory. FilteringTokenFilter Abstract base class for TokenFilters that may remove tokens. You have to implement Accept() and return a boolean if the current token should be preserved. IncrementToken() uses this method to decide if a token should be passed to the caller. As of Lucene 4.4, an is thrown when trying to disable position increments when filtering terms. OpenStringBuilder A StringBuilder that allows one to access the array. RollingCharBuffer Acts like a forever growing char[] as you read characters into it from the provided reader, but internally it uses a circular buffer to only hold the characters that haven't been freed yet. This is like a PushbackReader, except you don't have to specify up-front the max size of the buffer, but you do have to periodically call FreeBefore(Int32) . StemmerUtil Some commonly-used stemming functions This is a Lucene.NET INTERNAL API, use at your own risk StopwordAnalyzerBase Base class for Analyzer s that need to make use of stopword sets. TokenFilterFactory Abstract parent class for analysis factories that create TokenFilter instances. TokenizerFactory Abstract parent class for analysis factories that create Tokenizer instances. WordlistLoader Loader for text files that represent a list of stopwords. IOUtils to obtain instances. This is a Lucene.NET INTERNAL API, use at your own risk Interfaces IMultiTermAwareComponent Add to any analysis factory component to allow returning an analysis component factory for use with partial terms in prefix queries, wildcard queries, range query endpoints, regex queries, etc. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IResourceLoader Abstraction for loading resources (streams, files, and classes). IResourceLoaderAware Interface for a component that needs to be initialized by an implementation of IResourceLoader ."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.IMultiTermAwareComponent.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.IMultiTermAwareComponent.html",
    "title": "Interface IMultiTermAwareComponent | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IMultiTermAwareComponent Add to any analysis factory component to allow returning an analysis component factory for use with partial terms in prefix queries, wildcard queries, range query endpoints, regex queries, etc. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IMultiTermAwareComponent Methods | Improve this Doc View Source GetMultiTermComponent() Returns an analysis component to handle analysis if multi-term queries. The returned component must be a TokenizerFactory , TokenFilterFactory or CharFilterFactory . Declaration AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.IResourceLoader.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.IResourceLoader.html",
    "title": "Interface IResourceLoader | Apache Lucene.NET 4.8.0 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 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 Stream"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.IResourceLoaderAware.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.IResourceLoaderAware.html",
    "title": "Interface IResourceLoaderAware | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IResourceLoaderAware Interface for a component that needs to be initialized by an implementation of IResourceLoader . Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IResourceLoaderAware Methods | Improve this Doc View Source Inform(IResourceLoader) Initializes this component with the provided IResourceLoader (used for loading types, embedded resources, files, etc). Declaration void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader See Also IResourceLoader"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.OpenStringBuilder.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.OpenStringBuilder.html",
    "title": "Class OpenStringBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenStringBuilder A StringBuilder that allows one to access the array. Inheritance System.Object OpenStringBuilder Implements ICharSequence Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class OpenStringBuilder : object, 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 ICharSequence csq Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(ICharSequence, Int32, Int32) Declaration public virtual OpenStringBuilder Append(ICharSequence csq, int start, int end) Parameters Type Name Description ICharSequence csq System.Int32 start System.Int32 end Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(StringBuilder) Declaration public virtual OpenStringBuilder Append(StringBuilder csq) Parameters Type Name Description StringBuilder csq Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(StringBuilder, Int32, Int32) Declaration public virtual OpenStringBuilder Append(StringBuilder csq, int start, int end) Parameters Type Name Description StringBuilder csq System.Int32 start System.Int32 end 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(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 start, int end) Parameters Type Name Description System.String csq System.Int32 start System.Int32 end 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 start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Returns Type Description 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 | Improve this Doc View Source UnsafeWrite(StringBuilder, Int32, Int32) Declaration public virtual void UnsafeWrite(StringBuilder b, int off, int len) Parameters Type Name Description StringBuilder b System.Int32 off System.Int32 len | 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 Write(OpenStringBuilder) Declaration public void Write(OpenStringBuilder arr) Parameters Type Name Description OpenStringBuilder arr | Improve this Doc View Source Write(StringBuilder) Declaration public void Write(StringBuilder arr) Parameters Type Name Description StringBuilder 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 Implements ICharSequence"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.RollingCharBuffer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.RollingCharBuffer.html",
    "title": "Class RollingCharBuffer | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RollingCharBuffer : object 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 TextReader reader"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.StemmerUtil.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.StemmerUtil.html",
    "title": "Class StemmerUtil | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class StemmerUtil : object Methods | Improve this Doc View Source Delete(Char[], Int32, Int32) Delete a character in-place Declaration public static int Delete(char[] s, int pos, int len) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 pos Position of character to delete System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after deletion | Improve this Doc View Source DeleteN(Char[], Int32, Int32, Int32) Delete n characters in-place Declaration public static int DeleteN(char[] s, int pos, int len, int nChars) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 pos Position of character to delete System.Int32 len Length of input buffer System.Int32 nChars number of characters to delete Returns Type Description System.Int32 length of input buffer after deletion | Improve this Doc View Source EndsWith(Char[], Int32, Char[]) Returns true if the character array ends with the suffix. Declaration public static bool EndsWith(char[] s, int len, char[] suffix) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 len length of input buffer System.Char [] suffix Suffix string to test Returns Type Description System.Boolean true if s ends with suffix | Improve this Doc View Source EndsWith(Char[], Int32, String) Returns true if the character array ends with the suffix. Declaration public static bool EndsWith(char[] s, int len, string suffix) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 len length of input buffer System.String suffix Suffix string to test Returns Type Description System.Boolean true if s ends with suffix | Improve this Doc View Source StartsWith(Char[], Int32, String) Returns true if the character array starts with the prefix. Declaration public static bool StartsWith(char[] s, int len, string prefix) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 len length of input buffer System.String prefix Prefix string to test Returns Type Description System.Boolean true if s starts with prefix"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.StopwordAnalyzerBase.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.StopwordAnalyzerBase.html",
    "title": "Class StopwordAnalyzerBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StopwordAnalyzerBase Base class for Analyzer s that need to make use of stopword sets. Inheritance System.Object Analyzer StopwordAnalyzerBase ArabicAnalyzer BulgarianAnalyzer BrazilianAnalyzer CatalanAnalyzer CJKAnalyzer SoraniAnalyzer StopAnalyzer CzechAnalyzer DanishAnalyzer GermanAnalyzer GreekAnalyzer EnglishAnalyzer SpanishAnalyzer BasqueAnalyzer PersianAnalyzer FinnishAnalyzer FrenchAnalyzer IrishAnalyzer GalicianAnalyzer HindiAnalyzer HungarianAnalyzer ArmenianAnalyzer IndonesianAnalyzer ItalianAnalyzer LatvianAnalyzer NorwegianAnalyzer PortugueseAnalyzer RomanianAnalyzer RussianAnalyzer ClassicAnalyzer StandardAnalyzer UAX29URLEmailAnalyzer SwedishAnalyzer TurkishAnalyzer Inherited Members Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.CreateComponents(String, TextReader) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class StopwordAnalyzerBase : Analyzer Constructors | Improve this Doc View Source StopwordAnalyzerBase(LuceneVersion) Creates a new Analyzer with an empty stopword set Declaration protected StopwordAnalyzerBase(LuceneVersion version) Parameters Type Name Description LuceneVersion version the Lucene version for cross version compatibility | Improve this Doc View Source StopwordAnalyzerBase(LuceneVersion, CharArraySet) Creates a new instance initialized with the given stopword set Declaration protected StopwordAnalyzerBase(LuceneVersion version, CharArraySet stopwords) Parameters Type Name Description LuceneVersion version the Lucene version for cross version compatibility CharArraySet stopwords the analyzer's stopword set Fields | Improve this Doc View Source m_matchVersion Declaration protected readonly LuceneVersion m_matchVersion Field Value Type Description LuceneVersion | Improve this Doc View Source m_stopwords An immutable stopword set Declaration protected readonly CharArraySet m_stopwords Field Value Type Description CharArraySet Properties | Improve this Doc View Source StopwordSet Returns the analyzer's stopword set or an empty set if the analyzer has no stopwords Declaration public virtual CharArraySet StopwordSet { get; } Property Value Type Description CharArraySet the analyzer's stopword set or an empty set if the analyzer has no stopwords Methods | Improve this Doc View Source LoadStopwordSet(FileInfo, LuceneVersion) Creates a CharArraySet from a file. Declaration protected static CharArraySet LoadStopwordSet(FileInfo stopwords, LuceneVersion matchVersion) Parameters Type Name Description FileInfo stopwords the stopwords file to load LuceneVersion matchVersion the Lucene version for cross version compatibility Returns Type Description CharArraySet a CharArraySet containing the distinct stopwords from the given file | Improve this Doc View Source LoadStopwordSet(Boolean, Type, String, String) Creates a CharArraySet from an embedded resource associated with a class. (See ). 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 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 | 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 TextReader stopwords the stopwords reader to load LuceneVersion matchVersion the Lucene version for cross version compatibility Returns Type Description CharArraySet a CharArraySet containing the distinct stopwords from the given reader"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.TokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.TokenFilterFactory.html",
    "title": "Class TokenFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenFilterFactory Abstract parent class for analysis factories that create TokenFilter instances. Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ArabicNormalizationFilterFactory ArabicStemFilterFactory BulgarianStemFilterFactory BrazilianStemFilterFactory CJKBigramFilterFactory CJKWidthFilterFactory SoraniNormalizationFilterFactory SoraniStemFilterFactory ChineseFilterFactory CommonGramsFilterFactory DictionaryCompoundWordTokenFilterFactory HyphenationCompoundWordTokenFilterFactory LowerCaseFilterFactory StopFilterFactory TypeTokenFilterFactory UpperCaseFilterFactory CzechStemFilterFactory GermanLightStemFilterFactory GermanMinimalStemFilterFactory GermanNormalizationFilterFactory GermanStemFilterFactory GreekLowerCaseFilterFactory GreekStemFilterFactory EnglishMinimalStemFilterFactory EnglishPossessiveFilterFactory KStemFilterFactory PorterStemFilterFactory SpanishLightStemFilterFactory PersianNormalizationFilterFactory FinnishLightStemFilterFactory FrenchLightStemFilterFactory FrenchMinimalStemFilterFactory IrishLowerCaseFilterFactory GalicianMinimalStemFilterFactory GalicianStemFilterFactory HindiNormalizationFilterFactory HindiStemFilterFactory HungarianLightStemFilterFactory HunspellStemFilterFactory IndonesianStemFilterFactory IndicNormalizationFilterFactory ItalianLightStemFilterFactory LatvianStemFilterFactory ASCIIFoldingFilterFactory CapitalizationFilterFactory CodepointCountFilterFactory HyphenatedWordsFilterFactory KeepWordFilterFactory KeywordMarkerFilterFactory KeywordRepeatFilterFactory LengthFilterFactory LimitTokenCountFilterFactory LimitTokenPositionFilterFactory RemoveDuplicatesTokenFilterFactory ScandinavianFoldingFilterFactory ScandinavianNormalizationFilterFactory StemmerOverrideFilterFactory TrimFilterFactory TruncateTokenFilterFactory WordDelimiterFilterFactory EdgeNGramFilterFactory NGramFilterFactory NorwegianLightStemFilterFactory NorwegianMinimalStemFilterFactory PatternCaptureGroupFilterFactory PatternReplaceFilterFactory DelimitedPayloadTokenFilterFactory NumericPayloadTokenFilterFactory TokenOffsetPayloadTokenFilterFactory TypeAsPayloadTokenFilterFactory PositionFilterFactory PortugueseLightStemFilterFactory PortugueseMinimalStemFilterFactory PortugueseStemFilterFactory ReverseStringFilterFactory RussianLightStemFilterFactory ShingleFilterFactory SnowballPorterFilterFactory ClassicFilterFactory StandardFilterFactory SwedishLightStemFilterFactory SynonymFilterFactory ApostropheFilterFactory TurkishLowerCaseFilterFactory ElisionFilterFactory Inherited Members AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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 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 ICollection < System.String > Methods | Improve this Doc View Source Create(TokenStream) Transform the specified input TokenStream Declaration public abstract TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream | Improve this Doc View Source ForName(String, IDictionary<String, String>) looks up a tokenfilter by name from the host project's referenced assemblies Declaration public static TokenFilterFactory ForName(string name, IDictionary<string, string> args) Parameters Type Name Description System.String name 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 Type | Improve this Doc View Source ReloadTokenFilters() Reloads the factory list. Changes to the factories are visible after the method ends, all iterators ( AvailableTokenFilters ,...) stay consistent. NOTE: Only new factories are added, existing ones are never removed or replaced. This method is expensive and should only be called for discovery of new factories on the given classpath/classloader! Declaration public static void ReloadTokenFilters()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.TokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.TokenizerFactory.html",
    "title": "Class TokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenizerFactory Abstract parent class for analysis factories that create Tokenizer instances. Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ArabicLetterTokenizerFactory CJKTokenizerFactory ChineseTokenizerFactory KeywordTokenizerFactory LetterTokenizerFactory LowerCaseTokenizerFactory WhitespaceTokenizerFactory EdgeNGramTokenizerFactory NGramTokenizerFactory PathHierarchyTokenizerFactory PatternTokenizerFactory RussianLetterTokenizerFactory ClassicTokenizerFactory StandardTokenizerFactory UAX29URLEmailTokenizerFactory WikipediaTokenizerFactory Inherited Members AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion 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 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 ICollection < System.String > Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Creates a TokenStream of the specified input using the given AttributeSource.AttributeFactory Declaration public abstract Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer | Improve this Doc View Source Create(TextReader) Creates a TokenStream of the specified input using the default attribute factory. Declaration public Tokenizer Create(TextReader input) Parameters Type Name Description TextReader input Returns Type Description Tokenizer | Improve this Doc View Source ForName(String, IDictionary<String, String>) looks up a tokenizer by name from the host project's referenced assemblies Declaration public static TokenizerFactory ForName(string name, IDictionary<string, string> args) Parameters Type Name Description System.String name 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 Type | Improve this Doc View Source ReloadTokenizers() Reloads the factory list. Changes to the factories are visible after the method ends, all iterators ( AvailableTokenizers ,...) stay consistent. NOTE: Only new factories are added, existing ones are never removed or replaced. This method is expensive and should only be called for discovery of new factories on the given classpath/classloader! Declaration public static void ReloadTokenizers()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.WordlistLoader.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Util.WordlistLoader.html",
    "title": "Class WordlistLoader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WordlistLoader Loader for text files that represent a list of stopwords. IOUtils to obtain instances. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object WordlistLoader Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class WordlistLoader : object 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 Stream stream Encoding encoding Returns Type Description IList < System.String > a list of non-blank non-comment lines with whitespace trimmed | 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 TextReader reader 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 TextReader reader containing a Snowball stopword list LuceneVersion matchVersion the Lucene LuceneVersion Returns Type Description CharArraySet A CharArraySet with the reader's words | Improve this Doc View Source GetStemDict(TextReader, CharArrayMap<String>) Reads a stem dictionary. Each line contains: word \\t stem (i.e. two tab separated words) Declaration public static CharArrayMap<string> GetStemDict(TextReader reader, CharArrayMap<string> result) Parameters Type Name Description TextReader reader CharArrayMap < System.String > result Returns Type Description CharArrayMap < System.String > stem dictionary that overrules the stemming algorithm | Improve this Doc View Source GetWordSet(TextReader, CharArraySet) Reads lines from a and adds every line as an entry to a CharArraySet (omitting leading and trailing whitespace). Every line of the should contain only one word. The words need to be in lowercase if you make use of an Analyzer which uses LowerCaseFilter (like StandardAnalyzer ). Declaration public static CharArraySet GetWordSet(TextReader reader, CharArraySet result) Parameters Type Name Description TextReader reader 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 and adds every line as an entry to a CharArraySet (omitting leading and trailing whitespace). Every line of the should contain only one word. The words need to be in lowercase if you make use of an Analyzer which uses LowerCaseFilter (like StandardAnalyzer ). Declaration public static CharArraySet GetWordSet(TextReader reader, LuceneVersion matchVersion) Parameters Type Name Description TextReader reader containing the wordlist LuceneVersion matchVersion the LuceneVersion Returns Type Description CharArraySet A CharArraySet with the reader's words | Improve this Doc View Source GetWordSet(TextReader, String, CharArraySet) Reads lines from a and adds every non-comment line as an entry to a CharArraySet (omitting leading and trailing whitespace). Every line of the should contain only one word. The words need to be in lowercase if you make use of an Analyzer which uses LowerCaseFilter (like StandardAnalyzer ). Declaration public static CharArraySet GetWordSet(TextReader reader, string comment, CharArraySet result) Parameters Type Name Description TextReader reader 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 and adds every non-comment line as an entry to a CharArraySet (omitting leading and trailing whitespace). Every line of the should contain only one word. The words need to be in lowercase if you make use of an Analyzer which uses LowerCaseFilter (like StandardAnalyzer ). Declaration public static CharArraySet GetWordSet(TextReader reader, string comment, LuceneVersion matchVersion) Parameters Type Name Description TextReader reader containing the wordlist System.String comment The string representing a comment. LuceneVersion matchVersion the LuceneVersion Returns Type Description CharArraySet A CharArraySet with the reader's words"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Wikipedia.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Wikipedia.html",
    "title": "Namespace Lucene.Net.Analysis.Wikipedia | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Wikipedia <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Tokenizer that is aware of Wikipedia syntax. Classes WikipediaTokenizer Extension of StandardTokenizer that is aware of Wikipedia syntax. It is based off of the Wikipedia tutorial available at http://en.wikipedia.org/wiki/Wikipedia:Tutorial , but it may not be complete. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WikipediaTokenizerFactory Factory for WikipediaTokenizer . <fieldType name=\"text_wiki\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WikipediaTokenizerFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Wikipedia.WikipediaTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Wikipedia.WikipediaTokenizer.html",
    "title": "Class WikipediaTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WikipediaTokenizer Extension of StandardTokenizer that is aware of Wikipedia syntax. It is based off of the Wikipedia tutorial available at http://en.wikipedia.org/wiki/Wikipedia:Tutorial , but it may not be complete. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream Tokenizer WikipediaTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Wikipedia Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WikipediaTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source WikipediaTokenizer(AttributeSource.AttributeFactory, TextReader, Int32, ICollection<String>) Creates a new instance of the WikipediaTokenizer . Attaches the input to a the newly created JFlex scanner. Uses the given AttributeSource.AttributeFactory . Declaration public WikipediaTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int tokenOutput, ICollection<string> untokenizedTypes) Parameters Type Name Description AttributeSource.AttributeFactory factory The AttributeSource.AttributeFactory TextReader input The input System.Int32 tokenOutput One of TOKENS_ONLY , UNTOKENIZED_ONLY , BOTH 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 TextReader input The Input | 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 TextReader input The input System.Int32 tokenOutput One of TOKENS_ONLY , UNTOKENIZED_ONLY , BOTH ICollection < System.String > untokenizedTypes Untokenized types Fields | Improve this Doc View Source ACRONYM_ID Declaration public const int ACRONYM_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM_ID Declaration public const int ALPHANUM_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source APOSTROPHE_ID Declaration public const int APOSTROPHE_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source BOLD Declaration public const string BOLD = null Field Value Type Description System.String | Improve this Doc View Source BOLD_ID Declaration public const int BOLD_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source BOLD_ITALICS Declaration public const string BOLD_ITALICS = null Field Value Type Description System.String | Improve this Doc View Source BOLD_ITALICS_ID Declaration public const int BOLD_ITALICS_ID = null 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 = null Field Value Type Description System.Int32 | Improve this Doc View Source CATEGORY Declaration public const string CATEGORY = null Field Value Type Description System.String | Improve this Doc View Source CATEGORY_ID Declaration public const int CATEGORY_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source CITATION Declaration public const string CITATION = null Field Value Type Description System.String | Improve this Doc View Source CITATION_ID Declaration public const int CITATION_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source CJ_ID Declaration public const int CJ_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source COMPANY_ID Declaration public const int COMPANY_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source EMAIL_ID Declaration public const int EMAIL_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source EXTERNAL_LINK Declaration public const string EXTERNAL_LINK = null Field Value Type Description System.String | Improve this Doc View Source EXTERNAL_LINK_ID Declaration public const int EXTERNAL_LINK_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source EXTERNAL_LINK_URL Declaration public const string EXTERNAL_LINK_URL = null Field Value Type Description System.String | Improve this Doc View Source EXTERNAL_LINK_URL_ID Declaration public const int EXTERNAL_LINK_URL_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source HEADING Declaration public const string HEADING = null Field Value Type Description System.String | Improve this Doc View Source HEADING_ID Declaration public const int HEADING_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source HOST_ID Declaration public const int HOST_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source INTERNAL_LINK Declaration public const string INTERNAL_LINK = null Field Value Type Description System.String | Improve this Doc View Source INTERNAL_LINK_ID Declaration public const int INTERNAL_LINK_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source ITALICS Declaration public const string ITALICS = null Field Value Type Description System.String | Improve this Doc View Source ITALICS_ID Declaration public const int ITALICS_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source NUM_ID Declaration public const int NUM_ID = null Field Value Type Description System.Int32 | Improve this Doc View Source SUB_HEADING Declaration public const string SUB_HEADING = null Field Value Type Description System.String | Improve this Doc View Source SUB_HEADING_ID Declaration public const int SUB_HEADING_ID = null 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 = null 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 = null 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 = null 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 | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Wikipedia.WikipediaTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Analysis.Wikipedia.WikipediaTokenizerFactory.html",
    "title": "Class WikipediaTokenizerFactory | Apache Lucene.NET 4.8.0 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 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 IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Among.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Among.html",
    "title": "Class Among | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Tartarus.Snowball Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Among : object 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 MethodInfo | Improve this Doc View Source MethodObject object to invoke method on Declaration public SnowballProgram MethodObject { get; } Property Value Type Description SnowballProgram | Improve this Doc View Source Result result of the lookup Declaration public int Result { get; } Property Value Type Description System.Int32 | Improve this Doc View Source S search string Declaration public char[] S { get; } Property Value Type Description System.Char [] | Improve this Doc View Source SubstringIndex index to longest matching substring Declaration public int SubstringIndex { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.ArmenianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.ArmenianStemmer.html",
    "title": "Class ArmenianStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.BasqueStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.BasqueStemmer.html",
    "title": "Class BasqueStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.CatalanStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.CatalanStemmer.html",
    "title": "Class CatalanStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.DanishStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.DanishStemmer.html",
    "title": "Class DanishStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.DutchStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.DutchStemmer.html",
    "title": "Class DutchStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.EnglishStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.EnglishStemmer.html",
    "title": "Class EnglishStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.FinnishStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.FinnishStemmer.html",
    "title": "Class FinnishStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.FrenchStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.FrenchStemmer.html",
    "title": "Class FrenchStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.German2Stemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.German2Stemmer.html",
    "title": "Class German2Stemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.GermanStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.GermanStemmer.html",
    "title": "Class GermanStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.html",
    "title": "Namespace Lucene.Net.Tartarus.Snowball.Ext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Tartarus.Snowball.Ext <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Autogenerated snowball stemmer implementations. Classes ArmenianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. BasqueStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. CatalanStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. DanishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. DutchStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. EnglishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. FinnishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. FrenchStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. German2Stemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. GermanStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. HungarianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. IrishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. ItalianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. KpStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. LovinsStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. NorwegianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. PorterStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. PortugueseStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. RomanianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. RussianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. SpanishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. SwedishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. TurkishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script."
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.HungarianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.HungarianStemmer.html",
    "title": "Class HungarianStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.IrishStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.IrishStemmer.html",
    "title": "Class IrishStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.ItalianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.ItalianStemmer.html",
    "title": "Class ItalianStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.KpStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.KpStemmer.html",
    "title": "Class KpStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.LovinsStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.LovinsStemmer.html",
    "title": "Class LovinsStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.NorwegianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.NorwegianStemmer.html",
    "title": "Class NorwegianStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.PorterStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.PorterStemmer.html",
    "title": "Class PorterStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.PortugueseStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.PortugueseStemmer.html",
    "title": "Class PortugueseStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.RomanianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.RomanianStemmer.html",
    "title": "Class RomanianStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.RussianStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.RussianStemmer.html",
    "title": "Class RussianStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.SpanishStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.SpanishStemmer.html",
    "title": "Class SpanishStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.SwedishStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.SwedishStemmer.html",
    "title": "Class SwedishStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.TurkishStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.Ext.TurkishStemmer.html",
    "title": "Class TurkishStemmer | Apache Lucene.NET 4.8.0 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) 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.html",
    "title": "Namespace Lucene.Net.Tartarus.Snowball | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Tartarus.Snowball <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Snowball stemmer API. Classes Among This is the rev 502 of the Snowball SVN trunk, but modified: made abstract and introduced abstract method stem to avoid expensive reflection in filter class. refactored StringBuffers to StringBuilder uses char[] as buffer instead of StringBuffer/StringBuilder eq_s,eq_s_b,insert,replace_s take CharSequence like eq_v and eq_v_b reflection calls (Lovins, etc) use EMPTY_ARGS/EMPTY_PARAMS SnowballProgram This is the rev 502 of the Snowball SVN trunk, but modified: made abstract and introduced abstract method stem to avoid expensive reflection in filter class. refactored StringBuffers to StringBuilder uses char[] as buffer instead of StringBuffer/StringBuilder eq_s,eq_s_b,insert,replace_s take CharSequence like eq_v and eq_v_b reflection calls (Lovins, etc) use EMPTY_ARGS/EMPTY_PARAMS"
  },
  "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.SnowballProgram.html": {
    "href": "api/Lucene.Net.Analysis.Common/Lucene.Net.Tartarus.Snowball.SnowballProgram.html",
    "title": "Class SnowballProgram | Apache Lucene.NET 4.8.0 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 Namespace : Lucene.Net.Tartarus.Snowball Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class SnowballProgram : object 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 StringBuilder s Returns Type Description 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 Declaration protected virtual StringBuilder SliceTo(StringBuilder s) Parameters Type Name Description StringBuilder s Returns Type Description StringBuilder | Improve this Doc View Source Stem() Declaration public abstract bool Stem() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Analysis.Common/overview.html": {
    "href": "api/Lucene.Net.Analysis.Common/overview.html",
    "title": "Lucene.Net.Analysis.Common | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Lucene.Net.Analysis.Common <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzers for indexing content in different languages and domains. For an introduction to Lucene's analysis API, see the Lucene.Net.Analysis package documentation. This module contains concrete components ( CharFilter s, Tokenizer s, and ( TokenFilter s) for analyzing different types of content. It also provides a number of Analyzer s for different languages that you can use to get started quickly."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.BinaryDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.BinaryDictionary.html",
    "title": "Class BinaryDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryDictionary Base class for a binary-encoded in-memory dictionary. Inheritance System.Object BinaryDictionary TokenInfoDictionary UnknownDictionary Implements IDictionary Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public abstract class BinaryDictionary : object, IDictionary Constructors | Improve this Doc View Source BinaryDictionary() Declaration protected BinaryDictionary() Fields | Improve this Doc View Source DICT_FILENAME_SUFFIX Declaration public static readonly string DICT_FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source DICT_HEADER Declaration public static readonly string DICT_HEADER Field Value Type Description System.String | Improve this Doc View Source HAS_BASEFORM flag that the entry has baseform data. otherwise its not inflected (same as surface form) Declaration public static readonly int HAS_BASEFORM Field Value Type Description System.Int32 | Improve this Doc View Source HAS_PRONUNCIATION flag that the entry has pronunciation data. otherwise pronunciation is the reading Declaration public static readonly int HAS_PRONUNCIATION Field Value Type Description System.Int32 | Improve this Doc View Source HAS_READING flag that the entry has reading data. otherwise reading is surface form converted to katakana Declaration public static readonly int HAS_READING Field Value Type Description System.Int32 | Improve this Doc View Source POSDICT_FILENAME_SUFFIX Declaration public static readonly string POSDICT_FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source POSDICT_HEADER Declaration public static readonly string POSDICT_HEADER Field Value Type Description System.String | Improve this Doc View Source TARGETMAP_FILENAME_SUFFIX Declaration public static readonly string TARGETMAP_FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source TARGETMAP_HEADER Declaration public static readonly string TARGETMAP_HEADER Field Value Type Description System.String | Improve this Doc View Source VERSION Declaration public static readonly int VERSION Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetBaseForm(Int32, Char[], Int32, Int32) Declaration public virtual string GetBaseForm(int wordId, char[] surfaceForm, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surfaceForm System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetInflectionForm(Int32) Declaration public virtual string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetInflectionType(Int32) Declaration public virtual string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetLeftId(Int32) Declaration public virtual int GetLeftId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetPartOfSpeech(Int32) Declaration public virtual string GetPartOfSpeech(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetPronunciation(Int32, Char[], Int32, Int32) Declaration public virtual string GetPronunciation(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Declaration public virtual string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetResource(String) Declaration protected Stream GetResource(string suffix) Parameters Type Name Description System.String suffix Returns Type Description Stream | Improve this Doc View Source GetRightId(Int32) Declaration public virtual int GetRightId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetTypeResource(Type, String) Declaration public static Stream GetTypeResource(Type clazz, string suffix) Parameters Type Name Description Type clazz System.String suffix Returns Type Description Stream | Improve this Doc View Source GetWordCost(Int32) Declaration public virtual int GetWordCost(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source LookupWordIds(Int32, Int32sRef) Declaration public virtual void LookupWordIds(int sourceId, Int32sRef ref) Parameters Type Name Description System.Int32 sourceId Int32sRef ref Implements IDictionary"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.CharacterDefinition.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.CharacterDefinition.html",
    "title": "Class CharacterDefinition | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharacterDefinition Character category data. Inheritance System.Object CharacterDefinition Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class CharacterDefinition : object Fields | Improve this Doc View Source ALPHA Declaration public static readonly byte ALPHA Field Value Type Description System.Byte | Improve this Doc View Source CLASS_COUNT Declaration public static readonly int CLASS_COUNT Field Value Type Description System.Int32 | Improve this Doc View Source CYRILLIC Declaration public static readonly byte CYRILLIC Field Value Type Description System.Byte | Improve this Doc View Source DEFAULT Declaration public static readonly byte DEFAULT Field Value Type Description System.Byte | Improve this Doc View Source FILENAME_SUFFIX Declaration public static readonly string FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source GREEK Declaration public static readonly byte GREEK Field Value Type Description System.Byte | Improve this Doc View Source HEADER Declaration public static readonly string HEADER Field Value Type Description System.String | Improve this Doc View Source HIRAGANA Declaration public static readonly byte HIRAGANA Field Value Type Description System.Byte | Improve this Doc View Source KANJI Declaration public static readonly byte KANJI Field Value Type Description System.Byte | Improve this Doc View Source KANJINUMERIC Declaration public static readonly byte KANJINUMERIC Field Value Type Description System.Byte | Improve this Doc View Source KATAKANA Declaration public static readonly byte KATAKANA Field Value Type Description System.Byte | Improve this Doc View Source NGRAM Declaration public static readonly byte NGRAM Field Value Type Description System.Byte | Improve this Doc View Source NUMERIC Declaration public static readonly byte NUMERIC Field Value Type Description System.Byte | Improve this Doc View Source SPACE Declaration public static readonly byte SPACE Field Value Type Description System.Byte | Improve this Doc View Source SYMBOL Declaration public static readonly byte SYMBOL Field Value Type Description System.Byte | Improve this Doc View Source VERSION Declaration public static readonly int VERSION Field Value Type Description System.Int32 Properties | Improve this Doc View Source Instance Declaration public static CharacterDefinition Instance { get; } Property Value Type Description CharacterDefinition Methods | Improve this Doc View Source GetCharacterClass(Char) Declaration public byte GetCharacterClass(char c) Parameters Type Name Description System.Char c Returns Type Description System.Byte | Improve this Doc View Source IsGroup(Char) Declaration public bool IsGroup(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source IsInvoke(Char) Declaration public bool IsInvoke(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source IsKanji(Char) Declaration public bool IsKanji(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source LookupCharacterClass(String) Declaration public static byte LookupCharacterClass(string characterClassName) Parameters Type Name Description System.String characterClassName Returns Type Description System.Byte"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.ConnectionCosts.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.ConnectionCosts.html",
    "title": "Class ConnectionCosts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConnectionCosts n-gram connection cost data Inheritance System.Object ConnectionCosts Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class ConnectionCosts : object Fields | Improve this Doc View Source FILENAME_SUFFIX Declaration public static readonly string FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source HEADER Declaration public static readonly string HEADER Field Value Type Description System.String | Improve this Doc View Source VERSION Declaration public static readonly int VERSION Field Value Type Description System.Int32 Properties | Improve this Doc View Source Instance Declaration public static ConnectionCosts Instance { get; } Property Value Type Description ConnectionCosts Methods | Improve this Doc View Source Get(Int32, Int32) Declaration public int Get(int forwardId, int backwardId) Parameters Type Name Description System.Int32 forwardId System.Int32 backwardId Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.Dictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.Dictionary.html",
    "title": "Class Dictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Dictionary Inheritance System.Object Dictionary Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class Dictionary : object Fields | Improve this Doc View Source INTERNAL_SEPARATOR Declaration public static readonly string INTERNAL_SEPARATOR Field Value Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.html",
    "title": "Namespace Lucene.Net.Analysis.Ja.Dict | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja.Dict <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Kuromoji dictionary implementation. Classes BinaryDictionary Base class for a binary-encoded in-memory dictionary. CharacterDefinition Character category data. ConnectionCosts n-gram connection cost data Dictionary TokenInfoDictionary Binary dictionary implementation for a known-word dictionary model: Words are encoded into an FST mapping to a list of wordIDs. TokenInfoFST Thin wrapper around an FST with root-arc caching for Japanese. Depending upon fasterButMoreRam, either just kana (191 arcs), or kana and han (28,607 arcs) are cached. The latter offers additional performance at the cost of more RAM. UnknownDictionary Dictionary for unknown-word handling. UserDictionary Class for building a User Dictionary. This class allows for custom segmentation of phrases. Interfaces IDictionary Dictionary interface for retrieving morphological data by id."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.IDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.IDictionary.html",
    "title": "Interface IDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDictionary Dictionary interface for retrieving morphological data by id. Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IDictionary Methods | Improve this Doc View Source GetBaseForm(Int32, Char[], Int32, Int32) Get base form of word. Declaration string GetBaseForm(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId Word ID of token. System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Base form (only different for inflected words, otherwise null). | Improve this Doc View Source GetInflectionForm(Int32) Get inflection form of tokens. Declaration string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.String Inflection form, or null. | Improve this Doc View Source GetInflectionType(Int32) Get inflection type of tokens. Declaration string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.String Inflection type, or null. | Improve this Doc View Source GetLeftId(Int32) Get left id of specified word. Declaration int GetLeftId(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.Int32 Left id. | Improve this Doc View Source GetPartOfSpeech(Int32) Get Part-Of-Speech of tokens Declaration string GetPartOfSpeech(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.String Part-Of-Speech of the token. | Improve this Doc View Source GetPronunciation(Int32, Char[], Int32, Int32) Get pronunciation of tokens Declaration string GetPronunciation(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId Word ID of token. System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Pronunciation of the token. | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Get reading of tokens. Declaration string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId Word ID of token. System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Reading of the token. | Improve this Doc View Source GetRightId(Int32) Get right id of specified word. Declaration int GetRightId(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.Int32 Right id. | Improve this Doc View Source GetWordCost(Int32) Get word cost of specified word Declaration int GetWordCost(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.Int32 Word's cost."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.TokenInfoDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.TokenInfoDictionary.html",
    "title": "Class TokenInfoDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenInfoDictionary Binary dictionary implementation for a known-word dictionary model: Words are encoded into an FST mapping to a list of wordIDs. Inheritance System.Object BinaryDictionary TokenInfoDictionary Implements IDictionary Inherited Members BinaryDictionary.DICT_FILENAME_SUFFIX BinaryDictionary.TARGETMAP_FILENAME_SUFFIX BinaryDictionary.POSDICT_FILENAME_SUFFIX BinaryDictionary.DICT_HEADER BinaryDictionary.TARGETMAP_HEADER BinaryDictionary.POSDICT_HEADER BinaryDictionary.VERSION BinaryDictionary.GetResource(String) BinaryDictionary.GetTypeResource(Type, String) BinaryDictionary.LookupWordIds(Int32, Int32sRef) BinaryDictionary.GetLeftId(Int32) BinaryDictionary.GetRightId(Int32) BinaryDictionary.GetWordCost(Int32) BinaryDictionary.GetBaseForm(Int32, Char[], Int32, Int32) BinaryDictionary.GetReading(Int32, Char[], Int32, Int32) BinaryDictionary.GetPartOfSpeech(Int32) BinaryDictionary.GetPronunciation(Int32, Char[], Int32, Int32) BinaryDictionary.GetInflectionType(Int32) BinaryDictionary.GetInflectionForm(Int32) BinaryDictionary.HAS_BASEFORM BinaryDictionary.HAS_READING BinaryDictionary.HAS_PRONUNCIATION Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class TokenInfoDictionary : BinaryDictionary, IDictionary Fields | Improve this Doc View Source FST_FILENAME_SUFFIX Declaration public static readonly string FST_FILENAME_SUFFIX Field Value Type Description System.String Properties | Improve this Doc View Source FST Declaration public TokenInfoFST FST { get; } Property Value Type Description TokenInfoFST | Improve this Doc View Source Instance Declaration public static TokenInfoDictionary Instance { get; } Property Value Type Description TokenInfoDictionary Implements IDictionary"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.TokenInfoFST.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.TokenInfoFST.html",
    "title": "Class TokenInfoFST | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenInfoFST Thin wrapper around an FST with root-arc caching for Japanese. Depending upon fasterButMoreRam, either just kana (191 arcs), or kana and han (28,607 arcs) are cached. The latter offers additional performance at the cost of more RAM. Inheritance System.Object TokenInfoFST Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class TokenInfoFST : object Constructors | Improve this Doc View Source TokenInfoFST(FST<Nullable<Int64>>, Boolean) Declaration public TokenInfoFST(FST<long?> fst, bool fasterButMoreRam) Parameters Type Name Description FST < System.Nullable < System.Int64 >> fst System.Boolean fasterButMoreRam Properties | Improve this Doc View Source NoOutput Declaration public long? NoOutput { get; } Property Value Type Description System.Nullable < System.Int64 > Methods | Improve this Doc View Source FindTargetArc(Int32, FST.Arc<Nullable<Int64>>, FST.Arc<Nullable<Int64>>, Boolean, FST.BytesReader) Declaration public FST.Arc<long?> FindTargetArc(int ch, FST.Arc<long?> follow, FST.Arc<long?> arc, bool useCache, FST.BytesReader fstReader) Parameters Type Name Description System.Int32 ch FST.Arc < System.Nullable < System.Int64 >> follow FST.Arc < System.Nullable < System.Int64 >> arc System.Boolean useCache FST.BytesReader fstReader Returns Type Description FST.Arc < System.Nullable < System.Int64 >> | Improve this Doc View Source GetBytesReader() Declaration public FST.BytesReader GetBytesReader() Returns Type Description FST.BytesReader | Improve this Doc View Source GetFirstArc(FST.Arc<Nullable<Int64>>) Declaration public FST.Arc<long?> GetFirstArc(FST.Arc<long?> arc) Parameters Type Name Description FST.Arc < System.Nullable < System.Int64 >> arc Returns Type Description FST.Arc < System.Nullable < System.Int64 >>"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.UnknownDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.UnknownDictionary.html",
    "title": "Class UnknownDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnknownDictionary Dictionary for unknown-word handling. Inheritance System.Object BinaryDictionary UnknownDictionary Implements IDictionary Inherited Members BinaryDictionary.DICT_FILENAME_SUFFIX BinaryDictionary.TARGETMAP_FILENAME_SUFFIX BinaryDictionary.POSDICT_FILENAME_SUFFIX BinaryDictionary.DICT_HEADER BinaryDictionary.TARGETMAP_HEADER BinaryDictionary.POSDICT_HEADER BinaryDictionary.VERSION BinaryDictionary.GetResource(String) BinaryDictionary.GetTypeResource(Type, String) BinaryDictionary.LookupWordIds(Int32, Int32sRef) BinaryDictionary.GetLeftId(Int32) BinaryDictionary.GetRightId(Int32) BinaryDictionary.GetWordCost(Int32) BinaryDictionary.GetBaseForm(Int32, Char[], Int32, Int32) BinaryDictionary.GetPartOfSpeech(Int32) BinaryDictionary.GetPronunciation(Int32, Char[], Int32, Int32) BinaryDictionary.HAS_BASEFORM BinaryDictionary.HAS_READING BinaryDictionary.HAS_PRONUNCIATION Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class UnknownDictionary : BinaryDictionary, IDictionary Properties | Improve this Doc View Source CharacterDefinition Declaration public virtual CharacterDefinition CharacterDefinition { get; } Property Value Type Description CharacterDefinition | Improve this Doc View Source Instance Declaration public static UnknownDictionary Instance { get; } Property Value Type Description UnknownDictionary Methods | Improve this Doc View Source GetInflectionForm(Int32) Declaration public override string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String Overrides BinaryDictionary.GetInflectionForm(Int32) | Improve this Doc View Source GetInflectionType(Int32) Declaration public override string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String Overrides BinaryDictionary.GetInflectionType(Int32) | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Declaration public override string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Overrides BinaryDictionary.GetReading(Int32, Char[], Int32, Int32) | Improve this Doc View Source Lookup(Char[], Int32, Int32) Declaration public virtual int Lookup(char[] text, int offset, int len) Parameters Type Name Description System.Char [] text System.Int32 offset System.Int32 len Returns Type Description System.Int32 Implements IDictionary"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.UserDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.UserDictionary.html",
    "title": "Class UserDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UserDictionary Class for building a User Dictionary. This class allows for custom segmentation of phrases. Inheritance System.Object UserDictionary Implements IDictionary Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class UserDictionary : object, IDictionary Constructors | Improve this Doc View Source UserDictionary(TextReader) Declaration public UserDictionary(TextReader reader) Parameters Type Name Description TextReader reader Fields | Improve this Doc View Source LEFT_ID Declaration public static readonly int LEFT_ID Field Value Type Description System.Int32 | Improve this Doc View Source RIGHT_ID Declaration public static readonly int RIGHT_ID Field Value Type Description System.Int32 | Improve this Doc View Source WORD_COST Declaration public static readonly int WORD_COST Field Value Type Description System.Int32 Properties | Improve this Doc View Source FST Declaration public TokenInfoFST FST { get; } Property Value Type Description TokenInfoFST Methods | Improve this Doc View Source GetBaseForm(Int32, Char[], Int32, Int32) Declaration public string GetBaseForm(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetInflectionForm(Int32) Declaration public string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetInflectionType(Int32) Declaration public string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetLeftId(Int32) Declaration public int GetLeftId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetPartOfSpeech(Int32) Declaration public string GetPartOfSpeech(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetPronunciation(Int32, Char[], Int32, Int32) Declaration public string GetPronunciation(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Declaration public string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetRightId(Int32) Declaration public int GetRightId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetWordCost(Int32) Declaration public int GetWordCost(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source Lookup(Char[], Int32, Int32) Lookup words in text. Declaration public int[][] Lookup(char[] chars, int off, int len) Parameters Type Name Description System.Char [] chars Text. System.Int32 off Offset into text. System.Int32 len Length of text. Returns Type Description System.Int32 [][] Array of {wordId, position, length}. | Improve this Doc View Source LookupSegmentation(Int32) Declaration public int[] LookupSegmentation(int phraseID) Parameters Type Name Description System.Int32 phraseID Returns Type Description System.Int32 [] Implements IDictionary"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.GraphvizFormatter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.GraphvizFormatter.html",
    "title": "Class GraphvizFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GraphvizFormatter Outputs the dot (graphviz) string for the viterbi lattice. Inheritance System.Object GraphvizFormatter Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class GraphvizFormatter : object Constructors | Improve this Doc View Source GraphvizFormatter(ConnectionCosts) Declaration public GraphvizFormatter(ConnectionCosts costs) Parameters Type Name Description ConnectionCosts costs Methods | Improve this Doc View Source Finish() Declaration public virtual string Finish() Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.html",
    "title": "Namespace Lucene.Net.Analysis.Ja | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Kuromoji is a morphological analyzer for Japanese text. This module provides support for Japanese text analysis, including features such as part-of-speech tagging, lemmatization, and compound word analysis. For an introduction to Lucene's analysis API, see the Lucene.Net.Analysis package documentation. Classes GraphvizFormatter Outputs the dot (graphviz) string for the viterbi lattice. JapaneseAnalyzer Analyzer for Japanese that uses morphological analysis. JapaneseBaseFormFilter Replaces term text with the IBaseFormAttribute . This acts as a lemmatizer for verbs and adjectives. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the IKeywordAttribute before this TokenStream . JapaneseBaseFormFilterFactory Factory for JapaneseBaseFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> JapaneseIterationMarkCharFilter Normalizes Japanese horizontal iteration marks (odoriji) to their expanded form. JapaneseIterationMarkCharFilterFactory Factory for JapaneseIterationMarkCharFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\" positionIncrementGap=\"100\" autoGeneratePhraseQueries=\"false\"> <analyzer> <charFilter class=\"solr.JapaneseIterationMarkCharFilterFactory normalizeKanji=\"true\" normalizeKana=\"true\"/> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> </analyzer> </fieldType> JapaneseKatakanaStemFilter A TokenFilter that normalizes common katakana spelling variations ending in a long sound character by removing this character (U+30FC). Only katakana words longer than a minimum length are stemmed (default is four). JapaneseKatakanaStemFilterFactory Factory for JapaneseKatakanaStemFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseKatakanaStemFilterFactory\" minimumLength=\"4\"/> </analyzer> </fieldType> JapanesePartOfSpeechStopFilter Removes tokens that match a set of part-of-speech tags. JapanesePartOfSpeechStopFilterFactory Factory for JapanesePartOfSpeechStopFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapanesePartOfSpeechStopFilterFactory\" tags=\"stopTags.txt\" enablePositionIncrements=\"true\"/> </analyzer> </fieldType> JapaneseReadingFormFilter A TokenFilter that replaces the term attribute with the reading of a token in either katakana or romaji form. The default reading form is katakana. JapaneseReadingFormFilterFactory Factory for JapaneseReadingFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseReadingFormFilterFactory\" useRomaji=\"false\"/> </analyzer> </fieldType> JapaneseTokenizer Tokenizer for Japanese that uses morphological analysis. JapaneseTokenizerFactory Factory for JapaneseTokenizer . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\" mode=\"NORMAL\" userDictionary=\"user.txt\" userDictionaryEncoding=\"UTF-8\" discardPunctuation=\"true\" /> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> Token Analyzed token with morphological data from its dictionary. Enums JapaneseTokenizerMode Tokenization mode: this determines how the tokenizer handles compound and unknown words. JapaneseTokenizerType Token type reflecting the original source of this token"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseAnalyzer.html",
    "title": "Class JapaneseAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseAnalyzer Analyzer for Japanese that uses morphological analysis. Inheritance System.Object Analyzer StopwordAnalyzerBase JapaneseAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source JapaneseAnalyzer(LuceneVersion) Declaration public JapaneseAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source JapaneseAnalyzer(LuceneVersion, UserDictionary, JapaneseTokenizerMode, CharArraySet, ISet<String>) Declaration public JapaneseAnalyzer(LuceneVersion matchVersion, UserDictionary userDict, JapaneseTokenizerMode mode, CharArraySet stopwords, ISet<string> stoptags) Parameters Type Name Description LuceneVersion matchVersion UserDictionary userDict JapaneseTokenizerMode mode CharArraySet stopwords ISet < System.String > stoptags Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents | Improve this Doc View Source GetDefaultStopSet() Declaration public static CharArraySet GetDefaultStopSet() Returns Type Description CharArraySet | Improve this Doc View Source GetDefaultStopTags() Declaration public static ISet<string> GetDefaultStopTags() Returns Type Description ISet < System.String > See Also JapaneseTokenizer"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilter.html",
    "title": "Class JapaneseBaseFormFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseBaseFormFilter Replaces term text with the IBaseFormAttribute . This acts as a lemmatizer for verbs and adjectives. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the IKeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter JapaneseBaseFormFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseBaseFormFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source JapaneseBaseFormFilter(TokenStream) Declaration public JapaneseBaseFormFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilterFactory.html",
    "title": "Class JapaneseBaseFormFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseBaseFormFilterFactory Factory for JapaneseBaseFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapaneseBaseFormFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseBaseFormFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source JapaneseBaseFormFilterFactory(IDictionary<String, String>) Creates a new JapaneseBaseFormFilterFactory Declaration public JapaneseBaseFormFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilter.html",
    "title": "Class JapaneseIterationMarkCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseIterationMarkCharFilter Normalizes Japanese horizontal iteration marks (odoriji) to their expanded form. Inheritance System.Object CharFilter JapaneseIterationMarkCharFilter Inherited Members CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseIterationMarkCharFilter : CharFilter Remarks Sequences of iteration marks are supported. In case an illegal sequence of iteration marks is encountered, the implementation emits the illegal source character as-is without considering its script. For example, with input \"?ゝ\", we get \"??\" even though \"?\" isn't hiragana. Note that a full stop punctuation character \"。\" (U+3002) can not be iterated (see below). Iteration marks themselves can be emitted in case they are illegal, i.e. if they go back past the beginning of the character stream. The implementation buffers input until a full stop punctuation character (U+3002) or EOF is reached in order to not keep a copy of the character stream in memory. Vertical iteration marks, which are even rarer than horizontal iteration marks in contemporary Japanese, are unsupported. Constructors | Improve this Doc View Source JapaneseIterationMarkCharFilter(TextReader) Constructor. Normalizes both kanji and kana iteration marks by default. Declaration public JapaneseIterationMarkCharFilter(TextReader input) Parameters Type Name Description TextReader input Char stream. | Improve this Doc View Source JapaneseIterationMarkCharFilter(TextReader, Boolean, Boolean) Constructor Declaration public JapaneseIterationMarkCharFilter(TextReader input, bool normalizeKanji, bool normalizeKana) Parameters Type Name Description TextReader input Char stream. System.Boolean normalizeKanji Indicates whether kanji iteration marks should be normalized. System.Boolean normalizeKana Indicates whether kana iteration marks should be normalized. Fields | Improve this Doc View Source NORMALIZE_KANA_DEFAULT Normalize kana iteration marks by default Declaration public static readonly bool NORMALIZE_KANA_DEFAULT Field Value Type Description System.Boolean | Improve this Doc View Source NORMALIZE_KANJI_DEFAULT Normalize kanji iteration marks by default Declaration public static readonly bool NORMALIZE_KANJI_DEFAULT Field Value Type Description System.Boolean Methods | Improve this Doc View Source Correct(Int32) Declaration protected override int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 | Improve this Doc View Source Read() Reads the next character from the text reader and advances the character position by one character. Declaration public override int Read() Returns Type Description System.Int32 The next character from the text reader, or -1 if no more characters are available. Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Reads a specified maximum number of characters from the current reader and writes the data to a buffer, beginning at the specified index. Declaration public override int Read(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer When this method returns, contains the specified character array with the values between index and (index + count - 1) replaced by the characters read from the current source. System.Int32 offset The position in buffer at which to begin writing. System.Int32 length The maximum number of characters to read. If the end of the reader is reached before the specified number of characters is read into the buffer, the method returns. Returns Type Description System.Int32 The number of characters that have been read. The number will be less than or equal to count, depending on whether the data is available within the reader. This method returns 0 (zero) if it is called when no more characters are left to read."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilterFactory.html",
    "title": "Class JapaneseIterationMarkCharFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseIterationMarkCharFilterFactory Factory for JapaneseIterationMarkCharFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\" positionIncrementGap=\"100\" autoGeneratePhraseQueries=\"false\"> <analyzer> <charFilter class=\"solr.JapaneseIterationMarkCharFilterFactory normalizeKanji=\"true\" normalizeKana=\"true\"/> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory CharFilterFactory JapaneseIterationMarkCharFilterFactory Implements IMultiTermAwareComponent Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseIterationMarkCharFilterFactory : CharFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source JapaneseIterationMarkCharFilterFactory(IDictionary<String, String>) Creates a new JapaneseIterationMarkCharFilterFactory Declaration public JapaneseIterationMarkCharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description 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 TextReader input Returns Type Description TextReader | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilter.html",
    "title": "Class JapaneseKatakanaStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseKatakanaStemFilter A TokenFilter that normalizes common katakana spelling variations ending in a long sound character by removing this character (U+30FC). Only katakana words longer than a minimum length are stemmed (default is four). Inheritance System.Object AttributeSource TokenStream TokenFilter JapaneseKatakanaStemFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseKatakanaStemFilter : TokenFilter, IDisposable Remarks Note that only full-width katakana characters are supported. Please use a CJKWidthFilter to convert half-width katakana to full-width before using this filter. In order to prevent terms from being stemmed, use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the IKeywordAttribute before this TokenStream . Constructors | Improve this Doc View Source JapaneseKatakanaStemFilter(TokenStream) Declaration public JapaneseKatakanaStemFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source JapaneseKatakanaStemFilter(TokenStream, Int32) Declaration public JapaneseKatakanaStemFilter(TokenStream input, int minimumLength) Parameters Type Name Description TokenStream input System.Int32 minimumLength Fields | Improve this Doc View Source DEFAULT_MINIMUM_LENGTH Declaration public static readonly int DEFAULT_MINIMUM_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilterFactory.html",
    "title": "Class JapaneseKatakanaStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseKatakanaStemFilterFactory Factory for JapaneseKatakanaStemFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseKatakanaStemFilterFactory\" minimumLength=\"4\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapaneseKatakanaStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseKatakanaStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source JapaneseKatakanaStemFilterFactory(IDictionary<String, String>) Creates a new JapaneseKatakanaStemFilterFactory Declaration public JapaneseKatakanaStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilter.html",
    "title": "Class JapanesePartOfSpeechStopFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapanesePartOfSpeechStopFilter Removes tokens that match a set of part-of-speech tags. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter JapanesePartOfSpeechStopFilter Implements IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapanesePartOfSpeechStopFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source JapanesePartOfSpeechStopFilter(LuceneVersion, TokenStream, ISet<String>) Create a new JapanesePartOfSpeechStopFilter . Declaration public JapanesePartOfSpeechStopFilter(LuceneVersion version, TokenStream input, ISet<string> stopTags) Parameters Type Name Description LuceneVersion version The Lucene match version. TokenStream input The TokenStream to consume. ISet < System.String > stopTags The part-of-speech tags that should be removed. | Improve this Doc View Source JapanesePartOfSpeechStopFilter(LuceneVersion, Boolean, TokenStream, ISet<String>) Declaration public JapanesePartOfSpeechStopFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream input, ISet<string> stopTags) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream input ISet < System.String > stopTags Methods | Improve this Doc View Source Accept() Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilterFactory.html",
    "title": "Class JapanesePartOfSpeechStopFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapanesePartOfSpeechStopFilterFactory Factory for JapanesePartOfSpeechStopFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapanesePartOfSpeechStopFilterFactory\" tags=\"stopTags.txt\" enablePositionIncrements=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapanesePartOfSpeechStopFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapanesePartOfSpeechStopFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source JapanesePartOfSpeechStopFilterFactory(IDictionary<String, String>) Creates a new JapanesePartOfSpeechStopFilterFactory Declaration public JapanesePartOfSpeechStopFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream stream) Parameters Type Name Description TokenStream stream Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilter.html",
    "title": "Class JapaneseReadingFormFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseReadingFormFilter A TokenFilter that replaces the term attribute with the reading of a token in either katakana or romaji form. The default reading form is katakana. Inheritance System.Object AttributeSource TokenStream TokenFilter JapaneseReadingFormFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseReadingFormFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source JapaneseReadingFormFilter(TokenStream) Declaration public JapaneseReadingFormFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source JapaneseReadingFormFilter(TokenStream, Boolean) Declaration public JapaneseReadingFormFilter(TokenStream input, bool useRomaji) Parameters Type Name Description TokenStream input System.Boolean useRomaji Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilterFactory.html",
    "title": "Class JapaneseReadingFormFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseReadingFormFilterFactory Factory for JapaneseReadingFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseReadingFormFilterFactory\" useRomaji=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapaneseReadingFormFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseReadingFormFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source JapaneseReadingFormFilterFactory(IDictionary<String, String>) Creates a new JapaneseReadingFormFilterFactory . Declaration public JapaneseReadingFormFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizer.html",
    "title": "Class JapaneseTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseTokenizer Tokenizer for Japanese that uses morphological analysis. Inheritance System.Object AttributeSource TokenStream Tokenizer JapaneseTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseTokenizer : Tokenizer, IDisposable Remarks This tokenizer sets a number of additional attributes: IBaseFormAttribute containing base form for inflected adjectives and verbs. IPartOfSpeechAttribute containing part-of-speech. IReadingAttribute containing reading and pronunciation. IInflectionAttribute containing additional part-of-speech information for inflected forms. This tokenizer uses a rolling Viterbi search to find the least cost segmentation (path) of the incoming characters. For tokens that appear to be compound (> length 2 for all Kanji, or > length 7 for non-Kanji), we see if there is a 2nd best segmentation of that token after applying penalties to the long tokens. If so, and the Mode is SEARCH , we output the alternate segmentation as well. Constructors | Improve this Doc View Source JapaneseTokenizer(AttributeSource.AttributeFactory, TextReader, UserDictionary, Boolean, JapaneseTokenizerMode) Create a new JapaneseTokenizer. Declaration public JapaneseTokenizer(AttributeSource.AttributeFactory factory, TextReader input, UserDictionary userDictionary, bool discardPunctuation, JapaneseTokenizerMode mode) Parameters Type Name Description AttributeSource.AttributeFactory factory The AttributeFactory to use. TextReader input TextReader containing text. UserDictionary userDictionary Optional: if non-null, user dictionary. System.Boolean discardPunctuation true if punctuation tokens should be dropped from the output. JapaneseTokenizerMode mode Tokenization mode. | Improve this Doc View Source JapaneseTokenizer(TextReader, UserDictionary, Boolean, JapaneseTokenizerMode) Create a new JapaneseTokenizer. Uses the default AttributeFactory. Declaration public JapaneseTokenizer(TextReader input, UserDictionary userDictionary, bool discardPunctuation, JapaneseTokenizerMode mode) Parameters Type Name Description TextReader input TextReader containing text. UserDictionary userDictionary Optional: if non-null, user dictionary. System.Boolean discardPunctuation true if punctuation tokens should be dropped from the output. JapaneseTokenizerMode mode Tokenization mode. Fields | Improve this Doc View Source DEFAULT_MODE Default tokenization mode. Currently this is SEARCH . Declaration public static readonly JapaneseTokenizerMode DEFAULT_MODE Field Value Type Description JapaneseTokenizerMode Properties | Improve this Doc View Source GraphvizFormatter Expert: set this to produce graphviz (dot) output of the Viterbi lattice Declaration public GraphvizFormatter GraphvizFormatter { get; set; } Property Value Type Description GraphvizFormatter Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerFactory.html",
    "title": "Class JapaneseTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseTokenizerFactory Factory for JapaneseTokenizer . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\" mode=\"NORMAL\" userDictionary=\"user.txt\" userDictionaryEncoding=\"UTF-8\" discardPunctuation=\"true\" /> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory JapaneseTokenizerFactory Implements IResourceLoaderAware Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseTokenizerFactory : TokenizerFactory, IResourceLoaderAware Constructors | Improve this Doc View Source JapaneseTokenizerFactory(IDictionary<String, String>) Creates a new JapaneseTokenizerFactory . Declaration public JapaneseTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description Lucene.Net.Analysis.Ja.Dict.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerMode.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerMode.html",
    "title": "Enum JapaneseTokenizerMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum JapaneseTokenizerMode Tokenization mode: this determines how the tokenizer handles compound and unknown words. Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public enum JapaneseTokenizerMode : int Fields Name Description EXTENDED Extended mode outputs unigrams for unknown words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk NORMAL Ordinary segmentation: no decomposition for compounds, SEARCH Segmentation geared towards search: this includes a decompounding process for long nouns, also including the full compound token as a synonym."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerType.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerType.html",
    "title": "Enum JapaneseTokenizerType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum JapaneseTokenizerType Token type reflecting the original source of this token Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public enum JapaneseTokenizerType : int Fields Name Description KNOWN Known words from the system dictionary. UNKNOWN Unknown words (heuristically segmented). USER Known words from the user dictionary."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Token.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Token Analyzed token with morphological data from its dictionary. Inheritance System.Object Token Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class Token : object Constructors | Improve this Doc View Source Token(Int32, Char[], Int32, Int32, JapaneseTokenizerType, Int32, IDictionary) Declaration public Token(int wordId, char[] surfaceForm, int offset, int length, JapaneseTokenizerType type, int position, IDictionary dictionary) Parameters Type Name Description System.Int32 wordId System.Char [] surfaceForm System.Int32 offset System.Int32 length JapaneseTokenizerType type System.Int32 position IDictionary dictionary Properties | Improve this Doc View Source Length length of surfaceForm Declaration public virtual int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset offset into surfaceForm Declaration public virtual int Offset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Position Get index of this token in input text. Returns position of token. Declaration public virtual int Position { get; } Property Value Type Description System.Int32 | Improve this Doc View Source PositionLength Gets or Sets the length (in tokens) of this token. For normal tokens this is 1; for compound tokens it's > 1. Declaration public virtual int PositionLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source SurfaceForm surfaceForm Declaration public virtual char[] SurfaceForm { get; } Property Value Type Description System.Char [] Methods | Improve this Doc View Source GetBaseForm() base form or null if token is not inflected Declaration public virtual string GetBaseForm() Returns Type Description System.String base form or null if token is not inflected | Improve this Doc View Source GetInflectionForm() inflection form or null Declaration public virtual string GetInflectionForm() Returns Type Description System.String inflection form or null | Improve this Doc View Source GetInflectionType() inflection type or null Declaration public virtual string GetInflectionType() Returns Type Description System.String inflection type or null | Improve this Doc View Source GetPartOfSpeech() part of speech. Declaration public virtual string GetPartOfSpeech() Returns Type Description System.String part of speech. | Improve this Doc View Source GetPronunciation() pronunciation. null if token doesn't have pronunciation. Declaration public virtual string GetPronunciation() Returns Type Description System.String pronunciation. null if token doesn't have pronunciation. | Improve this Doc View Source GetReading() reading. null if token doesn't have reading. Declaration public virtual string GetReading() Returns Type Description System.String reading. null if token doesn't have reading. | Improve this Doc View Source GetSurfaceFormString() surfaceForm as a String Declaration public virtual string GetSurfaceFormString() Returns Type Description System.String surfaceForm as a String | Improve this Doc View Source IsKnown() Returns true if this token is known word. Declaration public virtual bool IsKnown() Returns Type Description System.Boolean true if this token is in standard dictionary. false if not. | Improve this Doc View Source IsUnknown() Returns true if this token is unknown word. Declaration public virtual bool IsUnknown() Returns Type Description System.Boolean true if this token is unknown word. false if not. | Improve this Doc View Source IsUser() Returns true if this token is defined in user dictionary. Declaration public virtual bool IsUser() Returns Type Description System.Boolean true if this token is in user dictionary. false if not. | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.BaseFormAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.BaseFormAttribute.html",
    "title": "Class BaseFormAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseFormAttribute Attribute for GetBaseForm() . Inheritance System.Object Attribute BaseFormAttribute Implements IBaseFormAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class BaseFormAttribute : Attribute, IBaseFormAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetBaseForm() Declaration public virtual string GetBaseForm() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IBaseFormAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Analysis.Ja.TokenAttributes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja.TokenAttributes <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Additional Kuromoji-specific Attributes for text analysis. Classes BaseFormAttribute Attribute for GetBaseForm() . InflectionAttribute Attribute for Kuromoji inflection data. PartOfSpeechAttribute Attribute for GetPartOfSpeech() . ReadingAttribute Attribute for Kuromoji reading data Interfaces IBaseFormAttribute Attribute for GetBaseForm() Note: depending on part of speech, this value may not be applicable, and will be null. IInflectionAttribute Attribute for Kuromoji inflection data. Note: in some cases this value may not be applicable, and will be null. IPartOfSpeechAttribute Attribute for GetPartOfSpeech() . IReadingAttribute Attribute for Kuromoji reading data Note: in some cases this value may not be applicable, and will be null."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IBaseFormAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IBaseFormAttribute.html",
    "title": "Interface IBaseFormAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IBaseFormAttribute Attribute for GetBaseForm() Note: depending on part of speech, this value may not be applicable, and will be null. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IBaseFormAttribute : IAttribute Methods | Improve this Doc View Source GetBaseForm() Declaration string GetBaseForm() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IInflectionAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IInflectionAttribute.html",
    "title": "Interface IInflectionAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IInflectionAttribute Attribute for Kuromoji inflection data. Note: in some cases this value may not be applicable, and will be null. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IInflectionAttribute : IAttribute Methods | Improve this Doc View Source GetInflectionForm() Declaration string GetInflectionForm() Returns Type Description System.String | Improve this Doc View Source GetInflectionType() Declaration string GetInflectionType() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.InflectionAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.InflectionAttribute.html",
    "title": "Class InflectionAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InflectionAttribute Attribute for Kuromoji inflection data. Inheritance System.Object Attribute InflectionAttribute Implements IInflectionAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class InflectionAttribute : Attribute, IInflectionAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetInflectionForm() Declaration public virtual string GetInflectionForm() Returns Type Description System.String | Improve this Doc View Source GetInflectionType() Declaration public virtual string GetInflectionType() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IInflectionAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IPartOfSpeechAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IPartOfSpeechAttribute.html",
    "title": "Interface IPartOfSpeechAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPartOfSpeechAttribute Attribute for GetPartOfSpeech() . Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IPartOfSpeechAttribute : IAttribute Methods | Improve this Doc View Source GetPartOfSpeech() Declaration string GetPartOfSpeech() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IReadingAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IReadingAttribute.html",
    "title": "Interface IReadingAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReadingAttribute Attribute for Kuromoji reading data Note: in some cases this value may not be applicable, and will be null. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IReadingAttribute : IAttribute Methods | Improve this Doc View Source GetPronunciation() Declaration string GetPronunciation() Returns Type Description System.String | Improve this Doc View Source GetReading() Declaration string GetReading() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.PartOfSpeechAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.PartOfSpeechAttribute.html",
    "title": "Class PartOfSpeechAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PartOfSpeechAttribute Attribute for GetPartOfSpeech() . Inheritance System.Object Attribute PartOfSpeechAttribute Implements IPartOfSpeechAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class PartOfSpeechAttribute : Attribute, IPartOfSpeechAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetPartOfSpeech() Declaration public virtual string GetPartOfSpeech() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IPartOfSpeechAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.ReadingAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.ReadingAttribute.html",
    "title": "Class ReadingAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReadingAttribute Attribute for Kuromoji reading data Inheritance System.Object Attribute ReadingAttribute Implements IReadingAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class ReadingAttribute : Attribute, IReadingAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetPronunciation() Declaration public virtual string GetPronunciation() Returns Type Description System.String | Improve this Doc View Source GetReading() Declaration public virtual string GetReading() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IReadingAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.BinaryDictionaryWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.BinaryDictionaryWriter.html",
    "title": "Class BinaryDictionaryWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryDictionaryWriter Inheritance System.Object BinaryDictionaryWriter TokenInfoDictionaryWriter UnknownDictionaryWriter Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public abstract class BinaryDictionaryWriter : object Constructors | Improve this Doc View Source BinaryDictionaryWriter(Type, Int32) Declaration public BinaryDictionaryWriter(Type implClazz, int size) Parameters Type Name Description Type implClazz System.Int32 size Fields | Improve this Doc View Source m_buffer Declaration protected ByteBuffer m_buffer Field Value Type Description ByteBuffer | Improve this Doc View Source m_implClazz Declaration protected readonly Type m_implClazz Field Value Type Description Type Methods | Improve this Doc View Source AddMapping(Int32, Int32) Declaration public virtual void AddMapping(int sourceId, int wordId) Parameters Type Name Description System.Int32 sourceId System.Int32 wordId | Improve this Doc View Source GetBaseFileName(String) Declaration protected string GetBaseFileName(string baseDir) Parameters Type Name Description System.String baseDir Returns Type Description System.String | Improve this Doc View Source Put(String[]) Put the entry in map. Declaration public virtual int Put(string[] entry) Parameters Type Name Description System.String [] entry Returns Type Description System.Int32 Current position of buffer, which will be wordId of next entry. | Improve this Doc View Source SharedPrefix(String, String) Declaration public static int SharedPrefix(string left, string right) Parameters Type Name Description System.String left System.String right Returns Type Description System.Int32 | Improve this Doc View Source Write(String) Write dictionary in file Declaration public virtual void Write(string baseDir) Parameters Type Name Description System.String baseDir Remarks Dictionary format is: [Size of dictionary(int)], [entry:{left id(short)}{right id(short)}{word cost(short)}{length of pos info(short)}{pos info(char)}], [entry...], [entry...]..... | Improve this Doc View Source WriteDictionary(String) Declaration protected virtual void WriteDictionary(string filename) Parameters Type Name Description System.String filename | Improve this Doc View Source WritePosDict(String) Declaration protected virtual void WritePosDict(string filename) Parameters Type Name Description System.String filename | Improve this Doc View Source WriteTargetMap(String) Declaration protected virtual void WriteTargetMap(string filename) Parameters Type Name Description System.String filename"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.CharacterDefinitionWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.CharacterDefinitionWriter.html",
    "title": "Class CharacterDefinitionWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharacterDefinitionWriter Inheritance System.Object CharacterDefinitionWriter Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class CharacterDefinitionWriter : object Constructors | Improve this Doc View Source CharacterDefinitionWriter() Constructor for building. TODO: remove write access Declaration public CharacterDefinitionWriter() Methods | Improve this Doc View Source PutCharacterCategory(Int32, String) Put mapping from unicode code point to character class. Declaration public void PutCharacterCategory(int codePoint, string characterClassName) Parameters Type Name Description System.Int32 codePoint Code point. System.String characterClassName Character class name. | Improve this Doc View Source PutInvokeDefinition(String, Int32, Int32, Int32) Declaration public void PutInvokeDefinition(string characterClassName, int invoke, int group, int length) Parameters Type Name Description System.String characterClassName System.Int32 invoke System.Int32 group System.Int32 length | Improve this Doc View Source Write(String) Declaration public void Write(string baseDir) Parameters Type Name Description System.String baseDir"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ConnectionCostsBuilder.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ConnectionCostsBuilder.html",
    "title": "Class ConnectionCostsBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConnectionCostsBuilder Inheritance System.Object ConnectionCostsBuilder Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class ConnectionCostsBuilder : object Methods | Improve this Doc View Source Build(String) Declaration public static ConnectionCostsWriter Build(string filename) Parameters Type Name Description System.String filename Returns Type Description ConnectionCostsWriter"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ConnectionCostsWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ConnectionCostsWriter.html",
    "title": "Class ConnectionCostsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConnectionCostsWriter Inheritance System.Object ConnectionCostsWriter Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class ConnectionCostsWriter : object Constructors | Improve this Doc View Source ConnectionCostsWriter(Int32, Int32) Constructor for building. TODO: remove write access Declaration public ConnectionCostsWriter(int forwardSize, int backwardSize) Parameters Type Name Description System.Int32 forwardSize System.Int32 backwardSize Methods | Improve this Doc View Source Add(Int32, Int32, Int32) Declaration public void Add(int forwardId, int backwardId, int cost) Parameters Type Name Description System.Int32 forwardId System.Int32 backwardId System.Int32 cost | Improve this Doc View Source Write(String) Declaration public void Write(string baseDir) Parameters Type Name Description System.String baseDir"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.CSVUtil.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.CSVUtil.html",
    "title": "Class CSVUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CSVUtil Utility class for parsing CSV text Inheritance System.Object CSVUtil Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class CSVUtil : object Methods | Improve this Doc View Source Parse(String) Parse CSV line Declaration public static string[] Parse(string line) Parameters Type Name Description System.String line line containing csv-encoded data Returns Type Description System.String [] Array of values | Improve this Doc View Source QuoteEscape(String) Quote and escape input value for CSV Declaration public static string QuoteEscape(string original) Parameters Type Name Description System.String original Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.DictionaryFormat.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.DictionaryFormat.html",
    "title": "Enum DictionaryBuilder.DictionaryFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DictionaryBuilder.DictionaryFormat Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public enum DictionaryFormat : int Fields Name Description IPADIC UNIDIC"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.html",
    "title": "Class DictionaryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DictionaryBuilder Inheritance System.Object DictionaryBuilder Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class DictionaryBuilder : object Methods | Improve this Doc View Source Build(DictionaryBuilder.DictionaryFormat, String, String, String, Boolean) Declaration public static void Build(DictionaryBuilder.DictionaryFormat format, string inputDirname, string outputDirname, string encoding, bool normalizeEntry) Parameters Type Name Description DictionaryBuilder.DictionaryFormat format System.String inputDirname System.String outputDirname System.String encoding System.Boolean normalizeEntry | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.html",
    "title": "Namespace Lucene.Net.Analysis.Ja.Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja.Util <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Kuromoji utility classes. Classes BinaryDictionaryWriter CharacterDefinitionWriter ConnectionCostsBuilder ConnectionCostsWriter CSVUtil Utility class for parsing CSV text DictionaryBuilder TokenInfoDictionaryBuilder TokenInfoDictionaryWriter ToStringUtil Utility class for english translations of morphological data, used only for debugging. UnknownDictionaryBuilder UnknownDictionaryWriter Enums DictionaryBuilder.DictionaryFormat"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryBuilder.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryBuilder.html",
    "title": "Class TokenInfoDictionaryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenInfoDictionaryBuilder Inheritance System.Object TokenInfoDictionaryBuilder Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class TokenInfoDictionaryBuilder : object Constructors | Improve this Doc View Source TokenInfoDictionaryBuilder(DictionaryBuilder.DictionaryFormat, String, Boolean) Declaration public TokenInfoDictionaryBuilder(DictionaryBuilder.DictionaryFormat format, string encoding, bool normalizeEntries) Parameters Type Name Description DictionaryBuilder.DictionaryFormat format System.String encoding System.Boolean normalizeEntries Methods | Improve this Doc View Source Build(String) Declaration public virtual TokenInfoDictionaryWriter Build(string dirname) Parameters Type Name Description System.String dirname Returns Type Description TokenInfoDictionaryWriter | Improve this Doc View Source BuildDictionary(IList<String>) Declaration public virtual TokenInfoDictionaryWriter BuildDictionary(IList<string> csvFiles) Parameters Type Name Description IList < System.String > csvFiles Returns Type Description TokenInfoDictionaryWriter | Improve this Doc View Source FormatEntry(String[]) IPADIC features 0 - surface 1 - left cost 2 - right cost 3 - word cost 4-9 - pos 10 - base form 11 - reading 12 - pronounciation UniDic features 0 - surface 1 - left cost 2 - right cost 3 - word cost 4-9 - pos 10 - base form reading 11 - base form 12 - surface form 13 - surface reading Declaration public virtual string[] FormatEntry(string[] features) Parameters Type Name Description System.String [] features Returns Type Description System.String []"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryWriter.html",
    "title": "Class TokenInfoDictionaryWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenInfoDictionaryWriter Inheritance System.Object BinaryDictionaryWriter TokenInfoDictionaryWriter Inherited Members BinaryDictionaryWriter.m_implClazz BinaryDictionaryWriter.m_buffer BinaryDictionaryWriter.Put(String[]) BinaryDictionaryWriter.SharedPrefix(String, String) BinaryDictionaryWriter.AddMapping(Int32, Int32) BinaryDictionaryWriter.GetBaseFileName(String) BinaryDictionaryWriter.WriteTargetMap(String) BinaryDictionaryWriter.WritePosDict(String) BinaryDictionaryWriter.WriteDictionary(String) Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class TokenInfoDictionaryWriter : BinaryDictionaryWriter Constructors | Improve this Doc View Source TokenInfoDictionaryWriter(Int32) Declaration public TokenInfoDictionaryWriter(int size) Parameters Type Name Description System.Int32 size Methods | Improve this Doc View Source SetFST(FST<Nullable<Int64>>) Declaration public virtual void SetFST(FST<long?> fst) Parameters Type Name Description FST < System.Nullable < System.Int64 >> fst | Improve this Doc View Source Write(String) Declaration public override void Write(string baseDir) Parameters Type Name Description System.String baseDir Overrides BinaryDictionaryWriter.Write(String) | Improve this Doc View Source WriteFST(String) Declaration protected virtual void WriteFST(string filename) Parameters Type Name Description System.String filename"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ToStringUtil.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ToStringUtil.html",
    "title": "Class ToStringUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToStringUtil Utility class for english translations of morphological data, used only for debugging. Inheritance System.Object ToStringUtil Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public static class ToStringUtil : object Methods | Improve this Doc View Source GetInflectedFormTranslation(String) Get the english form of inflected form Declaration public static string GetInflectedFormTranslation(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetInflectionTypeTranslation(String) Get the english form of inflection type Declaration public static string GetInflectionTypeTranslation(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetPOSTranslation(String) Get the english form of a POS tag Declaration public static string GetPOSTranslation(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetRomanization(StringBuilder, String) Romanize katakana with modified hepburn Declaration public static void GetRomanization(StringBuilder builder, string s) Parameters Type Name Description StringBuilder builder System.String s | Improve this Doc View Source GetRomanization(String) Romanize katakana with modified hepburn Declaration public static string GetRomanization(string s) Parameters Type Name Description System.String s Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryBuilder.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryBuilder.html",
    "title": "Class UnknownDictionaryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnknownDictionaryBuilder Inheritance System.Object UnknownDictionaryBuilder Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class UnknownDictionaryBuilder : object Constructors | Improve this Doc View Source UnknownDictionaryBuilder(String) Declaration public UnknownDictionaryBuilder(string encoding) Parameters Type Name Description System.String encoding Methods | Improve this Doc View Source Build(String) Declaration public virtual UnknownDictionaryWriter Build(string dirname) Parameters Type Name Description System.String dirname Returns Type Description UnknownDictionaryWriter | Improve this Doc View Source ReadCharacterDefinition(String, UnknownDictionaryWriter) Declaration public virtual void ReadCharacterDefinition(string filename, UnknownDictionaryWriter dictionary) Parameters Type Name Description System.String filename UnknownDictionaryWriter dictionary | Improve this Doc View Source ReadDictionaryFile(String) Declaration public virtual UnknownDictionaryWriter ReadDictionaryFile(string filename) Parameters Type Name Description System.String filename Returns Type Description UnknownDictionaryWriter | Improve this Doc View Source ReadDictionaryFile(String, String) Declaration public virtual UnknownDictionaryWriter ReadDictionaryFile(string filename, string encoding) Parameters Type Name Description System.String filename System.String encoding Returns Type Description UnknownDictionaryWriter"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryWriter.html",
    "title": "Class UnknownDictionaryWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnknownDictionaryWriter Inheritance System.Object BinaryDictionaryWriter UnknownDictionaryWriter Inherited Members BinaryDictionaryWriter.m_implClazz BinaryDictionaryWriter.m_buffer BinaryDictionaryWriter.SharedPrefix(String, String) BinaryDictionaryWriter.AddMapping(Int32, Int32) BinaryDictionaryWriter.GetBaseFileName(String) BinaryDictionaryWriter.WriteTargetMap(String) BinaryDictionaryWriter.WritePosDict(String) BinaryDictionaryWriter.WriteDictionary(String) Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class UnknownDictionaryWriter : BinaryDictionaryWriter Constructors | Improve this Doc View Source UnknownDictionaryWriter(Int32) Declaration public UnknownDictionaryWriter(int size) Parameters Type Name Description System.Int32 size Methods | Improve this Doc View Source Put(String[]) Declaration public override int Put(string[] entry) Parameters Type Name Description System.String [] entry Returns Type Description System.Int32 Overrides BinaryDictionaryWriter.Put(String[]) | Improve this Doc View Source PutCharacterCategory(Int32, String) Put mapping from unicode code point to character class. Declaration public virtual void PutCharacterCategory(int codePoint, string characterClassName) Parameters Type Name Description System.Int32 codePoint Code point. System.String characterClassName Character class name. | Improve this Doc View Source PutInvokeDefinition(String, Int32, Int32, Int32) Declaration public virtual void PutInvokeDefinition(string characterClassName, int invoke, int group, int length) Parameters Type Name Description System.String characterClassName System.Int32 invoke System.Int32 group System.Int32 length | Improve this Doc View Source Write(String) Declaration public override void Write(string baseDir) Parameters Type Name Description System.String baseDir Overrides BinaryDictionaryWriter.Write(String)"
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.html",
    "title": "Lucene.Net.Analysis.Morfologik | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Morfologik <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> This package provides dictionary-driven lemmatization (\"accurate stemming\") filter and analyzer for the Polish Language, driven by the Morfologik library developed by Dawid Weiss and Marcin Miłkowski. The MorfologikFilter yields one or more terms for each token. Each of those terms is given the same position in the index. Classes MorfologikAnalyzer Analyzer using Morfologik library. See: Morfologik project page MorfologikFilter TokenFilter using Morfologik library to transform input tokens into lemma and morphosyntactic (POS) tokens. Applies to Polish only. MorfologikFilter contains a MorphosyntacticTagsAttribute , which provides morphosyntactic annotations for produced lemmas. See the Morfologik documentation for details. MorfologikFilterFactory Filter factory for MorfologikFilter . An explicit resource name of the dictionary ( \".dict\" ) can be provided via the dictionary attribute, as the example below demonstrates: <fieldType name=\"text_mylang\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.MorfologikFilterFactory\" dictionary=\"mylang.dict\" /> </analyzer> </fieldType> If the dictionary attribute is not provided, the Polish dictionary is loaded and used by default. See: Morfologik web site"
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.MorfologikAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.MorfologikAnalyzer.html",
    "title": "Class MorfologikAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MorfologikAnalyzer Analyzer using Morfologik library. See: Morfologik project page Inheritance System.Object Analyzer MorfologikAnalyzer Inherited Members Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Morfologik Assembly : Lucene.Net.Analysis.Morfologik.dll Syntax public class MorfologikAnalyzer : Analyzer Constructors | Improve this Doc View Source MorfologikAnalyzer(LuceneVersion) Builds an analyzer with the default Morfologik's Polish dictionary. Declaration public MorfologikAnalyzer(LuceneVersion version) Parameters Type Name Description LuceneVersion version Lucene compatibility version | Improve this Doc View Source MorfologikAnalyzer(LuceneVersion, Dictionary) Builds an analyzer with an explicit resource. See: https://github.com/morfologik/ Declaration public MorfologikAnalyzer(LuceneVersion version, Dictionary dictionary) Parameters Type Name Description LuceneVersion version Lucene compatibility version Dictionary dictionary A prebuilt automaton with inflected and base word forms. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided reader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName Ignored field name. TextReader reader Source of tokens. Returns Type Description TokenStreamComponents A TokenStreamComponents built from a StandardTokenizer filtered with MorfologikFilter ."
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.MorfologikFilter.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.MorfologikFilter.html",
    "title": "Class MorfologikFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MorfologikFilter TokenFilter using Morfologik library to transform input tokens into lemma and morphosyntactic (POS) tokens. Applies to Polish only. MorfologikFilter contains a MorphosyntacticTagsAttribute , which provides morphosyntactic annotations for produced lemmas. See the Morfologik documentation for details. Inheritance System.Object AttributeSource TokenStream TokenFilter MorfologikFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Morfologik Assembly : Lucene.Net.Analysis.Morfologik.dll Syntax public class MorfologikFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source MorfologikFilter(TokenStream) Creates a filter with the default (Polish) dictionary. Declaration public MorfologikFilter(TokenStream input) Parameters Type Name Description TokenStream input Input token stream. | Improve this Doc View Source MorfologikFilter(TokenStream, Dictionary) Creates a filter with a given dictionary. Declaration public MorfologikFilter(TokenStream input, Dictionary dict) Parameters Type Name Description TokenStream input Input token stream. Dictionary dict to use for stemming. Methods | Improve this Doc View Source IncrementToken() Retrieves the next token (possibly from the list of lemmas). Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Resets stems accumulator and hands over to superclass. Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.MorfologikFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.MorfologikFilterFactory.html",
    "title": "Class MorfologikFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MorfologikFilterFactory Filter factory for MorfologikFilter . An explicit resource name of the dictionary ( \".dict\" ) can be provided via the dictionary attribute, as the example below demonstrates: <fieldType name=\"text_mylang\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.MorfologikFilterFactory\" dictionary=\"mylang.dict\" /> </analyzer> </fieldType> If the dictionary attribute is not provided, the Polish dictionary is loaded and used by default. See: Morfologik web site Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory MorfologikFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Morfologik Assembly : Lucene.Net.Analysis.Morfologik.dll Syntax public class MorfologikFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source MorfologikFilterFactory(IDictionary<String, String>) Creates a new MorfologikFilterFactory Declaration public MorfologikFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Fields | Improve this Doc View Source DICTIONARY_ATTRIBUTE Dictionary resource attribute (should have \".dict\" suffix), loaded from IResourceLoader . Declaration public const string DICTIONARY_ATTRIBUTE = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream ts) Parameters Type Name Description TokenStream ts Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.TokenAttributes.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Analysis.Morfologik.TokenAttributes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Morfologik.TokenAttributes Classes MorphosyntacticTagsAttribute Morphosyntactic annotations for surface forms. Interfaces IMorphosyntacticTagsAttribute Morfologik provides morphosyntactic annotations for surface forms. For the exact format and description of these, see the project's documentation."
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.TokenAttributes.IMorphosyntacticTagsAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.TokenAttributes.IMorphosyntacticTagsAttribute.html",
    "title": "Interface IMorphosyntacticTagsAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IMorphosyntacticTagsAttribute Morfologik provides morphosyntactic annotations for surface forms. For the exact format and description of these, see the project's documentation. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Morfologik.TokenAttributes Assembly : Lucene.Net.Analysis.Morfologik.dll Syntax public interface IMorphosyntacticTagsAttribute : IAttribute Properties | Improve this Doc View Source Tags Gets or sets the POS tag of the term. A single word may have multiple POS tags, depending on the interpretation (context disambiguation is typically needed to determine which particular tag is appropriate). The default value (no-value) is null. Returns a list of POS tags corresponding to current lemma. Declaration IList<StringBuilder> Tags { get; set; } Property Value Type Description IList < StringBuilder > Methods | Improve this Doc View Source Clear() Clear to default value. Declaration void Clear()"
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.TokenAttributes.MorphosyntacticTagsAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Morfologik.TokenAttributes.MorphosyntacticTagsAttribute.html",
    "title": "Class MorphosyntacticTagsAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MorphosyntacticTagsAttribute Morphosyntactic annotations for surface forms. Inheritance System.Object Attribute MorphosyntacticTagsAttribute Implements IMorphosyntacticTagsAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Namespace : Lucene.Net.Analysis.Morfologik.TokenAttributes Assembly : Lucene.Net.Analysis.Morfologik.dll Syntax public class MorphosyntacticTagsAttribute : Attribute, IMorphosyntacticTagsAttribute, IAttribute Constructors | Improve this Doc View Source MorphosyntacticTagsAttribute() Initializes this attribute with no tags Declaration public MorphosyntacticTagsAttribute() Properties | Improve this Doc View Source Tags Gets or sets the POS tag of the term. If you need a copy of this char sequence, copy its contents (and clone s) because it changes with each new term to avoid unnecessary memory allocations. Declaration public virtual IList<StringBuilder> Tags { get; set; } Property Value Type Description IList < StringBuilder > Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Attribute.Clone() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) Implements IMorphosyntacticTagsAttribute IAttribute See Also IMorphosyntacticTagsAttribute"
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Uk.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Uk.html",
    "title": "Namespace Lucene.Net.Analysis.Uk | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Uk Classes UkrainianMorfologikAnalyzer A dictionary-based Analyzer for Ukrainian."
  },
  "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Uk.UkrainianMorfologikAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/Lucene.Net.Analysis.Uk.UkrainianMorfologikAnalyzer.html",
    "title": "Class UkrainianMorfologikAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UkrainianMorfologikAnalyzer A dictionary-based Analyzer for Ukrainian. Inheritance System.Object Analyzer StopwordAnalyzerBase UkrainianMorfologikAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Uk Assembly : Lucene.Net.Analysis.Morfologik.dll Syntax public sealed class UkrainianMorfologikAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source UkrainianMorfologikAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public UkrainianMorfologikAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match. | Improve this Doc View Source UkrainianMorfologikAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public UkrainianMorfologikAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match. CharArraySet stopwords A stopword set. | Improve this Doc View Source UkrainianMorfologikAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public UkrainianMorfologikAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match. CharArraySet stopwords A stopword set. CharArraySet stemExclusionSet A set of terms not to be stemmed. Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Ukrainian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet Default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from a StandardTokenizer filtered with LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and MorfologikFilter on the Ukrainian dictionary. | Improve this Doc View Source InitReader(String, TextReader) Declaration protected override TextReader InitReader(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TextReader"
  },
  "api/Lucene.Net.Analysis.Morfologik/overview.html": {
    "href": "api/Lucene.Net.Analysis.Morfologik/overview.html",
    "title": "Lucene.Net.Analysis.Morfologik | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Lucene.Net.Analysis.Morfologik <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> This package provides dictionary-driven lemmatization (\"accurate stemming\") filter and analyzer for the Polish Language, driven by the Morfologik library developed by Dawid Weiss and Marcin Miłkowski. For an introduction to Lucene's analysis API, see the Lucene.Net.Analysis package documentation. The MorfologikFilter yields one or more terms for each token. Each of those terms is given the same position in the index."
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.html",
    "title": "Namespace Lucene.Net.Analysis.OpenNlp | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.OpenNlp Classes OpenNLPChunkerFilter Run OpenNLP chunker. Prerequisite: the OpenNLPTokenizer and OpenNLPPOSFilter must precede this filter. Tags terms in the TypeAttribute, replacing the POS tags previously put there by OpenNLPPOSFilter . OpenNLPChunkerFilterFactory Factory for OpenNLPChunkerFilter . <fieldType name=\"text_opennlp_chunked\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> <filter class=\"solr.OpenNLPPOSFilterFactory\" posTaggerModel=\"filename\"/> <filter class=\"solr.OpenNLPChunkerFilterFactory\" chunkerModel=\"filename\"/> </analyzer> </fieldType> OpenNLPLemmatizerFilter Runs OpenNLP dictionary-based and/or MaxEnt lemmatizers. Both a dictionary-based lemmatizer and a MaxEnt lemmatizer are supported, via the \"dictionary\" and \"lemmatizerModel\" params, respectively. If both are configured, the dictionary-based lemmatizer is tried first, and then the MaxEnt lemmatizer is consulted for out-of-vocabulary tokens. The dictionary file must be encoded as UTF-8, with one entry per line, in the form word[tab]lemma[tab]part-of-speech OpenNLPLemmatizerFilterFactory Factory for OpenNLPLemmatizerFilter . <fieldType name=\"text_opennlp_lemma\" class=\"solr.TextField\" positionIncrementGap=\"100\" <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> /> <filter class=\"solr.OpenNLPLemmatizerFilterFactory\" dictionary=\"filename\" lemmatizerModel=\"filename\"/> </analyzer> </fieldType> OpenNLPPOSFilter Run OpenNLP POS tagger. Tags all terms in the ITypeAttribute . OpenNLPPOSFilterFactory Factory for OpenNLPPOSFilter . <fieldType name=\"text_opennlp_pos\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> <filter class=\"solr.OpenNLPPOSFilterFactory\" posTaggerModel=\"filename\"/> </analyzer> </fieldType> OpenNLPSentenceBreakIterator A that splits sentences using an OpenNLP sentence chunking model. OpenNLPTokenizer Run OpenNLP SentenceDetector and Tokenizer . The last token in each sentence is marked by setting the EOS_FLAG_BIT in the IFlagsAttribute ; following filters can use this information to apply operations to tokens one sentence at a time. OpenNLPTokenizerFactory Factory for OpenNLPTokenizer . <fieldType name=\"text_opennlp\" class=\"solr.TextField\" positionIncrementGap=\"100\" <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPChunkerFilter.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPChunkerFilter.html",
    "title": "Class OpenNLPChunkerFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenNLPChunkerFilter Run OpenNLP chunker. Prerequisite: the OpenNLPTokenizer and OpenNLPPOSFilter must precede this filter. Tags terms in the TypeAttribute, replacing the POS tags previously put there by OpenNLPPOSFilter . Inheritance System.Object AttributeSource TokenStream TokenFilter OpenNLPChunkerFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public sealed class OpenNLPChunkerFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source OpenNLPChunkerFilter(TokenStream, NLPChunkerOp) Declaration public OpenNLPChunkerFilter(TokenStream input, NLPChunkerOp chunkerOp) Parameters Type Name Description TokenStream input NLPChunkerOp chunkerOp Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPChunkerFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPChunkerFilterFactory.html",
    "title": "Class OpenNLPChunkerFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenNLPChunkerFilterFactory Factory for OpenNLPChunkerFilter . <fieldType name=\"text_opennlp_chunked\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> <filter class=\"solr.OpenNLPPOSFilterFactory\" posTaggerModel=\"filename\"/> <filter class=\"solr.OpenNLPChunkerFilterFactory\" chunkerModel=\"filename\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory OpenNLPChunkerFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class OpenNLPChunkerFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source OpenNLPChunkerFilterFactory(IDictionary<String, String>) Declaration public OpenNLPChunkerFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Fields | Improve this Doc View Source CHUNKER_MODEL Declaration public const string CHUNKER_MODEL = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPLemmatizerFilter.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPLemmatizerFilter.html",
    "title": "Class OpenNLPLemmatizerFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenNLPLemmatizerFilter Runs OpenNLP dictionary-based and/or MaxEnt lemmatizers. Both a dictionary-based lemmatizer and a MaxEnt lemmatizer are supported, via the \"dictionary\" and \"lemmatizerModel\" params, respectively. If both are configured, the dictionary-based lemmatizer is tried first, and then the MaxEnt lemmatizer is consulted for out-of-vocabulary tokens. The dictionary file must be encoded as UTF-8, with one entry per line, in the form word[tab]lemma[tab]part-of-speech Inheritance System.Object AttributeSource TokenStream TokenFilter OpenNLPLemmatizerFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class OpenNLPLemmatizerFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source OpenNLPLemmatizerFilter(TokenStream, NLPLemmatizerOp) Declaration public OpenNLPLemmatizerFilter(TokenStream input, NLPLemmatizerOp lemmatizerOp) Parameters Type Name Description TokenStream input NLPLemmatizerOp lemmatizerOp Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPLemmatizerFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPLemmatizerFilterFactory.html",
    "title": "Class OpenNLPLemmatizerFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenNLPLemmatizerFilterFactory Factory for OpenNLPLemmatizerFilter . <fieldType name=\"text_opennlp_lemma\" class=\"solr.TextField\" positionIncrementGap=\"100\" <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> /> <filter class=\"solr.OpenNLPLemmatizerFilterFactory\" dictionary=\"filename\" lemmatizerModel=\"filename\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory OpenNLPLemmatizerFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class OpenNLPLemmatizerFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source OpenNLPLemmatizerFilterFactory(IDictionary<String, String>) Declaration public OpenNLPLemmatizerFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Fields | Improve this Doc View Source DICTIONARY Declaration public const string DICTIONARY = null Field Value Type Description System.String | Improve this Doc View Source LEMMATIZER_MODEL Declaration public const string LEMMATIZER_MODEL = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPPOSFilter.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPPOSFilter.html",
    "title": "Class OpenNLPPOSFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenNLPPOSFilter Run OpenNLP POS tagger. Tags all terms in the ITypeAttribute . Inheritance System.Object AttributeSource TokenStream TokenFilter OpenNLPPOSFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public sealed class OpenNLPPOSFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source OpenNLPPOSFilter(TokenStream, NLPPOSTaggerOp) Declaration public OpenNLPPOSFilter(TokenStream input, NLPPOSTaggerOp posTaggerOp) Parameters Type Name Description TokenStream input NLPPOSTaggerOp posTaggerOp Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPPOSFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPPOSFilterFactory.html",
    "title": "Class OpenNLPPOSFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenNLPPOSFilterFactory Factory for OpenNLPPOSFilter . <fieldType name=\"text_opennlp_pos\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> <filter class=\"solr.OpenNLPPOSFilterFactory\" posTaggerModel=\"filename\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory OpenNLPPOSFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class OpenNLPPOSFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source OpenNLPPOSFilterFactory(IDictionary<String, String>) Declaration public OpenNLPPOSFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Fields | Improve this Doc View Source POS_TAGGER_MODEL Declaration public const string POS_TAGGER_MODEL = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPSentenceBreakIterator.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPSentenceBreakIterator.html",
    "title": "Class OpenNLPSentenceBreakIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenNLPSentenceBreakIterator A that splits sentences using an OpenNLP sentence chunking model. Inheritance System.Object OpenNLPSentenceBreakIterator Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public sealed class OpenNLPSentenceBreakIterator : BreakIterator Constructors | Improve this Doc View Source OpenNLPSentenceBreakIterator(NLPSentenceDetectorOp) Declaration public OpenNLPSentenceBreakIterator(NLPSentenceDetectorOp sentenceOp) Parameters Type Name Description NLPSentenceDetectorOp sentenceOp Properties | Improve this Doc View Source Current Declaration public override int Current { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Declaration public override CharacterIterator Text { get; } Property Value Type Description CharacterIterator Methods | Improve this Doc View Source First() Declaration public override int First() Returns Type Description System.Int32 | Improve this Doc View Source Following(Int32) Declaration public override int Following(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description System.Int32 | Improve this Doc View Source Last() Declaration public override int Last() Returns Type Description System.Int32 | Improve this Doc View Source Next() Declaration public override int Next() Returns Type Description System.Int32 | Improve this Doc View Source Next(Int32) Declaration public override int Next(int n) Parameters Type Name Description System.Int32 n Returns Type Description System.Int32 | Improve this Doc View Source Preceding(Int32) Declaration public override int Preceding(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description System.Int32 | Improve this Doc View Source Previous() Declaration public override int Previous() Returns Type Description System.Int32 | Improve this Doc View Source SetText(CharacterIterator) Declaration public override void SetText(CharacterIterator newText) Parameters Type Name Description CharacterIterator newText"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPTokenizer.html",
    "title": "Class OpenNLPTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenNLPTokenizer Run OpenNLP SentenceDetector and Tokenizer . The last token in each sentence is marked by setting the EOS_FLAG_BIT in the IFlagsAttribute ; following filters can use this information to apply operations to tokens one sentence at a time. Inheritance System.Object AttributeSource TokenStream Tokenizer SegmentingTokenizerBase OpenNLPTokenizer Implements IDisposable Inherited Members SegmentingTokenizerBase.BUFFERMAX SegmentingTokenizerBase.m_buffer SegmentingTokenizerBase.m_offset SegmentingTokenizerBase.IncrementToken() SegmentingTokenizerBase.End() SegmentingTokenizerBase.IsSafeEnd(Char) Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public sealed class OpenNLPTokenizer : SegmentingTokenizerBase, IDisposable Constructors | Improve this Doc View Source OpenNLPTokenizer(AttributeSource.AttributeFactory, TextReader, NLPSentenceDetectorOp, NLPTokenizerOp) Declaration public OpenNLPTokenizer(AttributeSource.AttributeFactory factory, TextReader reader, NLPSentenceDetectorOp sentenceOp, NLPTokenizerOp tokenizerOp) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader reader NLPSentenceDetectorOp sentenceOp NLPTokenizerOp tokenizerOp | Improve this Doc View Source OpenNLPTokenizer(TextReader, NLPSentenceDetectorOp, NLPTokenizerOp) Creates a new OpenNLPTokenizer Declaration public OpenNLPTokenizer(TextReader reader, NLPSentenceDetectorOp sentenceOp, NLPTokenizerOp tokenizerOp) Parameters Type Name Description TextReader reader NLPSentenceDetectorOp sentenceOp NLPTokenizerOp tokenizerOp Fields | Improve this Doc View Source EOS_FLAG_BIT Declaration public static int EOS_FLAG_BIT Field Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source IncrementWord() Declaration protected override bool IncrementWord() Returns Type Description System.Boolean Overrides SegmentingTokenizerBase.IncrementWord() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides SegmentingTokenizerBase.Reset() | Improve this Doc View Source SetNextSentence(Int32, Int32) Declaration protected override void SetNextSentence(int sentenceStart, int sentenceEnd) Parameters Type Name Description System.Int32 sentenceStart System.Int32 sentenceEnd Overrides SegmentingTokenizerBase.SetNextSentence(Int32, Int32) Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.OpenNLPTokenizerFactory.html",
    "title": "Class OpenNLPTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenNLPTokenizerFactory Factory for OpenNLPTokenizer . <fieldType name=\"text_opennlp\" class=\"solr.TextField\" positionIncrementGap=\"100\" <analyzer> <tokenizer class=\"solr.OpenNLPTokenizerFactory\" sentenceModel=\"filename\" tokenizerModel=\"filename\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory OpenNLPTokenizerFactory Implements IResourceLoaderAware Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.OpenNlp Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class OpenNLPTokenizerFactory : TokenizerFactory, IResourceLoaderAware Constructors | Improve this Doc View Source OpenNLPTokenizerFactory(IDictionary<String, String>) Declaration public OpenNLPTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Fields | Improve this Doc View Source SENTENCE_MODEL Declaration public const string SENTENCE_MODEL = null Field Value Type Description System.String | Improve this Doc View Source TOKENIZER_MODEL Declaration public const string TOKENIZER_MODEL = null Field Value Type Description System.String Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader reader Returns Type Description Tokenizer | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.html",
    "title": "Namespace Lucene.Net.Analysis.OpenNlp.Tools | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.OpenNlp.Tools Classes NLPChunkerOp Supply OpenNLP Chunking tool Requires binary models from OpenNLP project on SourceForge. NLPLemmatizerOp Supply OpenNLP Lemmatizer tools. Both a dictionary-based lemmatizer and a MaxEnt lemmatizer are supported. If both are configured, the dictionary-based lemmatizer is tried first, and then the MaxEnt lemmatizer is consulted for out-of-vocabulary tokens. The MaxEnt implementation requires binary models from OpenNLP project on SourceForge. NLPNERTaggerOp Supply OpenNLP Named Entity Resolution tool Requires binary models from OpenNLP project on SourceForge. Usage: from the OpenNLP documentation : \"The NameFinderME class is not thread safe, it must only be called from one thread. To use multiple threads multiple NameFinderME instances sharing the same model instance can be created. The input text should be segmented into documents, sentences and tokens. To perform entity detection an application calls the find method for every sentence in the document. After every document clearAdaptiveData must be called to clear the adaptive data in the feature generators. Not calling clearAdaptiveData can lead to a sharp drop in the detection rate after a few documents.\" NLPPOSTaggerOp Supply OpenNLP Parts-Of-Speech Tagging tool. Requires binary models from OpenNLP project on SourceForge. NLPSentenceDetectorOp Supply OpenNLP Sentence Detector tool. Requires binary models from OpenNLP project on SourceForge. NLPTokenizerOp Supply OpenNLP Sentence Tokenizer tool. Requires binary models from OpenNLP project on SourceForge. OpenNLPOpsFactory Supply OpenNLP Named Entity Recognizer. Cache model file objects. Assumes model files are thread-safe."
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPChunkerOp.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPChunkerOp.html",
    "title": "Class NLPChunkerOp | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NLPChunkerOp Supply OpenNLP Chunking tool Requires binary models from OpenNLP project on SourceForge. Inheritance System.Object NLPChunkerOp Namespace : Lucene.Net.Analysis.OpenNlp.Tools Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class NLPChunkerOp : object Constructors | Improve this Doc View Source NLPChunkerOp(ChunkerModel) Declaration public NLPChunkerOp(ChunkerModel chunkerModel) Parameters Type Name Description ChunkerModel chunkerModel Methods | Improve this Doc View Source GetChunks(String[], String[], Double[]) Declaration public virtual string[] GetChunks(string[] words, string[] tags, double[] probs) Parameters Type Name Description System.String [] words System.String [] tags System.Double [] probs Returns Type Description System.String []"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPLemmatizerOp.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPLemmatizerOp.html",
    "title": "Class NLPLemmatizerOp | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NLPLemmatizerOp Supply OpenNLP Lemmatizer tools. Both a dictionary-based lemmatizer and a MaxEnt lemmatizer are supported. If both are configured, the dictionary-based lemmatizer is tried first, and then the MaxEnt lemmatizer is consulted for out-of-vocabulary tokens. The MaxEnt implementation requires binary models from OpenNLP project on SourceForge. Inheritance System.Object NLPLemmatizerOp Namespace : Lucene.Net.Analysis.OpenNlp.Tools Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class NLPLemmatizerOp : object Constructors | Improve this Doc View Source NLPLemmatizerOp(Stream, LemmatizerModel) Declaration public NLPLemmatizerOp(Stream dictionary, LemmatizerModel lemmatizerModel) Parameters Type Name Description Stream dictionary LemmatizerModel lemmatizerModel Methods | Improve this Doc View Source Lemmatize(String[], String[]) Declaration public virtual string[] Lemmatize(string[] words, string[] postags) Parameters Type Name Description System.String [] words System.String [] postags Returns Type Description System.String []"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPNERTaggerOp.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPNERTaggerOp.html",
    "title": "Class NLPNERTaggerOp | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NLPNERTaggerOp Supply OpenNLP Named Entity Resolution tool Requires binary models from OpenNLP project on SourceForge. Usage: from the OpenNLP documentation : \"The NameFinderME class is not thread safe, it must only be called from one thread. To use multiple threads multiple NameFinderME instances sharing the same model instance can be created. The input text should be segmented into documents, sentences and tokens. To perform entity detection an application calls the find method for every sentence in the document. After every document clearAdaptiveData must be called to clear the adaptive data in the feature generators. Not calling clearAdaptiveData can lead to a sharp drop in the detection rate after a few documents.\" Inheritance System.Object NLPNERTaggerOp Namespace : Lucene.Net.Analysis.OpenNlp.Tools Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class NLPNERTaggerOp : object Constructors | Improve this Doc View Source NLPNERTaggerOp(TokenNameFinderModel) Declaration public NLPNERTaggerOp(TokenNameFinderModel model) Parameters Type Name Description TokenNameFinderModel model Methods | Improve this Doc View Source GetNames(String[]) Declaration public virtual Span[] GetNames(string[] words) Parameters Type Name Description System.String [] words Returns Type Description Span [] | Improve this Doc View Source Reset() Declaration public virtual void Reset()"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPPOSTaggerOp.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPPOSTaggerOp.html",
    "title": "Class NLPPOSTaggerOp | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NLPPOSTaggerOp Supply OpenNLP Parts-Of-Speech Tagging tool. Requires binary models from OpenNLP project on SourceForge. Inheritance System.Object NLPPOSTaggerOp Namespace : Lucene.Net.Analysis.OpenNlp.Tools Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class NLPPOSTaggerOp : object Constructors | Improve this Doc View Source NLPPOSTaggerOp(POSModel) Declaration public NLPPOSTaggerOp(POSModel model) Parameters Type Name Description POSModel model Methods | Improve this Doc View Source GetPOSTags(String[]) Declaration public virtual string[] GetPOSTags(string[] words) Parameters Type Name Description System.String [] words Returns Type Description System.String []"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPSentenceDetectorOp.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPSentenceDetectorOp.html",
    "title": "Class NLPSentenceDetectorOp | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NLPSentenceDetectorOp Supply OpenNLP Sentence Detector tool. Requires binary models from OpenNLP project on SourceForge. Inheritance System.Object NLPSentenceDetectorOp Namespace : Lucene.Net.Analysis.OpenNlp.Tools Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class NLPSentenceDetectorOp : object Constructors | Improve this Doc View Source NLPSentenceDetectorOp() Declaration public NLPSentenceDetectorOp() | Improve this Doc View Source NLPSentenceDetectorOp(SentenceModel) Declaration public NLPSentenceDetectorOp(SentenceModel model) Parameters Type Name Description SentenceModel model Methods | Improve this Doc View Source SplitSentences(String) Declaration public virtual Span[] SplitSentences(string line) Parameters Type Name Description System.String line Returns Type Description Span []"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPTokenizerOp.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.NLPTokenizerOp.html",
    "title": "Class NLPTokenizerOp | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NLPTokenizerOp Supply OpenNLP Sentence Tokenizer tool. Requires binary models from OpenNLP project on SourceForge. Inheritance System.Object NLPTokenizerOp Namespace : Lucene.Net.Analysis.OpenNlp.Tools Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public class NLPTokenizerOp : object Constructors | Improve this Doc View Source NLPTokenizerOp() Declaration public NLPTokenizerOp() | Improve this Doc View Source NLPTokenizerOp(TokenizerModel) Declaration public NLPTokenizerOp(TokenizerModel model) Parameters Type Name Description TokenizerModel model Methods | Improve this Doc View Source GetTerms(String) Declaration public virtual Span[] GetTerms(string sentence) Parameters Type Name Description System.String sentence Returns Type Description Span []"
  },
  "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.OpenNLPOpsFactory.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/Lucene.Net.Analysis.OpenNlp.Tools.OpenNLPOpsFactory.html",
    "title": "Class OpenNLPOpsFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenNLPOpsFactory Supply OpenNLP Named Entity Recognizer. Cache model file objects. Assumes model files are thread-safe. Inheritance System.Object OpenNLPOpsFactory Namespace : Lucene.Net.Analysis.OpenNlp.Tools Assembly : Lucene.Net.Analysis.OpenNLP.dll Syntax public static class OpenNLPOpsFactory : object Methods | Improve this Doc View Source ClearModels() Declaration public static void ClearModels() | Improve this Doc View Source GetChunker(String) Declaration public static NLPChunkerOp GetChunker(string modelName) Parameters Type Name Description System.String modelName Returns Type Description NLPChunkerOp | Improve this Doc View Source GetChunkerModel(String, IResourceLoader) Declaration public static ChunkerModel GetChunkerModel(string modelName, IResourceLoader loader) Parameters Type Name Description System.String modelName IResourceLoader loader Returns Type Description ChunkerModel | Improve this Doc View Source GetLemmatizer(String, String) Declaration public static NLPLemmatizerOp GetLemmatizer(string dictionaryFile, string lemmatizerModelFile) Parameters Type Name Description System.String dictionaryFile System.String lemmatizerModelFile Returns Type Description NLPLemmatizerOp | Improve this Doc View Source GetLemmatizerDictionary(String, IResourceLoader) Declaration public static string GetLemmatizerDictionary(string dictionaryFile, IResourceLoader loader) Parameters Type Name Description System.String dictionaryFile IResourceLoader loader Returns Type Description System.String | Improve this Doc View Source GetLemmatizerModel(String, IResourceLoader) Declaration public static LemmatizerModel GetLemmatizerModel(string modelName, IResourceLoader loader) Parameters Type Name Description System.String modelName IResourceLoader loader Returns Type Description LemmatizerModel | Improve this Doc View Source GetNERTagger(String) Declaration public static NLPNERTaggerOp GetNERTagger(string modelName) Parameters Type Name Description System.String modelName Returns Type Description NLPNERTaggerOp | Improve this Doc View Source GetNERTaggerModel(String, IResourceLoader) Declaration public static TokenNameFinderModel GetNERTaggerModel(string modelName, IResourceLoader loader) Parameters Type Name Description System.String modelName IResourceLoader loader Returns Type Description TokenNameFinderModel | Improve this Doc View Source GetPOSTagger(String) Declaration public static NLPPOSTaggerOp GetPOSTagger(string modelName) Parameters Type Name Description System.String modelName Returns Type Description NLPPOSTaggerOp | Improve this Doc View Source GetPOSTaggerModel(String, IResourceLoader) Declaration public static POSModel GetPOSTaggerModel(string modelName, IResourceLoader loader) Parameters Type Name Description System.String modelName IResourceLoader loader Returns Type Description POSModel | Improve this Doc View Source GetSentenceDetector(String) Declaration public static NLPSentenceDetectorOp GetSentenceDetector(string modelName) Parameters Type Name Description System.String modelName Returns Type Description NLPSentenceDetectorOp | Improve this Doc View Source GetSentenceModel(String, IResourceLoader) Declaration public static SentenceModel GetSentenceModel(string modelName, IResourceLoader loader) Parameters Type Name Description System.String modelName IResourceLoader loader Returns Type Description SentenceModel | Improve this Doc View Source GetTokenizer(String) Declaration public static NLPTokenizerOp GetTokenizer(string modelName) Parameters Type Name Description System.String modelName Returns Type Description NLPTokenizerOp | Improve this Doc View Source GetTokenizerModel(String, IResourceLoader) Declaration public static TokenizerModel GetTokenizerModel(string modelName, IResourceLoader loader) Parameters Type Name Description System.String modelName IResourceLoader loader Returns Type Description TokenizerModel"
  },
  "api/Lucene.Net.Analysis.OpenNLP/overview.html": {
    "href": "api/Lucene.Net.Analysis.OpenNLP/overview.html",
    "title": "| Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> OpenNLP Library Integration"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.BeiderMorseFilter.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.BeiderMorseFilter.html",
    "title": "Class BeiderMorseFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BeiderMorseFilter TokenFilter for Beider-Morse phonetic encoding. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream TokenFilter BeiderMorseFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class BeiderMorseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source BeiderMorseFilter(TokenStream, PhoneticEngine) Calls BeiderMorseFilter(TokenStream, PhoneticEngine, LanguageSet) Declaration public BeiderMorseFilter(TokenStream input, PhoneticEngine engine) Parameters Type Name Description TokenStream input TokenStream to filter PhoneticEngine engine Configured PhoneticEngine with BM settings. | Improve this Doc View Source BeiderMorseFilter(TokenStream, PhoneticEngine, LanguageSet) Create a new BeiderMorseFilter Declaration public BeiderMorseFilter(TokenStream input, PhoneticEngine engine, LanguageSet languages) Parameters Type Name Description TokenStream input TokenStream to filter PhoneticEngine engine Configured PhoneticEngine with BM settings. LanguageSet languages Optional Set of original languages. Can be null (which means it will be guessed). Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable See Also BeiderMorseEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.BeiderMorseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.BeiderMorseFilterFactory.html",
    "title": "Class BeiderMorseFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BeiderMorseFilterFactory Factory for BeiderMorseFilter . <fieldType name=\"text_bm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.BeiderMorseFilterFactory\" nameType=\"GENERIC\" ruleType=\"APPROX\" concat=\"true\" languageSet=\"auto\" </filter> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory BeiderMorseFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class BeiderMorseFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source BeiderMorseFilterFactory(IDictionary<String, String>) Creates a new BeiderMorseFilterFactory Declaration public BeiderMorseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilter.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilter.html",
    "title": "Class DoubleMetaphoneFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleMetaphoneFilter Filter for DoubleMetaphone (supporting secondary codes) Inheritance System.Object AttributeSource TokenStream TokenFilter DoubleMetaphoneFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class DoubleMetaphoneFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source DoubleMetaphoneFilter(TokenStream, Int32, Boolean) Creates a DoubleMetaphoneFilter with the specified maximum code length, and either adding encoded forms as synonyms ( inject=true ) or replacing them. Declaration public DoubleMetaphoneFilter(TokenStream input, int maxCodeLength, bool inject) Parameters Type Name Description TokenStream input System.Int32 maxCodeLength System.Boolean inject Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilterFactory.html",
    "title": "Class DoubleMetaphoneFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleMetaphoneFilterFactory Factory for DoubleMetaphoneFilter . <fieldType name=\"text_dblmtphn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DoubleMetaphoneFilterFactory\" inject=\"true\" maxCodeLength=\"4\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory DoubleMetaphoneFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DoubleMetaphoneFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source DoubleMetaphoneFilterFactory(IDictionary<String, String>) Creates a new DoubleMetaphoneFilterFactory Declaration public DoubleMetaphoneFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Fields | Improve this Doc View Source DEFAULT_MAX_CODE_LENGTH default maxCodeLength if not specified Declaration public static readonly int DEFAULT_MAX_CODE_LENGTH Field Value Type Description System.Int32 | Improve this Doc View Source INJECT parameter name: true if encoded tokens should be added as synonyms Declaration public static readonly string INJECT Field Value Type Description System.String | Improve this Doc View Source MAX_CODE_LENGTH parameter name: restricts the length of the phonetic code Declaration public static readonly string MAX_CODE_LENGTH Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.html",
    "title": "Namespace Lucene.Net.Analysis.Phonetic | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Phonetic <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analysis for indexing phonetic signatures (for sounds-alike search) For an introduction to Lucene's analysis API, see the Lucene.Net.Analysis package documentation. This module provides analysis components (using encoders from Apache Commons Codec ) that index and search phonetic signatures. Classes BeiderMorseFilter TokenFilter for Beider-Morse phonetic encoding. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BeiderMorseFilterFactory Factory for BeiderMorseFilter . <fieldType name=\"text_bm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.BeiderMorseFilterFactory\" nameType=\"GENERIC\" ruleType=\"APPROX\" concat=\"true\" languageSet=\"auto\" </filter> </analyzer> </fieldType> DoubleMetaphoneFilter Filter for DoubleMetaphone (supporting secondary codes) DoubleMetaphoneFilterFactory Factory for DoubleMetaphoneFilter . <fieldType name=\"text_dblmtphn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DoubleMetaphoneFilterFactory\" inject=\"true\" maxCodeLength=\"4\"/> </analyzer> </fieldType> PhoneticFilter Create tokens for phonetic matches. See the Language namespace. PhoneticFilterFactory Factory for PhoneticFilter . Create tokens based on phonetic encoders from the Language namespace. This takes one required argument, \"encoder\", and the rest are optional: encoder required, one of \"DoubleMetaphone\", \"Metaphone\", \"Soundex\", \"RefinedSoundex\", \"Caverphone\" (v2.0), or \"ColognePhonetic\" (case insensitive). If encoder isn't one of these, it'll be resolved as a class name either by itself if it already contains a '.' or otherwise as in the same package as these others. inject (default=true) add tokens to the stream with the offset=0 maxCodeLength The maximum length of the phonetic codes, as defined by the encoder. If an encoder doesn't support this then specifying this is an error. <fieldType name=\"text_phonetic\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.PhoneticFilterFactory\" encoder=\"DoubleMetaphone\" inject=\"true\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.AbstractCaverphone.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.AbstractCaverphone.html",
    "title": "Class AbstractCaverphone | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractCaverphone Encodes a string into a Caverphone value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: This class is immutable and thread-safe. See Wikipedia - Caverphone Inheritance System.Object AbstractCaverphone Caverphone1 Caverphone2 Implements IStringEncoder Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public abstract class AbstractCaverphone : object, IStringEncoder Constructors | Improve this Doc View Source AbstractCaverphone() Creates an instance of the Caverphone encoder Declaration public AbstractCaverphone() Methods | Improve this Doc View Source Encode(String) Declaration public abstract string Encode(string source) Parameters Type Name Description System.String source Returns Type Description System.String | Improve this Doc View Source IsEncodeEqual(String, String) Tests if the encodings of two strings are equal. This method might be promoted to a new AbstractStringEncoder superclass. Declaration public virtual bool IsEncodeEqual(string str1, string str2) Parameters Type Name Description System.String str1 First of two strings to compare. System.String str2 Second of two strings to compare. Returns Type Description System.Boolean true if the encodings of these strings are identical, false otherwise. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.BeiderMorseEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.BeiderMorseEncoder.html",
    "title": "Class BeiderMorseEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BeiderMorseEncoder Encodes strings into their Beider-Morse phonetic encoding. Inheritance System.Object BeiderMorseEncoder Implements IStringEncoder Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class BeiderMorseEncoder : object, IStringEncoder Remarks Beider-Morse phonetic encodings are optimised for family names. However, they may be useful for a wide range of words. This encoder is intentionally mutable to allow dynamic configuration through bean properties. As such, it is mutable, and may not be thread-safe. If you require a guaranteed thread-safe encoding then use PhoneticEngine directly. Encoding overview Beider-Morse phonetic encodings is a multi-step process. Firstly, a table of rules is consulted to guess what language the word comes from. For example, if it ends in \" ault \" then it infers that the word is French. Next, the word is translated into a phonetic representation using a language-specific phonetics table. Some runs of letters can be pronounced in multiple ways, and a single run of letters may be potentially broken up into phonemes at different places, so this stage results in a set of possible language-specific phonetic representations. Lastly, this language-specific phonetic representation is processed by a table of rules that re-writes it phonetically taking into account systematic pronunciation differences between languages, to move it towards a pan-indo-european phonetic representation. Again, sometimes there are multiple ways this could be done and sometimes things that can be pronounced in several ways in the source language have only one way to represent them in this average phonetic language, so the result is again a set of phonetic spellings. Some names are treated as having multiple parts. This can be due to two things. Firstly, they may be hyphenated. In this case, each individual hyphenated word is encoded, and then these are combined end-to-end for the final encoding. Secondly, some names have standard prefixes, for example, \" Mac/Mc \" in Scottish (English) names. As sometimes it is ambiguous whether the prefix is intended or is an accident of the spelling, the word is encoded once with the prefix and once without it. The resulting encoding contains one and then the other result. Encoding format Individual phonetic spellings of an input word are represented in upper- and lower-case roman characters. Where there are multiple possible phonetic representations, these are joined with a pipe ( | ) character. If multiple hyphenated words where found, or if the word may contain a name prefix, each encoded word is placed in elipses and these blocks are then joined with hyphens. For example, \" d'ortley \" has a possible prefix. The form without prefix encodes to ortlaj|ortlej , while the form with prefix encodes to dortlaj|dortlej . Thus, the full, combined encoding is (ortlaj|ortlej)-(dortlaj|dortlej) . The encoded forms are often quite a bit longer than the input strings. This is because a single input may have many potential phonetic interpretations. For example, Renault encodes to rYnDlt|rYnalt|rYnult|rinDlt|rinalt|rinult . The APPROX rules will tend to produce larger encodings as they consider a wider range of possible, approximate phonetic interpretations of the original word. Down-stream applications may wish to further process the encoding for indexing or lookup purposes, for example, by splitting on pipe ( | ) and indexing under each of these alternatives. since 1.6 Properties | Improve this Doc View Source IsConcat Gets or Sets how multiple possible phonetic encodings are combined. true if multiple encodings are to be combined with a '|', false if just the first one is to be considered. Declaration public virtual bool IsConcat { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source NameType Gets or Sets the name type currently in operation. Use GENERIC unless you specifically want phonetic encodings optimized for Ashkenazi or Sephardic Jewish family names. Declaration public virtual NameType NameType { get; set; } Property Value Type Description NameType | Improve this Doc View Source RuleType Gets or Sets the rule type to apply. This will widen or narrow the range of phonetic encodings considered. APPROX or EXACT for approximate or exact phonetic matches. Declaration public virtual RuleType RuleType { get; set; } Property Value Type Description RuleType Methods | Improve this Doc View Source Encode(String) Declaration public virtual string Encode(string source) Parameters Type Name Description System.String source Returns Type Description System.String | Improve this Doc View Source SetMaxPhonemes(Int32) Sets the number of maximum of phonemes that shall be considered by the engine. since 1.7 Declaration public virtual void SetMaxPhonemes(int maxPhonemes) Parameters Type Name Description System.Int32 maxPhonemes the maximum number of phonemes returned by the engine Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.html",
    "title": "Namespace Lucene.Net.Analysis.Phonetic.Language.Bm | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Phonetic.Language.Bm Classes BeiderMorseEncoder Encodes strings into their Beider-Morse phonetic encoding. Lang Language guessing utility. Languages Language codes. LanguageSet A set of languages. NameTypeExtensions Phoneme PhonemeList PhoneticEngine Converts words into potential phonetic representations. Rule A phoneme rule. RuleTypeExtensions SomeLanguages Some languages, explicitly enumerated. Interfaces IPhonemeExpr IRPattern A minimal wrapper around the functionality of Rule Pattern that we use, to allow for alternate implementations. Enums NameType Supported types of names. Unless you are matching particular family names, use GENERIC . The GENERIC NameType should work reasonably well for non-name words. The other encodings are specifically tuned to family names, and may not work well at all for general text. since 1.6 RuleType Types of rule. since 1.6"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.IPhonemeExpr.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.IPhonemeExpr.html",
    "title": "Interface IPhonemeExpr | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPhonemeExpr Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public interface IPhonemeExpr Properties | Improve this Doc View Source Phonemes Declaration IList<Phoneme> Phonemes { get; } Property Value Type Description IList < Phoneme >"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.IRPattern.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.IRPattern.html",
    "title": "Interface IRPattern | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IRPattern A minimal wrapper around the functionality of Rule Pattern that we use, to allow for alternate implementations. Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public interface IRPattern Methods | Improve this Doc View Source IsMatch(ICharSequence) Declaration bool IsMatch(ICharSequence input) Parameters Type Name Description ICharSequence input Returns Type Description System.Boolean | Improve this Doc View Source IsMatch(StringBuilder) Declaration bool IsMatch(StringBuilder input) Parameters Type Name Description StringBuilder input Returns Type Description System.Boolean | Improve this Doc View Source IsMatch(String) Declaration bool IsMatch(string input) Parameters Type Name Description System.String input Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Lang.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Lang.html",
    "title": "Class Lang | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lang Language guessing utility. Inheritance System.Object Lang Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Lang : object Remarks This class encapsulates rules used to guess the possible languages that a word originates from. This is done by reference to a whole series of rules distributed in resource files. Instances of this class are typically managed through the static factory method GetInstance(NameType) . Unless you are developing your own language guessing rules, you will not need to interact with this class directly. This class is intended to be immutable and thread-safe. Lang resources Language guessing rules are typically loaded from resource files. These are UTF-8 encoded text files. They are systematically named following the pattern: Lucene.Net.Analysis.Phonetic.Language.Bm.lang.txt The format of these resources is the following: Rules: Whitespace separated strings. There should be 3 columns to each row, and these will be interpreted as: pattern:a regular expression. languages:a '+'-separated list of languages. acceptOnMatch:'true' or 'false' indicating if a match rules in or rules out the language. End-of-line comments: Any occurrence of '//' will cause all text following on that line to be discarded as a comment. Multi-line comments: Any line starting with '/ ' will start multi-line commenting mode. This will skip all content until a line ending in ' ' and '/' is found. Blank lines: All blank lines will be skipped. Port of lang.php since 1.6 Methods | Improve this Doc View Source GetInstance(NameType) Gets a Lang instance for one of the supported NameType s. Declaration public static Lang GetInstance(NameType nameType) Parameters Type Name Description NameType nameType The NameType to look up. Returns Type Description Lang A Lang encapsulating the language guessing rules for that name type. | Improve this Doc View Source GuessLanguage(String) Guesses the language of a word. Declaration public virtual string GuessLanguage(string text) Parameters Type Name Description System.String text The word. Returns Type Description System.String The language that the word originates from or ANY if there was no unique match. | Improve this Doc View Source GuessLanguages(String) Guesses the languages of a word. Declaration public virtual LanguageSet GuessLanguages(string input) Parameters Type Name Description System.String input The word. Returns Type Description LanguageSet A Set of Strings of language names that are potential matches for the input word. | Improve this Doc View Source LoadFromResource(String, Languages) Loads language rules from a resource. In normal use, you will obtain instances of Lang through the GetInstance(NameType) method. You will only need to call this yourself if you are developing custom language mapping rules. Declaration public static Lang LoadFromResource(string languageRulesResourceName, Languages languages) Parameters Type Name Description System.String languageRulesResourceName The fully-qualified or partially-qualified resource name to load. Languages languages The languages that these rules will support. Returns Type Description Lang A Lang encapsulating the loaded language-guessing rules."
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Languages.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Languages.html",
    "title": "Class Languages | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Languages Language codes. Inheritance System.Object Languages Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Languages : object Remarks Language codes are typically loaded from resource files. These are UTF-8 encoded text files. They are systematically named following the pattern: Lucene.Net.Analysis.Phonetic.Language.Bm. NameType _languages.txt The format of these resources is the following: Language:A single string containing no whitespace. End-of-line comments:Any occurrence of '//' will cause all text following on that line to be discarded as a comment. Multi-line comments:Any line starting with '/ ' will start multi-line commenting mode. This will skip all content until a line ending in ' ' and '/' is found. Blank lines:All blank lines will be skipped. Ported from language.php This class is immutable and thread-safe. since 1.6 Fields | Improve this Doc View Source ANY Declaration public static readonly string ANY Field Value Type Description System.String | Improve this Doc View Source ANY_LANGUAGE Any/all languages. Declaration public static readonly LanguageSet ANY_LANGUAGE Field Value Type Description LanguageSet | Improve this Doc View Source NO_LANGUAGES No languages at all. Declaration public static readonly LanguageSet NO_LANGUAGES Field Value Type Description LanguageSet Methods | Improve this Doc View Source GetInstance(NameType) Declaration public static Languages GetInstance(NameType nameType) Parameters Type Name Description NameType nameType Returns Type Description Languages | Improve this Doc View Source GetInstance(String) Declaration public static Languages GetInstance(string languagesResourceName) Parameters Type Name Description System.String languagesResourceName Returns Type Description Languages | Improve this Doc View Source GetLanguages() Declaration public virtual ISet<string> GetLanguages() Returns Type Description ISet < System.String >"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.LanguageSet.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.LanguageSet.html",
    "title": "Class LanguageSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LanguageSet A set of languages. Inheritance System.Object LanguageSet SomeLanguages Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public abstract class LanguageSet : object Properties | Improve this Doc View Source IsEmpty Declaration public abstract bool IsEmpty { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsSingleton Declaration public abstract bool IsSingleton { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Contains(String) Declaration public abstract bool Contains(string language) Parameters Type Name Description System.String language Returns Type Description System.Boolean | Improve this Doc View Source From(ISet<String>) Declaration public static LanguageSet From(ISet<string> langs) Parameters Type Name Description ISet < System.String > langs Returns Type Description LanguageSet | Improve this Doc View Source GetAny() Declaration public abstract string GetAny() Returns Type Description System.String | Improve this Doc View Source RestrictTo(LanguageSet) Declaration public abstract LanguageSet RestrictTo(LanguageSet other) Parameters Type Name Description LanguageSet other Returns Type Description LanguageSet"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.NameType.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.NameType.html",
    "title": "Enum NameType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum NameType Supported types of names. Unless you are matching particular family names, use GENERIC . The GENERIC NameType should work reasonably well for non-name words. The other encodings are specifically tuned to family names, and may not work well at all for general text. since 1.6 Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public enum NameType : int Fields Name Description ASHKENAZI Ashkenazi family names GENERIC Generic names and words SEPHARDIC Sephardic family names Extension Methods NameTypeExtensions.GetName()"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.NameTypeExtensions.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.NameTypeExtensions.html",
    "title": "Class NameTypeExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NameTypeExtensions Inheritance System.Object NameTypeExtensions Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public static class NameTypeExtensions : object Methods | Improve this Doc View Source GetName(NameType) Gets the short version of the name type. Declaration public static string GetName(this NameType nameType) Parameters Type Name Description NameType nameType the NameType Returns Type Description System.String the NameType short string"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Phoneme.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Phoneme.html",
    "title": "Class Phoneme | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Phoneme Inheritance System.Object Phoneme Implements IPhonemeExpr Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class Phoneme : object, IPhonemeExpr Constructors | Improve this Doc View Source Phoneme(Phoneme, Phoneme) Declaration public Phoneme(Phoneme phonemeLeft, Phoneme phonemeRight) Parameters Type Name Description Phoneme phonemeLeft Phoneme phonemeRight | Improve this Doc View Source Phoneme(Phoneme, Phoneme, LanguageSet) Declaration public Phoneme(Phoneme phonemeLeft, Phoneme phonemeRight, LanguageSet languages) Parameters Type Name Description Phoneme phonemeLeft Phoneme phonemeRight LanguageSet languages | Improve this Doc View Source Phoneme(ICharSequence, LanguageSet) Declaration public Phoneme(ICharSequence phonemeText, LanguageSet languages) Parameters Type Name Description ICharSequence phonemeText LanguageSet languages | Improve this Doc View Source Phoneme(StringBuilder, LanguageSet) Declaration public Phoneme(StringBuilder phonemeText, LanguageSet languages) Parameters Type Name Description StringBuilder phonemeText LanguageSet languages | Improve this Doc View Source Phoneme(String, LanguageSet) Declaration public Phoneme(string phonemeText, LanguageSet languages) Parameters Type Name Description System.String phonemeText LanguageSet languages Fields | Improve this Doc View Source COMPARER Declaration public static readonly IComparer<Phoneme> COMPARER Field Value Type Description IComparer < Phoneme > Properties | Improve this Doc View Source Languages Declaration public LanguageSet Languages { get; } Property Value Type Description LanguageSet | Improve this Doc View Source Phonemes Declaration public IList<Phoneme> Phonemes { get; } Property Value Type Description IList < Phoneme > Methods | Improve this Doc View Source Append(String) Declaration public Phoneme Append(string str) Parameters Type Name Description System.String str Returns Type Description Phoneme | Improve this Doc View Source GetPhonemeText() Declaration public string GetPhonemeText() Returns Type Description System.String | Improve this Doc View Source Join(Phoneme) Declaration public Phoneme Join(Phoneme right) Parameters Type Name Description Phoneme right Returns Type Description Phoneme Implements IPhonemeExpr"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.PhonemeList.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.PhonemeList.html",
    "title": "Class PhonemeList | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhonemeList Inheritance System.Object PhonemeList Implements IPhonemeExpr Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class PhonemeList : object, IPhonemeExpr Constructors | Improve this Doc View Source PhonemeList(IList<Phoneme>) Declaration public PhonemeList(IList<Phoneme> phonemes) Parameters Type Name Description IList < Phoneme > phonemes Properties | Improve this Doc View Source Phonemes Declaration public IList<Phoneme> Phonemes { get; } Property Value Type Description IList < Phoneme > Implements IPhonemeExpr"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.PhoneticEngine.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.PhoneticEngine.html",
    "title": "Class PhoneticEngine | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhoneticEngine Converts words into potential phonetic representations. Inheritance System.Object PhoneticEngine Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class PhoneticEngine : object Remarks This is a two-stage process. Firstly, the word is converted into a phonetic representation that takes into account the likely source language. Next, this phonetic representation is converted into a pan-European 'average' representation, allowing comparison between different versions of essentially the same word from different languages. This class is intentionally immutable and thread-safe. If you wish to alter the settings for a PhoneticEngine, you must make a new one with the updated settings. Ported from phoneticengine.php since 1.6 Constructors | Improve this Doc View Source PhoneticEngine(NameType, RuleType, Boolean) Generates a new, fully-configured phonetic engine. Declaration public PhoneticEngine(NameType nameType, RuleType ruleType, bool concat) Parameters Type Name Description NameType nameType The type of names it will use. RuleType ruleType The type of rules it will apply. System.Boolean concat If it will concatenate multiple encodings. | Improve this Doc View Source PhoneticEngine(NameType, RuleType, Boolean, Int32) Generates a new, fully-configured phonetic engine. since 1.7 Declaration public PhoneticEngine(NameType nameType, RuleType ruleType, bool concat, int maxPhonemes) Parameters Type Name Description NameType nameType The type of names it will use. RuleType ruleType The type of rules it will apply. System.Boolean concat If it will concatenate multiple encodings. System.Int32 maxPhonemes The maximum number of phonemes that will be handled. Properties | Improve this Doc View Source IsConcat Gets if multiple phonetic encodings are concatenated or if just the first one is kept. Returns true if multiple phonetic encodings are returned, false if just the first is. Declaration public virtual bool IsConcat { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Lang Gets the Lang language guessing rules being used. Declaration public virtual Lang Lang { get; } Property Value Type Description Lang | Improve this Doc View Source MaxPhonemes Gets the maximum number of phonemes the engine will calculate for a given input. since 1.7 Declaration public virtual int MaxPhonemes { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NameType Gets the NameType being used. Declaration public virtual NameType NameType { get; } Property Value Type Description NameType | Improve this Doc View Source RuleType Gets the RuleType being used. Declaration public virtual RuleType RuleType { get; } Property Value Type Description RuleType Methods | Improve this Doc View Source Encode(String) Encodes a string to its phonetic representation. Declaration public virtual string Encode(string input) Parameters Type Name Description System.String input The string to encode. Returns Type Description System.String The encoding of the input. | Improve this Doc View Source Encode(String, LanguageSet) Encodes an input string into an output phonetic representation, given a set of possible origin languages. Declaration public virtual string Encode(string input, LanguageSet languageSet) Parameters Type Name Description System.String input String to phoneticise; a string with dashes or spaces separating each word. LanguageSet languageSet Returns Type Description System.String A phonetic representation of the input; a string containing '-'-separated phonetic representations of the input."
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Rule.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.Rule.html",
    "title": "Class Rule | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Rule A phoneme rule. Inheritance System.Object Rule Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Rule : object Remarks Rules have a pattern, left context, right context, output phoneme, set of languages for which they apply and a logical flag indicating if all languages must be in play. A rule matches if: the pattern matches at the current position the string up until the beginning of the pattern matches the left context the string from the end of the pattern matches the right context logical is ALL and all languages are in scope; or logical is any other value and at least one language is in scope Rules are typically generated by parsing rules resources. In normal use, there will be no need for the user to explicitly construct their own. Rules are immutable and thread-safe. Rules resources Rules are typically loaded from resource files. These are UTF-8 encoded text files. They are systematically named following the pattern: Lucene.Net.Analysis.Phonetic.Language.Bm. NameType RuleType [language].txt The format of these resources is the following: Rules: whitespace separated, double-quoted strings. There should be 4 columns to each row, and these will be interpreted as: pattern left context right context phoneme End-of-line comments: Any occurrence of '//' will cause all text following on that line to be discarded as a comment. Multi-line comments: Any line starting with '/ ' will start multi-line commenting mode. This will skip all content until a line ending in ' ' and '/' is found. Blank lines: All blank lines will be skipped. since 1.6 Constructors | Improve this Doc View Source Rule(String, String, String, IPhonemeExpr) Creates a new rule. Declaration public Rule(string pattern, string lContext, string rContext, IPhonemeExpr phoneme) Parameters Type Name Description System.String pattern The pattern. System.String lContext The left context. System.String rContext The right context. IPhonemeExpr phoneme The resulting phoneme. Fields | Improve this Doc View Source ALL Declaration public static readonly string ALL Field Value Type Description System.String | Improve this Doc View Source ALL_STRINGS_RMATCHER Declaration public static readonly IRPattern ALL_STRINGS_RMATCHER Field Value Type Description IRPattern Properties | Improve this Doc View Source LContext Gets the left context pattern. This is a regular expression that must match to the left of the pattern. Declaration public virtual IRPattern LContext { get; } Property Value Type Description IRPattern | Improve this Doc View Source Pattern Gets the pattern. This is a string-literal that must exactly match. Declaration public virtual string Pattern { get; } Property Value Type Description System.String | Improve this Doc View Source Phoneme Gets the phoneme. If the rule matches, this is the phoneme associated with the pattern match. Declaration public virtual IPhonemeExpr Phoneme { get; } Property Value Type Description IPhonemeExpr | Improve this Doc View Source RContext Gets the right context pattern. This is a regular expression that must match to the right of the pattern. Declaration public virtual IRPattern RContext { get; } Property Value Type Description IRPattern Methods | Improve this Doc View Source GetInstance(NameType, RuleType, LanguageSet) Gets rules for a combination of name type, rule type and languages. Declaration public static IList<Rule> GetInstance(NameType nameType, RuleType rt, LanguageSet langs) Parameters Type Name Description NameType nameType The NameType to consider. RuleType rt The RuleType to consider. LanguageSet langs The set of languages to consider. Returns Type Description IList < Rule > A list of Rule s that apply. | Improve this Doc View Source GetInstance(NameType, RuleType, String) Gets rules for a combination of name type, rule type and a single language. Declaration public static IList<Rule> GetInstance(NameType nameType, RuleType rt, string lang) Parameters Type Name Description NameType nameType The NameType to consider. RuleType rt The RuleType to consider. System.String lang The language to consider. Returns Type Description IList < Rule > A list of Rule s that apply. | Improve this Doc View Source GetInstanceMap(NameType, RuleType, LanguageSet) Gets rules for a combination of name type, rule type and languages. since 1.9 Declaration public static IDictionary<string, IList<Rule>> GetInstanceMap(NameType nameType, RuleType rt, LanguageSet langs) Parameters Type Name Description NameType nameType The NameType to consider. RuleType rt The RuleType to consider. LanguageSet langs The set of languages to consider. Returns Type Description IDictionary < System.String , IList < Rule >> A map containing all Rule s that apply, grouped by the first character of the rule pattern. | Improve this Doc View Source GetInstanceMap(NameType, RuleType, String) Gets rules for a combination of name type, rule type and a single language. since 1.9 Declaration public static IDictionary<string, IList<Rule>> GetInstanceMap(NameType nameType, RuleType rt, string lang) Parameters Type Name Description NameType nameType The NameType to consider. RuleType rt The RuleType to consider. System.String lang The language to consider. Returns Type Description IDictionary < System.String , IList < Rule >> A map containing all Rule s that apply, grouped by the first character of the rule pattern. | Improve this Doc View Source PatternAndContextMatches(ICharSequence, Int32) Decides if the pattern and context match the input starting at a position. It is a match if the LContext matches input up to i , Pattern matches at i and RContext matches from the end of the match of Pattern to the end of input . Declaration public virtual bool PatternAndContextMatches(ICharSequence input, int i) Parameters Type Name Description ICharSequence input The input ICharSequence . System.Int32 i The int position within the input. Returns Type Description System.Boolean true if the pattern and left/right context match, false otherwise. | Improve this Doc View Source PatternAndContextMatches(StringBuilder, Int32) Decides if the pattern and context match the input starting at a position. It is a match if the LContext matches input up to i , Pattern matches at i and RContext matches from the end of the match of Pattern to the end of input . Declaration public virtual bool PatternAndContextMatches(StringBuilder input, int i) Parameters Type Name Description StringBuilder input The input . System.Int32 i The int position within the input. Returns Type Description System.Boolean true if the pattern and left/right context match, false otherwise. | Improve this Doc View Source PatternAndContextMatches(String, Int32) Decides if the pattern and context match the input starting at a position. It is a match if the LContext matches input up to i , Pattern matches at i and RContext matches from the end of the match of Pattern to the end of input . Declaration public virtual bool PatternAndContextMatches(string input, int i) Parameters Type Name Description System.String input The input . System.Int32 i The int position within the input. Returns Type Description System.Boolean true if the pattern and left/right context match, false otherwise."
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.RuleType.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.RuleType.html",
    "title": "Enum RuleType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum RuleType Types of rule. since 1.6 Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public enum RuleType : int Fields Name Description APPROX Approximate rules, which will lead to the largest number of phonetic interpretations. EXACT Exact rules, which will lead to a minimum number of phonetic interpretations. RULES For internal use only. Please use APPROX or EXACT . Extension Methods RuleTypeExtensions.GetName()"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.RuleTypeExtensions.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.RuleTypeExtensions.html",
    "title": "Class RuleTypeExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RuleTypeExtensions Inheritance System.Object RuleTypeExtensions Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public static class RuleTypeExtensions : object Methods | Improve this Doc View Source GetName(RuleType) Gets the rule name. Declaration public static string GetName(this RuleType ruleType) Parameters Type Name Description RuleType ruleType The RuleType . Returns Type Description System.String The rule name."
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.SomeLanguages.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Bm.SomeLanguages.html",
    "title": "Class SomeLanguages | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SomeLanguages Some languages, explicitly enumerated. Inheritance System.Object LanguageSet SomeLanguages Inherited Members LanguageSet.From(ISet<String>) Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class SomeLanguages : LanguageSet Properties | Improve this Doc View Source IsEmpty Declaration public override bool IsEmpty { get; } Property Value Type Description System.Boolean Overrides LanguageSet.IsEmpty | Improve this Doc View Source IsSingleton Declaration public override bool IsSingleton { get; } Property Value Type Description System.Boolean Overrides LanguageSet.IsSingleton Methods | Improve this Doc View Source Contains(String) Declaration public override bool Contains(string language) Parameters Type Name Description System.String language Returns Type Description System.Boolean Overrides LanguageSet.Contains(String) | Improve this Doc View Source GetAny() Declaration public override string GetAny() Returns Type Description System.String Overrides LanguageSet.GetAny() | Improve this Doc View Source GetLanguages() Declaration public ISet<string> GetLanguages() Returns Type Description ISet < System.String > | Improve this Doc View Source RestrictTo(LanguageSet) Declaration public override LanguageSet RestrictTo(LanguageSet other) Parameters Type Name Description LanguageSet other Returns Type Description LanguageSet Overrides LanguageSet.RestrictTo(LanguageSet) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Caverphone1.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Caverphone1.html",
    "title": "Class Caverphone1 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Caverphone1 Encodes a string into a Caverphone 1.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 1.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 1.0 specification This class is immutable and thread-safe. since 1.5 Inheritance System.Object AbstractCaverphone Caverphone1 Implements IStringEncoder Inherited Members AbstractCaverphone.IsEncodeEqual(String, String) Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Caverphone1 : AbstractCaverphone, IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes the given string into a Caverphone value. Declaration public override string Encode(string source) Parameters Type Name Description System.String source The source string. Returns Type Description System.String A caverphone code for the given string. Overrides AbstractCaverphone.Encode(String) Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Caverphone2.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Caverphone2.html",
    "title": "Class Caverphone2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Caverphone2 Encodes a string into a Caverphone 2.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 2.0 specification This class is immutable and thread-safe. Inheritance System.Object AbstractCaverphone Caverphone2 Implements IStringEncoder Inherited Members AbstractCaverphone.IsEncodeEqual(String, String) Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Caverphone2 : AbstractCaverphone, IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes the given string into a Caverphone 2.0 value. Declaration public override string Encode(string source) Parameters Type Name Description System.String source The source string. Returns Type Description System.String A caverphone code for the given string. Overrides AbstractCaverphone.Encode(String) Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.ColognePhonetic.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.ColognePhonetic.html",
    "title": "Class ColognePhonetic | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ColognePhonetic Encodes a string into a Cologne Phonetic value. Inheritance System.Object ColognePhonetic Implements IStringEncoder Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class ColognePhonetic : object, IStringEncoder Remarks Implements the KÖlner Phonetik (Cologne Phonetic) algorithm issued by Hans Joachim Postel in 1969. The KÖlner Phonetik is a phonetic algorithm which is optimized for the German language. It is related to the well-known soundex algorithm. Algorithm Step 1: After preprocessing (conversion to upper case, transcription of germanic umlauts , removal of non alphabetical characters) the letters of the supplied text are replaced by their phonetic code according to the following table. LetterContextCode A, E, I, J, O, U, Y0 H- B1 Pnot before H1 D, Tnot before C, S, Z2 F, V, W3 Pbefore H3 G, K, Q4 Ct onset before A, H, K, L, O, Q, R, U, X OR before A, H, K, O, Q, U, X except after S, Z4 Xnot after C, K, Q48 L5 M, N6 R7 S, Z8 Cafter S, Z OR at onset except before A, H, K, L, O, Q, R, U, X OR not before A, H, K, O, Q, U, X 8 D, Tbefore C, S, Z8 Xafter C, K, Q8 (Source: Wikipedia (de): KÖlner Phonetik -- Buchstabencodes ) Example: \"MÜller-LÜdenscheidt\" => \"MULLERLUDENSCHEIDT\" => \"6005507500206880022\" Step 2: Collapse of all multiple consecutive code digits. Example: \"6005507500206880022\" => \"6050750206802\" Step 3: Removal of all codes \"0\" except at the beginning. This means that two or more identical consecutive digits can occur if they occur after removing the \"0\" digits. Example: \"6050750206802\" => \"65752682\" This class is thread-safe. See: Wikipedia (de): Kölner Phonetik (in German) since 1.5 Methods | Improve this Doc View Source Encode(String) Declaration public virtual string Encode(string text) Parameters Type Name Description System.String text Returns Type Description System.String | Improve this Doc View Source GetColognePhonetic(String) Implements the Kölner Phonetik algorithm. In contrast to the initial description of the algorithm, this implementation does the encoding in one pass. Declaration public virtual string GetColognePhonetic(string text) Parameters Type Name Description System.String text Returns Type Description System.String The corresponding encoding according to the Kölner Phonetik algorithm | Improve this Doc View Source IsEncodeEqual(String, String) Declaration public virtual bool IsEncodeEqual(string text1, string text2) Parameters Type Name Description System.String text1 System.String text2 Returns Type Description System.Boolean Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.DaitchMokotoffSoundex.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.DaitchMokotoffSoundex.html",
    "title": "Class DaitchMokotoffSoundex | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DaitchMokotoffSoundex Encodes a string into a Daitch-Mokotoff Soundex value. Inheritance System.Object DaitchMokotoffSoundex Implements IStringEncoder Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DaitchMokotoffSoundex : object, IStringEncoder Remarks The Daitch-Mokotoff Soundex algorithm is a refinement of the Russel and American Soundex algorithms, yielding greater accuracy in matching especially Slavish and Yiddish surnames with similar pronunciation but differences in spelling. The main differences compared to the other soundex variants are: coded names are 6 digits long the initial character of the name is coded rules to encoded multi-character n-grams multiple possible encodings for the same name (branching) This implementation supports branching, depending on the used method: Encode(String) branching disabled, only the first code will be returned GetSoundex(String) branching enabled, all codes will be returned, separated by '|' Note: this implementation has additional branching rules compared to the original description of the algorithm. The rules can be customized by overriding the default rules contained in the resource file Lucene.Net.Analysis.Phonetic.Language.dmrules.txt . This class is thread-safe. See: Wikipedia - Daitch-Mokotoff Soundex See: Avotaynu - Soundexing and Genealogy since 1.10 Constructors | Improve this Doc View Source DaitchMokotoffSoundex() Creates a new instance with ASCII-folding enabled. Declaration public DaitchMokotoffSoundex() | Improve this Doc View Source DaitchMokotoffSoundex(Boolean) Creates a new instance. With ASCII-folding enabled, certain accented characters will be transformed to equivalent ASCII characters, e.g. è -> e. Declaration public DaitchMokotoffSoundex(bool folding) Parameters Type Name Description System.Boolean folding If ASCII-folding shall be performed before encoding. Methods | Improve this Doc View Source Encode(String) Encodes a string using the Daitch-Mokotoff soundex algorithm without branching. Declaration public virtual string Encode(string source) Parameters Type Name Description System.String source A string to encode. Returns Type Description System.String A DM Soundex code corresponding to the string supplied. See Also GetSoundex(String) | Improve this Doc View Source GetSoundex(String) Encodes a string using the Daitch-Mokotoff soundex algorithm with branching. In case a string is encoded into multiple codes (see branching rules), the result will contain all codes, separated by '|'. Example: the name \"AUERBACH\" is encoded as both 097400 097500 Thus the result will be \"097400|097500\". Declaration public virtual string GetSoundex(string source) Parameters Type Name Description System.String source A string to encode. Returns Type Description System.String A string containing a set of DM Soundex codes corresponding to the string supplied. Implements IStringEncoder See Also Soundex"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.DoubleMetaphoneResult.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.DoubleMetaphoneResult.html",
    "title": "Class DoubleMetaphone.DoubleMetaphoneResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleMetaphone.DoubleMetaphoneResult Inner class for storing results, since there is the optional alternate encoding. Inheritance System.Object DoubleMetaphone.DoubleMetaphoneResult Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DoubleMetaphoneResult : object Constructors | Improve this Doc View Source DoubleMetaphoneResult(Int32) Declaration public DoubleMetaphoneResult(int maxLength) Parameters Type Name Description System.Int32 maxLength Properties | Improve this Doc View Source Alternate Declaration public virtual string Alternate { get; } Property Value Type Description System.String | Improve this Doc View Source IsComplete Declaration public virtual bool IsComplete { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Primary Declaration public virtual string Primary { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Append(Char) Declaration public virtual void Append(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source Append(Char, Char) Declaration public virtual void Append(char primary, char alternate) Parameters Type Name Description System.Char primary System.Char alternate | Improve this Doc View Source Append(String) Declaration public virtual void Append(string value) Parameters Type Name Description System.String value | Improve this Doc View Source Append(String, String) Declaration public virtual void Append(string primary, string alternate) Parameters Type Name Description System.String primary System.String alternate | Improve this Doc View Source AppendAlternate(Char) Declaration public virtual void AppendAlternate(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source AppendAlternate(String) Declaration public virtual void AppendAlternate(string value) Parameters Type Name Description System.String value | Improve this Doc View Source AppendPrimary(Char) Declaration public virtual void AppendPrimary(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source AppendPrimary(String) Declaration public virtual void AppendPrimary(string value) Parameters Type Name Description System.String value"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.html",
    "title": "Class DoubleMetaphone | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleMetaphone Encodes a string into a double metaphone value. This Implementation is based on the algorithm by Lawrence Philips . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. See Original Article See http://en.wikipedia.org/wiki/Metaphone Inheritance System.Object DoubleMetaphone Implements IStringEncoder Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DoubleMetaphone : object, IStringEncoder Constructors | Improve this Doc View Source DoubleMetaphone() Creates an instance of this DoubleMetaphone encoder Declaration public DoubleMetaphone() Properties | Improve this Doc View Source MaxCodeLen Gets or Sets the maxCodeLen. Declaration public virtual int MaxCodeLen { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CharAt(String, Int32) Gets the character at index index if available, otherwise it returns so that there is some sort of a default. Declaration protected virtual char CharAt(string value, int index) Parameters Type Name Description System.String value System.Int32 index Returns Type Description System.Char | Improve this Doc View Source Contains(String, Int32, Int32, String[]) Determines whether value contains any of the criteria starting at index start and matching up to length length . Declaration protected static bool Contains(string value, int start, int length, params string[] criteria) Parameters Type Name Description System.String value System.Int32 start System.Int32 length System.String [] criteria Returns Type Description System.Boolean | Improve this Doc View Source Encode(String) Encode the value using DoubleMetaphone. Declaration public virtual string Encode(string value) Parameters Type Name Description System.String value String to encode. Returns Type Description System.String An encoded string. | Improve this Doc View Source GetDoubleMetaphone(String) Encode a value with Double Metaphone. Declaration public virtual string GetDoubleMetaphone(string value) Parameters Type Name Description System.String value String to encode. Returns Type Description System.String An encoded string. | Improve this Doc View Source GetDoubleMetaphone(String, Boolean) Encode a value with Double Metaphone, optionally using the alternate encoding. Declaration public virtual string GetDoubleMetaphone(string value, bool alternate) Parameters Type Name Description System.String value String to encode. System.Boolean alternate Use alternate encode. Returns Type Description System.String An encoded string. | Improve this Doc View Source IsDoubleMetaphoneEqual(String, String) Check if the Double Metaphone values of two values are equal. Declaration public virtual bool IsDoubleMetaphoneEqual(string value1, string value2) Parameters Type Name Description System.String value1 The left-hand side of the encoded . System.String value2 The right-hand side of the encoded . Returns Type Description System.Boolean true if the encoded s are equal; false otherwise. | Improve this Doc View Source IsDoubleMetaphoneEqual(String, String, Boolean) Check if the Double Metaphone values of two values are equal, optionally using the alternate value. Declaration public virtual bool IsDoubleMetaphoneEqual(string value1, string value2, bool alternate) Parameters Type Name Description System.String value1 The left-hand side of the encoded . System.String value2 The right-hand side of the encoded . System.Boolean alternate Use the alternate value if true . Returns Type Description System.Boolean true if the encoded s are equal; false otherwise. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.html",
    "title": "Namespace Lucene.Net.Analysis.Phonetic.Language | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Phonetic.Language Classes AbstractCaverphone Encodes a string into a Caverphone value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: This class is immutable and thread-safe. See Wikipedia - Caverphone Caverphone1 Encodes a string into a Caverphone 1.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 1.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 1.0 specification This class is immutable and thread-safe. since 1.5 Caverphone2 Encodes a string into a Caverphone 2.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 2.0 specification This class is immutable and thread-safe. ColognePhonetic Encodes a string into a Cologne Phonetic value. DaitchMokotoffSoundex Encodes a string into a Daitch-Mokotoff Soundex value. DoubleMetaphone Encodes a string into a double metaphone value. This Implementation is based on the algorithm by Lawrence Philips . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. See Original Article See http://en.wikipedia.org/wiki/Metaphone DoubleMetaphone.DoubleMetaphoneResult Inner class for storing results, since there is the optional alternate encoding. MatchRatingApproachEncoder Match Rating Approach Phonetic Algorithm Developed by Western Airlines in 1977. This class is immutable and thread-safe. See: Wikipedia - Match Rating Approach since 1.8 Metaphone Encodes a string into a Metaphone value. Initial Java implementation by William B. Brogden. December, 1997 . Permission given by wbrogden for code to be used anywhere. Hanging on the Metaphone by Lawrence Philips in Computer Language of Dec. 1990, p 39. Note, that this does not match the algorithm that ships with PHP, or the algorithm found in the Perl implementations: Text:Metaphone-1.96 (broken link 4/30/2013) Text:Metaphone-1.96 (link checked 4/30/2013) They have had undocumented changes from the originally published algorithm. For more information, see CODEC-57 . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.Metaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. Nysiis Encodes a string into a NYSIIS value. NYSIIS is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. RefinedSoundex Encodes a string into a Refined Soundex value. A refined soundex code is optimized for spell checking words. Soundex method originally developed by Margaret Odell and Robert Russell . This class is immutable and thread-safe. Soundex Encodes a string into a Soundex value. Soundex is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. This class is thread-safe. Although not strictly immutable, the Lucene.Net.Analysis.Phonetic.Language.Soundex.maxLength field is not actually used. Interfaces IStringEncoder Defines common encoding methods for encoders."
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.IStringEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.IStringEncoder.html",
    "title": "Interface IStringEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IStringEncoder Defines common encoding methods for encoders. Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public interface IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes a and returns a . Declaration string Encode(string source) Parameters Type Name Description System.String source the to encode Returns Type Description System.String the encoded"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.MatchRatingApproachEncoder.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.MatchRatingApproachEncoder.html",
    "title": "Class MatchRatingApproachEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchRatingApproachEncoder Match Rating Approach Phonetic Algorithm Developed by Western Airlines in 1977. This class is immutable and thread-safe. See: Wikipedia - Match Rating Approach since 1.8 Inheritance System.Object MatchRatingApproachEncoder Implements IStringEncoder Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class MatchRatingApproachEncoder : object, IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes a string using the Match Rating Approach (MRA) algorithm. Declaration public string Encode(string name) Parameters Type Name Description System.String name String to encode. Returns Type Description System.String The MRA code corresponding to the string supplied. | Improve this Doc View Source IsEncodeEquals(String, String) Determines if two names are homophonous via Match Rating Approach (MRA) algorithm. It should be noted that the strings are cleaned in the same way as Encode(String) . Declaration public virtual bool IsEncodeEquals(string name1, string name2) Parameters Type Name Description System.String name1 First of the 2 strings (names) to compare. System.String name2 Second of the 2 names to compare. Returns Type Description System.Boolean true if the encodings are identical false otherwise. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Metaphone.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Metaphone.html",
    "title": "Class Metaphone | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Metaphone Encodes a string into a Metaphone value. Initial Java implementation by William B. Brogden. December, 1997 . Permission given by wbrogden for code to be used anywhere. Hanging on the Metaphone by Lawrence Philips in Computer Language of Dec. 1990, p 39. Note, that this does not match the algorithm that ships with PHP, or the algorithm found in the Perl implementations: Text:Metaphone-1.96 (broken link 4/30/2013) Text:Metaphone-1.96 (link checked 4/30/2013) They have had undocumented changes from the originally published algorithm. For more information, see CODEC-57 . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.Metaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. Inheritance System.Object Metaphone Implements IStringEncoder Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Metaphone : object, IStringEncoder Constructors | Improve this Doc View Source Metaphone() Creates an instance of the Metaphone encoder Declaration public Metaphone() Properties | Improve this Doc View Source MaxCodeLen Gets or Sets Lucene.Net.Analysis.Phonetic.Language.Metaphone.maxCodeLen . Declaration public virtual int MaxCodeLen { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Encode(String) Encodes a string using the Metaphone algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str String to encode. Returns Type Description System.String The metaphone code corresponding to the string supplied. | Improve this Doc View Source GetMetaphone(String) Find the metaphone value of a string. This is similar to the soundex algorithm, but better at finding similar sounding words. All input is converted to upper case. Limitations: Input format is expected to be a single ASCII word with only characters in the A - Z range, no punctuation or numbers. Declaration public virtual string GetMetaphone(string txt) Parameters Type Name Description System.String txt String to find the metaphone code for. Returns Type Description System.String A metaphone code corresponding to the string supplied. | Improve this Doc View Source IsMetaphoneEqual(String, String) Tests is the metaphones of two strings are identical. Declaration public virtual bool IsMetaphoneEqual(string str1, string str2) Parameters Type Name Description System.String str1 First of two strings to compare. System.String str2 Second of two strings to compare. Returns Type Description System.Boolean true if the metaphones of these strings are identical, false otherwise. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Nysiis.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Nysiis.html",
    "title": "Class Nysiis | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Nysiis Encodes a string into a NYSIIS value. NYSIIS is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. Inheritance System.Object Nysiis Implements IStringEncoder Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Nysiis : object, IStringEncoder Remarks NYSIIS features an accuracy increase of 2.7% over the traditional Soundex algorithm. Algorithm description: Transcode first characters of name MAC -> MCC KN -> NN K -> C PH -> FF PF -> FF SCH -> SSS Transcode last characters of name EE, IE -> Y DT,RT,RD,NT,ND -> D First character of key = first character of name Transcode remaining characters by following these rules, incrementing by one character each time EV -> AF else A,E,I,O,U -> A Q -> G Z -> S M -> N KN -> N else K -> C SCH -> SSS PH -> FF H -> If previous or next is nonvowel, previous W -> If previous is vowel, previous Add current to key if current != last key character If last character is S, remove it If last characters are AY, replace with Y If last character is A, remove it Collapse all strings of repeated characters Add original first character of name as first character of key This class is immutable and thread-safe. See: NYSIIS on Wikipedia See: NYSIIS on dropby.com since 1.7 Constructors | Improve this Doc View Source Nysiis() Creates an instance of the Nysiis encoder with strict mode (original form), i.e. encoded strings have a maximum length of 6. Declaration public Nysiis() | Improve this Doc View Source Nysiis(Boolean) Create an instance of the Nysiis encoder with the specified strict mode: true :encoded strings have a maximum length of 6 false :encoded strings may have arbitrary length Declaration public Nysiis(bool strict) Parameters Type Name Description System.Boolean strict The strict mode. Properties | Improve this Doc View Source IsStrict Indicates the strict mode for this Nysiis encoder. true if the encoder is configured for strict mode, false otherwise. Declaration public virtual bool IsStrict { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Encode(String) Encodes a string using the NYSIIS algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str A string object to encode. Returns Type Description System.String A Nysiis code corresponding to the string supplied. | Improve this Doc View Source GetNysiis(String) Retrieves the NYSIIS code for a given string. Declaration public virtual string GetNysiis(string str) Parameters Type Name Description System.String str String to encode using the NYSIIS algorithm. Returns Type Description System.String A NYSIIS code for the string supplied. Implements IStringEncoder See Also Soundex"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.RefinedSoundex.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.RefinedSoundex.html",
    "title": "Class RefinedSoundex | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RefinedSoundex Encodes a string into a Refined Soundex value. A refined soundex code is optimized for spell checking words. Soundex method originally developed by Margaret Odell and Robert Russell . This class is immutable and thread-safe. Inheritance System.Object RefinedSoundex Implements IStringEncoder Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class RefinedSoundex : object, IStringEncoder Constructors | Improve this Doc View Source RefinedSoundex() Creates an instance of the RefinedSoundex object using the default US English mapping. Declaration public RefinedSoundex() | Improve this Doc View Source RefinedSoundex(Char[]) Creates a refined soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. Declaration public RefinedSoundex(char[] mapping) Parameters Type Name Description System.Char [] mapping Mapping array to use when finding the corresponding code for a given character. | Improve this Doc View Source RefinedSoundex(String) Creates a refined Soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. Declaration public RefinedSoundex(string mapping) Parameters Type Name Description System.String mapping Mapping string to use when finding the corresponding code for a given character. Fields | Improve this Doc View Source US_ENGLISH This static variable contains an instance of the RefinedSoundex using the US_ENGLISH mapping. Declaration public static readonly RefinedSoundex US_ENGLISH Field Value Type Description RefinedSoundex | Improve this Doc View Source US_ENGLISH_MAPPING_STRING since 1.4 Declaration public static readonly string US_ENGLISH_MAPPING_STRING Field Value Type Description System.String Methods | Improve this Doc View Source Difference(String, String) Returns the number of characters in the two encoded strings that are the same. This return value ranges from 0 to the length of the shortest encoded string: 0 indicates little or no similarity, and 4 out of 4 (for example) indicates strong similarity or identical values. For refined Soundex, the return value can be greater than 4. See: MS T-SQL DIFFERENCE since 1.3 Declaration public virtual int Difference(string s1, string s2) Parameters Type Name Description System.String s1 A string that will be encoded and compared. System.String s2 A string that will be encoded and compared. Returns Type Description System.Int32 The number of characters in the two encoded strings that are the same from 0 to to the length of the shortest encoded string. See Also Lucene.Net.Analysis.Phonetic.Language.SoundexUtils.Difference(Lucene.Net.Analysis.Phonetic.Language.IStringEncoder,System.String,System.String) | Improve this Doc View Source Encode(String) Encodes a string using the refined soundex algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str A string object to encode. Returns Type Description System.String A Soundex code corresponding to the string supplied. | Improve this Doc View Source GetSoundex(String) Retrieves the Refined Soundex code for a given string. Declaration public virtual string GetSoundex(string str) Parameters Type Name Description System.String str String to encode using the Refined Soundex algorithm. Returns Type Description System.String A soundex code for the string supplied. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Soundex.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.Language.Soundex.html",
    "title": "Class Soundex | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Soundex Encodes a string into a Soundex value. Soundex is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. This class is thread-safe. Although not strictly immutable, the Lucene.Net.Analysis.Phonetic.Language.Soundex.maxLength field is not actually used. Inheritance System.Object Soundex Implements IStringEncoder Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Soundex : object, IStringEncoder Constructors | Improve this Doc View Source Soundex() Creates an instance using Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING . Declaration public Soundex() See Also Soundex(Char[]) Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING | Improve this Doc View Source Soundex(Char[]) Creates a soundex instance using the given mapping. This constructor can be used to provide an internationalized mapping for a non-Western character set. Every letter of the alphabet is \"mapped\" to a numerical value. This char array holds the values to which each letter is mapped. This implementation contains a default map for US_ENGLISH . If the mapping contains an instance of SILENT_MARKER then H and W are not given special treatment. Declaration public Soundex(char[] mapping) Parameters Type Name Description System.Char [] mapping Mapping array to use when finding the corresponding code for a given character. | Improve this Doc View Source Soundex(String) Creates a refined soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. If the mapping contains an instance of SILENT_MARKER then H and W are not given special treatment. since 1.4 Declaration public Soundex(string mapping) Parameters Type Name Description System.String mapping Mapping string to use when finding the corresponding code for a given character. | Improve this Doc View Source Soundex(String, Boolean) Creates a refined soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. since 1.11 Declaration public Soundex(string mapping, bool specialCaseHW) Parameters Type Name Description System.String mapping Mapping string to use when finding the corresponding code for a given character. System.Boolean specialCaseHW if true, then Fields | Improve this Doc View Source SILENT_MARKER The marker character used to indicate a silent (ignored) character. These are ignored except when they appear as the first character. Note: the US_ENGLISH_MAPPING_STRING does not use this mechanism because changing it might break existing code. Mappings that don't contain a silent marker code are treated as though H and W are silent. To override this, use the Soundex(String, Boolean) constructor. since 1.11 Declaration public static readonly char SILENT_MARKER Field Value Type Description System.Char | Improve this Doc View Source US_ENGLISH An instance of Soundex using the US_ENGLISH_MAPPING mapping. This treats H and W as silent letters. Apart from when they appear as the first letter, they are ignored. They don't act as separators between duplicate codes. Declaration public static readonly Soundex US_ENGLISH Field Value Type Description Soundex See Also Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING US_ENGLISH_MAPPING_STRING | Improve this Doc View Source US_ENGLISH_GENEALOGY An instance of Soundex using the mapping as per the Genealogy site: http://www.genealogy.com/articles/research/00000060.html This treats vowels (AEIOUY), H and W as silent letters. Such letters are ignored (after the first) and do not act as separators when dropping duplicate codes. The codes for consonants are otherwise the same as for US_ENGLISH_MAPPING_STRING and US_ENGLISH_SIMPLIFIED . since 1.11 Declaration public static readonly Soundex US_ENGLISH_GENEALOGY Field Value Type Description Soundex | Improve this Doc View Source US_ENGLISH_MAPPING_STRING This is a default mapping of the 26 letters used in US English. A value of 0 for a letter position means do not encode, but treat as a separator when it occurs between consonants with the same code. (This constant is provided as both an implementation convenience and to allow documentation to pick up the value for the constant values page.) Note that letters H and W are treated specially. They are ignored (after the first letter) and don't act as separators between consonants with the same code. Declaration public static readonly string US_ENGLISH_MAPPING_STRING Field Value Type Description System.String See Also Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING | Improve this Doc View Source US_ENGLISH_SIMPLIFIED An instance of Soundex using the Simplified Soundex mapping, as described here: http://west-penwith.org.uk/misc/soundex.htm This treats H and W the same as vowels (AEIOUY). Such letters aren't encoded (after the first), but they do act as separators when dropping duplicate codes. The mapping is otherwise the same as for US_ENGLISH . since 1.11 Declaration public static readonly Soundex US_ENGLISH_SIMPLIFIED Field Value Type Description Soundex Properties | Improve this Doc View Source MaxLength Gets or Sets the maxLength. Standard Soundex Declaration public virtual int MaxLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Difference(String, String) Encodes the strings and returns the number of characters in the two encoded strings that are the same. This return value ranges from 0 through 4: 0 indicates little or no similarity, and 4 indicates strong similarity or identical values. See: MS T-SQL DIFFERENCE since 1.3 Declaration public virtual int Difference(string s1, string s2) Parameters Type Name Description System.String s1 A string that will be encoded and compared. System.String s2 A string that will be encoded and compared. Returns Type Description System.Int32 The number of characters in the two encoded strings that are the same from 0 to 4. See Also Lucene.Net.Analysis.Phonetic.Language.SoundexUtils.Difference(Lucene.Net.Analysis.Phonetic.Language.IStringEncoder,System.String,System.String) | Improve this Doc View Source Encode(String) Encodes a string using the soundex algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str A string to encode. Returns Type Description System.String A Soundex code corresponding to the string supplied. | Improve this Doc View Source GetSoundex(String) Retrieves the Soundex code for a given string. Declaration public virtual string GetSoundex(string str) Parameters Type Name Description System.String str String to encode using the Soundex algorithm. Returns Type Description System.String A soundex code for the string supplied. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.PhoneticFilter.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.PhoneticFilter.html",
    "title": "Class PhoneticFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhoneticFilter Create tokens for phonetic matches. See the Language namespace. Inheritance System.Object AttributeSource TokenStream TokenFilter PhoneticFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class PhoneticFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PhoneticFilter(TokenStream, IStringEncoder, Boolean) Creates a PhoneticFilter with the specified encoder, and either adding encoded forms as synonyms ( inject=true ) or replacing them. Declaration public PhoneticFilter(TokenStream input, IStringEncoder encoder, bool inject) Parameters Type Name Description TokenStream input IStringEncoder encoder System.Boolean inject Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.PhoneticFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Phonetic/Lucene.Net.Analysis.Phonetic.PhoneticFilterFactory.html",
    "title": "Class PhoneticFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhoneticFilterFactory Factory for PhoneticFilter . Create tokens based on phonetic encoders from the Language namespace. This takes one required argument, \"encoder\", and the rest are optional: encoder required, one of \"DoubleMetaphone\", \"Metaphone\", \"Soundex\", \"RefinedSoundex\", \"Caverphone\" (v2.0), or \"ColognePhonetic\" (case insensitive). If encoder isn't one of these, it'll be resolved as a class name either by itself if it already contains a '.' or otherwise as in the same package as these others. inject (default=true) add tokens to the stream with the offset=0 maxCodeLength The maximum length of the phonetic codes, as defined by the encoder. If an encoder doesn't support this then specifying this is an error. <fieldType name=\"text_phonetic\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.PhoneticFilterFactory\" encoder=\"DoubleMetaphone\" inject=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PhoneticFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class PhoneticFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source PhoneticFilterFactory(IDictionary<String, String>) Creates a new PhoneticFilterFactory . Declaration public PhoneticFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Fields | Improve this Doc View Source ENCODER parameter name: either a short name or a full class name Declaration public static readonly string ENCODER Field Value Type Description System.String | Improve this Doc View Source INJECT parameter name: true if encoded tokens should be added as synonyms Declaration public static readonly string INJECT Field Value Type Description System.String | Improve this Doc View Source MAX_CODE_LENGTH Declaration public static readonly string MAX_CODE_LENGTH Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetEncoder() Must be thread-safe. Declaration protected virtual IStringEncoder GetEncoder() Returns Type Description IStringEncoder | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware See Also PhoneticFilter"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.AnalyzerProfile.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.AnalyzerProfile.html",
    "title": "Class AnalyzerProfile | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnalyzerProfile Manages analysis data configuration for SmartChineseAnalyzer SmartChineseAnalyzer has a built-in dictionary and stopword list out-of-box. NOTE: To use an alternate dicationary than the built-in one, put the \"bigramdict.dct\" and \"coredict.dct\" files in a subdirectory of your application named \"analysis-data\". This subdirectory can be placed in any directory up to and including the root directory (if the OS permission allows). To place the files in an alternate location, set an environment variable named \"analysis.data.dir\" with the name of the directory the \"bigramdict.dct\" and \"coredict.dct\" files can be located within. The default \"bigramdict.dct\" and \"coredict.dct\" files can be found at: https://issues.apache.org/jira/browse/LUCENE-1629 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AnalyzerProfile Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class AnalyzerProfile : object Fields | Improve this Doc View Source ANALYSIS_DATA_DIR Global indicating the configured analysis data directory Declaration public static string ANALYSIS_DATA_DIR Field Value Type Description System.String"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.CharType.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.CharType.html",
    "title": "Enum CharType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum CharType Internal SmartChineseAnalyzer character type constants. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public enum CharType : int Fields Name Description DELIMITER Punctuation Characters DIGIT Numeric Digits FULLWIDTH_DIGIT Full-Width alphanumeric characters FULLWIDTH_LETTER Full-Width letters HANZI Han Ideographs LETTER Letters OTHER Other (not fitting any of the other categories) SPACE_LIKE Characters that act as a space"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.HHMMSegmenter.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.HHMMSegmenter.html",
    "title": "Class HHMMSegmenter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HHMMSegmenter Finds the optimal segmentation of a sentence into Chinese words This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object HHMMSegmenter Namespace : Lucene.Net.Analysis.Cn.Smart.Hhmm Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class HHMMSegmenter : object Methods | Improve this Doc View Source Process(String) Return a list of SegToken representing the best segmentation of a sentence Declaration public virtual IList<SegToken> Process(string sentence) Parameters Type Name Description System.String sentence input sentence Returns Type Description IList < SegToken > best segmentation as a IList{SegToken}"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.html",
    "title": "Namespace Lucene.Net.Analysis.Cn.Smart.Hhmm | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cn.Smart.Hhmm <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> SmartChineseAnalyzer Hidden Markov Model package. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Classes HHMMSegmenter Finds the optimal segmentation of a sentence into Chinese words This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegToken SmartChineseAnalyzer internal token This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegTokenFilter Filters a SegToken by converting full-width latin to half-width, then lowercasing latin. Additionally, all punctuation is converted into COMMON_DELIMITER This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.SegToken.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.SegToken.html",
    "title": "Class SegToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegToken SmartChineseAnalyzer internal token This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegToken Namespace : Lucene.Net.Analysis.Cn.Smart.Hhmm Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class SegToken : object Constructors | Improve this Doc View Source SegToken(Char[], Int32, Int32, WordType, Int32) Create a new SegToken from a character array. Declaration public SegToken(char[] idArray, int start, int end, WordType wordType, int weight) Parameters Type Name Description System.Char [] idArray character array containing text System.Int32 start start offset of SegToken in original sentence System.Int32 end end offset of SegToken in original sentence WordType wordType WordType of the text System.Int32 weight word frequency Properties | Improve this Doc View Source CharArray Character array containing token text Declaration public char[] CharArray { get; set; } Property Value Type Description System.Char [] | Improve this Doc View Source EndOffset end offset into original sentence Declaration public int EndOffset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Index during segmentation, this is used to store the index of the token in the token list table Declaration public int Index { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset start offset into original sentence Declaration public int StartOffset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Weight word frequency Declaration public int Weight { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source WordType WordType of the text Declaration public WordType WordType { get; set; } Property Value Type Description WordType Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.SegTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.SegTokenFilter.html",
    "title": "Class SegTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegTokenFilter Filters a SegToken by converting full-width latin to half-width, then lowercasing latin. Additionally, all punctuation is converted into COMMON_DELIMITER This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegTokenFilter Namespace : Lucene.Net.Analysis.Cn.Smart.Hhmm Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class SegTokenFilter : object Methods | Improve this Doc View Source Filter(SegToken) Filter an input SegToken Full-width latin will be converted to half-width, then all latin will be lowercased. All punctuation is converted into COMMON_DELIMITER Declaration public virtual SegToken Filter(SegToken token) Parameters Type Name Description SegToken token Input SegToken . Returns Type Description SegToken Normalized SegToken ."
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.HMMChineseTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.HMMChineseTokenizer.html",
    "title": "Class HMMChineseTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HMMChineseTokenizer Tokenizer for Chinese or mixed Chinese-English text. The analyzer uses probabilistic knowledge to find the optimal word segmentation for Simplified Chinese text. The text is first broken into sentences, then each sentence is segmented into words. Inheritance System.Object AttributeSource TokenStream Tokenizer SegmentingTokenizerBase HMMChineseTokenizer Implements IDisposable Inherited Members SegmentingTokenizerBase.BUFFERMAX SegmentingTokenizerBase.m_buffer SegmentingTokenizerBase.m_offset SegmentingTokenizerBase.IncrementToken() SegmentingTokenizerBase.End() SegmentingTokenizerBase.IsSafeEnd(Char) Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class HMMChineseTokenizer : SegmentingTokenizerBase, IDisposable Constructors | Improve this Doc View Source HMMChineseTokenizer(AttributeSource.AttributeFactory, TextReader) Creates a new HMMChineseTokenizer , supplying the AttributeSource.AttributeFactory Declaration public HMMChineseTokenizer(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader reader | Improve this Doc View Source HMMChineseTokenizer(TextReader) Creates a new HMMChineseTokenizer Declaration public HMMChineseTokenizer(TextReader reader) Parameters Type Name Description TextReader reader Methods | Improve this Doc View Source IncrementWord() Declaration protected override bool IncrementWord() Returns Type Description System.Boolean Overrides SegmentingTokenizerBase.IncrementWord() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides SegmentingTokenizerBase.Reset() | Improve this Doc View Source SetNextSentence(Int32, Int32) Declaration protected override void SetNextSentence(int sentenceStart, int sentenceEnd) Parameters Type Name Description System.Int32 sentenceStart System.Int32 sentenceEnd Overrides SegmentingTokenizerBase.SetNextSentence(Int32, Int32) Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.HMMChineseTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.HMMChineseTokenizerFactory.html",
    "title": "Class HMMChineseTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HMMChineseTokenizerFactory Factory for HMMChineseTokenizer Note: this class will currently emit tokens for punctuation. So you should either add a WordDelimiterFilter after to remove these (with concatenate off), or use the SmartChinese stoplist with a StopFilterFactory via: words=\"org/apache/lucene/analysis/cn/smart/stopwords.txt\" This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAnalysisFactory TokenizerFactory HMMChineseTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public sealed class HMMChineseTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source HMMChineseTokenizerFactory(IDictionary<String, String>) Creates a new HMMChineseTokenizerFactory Declaration public HMMChineseTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader reader Returns Type Description Tokenizer"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.html",
    "title": "Namespace Lucene.Net.Analysis.Cn.Smart | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cn.Smart <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Simplified Chinese, which indexes words. For an introduction to Lucene's analysis API, see the Lucene.Net.Analysis package documentation. Classes AnalyzerProfile Manages analysis data configuration for SmartChineseAnalyzer SmartChineseAnalyzer has a built-in dictionary and stopword list out-of-box. NOTE: To use an alternate dicationary than the built-in one, put the \"bigramdict.dct\" and \"coredict.dct\" files in a subdirectory of your application named \"analysis-data\". This subdirectory can be placed in any directory up to and including the root directory (if the OS permission allows). To place the files in an alternate location, set an environment variable named \"analysis.data.dir\" with the name of the directory the \"bigramdict.dct\" and \"coredict.dct\" files can be located within. The default \"bigramdict.dct\" and \"coredict.dct\" files can be found at: https://issues.apache.org/jira/browse/LUCENE-1629 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk HMMChineseTokenizer Tokenizer for Chinese or mixed Chinese-English text. The analyzer uses probabilistic knowledge to find the optimal word segmentation for Simplified Chinese text. The text is first broken into sentences, then each sentence is segmented into words. HMMChineseTokenizerFactory Factory for HMMChineseTokenizer Note: this class will currently emit tokens for punctuation. So you should either add a WordDelimiterFilter after to remove these (with concatenate off), or use the SmartChinese stoplist with a StopFilterFactory via: words=\"org/apache/lucene/analysis/cn/smart/stopwords.txt\" This is a Lucene.NET EXPERIMENTAL API, use at your own risk SentenceTokenizer Tokenizes input text into sentences. The output tokens can then be broken into words with WordTokenFilter This is a Lucene.NET EXPERIMENTAL API, use at your own risk SmartChineseAnalyzer SmartChineseAnalyzer is an analyzer for Chinese or mixed Chinese-English text. The analyzer uses probabilistic knowledge to find the optimal word segmentation for Simplified Chinese text. The text is first broken into sentences, then each sentence is segmented into words. Segmentation is based upon the Hidden Markov Model . A large training corpus was used to calculate Chinese word frequency probability. This analyzer requires a dictionary to provide statistical data. SmartChineseAnalyzer has an included dictionary out-of-box. The included dictionary data is from ICTCLAS1.0 . Thanks to ICTCLAS for their hard work, and for contributing the data under the Apache 2 License! This is a Lucene.NET EXPERIMENTAL API, use at your own risk SmartChineseSentenceTokenizerFactory Factory for the SmartChineseAnalyzer SentenceTokenizer This is a Lucene.NET EXPERIMENTAL API, use at your own risk SmartChineseWordTokenFilterFactory Factory for the SmartChineseAnalyzer WordTokenFilter Note: this class will currently emit tokens for punctuation. So you should either add a WordDelimiterFilter after to remove these (with concatenate off), or use the SmartChinese stoplist with a StopFilterFactory via: words=\"org/apache/lucene/analysis/cn/smart/stopwords.txt\" This is a Lucene.NET EXPERIMENTAL API, use at your own risk Utility SmartChineseAnalyzer utility constants and methods This is a Lucene.NET EXPERIMENTAL API, use at your own risk WordTokenFilter A TokenFilter that breaks sentences into words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums CharType Internal SmartChineseAnalyzer character type constants. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WordType Internal SmartChineseAnalyzer token type constants This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SentenceTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SentenceTokenizer.html",
    "title": "Class SentenceTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SentenceTokenizer Tokenizes input text into sentences. The output tokens can then be broken into words with WordTokenFilter This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream Tokenizer SentenceTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public sealed class SentenceTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source SentenceTokenizer(AttributeSource.AttributeFactory, TextReader) Declaration public SentenceTokenizer(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader reader | Improve this Doc View Source SentenceTokenizer(TextReader) Declaration public SentenceTokenizer(TextReader reader) Parameters Type Name Description TextReader reader Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseAnalyzer.html",
    "title": "Class SmartChineseAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SmartChineseAnalyzer SmartChineseAnalyzer is an analyzer for Chinese or mixed Chinese-English text. The analyzer uses probabilistic knowledge to find the optimal word segmentation for Simplified Chinese text. The text is first broken into sentences, then each sentence is segmented into words. Segmentation is based upon the Hidden Markov Model . A large training corpus was used to calculate Chinese word frequency probability. This analyzer requires a dictionary to provide statistical data. SmartChineseAnalyzer has an included dictionary out-of-box. The included dictionary data is from ICTCLAS1.0 . Thanks to ICTCLAS for their hard work, and for contributing the data under the Apache 2 License! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Analyzer SmartChineseAnalyzer Inherited Members Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public sealed class SmartChineseAnalyzer : Analyzer Constructors | Improve this Doc View Source SmartChineseAnalyzer(LuceneVersion) Create a new SmartChineseAnalyzer , using the default stopword list. Declaration public SmartChineseAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source SmartChineseAnalyzer(LuceneVersion, CharArraySet) Create a new SmartChineseAnalyzer , using the provided CharArraySet of stopwords. Note: the set should include punctuation, unless you want to index punctuation! Declaration public SmartChineseAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopWords CharArraySet of stopwords to use. | Improve this Doc View Source SmartChineseAnalyzer(LuceneVersion, Boolean) Create a new SmartChineseAnalyzer , optionally using the default stopword list. The included default stopword list is simply a list of punctuation. If you do not use this list, punctuation will not be removed from the text! Declaration public SmartChineseAnalyzer(LuceneVersion matchVersion, bool useDefaultStopWords) Parameters Type Name Description LuceneVersion matchVersion System.Boolean useDefaultStopWords true to use the default stopword list. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents | Improve this Doc View Source GetDefaultStopSet() Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet GetDefaultStopSet() Returns Type Description CharArraySet An unmodifiable instance of the default stop-words set."
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseSentenceTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseSentenceTokenizerFactory.html",
    "title": "Class SmartChineseSentenceTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SmartChineseSentenceTokenizerFactory Factory for the SmartChineseAnalyzer SentenceTokenizer This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAnalysisFactory TokenizerFactory SmartChineseSentenceTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class SmartChineseSentenceTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source SmartChineseSentenceTokenizerFactory(IDictionary<String, String>) Creates a new SmartChineseSentenceTokenizerFactory Declaration public SmartChineseSentenceTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseWordTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseWordTokenFilterFactory.html",
    "title": "Class SmartChineseWordTokenFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SmartChineseWordTokenFilterFactory Factory for the SmartChineseAnalyzer WordTokenFilter Note: this class will currently emit tokens for punctuation. So you should either add a WordDelimiterFilter after to remove these (with concatenate off), or use the SmartChinese stoplist with a StopFilterFactory via: words=\"org/apache/lucene/analysis/cn/smart/stopwords.txt\" This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SmartChineseWordTokenFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class SmartChineseWordTokenFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source SmartChineseWordTokenFilterFactory(IDictionary<String, String>) Creates a new SmartChineseWordTokenFilterFactory Declaration public SmartChineseWordTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Utility.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Utility.html",
    "title": "Class Utility | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Utility SmartChineseAnalyzer utility constants and methods This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Utility Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class Utility : object Fields | Improve this Doc View Source COMMON_DELIMITER Delimiters will be filtered to this character by SegTokenFilter Declaration public static readonly char[] COMMON_DELIMITER Field Value Type Description System.Char [] | Improve this Doc View Source END_CHAR_ARRAY Declaration public static readonly char[] END_CHAR_ARRAY Field Value Type Description System.Char [] | Improve this Doc View Source MAX_FREQUENCE Maximum bigram frequency (used in the smoothing function). Declaration public static readonly int MAX_FREQUENCE Field Value Type Description System.Int32 | Improve this Doc View Source NUMBER_CHAR_ARRAY Declaration public static readonly char[] NUMBER_CHAR_ARRAY Field Value Type Description System.Char [] | Improve this Doc View Source SPACES Space-like characters that need to be skipped: such as space, tab, newline, carriage return. Declaration public static readonly string SPACES Field Value Type Description System.String | Improve this Doc View Source START_CHAR_ARRAY Declaration public static readonly char[] START_CHAR_ARRAY Field Value Type Description System.Char [] | Improve this Doc View Source STRING_CHAR_ARRAY Declaration public static readonly char[] STRING_CHAR_ARRAY Field Value Type Description System.Char [] Methods | Improve this Doc View Source CompareArray(Char[], Int32, Char[], Int32) Compare two arrays starting at the specified offsets. Declaration public static int CompareArray(char[] larray, int lstartIndex, char[] rarray, int rstartIndex) Parameters Type Name Description System.Char [] larray left array System.Int32 lstartIndex start offset into larray System.Char [] rarray right array System.Int32 rstartIndex start offset into rarray Returns Type Description System.Int32 0 if the arrays are equal，1 if larray > rarray , -1 if larray < rarray | Improve this Doc View Source CompareArrayByPrefix(Char[], Int32, Char[], Int32) Compare two arrays, starting at the specified offsets, but treating shortArray as a prefix to longArray . As long as shortArray is a prefix of longArray , return 0. Otherwise, behave as CompareArray(Char[], Int32, Char[], Int32) . Declaration public static int CompareArrayByPrefix(char[] shortArray, int shortIndex, char[] longArray, int longIndex) Parameters Type Name Description System.Char [] shortArray prefix array System.Int32 shortIndex offset into shortArray System.Char [] longArray long array (word) System.Int32 longIndex offset into longArray Returns Type Description System.Int32 0 if shortArray is a prefix of longArray , otherwise act as CompareArray(Char[], Int32, Char[], Int32) . | Improve this Doc View Source GetCharType(Char) Return the internal CharType constant of a given character. Declaration public static CharType GetCharType(char ch) Parameters Type Name Description System.Char ch input character Returns Type Description CharType Constant from CharType describing the character type. See Also CharType"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.WordTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.WordTokenFilter.html",
    "title": "Class WordTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WordTokenFilter A TokenFilter that breaks sentences into words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream TokenFilter WordTokenFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public sealed class WordTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source WordTokenFilter(TokenStream) Construct a new WordTokenFilter . Declaration public WordTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input TokenStream of sentences. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.WordType.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.WordType.html",
    "title": "Enum WordType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum WordType Internal SmartChineseAnalyzer token type constants This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public enum WordType : int Fields Name Description CHINESE_WORD Chinese Word DELIMITER Punctuation Symbol FULLWIDTH_NUMBER Full-Width Alphanumeric FULLWIDTH_STRING Full-Width String NUMBER ASCII Alphanumeric SENTENCE_BEGIN Start of a Sentence SENTENCE_END End of a Sentence STRING ASCII String"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Cell.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Cell.html",
    "title": "Class Cell | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Cell A Cell is a portion of a Trie . Inheritance System.Object Cell Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Cell : object Methods | Improve this Doc View Source ToString() Return a string containing this Cell 's attributes. Declaration public override string ToString() Returns Type Description System.String a string representation of this Cell"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Compile.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Compile.html",
    "title": "Class Compile | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Compile The Compile class is used to compile a stemmer table. Inheritance System.Object Compile Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Compile : object Methods | Improve this Doc View Source Main(String[]) Entry point to the Compile application. This program takes any number of arguments: the first is the name of the desired stemming algorithm to use (a list is available in the package description) , all of the rest should be the path or paths to a file or files containing a stemmer table to compile. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args the command line arguments"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Diff.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Diff.html",
    "title": "Class Diff | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Diff The Diff object generates a patch string. A patch string is actually a command to a stemmer telling it how to reduce a word to its root. For example, to reduce the word teacher to its root teach the patch string Db would be generated. This command tells the stemmer to delete the last 2 characters from the word teacher to reach the stem (the patch commands are applied starting from the last character in order to save Inheritance System.Object Diff Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Diff : object Constructors | Improve this Doc View Source Diff() Constructor for the Diff object. Declaration public Diff() | Improve this Doc View Source Diff(Int32, Int32, Int32, Int32) Constructor for the Diff object Declaration public Diff(int ins, int del, int rep, int noop) Parameters Type Name Description System.Int32 ins Description of the Parameter System.Int32 del Description of the Parameter System.Int32 rep Description of the Parameter System.Int32 noop Description of the Parameter Methods | Improve this Doc View Source Apply(StringBuilder, String) Apply the given patch string diff to the given string dest Declaration public static void Apply(StringBuilder dest, string diff) Parameters Type Name Description StringBuilder dest Destination string System.String diff Patch string | Improve this Doc View Source Exec(String, String) Construct a patch string that transforms a to b. Declaration public string Exec(string a, string b) Parameters Type Name Description System.String a 1st string System.String b 2nd string Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.DiffIt.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.DiffIt.html",
    "title": "Class DiffIt | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DiffIt The DiffIt class is a means generate patch commands from an already prepared stemmer table. Inheritance System.Object DiffIt Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class DiffIt : object Methods | Improve this Doc View Source Main(String[]) Entry point to the DiffIt application. This application takes one argument, the path to a file containing a stemmer table. The program reads the file and generates the patch commands for the stems. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args the path to a file containing a stemmer table"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Gener.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Gener.html",
    "title": "Class Gener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Gener The Gener object helps in the discarding of nodes which break the reduction effort and defend the structure against large reductions. Inheritance System.Object Reduce Gener Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Gener : Reduce Constructors | Improve this Doc View Source Gener() Constructor for the Gener object. Declaration public Gener() Methods | Improve this Doc View Source Eat(Row, Int32[]) Test whether the given Row of Cells in a Trie should be included in an optimized Trie. Declaration public bool Eat(Row in, int[] remap) Parameters Type Name Description Row in the Row to test System.Int32 [] remap Description of the Parameter Returns Type Description System.Boolean true if the Row should remain; otherwise, false | Improve this Doc View Source Optimize(Trie) Return a Trie with infrequent values occurring in the given Trie removed. Declaration public override Trie Optimize(Trie orig) Parameters Type Name Description Trie orig the Trie to optimize Returns Type Description Trie a new optimized Trie Overrides Reduce.Optimize(Trie)"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.html",
    "title": "Namespace Egothor.Stemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Egothor.Stemmer <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Egothor stemmer API. Classes Cell A Cell is a portion of a Trie . Compile The Compile class is used to compile a stemmer table. Diff The Diff object generates a patch string. A patch string is actually a command to a stemmer telling it how to reduce a word to its root. For example, to reduce the word teacher to its root teach the patch string Db would be generated. This command tells the stemmer to delete the last 2 characters from the word teacher to reach the stem (the patch commands are applied starting from the last character in order to save DiffIt The DiffIt class is a means generate patch commands from an already prepared stemmer table. Gener The Gener object helps in the discarding of nodes which break the reduction effort and defend the structure against large reductions. Lift The Lift class is a data structure that is a variation of a Patricia trie. Lift's raison d'etre is to implement reduction of the trie via the Lift-Up method., which makes the data structure less liable to overstemming. MultiTrie The MultiTrie is a Trie of Trie s. It stores words and their associated patch commands. The MultiTrie handles patch commands individually (each command by itself). MultiTrie2 The MultiTrie is a Trie of Trie s. It stores words and their associated patch commands. The MultiTrie handles patch commands broken into their constituent parts, as a MultiTrie does, but the commands are delimited by the skip command. Optimizer The Optimizer class is a Trie that will be reduced (have empty rows removed). The reduction will be made by joining two rows where the first is a subset of the second. Optimizer2 The Optimizer class is a Trie that will be reduced (have empty rows removed). This is the result of allowing a joining of rows when there is no collision between non- null values in the rows. Information loss, resulting in the stemmer not being able to recognize words (as in Optimizer), is curtailed, allowing the stemmer to recognize words for which the original trie was built. Use of this class allows the stemmer to be self-teaching. Reduce The Reduce object is used to remove gaps in a Trie which stores a dictionary. Row The Row class represents a row in a matrix representation of a Trie . Trie A Trie is used to store a dictionary of words and their stems. Actually, what is stored are words with their respective patch commands. A trie can be termed forward (keys read from left to right) or backward (keys read from right to left). This property will vary depending on the language for which a Trie is constructed."
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Lift.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Lift.html",
    "title": "Class Lift | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lift The Lift class is a data structure that is a variation of a Patricia trie. Lift's raison d'etre is to implement reduction of the trie via the Lift-Up method., which makes the data structure less liable to overstemming. Inheritance System.Object Reduce Lift Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Lift : Reduce Constructors | Improve this Doc View Source Lift(Boolean) Constructor for the Lift object. Declaration public Lift(bool changeSkip) Parameters Type Name Description System.Boolean changeSkip when set to true , comparison of two Cells takes a skip command into account Methods | Improve this Doc View Source LiftUp(Row, IList<Row>) Reduce the trie using Lift-Up reduction. The Lift-Up reduction propagates all leaf-values (patch commands), where possible, to higher levels which are closer to the root of the trie. Declaration public void LiftUp(Row in, IList<Row> nodes) Parameters Type Name Description Row in the Row to consider when optimizing IList < Row > nodes contains the patch commands | Improve this Doc View Source Optimize(Trie) Optimize (eliminate rows with no content) the given Trie and return the reduced Trie. Declaration public override Trie Optimize(Trie orig) Parameters Type Name Description Trie orig the Trie to optimized Returns Type Description Trie the reduced Trie Overrides Reduce.Optimize(Trie)"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.MultiTrie.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.MultiTrie.html",
    "title": "Class MultiTrie | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTrie The MultiTrie is a Trie of Trie s. It stores words and their associated patch commands. The MultiTrie handles patch commands individually (each command by itself). Inheritance System.Object Trie MultiTrie MultiTrie2 Inherited Members Trie.GetAll(String) Trie.GetCells() Trie.GetCellsPnt() Trie.GetCellsVal() Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class MultiTrie : Trie Constructors | Improve this Doc View Source MultiTrie(IDataInput) Constructor for the MultiTrie object. Declaration public MultiTrie(IDataInput is) Parameters Type Name Description IDataInput is the input stream | Improve this Doc View Source MultiTrie(Boolean) Constructor for the MultiTrie object Declaration public MultiTrie(bool forward) Parameters Type Name Description System.Boolean forward set to true if the elements should be read left to right Fields | Improve this Doc View Source m_tries Declaration protected List<Trie> m_tries Field Value Type Description List < Trie > Methods | Improve this Doc View Source Add(String, String) Add an element to this structure consisting of the given key and patch command. This method will return without executing if the cmd parameter's length is 0. Declaration public override void Add(string key, string cmd) Parameters Type Name Description System.String key the key System.String cmd the patch command Overrides Trie.Add(String, String) | Improve this Doc View Source GetFully(String) Return the element that is stored in a cell associated with the given key. Declaration public override string GetFully(string key) Parameters Type Name Description System.String key the key to the cell holding the desired element Returns Type Description System.String the element Overrides Trie.GetFully(String) | Improve this Doc View Source GetLastOnPath(String) Return the element that is stored as last on a path belonging to the given key. Declaration public override string GetLastOnPath(string key) Parameters Type Name Description System.String key the key associated with the desired element Returns Type Description System.String the element that is stored as last on a path Overrides Trie.GetLastOnPath(String) | Improve this Doc View Source PrintInfo(TextWriter, String) Print the given prefix and the position(s) in the Trie where it appears. Declaration public override void PrintInfo(TextWriter out, string prefix) Parameters Type Name Description TextWriter out System.String prefix the desired prefix Overrides Trie.PrintInfo(TextWriter, String) | Improve this Doc View Source Reduce(Reduce) Remove empty rows from the given Trie and return the newly reduced Trie . Declaration public override Trie Reduce(Reduce by) Parameters Type Name Description Reduce by the Trie to reduce Returns Type Description Trie the newly reduced Trie Overrides Trie.Reduce(Reduce) | Improve this Doc View Source Store(IDataOutput) Write this data structure to the given output stream. Declaration public override void Store(IDataOutput os) Parameters Type Name Description IDataOutput os the output stream Overrides Trie.Store(IDataOutput)"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.MultiTrie2.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.MultiTrie2.html",
    "title": "Class MultiTrie2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTrie2 The MultiTrie is a Trie of Trie s. It stores words and their associated patch commands. The MultiTrie handles patch commands broken into their constituent parts, as a MultiTrie does, but the commands are delimited by the skip command. Inheritance System.Object Trie MultiTrie MultiTrie2 Inherited Members MultiTrie.m_tries MultiTrie.PrintInfo(TextWriter, String) Trie.GetAll(String) Trie.GetCells() Trie.GetCellsPnt() Trie.GetCellsVal() Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class MultiTrie2 : MultiTrie Constructors | Improve this Doc View Source MultiTrie2(IDataInput) Constructor for the MultiTrie object. Declaration public MultiTrie2(IDataInput is) Parameters Type Name Description IDataInput is the input stream | Improve this Doc View Source MultiTrie2(Boolean) Constructor for the MultiTrie2 object Declaration public MultiTrie2(bool forward) Parameters Type Name Description System.Boolean forward set to true if the elements should be read left to right Methods | Improve this Doc View Source Add(String, String) Add an element to this structure consisting of the given key and patch command. This method will return without executing if the cmd parameter's length is 0. Declaration public override void Add(string key, string cmd) Parameters Type Name Description System.String key the key System.String cmd the patch command Overrides MultiTrie.Add(String, String) | Improve this Doc View Source Decompose(String) Break the given patch command into its constituent pieces. The pieces are delimited by NOOP commands. Declaration public virtual string[] Decompose(string cmd) Parameters Type Name Description System.String cmd the patch command Returns Type Description System.String [] an array containing the pieces of the command | Improve this Doc View Source GetFully(String) Return the element that is stored in a cell associated with the given key. Declaration public override string GetFully(string key) Parameters Type Name Description System.String key the key to the cell holding the desired element Returns Type Description System.String the element Overrides MultiTrie.GetFully(String) | Improve this Doc View Source GetLastOnPath(String) Return the element that is stored as last on a path belonging to the given key. Declaration public override string GetLastOnPath(string key) Parameters Type Name Description System.String key the key associated with the desired element Returns Type Description System.String the element that is stored as last on a path Overrides MultiTrie.GetLastOnPath(String) | Improve this Doc View Source Reduce(Reduce) Remove empty rows from the given Trie and return the newly reduced Trie. Declaration public override Trie Reduce(Reduce by) Parameters Type Name Description Reduce by the Trie to reduce Returns Type Description Trie the newly reduced Trie Overrides MultiTrie.Reduce(Reduce) | Improve this Doc View Source Store(IDataOutput) Write this data structure to the given output stream. Declaration public override void Store(IDataOutput os) Parameters Type Name Description IDataOutput os the output stream Overrides MultiTrie.Store(IDataOutput)"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Optimizer.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Optimizer.html",
    "title": "Class Optimizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Optimizer The Optimizer class is a Trie that will be reduced (have empty rows removed). The reduction will be made by joining two rows where the first is a subset of the second. Inheritance System.Object Reduce Optimizer Optimizer2 Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Optimizer : Reduce Constructors | Improve this Doc View Source Optimizer() Constructor for the Optimizer object. Declaration public Optimizer() Methods | Improve this Doc View Source Merge(Cell, Cell) Merge the given Cell s and return the resulting Cell . Declaration public virtual Cell Merge(Cell m, Cell e) Parameters Type Name Description Cell m the master Cell Cell e the existing Cell Returns Type Description Cell the resulting Cell , or null if the operation cannot be realized | Improve this Doc View Source Merge(Row, Row) Merge the given rows and return the resulting Row . Declaration public Row Merge(Row master, Row existing) Parameters Type Name Description Row master the master Row Row existing the existing Row Returns Type Description Row the resulting Row , or null if the operation cannot be realized | Improve this Doc View Source Optimize(Trie) Optimize (remove empty rows) from the given Trie and return the resulting Trie. Declaration public override Trie Optimize(Trie orig) Parameters Type Name Description Trie orig the Trie to consolidate Returns Type Description Trie the newly consolidated Trie Overrides Reduce.Optimize(Trie)"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Optimizer2.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Optimizer2.html",
    "title": "Class Optimizer2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Optimizer2 The Optimizer class is a Trie that will be reduced (have empty rows removed). This is the result of allowing a joining of rows when there is no collision between non- null values in the rows. Information loss, resulting in the stemmer not being able to recognize words (as in Optimizer), is curtailed, allowing the stemmer to recognize words for which the original trie was built. Use of this class allows the stemmer to be self-teaching. Inheritance System.Object Reduce Optimizer Optimizer2 Inherited Members Optimizer.Optimize(Trie) Optimizer.Merge(Row, Row) Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Optimizer2 : Optimizer Constructors | Improve this Doc View Source Optimizer2() Constructor for the Optimizer2 object. Declaration public Optimizer2() Methods | Improve this Doc View Source Merge(Cell, Cell) Merge the given Cell s and return the resulting Cell . Declaration public override Cell Merge(Cell m, Cell e) Parameters Type Name Description Cell m the master Cell Cell e the existing Cell Returns Type Description Cell the resulting Cell , or null if the operation cannot be realized Overrides Optimizer.Merge(Cell, Cell)"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Reduce.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Reduce.html",
    "title": "Class Reduce | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Reduce The Reduce object is used to remove gaps in a Trie which stores a dictionary. Inheritance System.Object Reduce Gener Lift Optimizer Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Reduce : object Constructors | Improve this Doc View Source Reduce() Constructor for the Reduce object. Declaration public Reduce() Methods | Improve this Doc View Source Optimize(Trie) Optimize (remove holes in the rows) the given Trie and return the restructured Trie . Declaration public virtual Trie Optimize(Trie orig) Parameters Type Name Description Trie orig the Trie to optimize Returns Type Description Trie the restructured Trie"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Row.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Row.html",
    "title": "Class Row | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Row The Row class represents a row in a matrix representation of a Trie . Inheritance System.Object Row Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Row : object Constructors | Improve this Doc View Source Row() The default constructor for the Row object. Declaration public Row() | Improve this Doc View Source Row(Row) Construct a Row using the cells of the given Row . Declaration public Row(Row old) Parameters Type Name Description Row old the Row to copy | Improve this Doc View Source Row(IDataInput) Construct a Row object from input carried in via the given input stream. Declaration public Row(IDataInput is) Parameters Type Name Description IDataInput is the input stream Methods | Improve this Doc View Source GetCells() Return the number of cells in use. Declaration public int GetCells() Returns Type Description System.Int32 the number of cells in use | Improve this Doc View Source GetCellsPnt() Return the number of references (how many transitions) to other rows. Declaration public int GetCellsPnt() Returns Type Description System.Int32 the number of references | Improve this Doc View Source GetCellsVal() Return the number of patch commands saved in this Row. Declaration public int GetCellsVal() Returns Type Description System.Int32 the number of patch commands | Improve this Doc View Source GetCmd(Char) Return the command in the Cell associated with the given . Declaration public int GetCmd(char way) Parameters Type Name Description System.Char way the associated with the Cell holding the desired command Returns Type Description System.Int32 the command | Improve this Doc View Source GetCnt(Char) Return the number of patch commands were in the Cell associated with the given before the Trie containing this Row was reduced. Declaration public int GetCnt(char way) Parameters Type Name Description System.Char way the associated with the desired Cell Returns Type Description System.Int32 the number of patch commands before reduction | Improve this Doc View Source GetRef(Char) Return the reference to the next Row in the Cell associated with the given . Declaration public int GetRef(char way) Parameters Type Name Description System.Char way the associated with the desired Cell Returns Type Description System.Int32 the reference, or -1 if the Cell is null | Improve this Doc View Source Print(TextWriter) Write the contents of this Row to the . Declaration public virtual void Print(TextWriter out) Parameters Type Name Description TextWriter out | Improve this Doc View Source SetCmd(Char, Int32) Set the command in the Cell of the given to the given . Declaration public void SetCmd(char way, int cmd) Parameters Type Name Description System.Char way the defining the Cell System.Int32 cmd the new command | Improve this Doc View Source SetRef(Char, Int32) Set the reference to the next row in the Cell of the given to the given . Declaration public void SetRef(char way, int ref) Parameters Type Name Description System.Char way the defining the Cell System.Int32 ref The new ref value | Improve this Doc View Source Store(IDataOutput) Write the contents of this Row to the given output stream. Declaration public virtual void Store(IDataOutput os) Parameters Type Name Description IDataOutput os the output stream | Improve this Doc View Source UniformCmd(Boolean) Return the number of identical Cell s (containing patch commands) in this Row. Declaration public int UniformCmd(bool eqSkip) Parameters Type Name Description System.Boolean eqSkip when set to false the removed patch commands are considered Returns Type Description System.Int32 the number of identical Cell s, or -1 if there are (at least) two different Cell s"
  },
  "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Trie.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Egothor.Stemmer.Trie.html",
    "title": "Class Trie | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Trie A Trie is used to store a dictionary of words and their stems. Actually, what is stored are words with their respective patch commands. A trie can be termed forward (keys read from left to right) or backward (keys read from right to left). This property will vary depending on the language for which a Trie is constructed. Inheritance System.Object Trie MultiTrie Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Trie : object Constructors | Improve this Doc View Source Trie(IDataInput) Constructor for the Trie object. Declaration public Trie(IDataInput is) Parameters Type Name Description IDataInput is the input stream | Improve this Doc View Source Trie(Boolean) Constructor for the Trie object. Declaration public Trie(bool forward) Parameters Type Name Description System.Boolean forward set to true | Improve this Doc View Source Trie(Boolean, Int32, IList<String>, IList<Row>) Constructor for the Trie object. Declaration public Trie(bool forward, int root, IList<string> cmds, IList<Row> rows) Parameters Type Name Description System.Boolean forward true if read left to right, false if read right to left System.Int32 root index of the row that is the root node IList < System.String > cmds the patch commands to store IList < Row > rows a Vector of Vectors. Each inner Vector is a node of this Trie Methods | Improve this Doc View Source Add(String, String) Add the given key associated with the given patch command. If either parameter is null this method will return without executing. Declaration public virtual void Add(string key, string cmd) Parameters Type Name Description System.String key the key System.String cmd the patch command | Improve this Doc View Source GetAll(String) Gets the all attribute of the Trie object Declaration public virtual string[] GetAll(string key) Parameters Type Name Description System.String key Description of the Parameter Returns Type Description System.String [] The all value | Improve this Doc View Source GetCells() Return the number of cells in this Trie object. Declaration public virtual int GetCells() Returns Type Description System.Int32 the number of cells | Improve this Doc View Source GetCellsPnt() Gets the cellsPnt attribute of the Trie object Declaration public virtual int GetCellsPnt() Returns Type Description System.Int32 The cellsPnt value | Improve this Doc View Source GetCellsVal() Gets the cellsVal attribute of the Trie object Declaration public virtual int GetCellsVal() Returns Type Description System.Int32 The cellsVal value | Improve this Doc View Source GetFully(String) Return the element that is stored in a cell associated with the given key. Declaration public virtual string GetFully(string key) Parameters Type Name Description System.String key the key Returns Type Description System.String the associated element | Improve this Doc View Source GetLastOnPath(String) Return the element that is stored as last on a path associated with the given key. Declaration public virtual string GetLastOnPath(string key) Parameters Type Name Description System.String key the key associated with the desired element Returns Type Description System.String the last on path element | Improve this Doc View Source PrintInfo(TextWriter, String) writes debugging info to the printstream Declaration public virtual void PrintInfo(TextWriter out, string prefix) Parameters Type Name Description TextWriter out System.String prefix | Improve this Doc View Source Reduce(Reduce) Remove empty rows from the given Trie and return the newly reduced Trie . Declaration public virtual Trie Reduce(Reduce by) Parameters Type Name Description Reduce by the Trie to reduce Returns Type Description Trie newly reduced Trie | Improve this Doc View Source Store(IDataOutput) Write this Trie to the given output stream. Declaration public virtual void Store(IDataOutput os) Parameters Type Name Description IDataOutput os the output stream"
  },
  "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Pl.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Pl.html",
    "title": "Namespace Lucene.Net.Analysis.Pl | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Pl <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Polish. Classes PolishAnalyzer for Polish."
  },
  "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Pl.PolishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Pl.PolishAnalyzer.html",
    "title": "Class PolishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PolishAnalyzer for Polish. Inheritance System.Object StopwordAnalyzerBase PolishAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Namespace : Lucene.Net.Analysis.Pl Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public sealed class PolishAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source PolishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public PolishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source PolishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public PolishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source PolishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public PolishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STEMMER_FILE File containing default Polish stemmer table. Declaration public static readonly string DEFAULT_STEMMER_FILE Field Value Type Description System.String | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Polish stopwords. Declaration public static readonly string DEFAULT_STOPWORD_FILE Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. | Improve this Doc View Source DefaultTable Returns an unmodifiable instance of the default stemmer table. Declaration public static Trie DefaultTable { get; } Property Value Type Description Trie Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a which tokenizes all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents A built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem excusion set is provided and StempelFilter ."
  },
  "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.html",
    "title": "Namespace Lucene.Net.Analysis.Stempel | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Stempel <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Stempel - Algorithmic Stemmer for Polish Language Introduction A method for conflation of different inflected word forms is an important component of many Information Retrieval systems. It helps to improve the system's recall and can significantly reduce the index size. This is especially true for highly-inflectional languages like those from the Slavic language family (Czech, Slovak, Polish, Russian, Bulgarian, etc). This page describes a software package consisting of high-quality stemming tables for Polish, and a universal algorithmic stemmer, which operates using these tables. The stemmer code is taken virtually unchanged from the Egothor project . The software distribution includes stemmer tables prepared using an extensive corpus of Polish language (see details below). This work is available under Apache-style Open Source license - the stemmer code is covered by Egothor License, the tables and other additions are covered by Apache License 2.0. Both licenses allow to use the code in Open Source as well as commercial (closed source) projects. Terminology A short explanation is in order about the terminology used in this text. In the following sections I make a distinction between stem and lemma . Lemma is a base grammatical form (dictionary form, headword) of a word. Lemma is an existing, grammatically correct word in some human language. Stem on the other hand is just a unique token, not necessarily making any sense in any human language, but which can serve as a unique label instead of lemma for the same set of inflected forms. Quite often stem is referred to as a \"root\" of the word - which is incorrect and misleading (stems sometimes have very little to do with the linguistic root of a word, i.e. a pattern found in a word which is common to all inflected forms or within a family of languages). For an IR system stems are usually sufficient, for a morphological analysis system obviously lemmas are a must. In practice, various stemmers produce a mix of stems and lemmas, as is the case with the stemmer described here. Additionally, for some languages, which use suffix-based inflection rules many stemmers based on suffix-stripping will produce a large percentage of stems equivalent to lemmas. This is however not the case for languages with complex, irregular inflection rules (such as Slavic languages) - here simplistic suffix-stripping stemmers produce very poor results. Background Lemmatization is a process of finding the base, non-inflected form of a word. The result of lemmatization is a correct existing word, often in nominative case for nouns and infinitive form for verbs. A given inflected form may correspond to several lemmas (e.g. \"found\" -> find, found) - the correct choice depends on the context. Stemming is concerned mostly with finding a unique \"root\" of a word, which not necessarily results in any existing word or lemma. The quality of stemming is measured by the rate of collisions (overstemming - which causes words with different lemmas to be incorrectly conflated into one \"root\"), and the rate of superfluous word \"roots\" (understemming - which assigns several \"roots\" to words with the same lemma). Both stemmer and lemmatizer can be implemented in various ways. The two most common approaches are: dictionary-based: where the stemmer uses an extensive dictionary of morphological forms in order to find the corresponding stem or lemma algorithmic: where the stemmer uses an algorithm, based on general morphological properties of a given language plus a set of heuristic rules There are many existing and well-known implementations of stemmers for English (Porter, Lovins, Krovetz) and other European languages ( Snowball ). There are also good quality commercial lemmatizers for Polish. However, there is only one freely available Polish stemmer, implemented by Dawid Weiss , based on the \"ispell\" dictionary and Jan Daciuk's FSA package . That stemmer is dictionary-based. This means that even though it can achieve perfect accuracy for previously known word forms found in its dictionary, it completely fails in case of all other word forms. This deficiency is somewhat mitigated by the comprehensive dictionary distributed with this stemmer (so there is a high probability that most of the words in the input text will be found in the dictionary), however the problem still remains (please see the page above for more detailed description). The implementation described here uses an algorithmic method. This method and particular algorithm implementation are described in detail in [1][2]. The main advantage of algorithmic stemmers is their ability to process previously unseen word forms with high accuracy. This particular algorithm uses a set of transformation rules (patch commands), which describe how a word with a given pattern should be transformed to its stem. These rules are first learned from a training corpus. They don't cover all possible cases, so there is always some loss of precision/recall (which means that even the words from the training corpus are sometimes incorrectly stemmed). Algorithm and implementation The algorithm and its Java implementation is described in detail in the publications cited below. Here's just a short excerpt from [2]: \"The aim is separation of the stemmer execution code from the data structures [...]. In other words, a static algorithm configurable by data must be developed. The word transformations that happen in the stemmer must be then encoded to the data tables. The tacit input of our method is a sample set (a so-called dictionary) of words (as keys) and their stems. Each record can be equivalently stored as a key and the record of key's transformation to its respective stem. The transformation record is termed a patch command (P-command). It must be ensured that P-commands are universal, and that P-commands can transform any word to its stem. Our solution[6,8] is based on the Levenstein metric [10], which produces P-command as the minimum cost path in a directed graph. One can imagine the P-command as an algorithm for an operator (editor) that rewrites a string to another string. The operator can use these instructions (PP-command's): removal - deletes a sequence of characters starting at the current cursor position and moves the cursor to the next character. The length of this sequence is the parameter; insertion - inserts a character ch, without moving the cursor. The character ch is a parameter; substitution - rewrites a character at the current cursor position to the character ch and moves the cursor to the next character. The character ch is a parameter; no operation (NOOP) - skip a sequence of characters starting at the current cursor position. The length of this sequence is the parameter. The P-commands are applied from the end of a word (right to left). This assumption can reduce the set of P-command's, because the last NOOP, moving the cursor to the end of a string without any changes, need not be stored.\" Data structure used to keep the dictionary (words and their P-commands) is a trie. Several optimization steps are applied in turn to reduce and optimize the initial trie, by eliminating useless information and shortening the paths in the trie. Finally, in order to obtain a stem from the input word, the word is passed once through a matching path in the trie (applying at each node the P-commands stored there). The result is a word stem. Corpus (to be completed...) The following Polish corpora have been used: Polish dictionary from ispell distribution Wzbogacony korpus sÅ‚ownika frekwencyjnego The Bible (so called \"TysiÄ…clecia\") - unauthorized electronic version Analizator morfologiczny SAM v. 3.4 - this was used to recover lemmas missing from other texts This step was the most time-consuming - and it would probably be even more tedious and difficult if not for the help of Python . The source texts had to be brought to a common encoding (UTF-8) - some of them used quite ancient encodings like Mazovia or DHN - and then scripts were written to collect all lemmas and inflected forms from the source texts. In cases when the source text was not tagged, I used the SAM analyzer to produce lemmas. In cases of ambiguous lemmatization I decided to put references to inflected forms from all base forms. All grammatical categories were allowed to appear in the corpus, i.e. nouns, verbs, adjectives, numerals, and pronouns. The resulting corpus consisted of roughly 87,000+ inflection sets, i.e. each set consisted of one base form (lemma) and many inflected forms. However, because of the nature of the training method I restricted these sets to include only those where there were at least 4 inflected forms. Sets with 3 or less inflected forms were removed, so that the final corpus consisted of ~69,000 unique sets, which in turn contained ~1.5 mln inflected forms. Testing I tested the stemmer tables produced using the implementation described above. The following sections give some details about the testing setup. Testing procedure The testing procedure was as follows: the whole corpus of ~69,000 unique sets was shuffled, so that the input sets were in random order. the corpus was split into two parts - one with 30,000 sets (Part 1), the other with ~39,000 sets (Part 2). Training samples were drawn in sequential order from the Part 1. Since the sets were already randomized, the training samples were also randomized, but this procedure ensured that each larger training sample contained all smaller samples. Part 2 was used for testing. Note: this means that the testing run used only words previously unseen during the training phase. This is the worst scenario, because it means that stemmer must extrapolate the learned rules to unknown cases. This also means that in a real-life case (where the input is a mix between known and unknown words) the F-measure of the stemmer will be even higher than in the table below. Test results The following table summarizes test results for varying sizes of training samples. The meaning of the table columns is described below: training sets: the number of training sets. One set consists of one lemma and at least 4 and up to ~80 inflected forms (including pre- and suffixed forms). testing forms: the number of testing forms. Only inflected forms were used in testing. stem OK: the number of cases when produced output was a correct (unique) stem. Note: quite often correct stems were also correct lemmas. lemma OK: the number of cases when produced output was a correct lemma. missing: the number of cases when stemmer was unable to provide any output. stem bad: the number of cases when produced output was a stem, but already in use identifying a different set. lemma bad: the number of cases when produced output was an incorrect lemma. Note: quite often in such case the output was a correct stem. table size: the size in bytes of the stemmer table. Training sets Testing forms Stem OK Lemma OK Missing Stem Bad Lemma Bad Table size [B] 100 1022985 842209 593632 172711 22331 256642 28438 200 1022985 862789 646488 153288 16306 223209 48660 500 1022985 885786 685009 130772 14856 207204 108798 700 1022985 909031 704609 107084 15442 211292 139291 1000 1022985 926079 725720 90117 14941 207148 183677 2000 1022985 942886 746641 73429 14903 202915 313516 5000 1022985 954721 759930 61476 14817 201579 640969 7000 1022985 956165 764033 60364 14620 198588 839347 10000 1022985 965427 775507 50797 14662 196681 1144537 12000 1022985 967664 782143 48722 14284 192120 1313508 15000 1022985 973188 788867 43247 14349 190871 1567902 17000 1022985 974203 791804 42319 14333 188862 1733957 20000 1022985 976234 791554 40058 14601 191373 1977615 I also measured the time to produce a stem (which involves traversing a trie, retrieving a patch command and applying the patch command to the input string). On a machine running Windows XP (Pentium 4, 1.7 GHz, JDK 1.4.2_03 HotSpot), for tables ranging in size from 1,000 to 20,000 cells, the time to produce a single stem varies between 5-10 microseconds. This means that the stemmer can process up to 200,000 words per second , an outstanding result when compared to other stemmers (Morfeusz - ~2,000 w/s, FormAN (MS Word analyzer) - ~1,000 w/s). The package contains a class org.getopt.stempel.Benchmark , which you can use to produce reports like the one below: --------- Stemmer benchmark report: ----------- Stemmer table: /res/tables/stemmer_2000.out Input file: ../test3.txt Number of runs: 3 RUN NUMBER: 1 2 3 Total input words 1378176 1378176 1378176 Missed output words 112 112 112 Time elapsed [ms] 6989 6940 6640 Hit rate percent 99.99% 99.99% 99.99% Miss rate percent 00.01% 00.01% 00.01% Words per second 197192 198584 207557 Time per word [us] 5.07 5.04 4.82 Summary The results of these tests are very encouraging. It seems that using the training corpus and the stemming algorithm described above results in a high-quality stemmer useful for most applications. Moreover, it can also be used as a better than average lemmatizer. Both the author of the implementation (Leo Galambos, <leo.galambos AT egothor DOT org>) and the author of this compilation (Andrzej Bialecki ) would appreciate any feedback and suggestions for further improvements. Bibliography Galambos, L.: Multilingual Stemmer in Web Environment, PhD Thesis, Faculty of Mathematics and Physics, Charles University in Prague, in press. Galambos, L.: Semi-automatic Stemmer Evaluation. International Intelligent Information Processing and Web Mining Conference, 2004, Zakopane, Poland. Galambos, L.: Lemmatizer for Document Information Retrieval Systems in JAVA. <http://www.informatik.uni-trier.de/%7Eley/db/conf/sofsem/sofsem2001.html#Galambos01> SOFSEM 2001, Piestany, Slovakia. Classes StempelFilter Transforms the token stream as per the stemming algorithm. Note: the input to the stemming filter must already be in lower case, so you will need to use LowerCaseFilter or LowerCaseTokenizer farther down the chain in order for this to work properly! StempelPolishStemFilterFactory Factory for StempelFilter using a Polish stemming table. StempelStemmer Stemmer class is a convenient facade for other stemmer-related classes. The core stemming algorithm and its implementation is taken verbatim from the Egothor project ( www.egothor.org ). Even though the stemmer tables supplied in the distribution package are built for Polish language, there is nothing language-specific here."
  },
  "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.StempelFilter.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.StempelFilter.html",
    "title": "Class StempelFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StempelFilter Transforms the token stream as per the stemming algorithm. Note: the input to the stemming filter must already be in lower case, so you will need to use LowerCaseFilter or LowerCaseTokenizer farther down the chain in order for this to work properly! Inheritance System.Object StempelFilter Namespace : Lucene.Net.Analysis.Stempel Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public sealed class StempelFilter : TokenFilter Constructors | Improve this Doc View Source StempelFilter(TokenStream, StempelStemmer) Create filter using the supplied stemming table. Declaration public StempelFilter(TokenStream in, StempelStemmer stemmer) Parameters Type Name Description TokenStream in input token stream StempelStemmer stemmer stemmer | Improve this Doc View Source StempelFilter(TokenStream, StempelStemmer, Int32) Create filter using the supplied stemming table. Declaration public StempelFilter(TokenStream in, StempelStemmer stemmer, int minLength) Parameters Type Name Description TokenStream in input token stream StempelStemmer stemmer stemmer System.Int32 minLength For performance reasons words shorter than minLength characters are not processed, but simply returned. Fields | Improve this Doc View Source DEFAULT_MIN_LENGTH Minimum length of input words to be processed. Shorter words are returned unchanged. Declaration public static readonly int DEFAULT_MIN_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Returns the next input , after being stemmed Declaration public override bool IncrementToken() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.StempelPolishStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.StempelPolishStemFilterFactory.html",
    "title": "Class StempelPolishStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StempelPolishStemFilterFactory Factory for StempelFilter using a Polish stemming table. Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory StempelPolishStemFilterFactory Inherited Members Lucene.Net.Analysis.Util.TokenFilterFactory.ForName(System.String, IDictionary<, >) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() TokenFilterFactory.Create(TokenStream) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Require(IDictionary<, >, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Require(IDictionary<, >, System.String, ICollection<>) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Require(IDictionary<, >, System.String, ICollection<>, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(IDictionary<, >, System.String, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(IDictionary<, >, System.String, ICollection<>) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(IDictionary<, >, System.String, ICollection<>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(IDictionary<, >, System.String, ICollection<>, System.String, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireInt32(IDictionary<, >, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetInt32(IDictionary<, >, System.String, System.Int32) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireBoolean(IDictionary<, >, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetBoolean(IDictionary<, >, System.String, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireSingle(IDictionary<, >, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetSingle(IDictionary<, >, System.String, System.Single) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireChar(IDictionary<, >, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetChar(IDictionary<, >, System.String, System.Char) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetSet(IDictionary<, >, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetPattern(IDictionary<, >, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetCulture(IDictionary<, >, System.String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Stempel Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class StempelPolishStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source StempelPolishStemFilterFactory(IDictionary<String, String>) Creates a new StempelPolishStemFilterFactory Declaration public StempelPolishStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream"
  },
  "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.StempelStemmer.html": {
    "href": "api/Lucene.Net.Analysis.Stempel/Lucene.Net.Analysis.Stempel.StempelStemmer.html",
    "title": "Class StempelStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StempelStemmer Stemmer class is a convenient facade for other stemmer-related classes. The core stemming algorithm and its implementation is taken verbatim from the Egothor project ( www.egothor.org ). Even though the stemmer tables supplied in the distribution package are built for Polish language, there is nothing language-specific here. Inheritance System.Object StempelStemmer Namespace : Lucene.Net.Analysis.Stempel Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class StempelStemmer : object Constructors | Improve this Doc View Source StempelStemmer(Trie) Create a Stemmer using pre-loaded stemmer table Declaration public StempelStemmer(Trie stemmer) Parameters Type Name Description Trie stemmer pre-loaded stemmer table | Improve this Doc View Source StempelStemmer(Stream) Create a Stemmer using selected stemmer table Declaration public StempelStemmer(Stream stemmerTable) Parameters Type Name Description Stream stemmerTable stemmer table. Methods | Improve this Doc View Source Load(Stream) Load a stemmer table from an inputstream. Declaration public static Trie Load(Stream stemmerTable) Parameters Type Name Description Stream stemmerTable Returns Type Description Trie | Improve this Doc View Source Stem(String) Stem a word. Declaration public StringBuilder Stem(string word) Parameters Type Name Description System.String word input word to be stemmed. Returns Type Description StringBuilder stemmed word, or null if the stem could not be generated."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Benchmark.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Benchmark.html",
    "title": "Class Benchmark | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Benchmark Run the benchmark algorithm. Inheritance System.Object Benchmark Namespace : Lucene.Net.Benchmarks.ByTask Assembly : Lucene.Net.Benchmark.dll Syntax public class Benchmark : object Remarks Read algorithm. Run the algorithm. Things to be added/fixed in \"Benchmarking by tasks\": TODO - report into Excel and/or graphed view. TODO - perf comparison between Lucene releases over the years. TODO - perf report adequate to include in Lucene nightly build site? (so we can easily track performance changes.) TODO - add overall time control for repeated execution (vs. current by-count only). TODO - query maker that is based on index statistics. Constructors | Improve this Doc View Source Benchmark(TextReader) Declaration public Benchmark(TextReader algReader) Parameters Type Name Description TextReader algReader Properties | Improve this Doc View Source Algorithm Returns the algorithm. Declaration public virtual Algorithm Algorithm { get; } Property Value Type Description Algorithm | Improve this Doc View Source RunData Returns the runData. Declaration public virtual PerfRunData RunData { get; } Property Value Type Description PerfRunData Methods | Improve this Doc View Source Exec(String[]) Utility: execute benchmark from command line. Declaration public static void Exec(string[] args) Parameters Type Name Description System.String [] args Single argument is expected: algorithm-file. | Improve this Doc View Source Execute() Execute this benchmark. Declaration public virtual void Execute() | Improve this Doc View Source Main(String[]) Run the benchmark algorithm. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args Benchmark config and algorithm files."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.AbstractQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.AbstractQueryMaker.html",
    "title": "Class AbstractQueryMaker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractQueryMaker Abstract base query maker. Each query maker should just implement the PrepareQueries() method. Inheritance System.Object AbstractQueryMaker EnwikiQueryMaker FileBasedQueryMaker ReutersQueryMaker SimpleQueryMaker SpatialFileQueryMaker Implements IQueryMaker Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class AbstractQueryMaker : object, IQueryMaker Fields | Improve this Doc View Source m_config Declaration protected Config m_config Field Value Type Description Config | Improve this Doc View Source m_qnum Declaration protected int m_qnum Field Value Type Description System.Int32 | Improve this Doc View Source m_queries Declaration protected Query[] m_queries Field Value Type Description Query [] Methods | Improve this Doc View Source MakeQuery() Declaration public virtual Query MakeQuery() Returns Type Description Query | Improve this Doc View Source MakeQuery(Int32) Declaration public virtual Query MakeQuery(int size) Parameters Type Name Description System.Int32 size Returns Type Description Query See Also MakeQuery ( System.Int32 ) | Improve this Doc View Source NextQnum() Declaration protected virtual int NextQnum() Returns Type Description System.Int32 | Improve this Doc View Source PrepareQueries() Declaration protected abstract Query[] PrepareQueries() Returns Type Description Query [] | Improve this Doc View Source PrintQueries() Declaration public virtual string PrintQueries() Returns Type Description System.String | Improve this Doc View Source ResetInputs() Declaration public virtual void ResetInputs() | Improve this Doc View Source SetConfig(Config) Declaration public virtual void SetConfig(Config config) Parameters Type Name Description Config config Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ContentItemsSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ContentItemsSource.html",
    "title": "Class ContentItemsSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ContentItemsSource Base class for source of data for benchmarking. Inheritance System.Object ContentItemsSource ContentSource FacetSource Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class ContentItemsSource : IDisposable Remarks Keeps track of various statistics, such as how many data items were generated, size in bytes etc. Supports the following configuration parameters: content.source.foreverspecifies whether to generate items forever ( default=true ). content.source.verbosespecifies whether messages should be output by the content source ( default=false ). content.source.encoding specifies which encoding to use when reading the files of that content source. Certain implementations may define a default value if this parameter is not specified. ( default=null ). content.source.log.step specifies for how many items a message should be logged. If set to 0 it means no logging should occur. NOTE: if verbose is set to false, logging should not occur even if logStep is not 0 ( default=0 ). Fields | Improve this Doc View Source m_encoding Declaration protected Encoding m_encoding Field Value Type Description Encoding | Improve this Doc View Source m_forever Declaration protected bool m_forever Field Value Type Description System.Boolean | Improve this Doc View Source m_logStep Declaration protected int m_logStep Field Value Type Description System.Int32 | Improve this Doc View Source m_verbose Declaration protected bool m_verbose Field Value Type Description System.Boolean Properties | Improve this Doc View Source BytesCount Returns the number of bytes generated since last reset. Declaration public long BytesCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Config Declaration public Config Config { get; } Property Value Type Description Config | Improve this Doc View Source ItemsCount Returns the number of generated items since last reset. Declaration public int ItemsCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalBytesCount Returns the total number of bytes that were generated by this source. Declaration public long TotalBytesCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalItemsCount Returns the total number of generated items. Declaration public int TotalItemsCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddBytes(Int64) update count of bytes generated by this source Declaration protected void AddBytes(long numBytes) Parameters Type Name Description System.Int64 numBytes | Improve this Doc View Source AddItem() update count of items generated by this source Declaration protected void AddItem() | Improve this Doc View Source CollectFiles(DirectoryInfo, IList<FileInfo>) A convenience method for collecting all the files of a content source from a given directory. The collected instances are stored in the given files . Declaration protected void CollectFiles(DirectoryInfo dir, IList<FileInfo> files) Parameters Type Name Description DirectoryInfo dir IList < FileInfo > files | Improve this Doc View Source Dispose() Called when reading from this content source is no longer required. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Called when reading from this content source is no longer required. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source PrintStatistics(String) Declaration public virtual void PrintStatistics(string itemsName) Parameters Type Name Description System.String itemsName | Improve this Doc View Source ResetInputs() Resets the input for this content source, so that the test would behave as if it was just started, input-wise. NOTE: the default implementation resets the number of bytes and items generated since the last reset, so it's important to call base.ResetInputs() in case you override this method. Declaration public virtual void ResetInputs() | Improve this Doc View Source SetConfig(Config) Sets the Config for this content source. If you override this method, you must call base.SetConfig(config) . Declaration public virtual void SetConfig(Config config) Parameters Type Name Description Config config | Improve this Doc View Source ShouldLog() Returns true whether it's time to log a message (depending on verbose and the number of items generated). Declaration protected bool ShouldLog() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ContentSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ContentSource.html",
    "title": "Class ContentSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ContentSource Represents content from a specified source, such as TREC, Reuters etc. A ContentSource is responsible for creating DocData objects for its documents to be consumed by DocMaker . It also keeps track of various statistics, such as how many documents were generated, size in bytes etc. For supported configuration parameters see ContentItemsSource . Inheritance System.Object ContentItemsSource ContentSource DirContentSource EnwikiContentSource Int64ToEnglishContentSource LineDocSource ReutersContentSource SingleDocSource TrecContentSource Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.Dispose(Boolean) ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.ResetInputs() ContentItemsSource.SetConfig(Config) ContentItemsSource.PrintStatistics(String) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class ContentSource : ContentItemsSource Methods | Improve this Doc View Source GetNextDocData(DocData) Returns the next DocData from the content source. Implementations must account for multi-threading, as multiple threads can call this method simultaneously. Declaration public abstract DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DemoHTMLParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DemoHTMLParser.html",
    "title": "Class DemoHTMLParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DemoHTMLParser Simple HTML Parser extracting title, meta tags, and body text that is based on NekoHTML . Inheritance System.Object DemoHTMLParser Implements IHTMLParser Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class DemoHTMLParser : object, IHTMLParser Methods | Improve this Doc View Source Parse(DocData, String, Nullable<DateTime>, InputSource, TrecContentSource) Declaration public virtual DocData Parse(DocData docData, string name, DateTime? date, InputSource source, TrecContentSource trecSrc) Parameters Type Name Description DocData docData System.String name System.Nullable < DateTime > date InputSource source TrecContentSource trecSrc Returns Type Description DocData | Improve this Doc View Source Parse(DocData, String, Nullable<DateTime>, TextReader, TrecContentSource) Declaration public virtual DocData Parse(DocData docData, string name, DateTime? date, TextReader reader, TrecContentSource trecSrc) Parameters Type Name Description DocData docData System.String name System.Nullable < DateTime > date TextReader reader TrecContentSource trecSrc Returns Type Description DocData Implements IHTMLParser"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DemoHTMLParser.Parser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DemoHTMLParser.Parser.html",
    "title": "Class DemoHTMLParser.Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DemoHTMLParser.Parser The actual parser to read HTML documents. Inheritance System.Object DemoHTMLParser.Parser Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public sealed class Parser : object Constructors | Improve this Doc View Source Parser(InputSource) Declaration public Parser(InputSource source) Parameters Type Name Description InputSource source | Improve this Doc View Source Parser(TextReader) Declaration public Parser(TextReader reader) Parameters Type Name Description TextReader reader Properties | Improve this Doc View Source Body Declaration public string Body { get; } Property Value Type Description System.String | Improve this Doc View Source MetaTags Declaration public IDictionary<string, string> MetaTags { get; } Property Value Type Description IDictionary < System.String , System.String > | Improve this Doc View Source Title Declaration public string Title { get; } Property Value Type Description System.String"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DirContentSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DirContentSource.html",
    "title": "Class DirContentSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirContentSource A ContentSource using the Dir collection for its input. Supports the following configuration parameters (on top of ContentSource ): work.dirspecifies the working directory. Required if \"docs.dir\" denotes a relative path ( default=work ). docs.dirspecifies the directory the Dir collection. Can be set to a relative path if \"work.dir\" is also specified ( default=dir-out ). Inheritance System.Object ContentItemsSource ContentSource DirContentSource Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.PrintStatistics(String) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class DirContentSource : ContentSource Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides ContentSource.GetNextDocData(DocData) | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs() | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides ContentItemsSource.SetConfig(Config)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DirContentSource.Iterator.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DirContentSource.Iterator.html",
    "title": "Class DirContentSource.Iterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirContentSource.Iterator Iterator over the files in the directory. Inheritance System.Object DirContentSource.Iterator Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class Iterator : IEnumerator<FileInfo> Constructors | Improve this Doc View Source Iterator(DirectoryInfo) Declaration public Iterator(DirectoryInfo f) Parameters Type Name Description DirectoryInfo f Properties | Improve this Doc View Source Count Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Current Declaration public virtual FileInfo Current { get; } Property Value Type Description FileInfo Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source MoveNext() Declaration public virtual bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public virtual void Reset()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DocData.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DocData.html",
    "title": "Class DocData | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocData Output of parsing (e.g. HTML parsing) of an input document. Inheritance System.Object DocData Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class DocData : object Properties | Improve this Doc View Source Body Declaration public string Body { get; set; } Property Value Type Description System.String | Improve this Doc View Source Date Gets the date. If the ctor with was called, then the string returned is the output of . Otherwise it's the string passed to the other ctor. Declaration public virtual string Date { get; } Property Value Type Description System.String | Improve this Doc View Source ID Declaration public int ID { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Name Declaration public string Name { get; set; } Property Value Type Description System.String | Improve this Doc View Source Props Declaration public IDictionary<string, string> Props { get; set; } Property Value Type Description IDictionary < System.String , System.String > | Improve this Doc View Source Title Declaration public string Title { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source SetDate(Nullable<DateTime>) Declaration public virtual void SetDate(DateTime? date) Parameters Type Name Description System.Nullable < DateTime > date | Improve this Doc View Source SetDate(String) Declaration public virtual void SetDate(string date) Parameters Type Name Description System.String date"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DocMaker.DocState.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DocMaker.DocState.html",
    "title": "Class DocMaker.DocState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocMaker.DocState Document state, supports reuse of field instances across documents (see reuseFields parameter). Inheritance System.Object DocMaker.DocState Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax protected class DocState : object Constructors | Improve this Doc View Source DocState(Boolean, FieldType, FieldType) Declaration public DocState(bool reuseFields, FieldType ft, FieldType bodyFt) Parameters Type Name Description System.Boolean reuseFields FieldType ft FieldType bodyFt"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DocMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.DocMaker.html",
    "title": "Class DocMaker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocMaker Creates Document objects. Uses a ContentSource to generate DocData objects. Inheritance System.Object DocMaker SpatialDocMaker Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class DocMaker : IDisposable Remarks Supports the following parameters: content.sourcespecifies the ContentSource class to use (default SingleDocSource ). doc.storedspecifies whether fields should be stored (default false ). doc.body.storedspecifies whether the body field should be stored (default = doc.stored ). doc.tokenizedspecifies whether fields should be tokenized (default true ). doc.body.tokenizedspecifies whether the body field should be tokenized (default = doc.tokenized ). doc.tokenized.normsspecifies whether norms should be stored in the index or not. (default false ). doc.body.tokenized.norms specifies whether norms should be stored in the index for the body field. This can be set to true, while doc.tokenized.norms is set to false, to allow norms storing just for the body field. (default true ). doc.term.vectorspecifies whether term vectors should be stored for fields (default false ). doc.term.vector.positionsspecifies whether term vectors should be stored with positions (default false ). doc.term.vector.offsetsspecifies whether term vectors should be stored with offsets (default false ). doc.store.body.bytesspecifies whether to store the raw bytes of the document's content in the document (default false ). doc.reuse.fieldsspecifies whether Field and Document objects should be reused (default true ). doc.index.propsspecifies whether the properties returned by doc.random.id.limit if specified, docs will be assigned random IDs from 0 to this limit. This is useful with UpdateDoc for testing performance of . Props will be indexed. (default false ). Constructors | Improve this Doc View Source DocMaker() Declaration public DocMaker() Fields | Improve this Doc View Source BODY_FIELD Declaration public static readonly string BODY_FIELD Field Value Type Description System.String | Improve this Doc View Source BYTES_FIELD Declaration public static readonly string BYTES_FIELD Field Value Type Description System.String | Improve this Doc View Source DATE_FIELD Declaration public static readonly string DATE_FIELD Field Value Type Description System.String | Improve this Doc View Source DATE_MSEC_FIELD Declaration public static readonly string DATE_MSEC_FIELD Field Value Type Description System.String | Improve this Doc View Source ID_FIELD Declaration public static readonly string ID_FIELD Field Value Type Description System.String | Improve this Doc View Source m_bodyValType Declaration protected FieldType m_bodyValType Field Value Type Description FieldType | Improve this Doc View Source m_config Declaration protected Config m_config Field Value Type Description Config | Improve this Doc View Source m_indexProperties Declaration protected bool m_indexProperties Field Value Type Description System.Boolean | Improve this Doc View Source m_reuseFields Declaration protected bool m_reuseFields Field Value Type Description System.Boolean | Improve this Doc View Source m_source Declaration protected ContentSource m_source Field Value Type Description ContentSource | Improve this Doc View Source m_valType Declaration protected FieldType m_valType Field Value Type Description FieldType | Improve this Doc View Source NAME_FIELD Declaration public static readonly string NAME_FIELD Field Value Type Description System.String | Improve this Doc View Source TIME_SEC_FIELD Declaration public static readonly string TIME_SEC_FIELD Field Value Type Description System.String | Improve this Doc View Source TITLE_FIELD Declaration public static readonly string TITLE_FIELD Field Value Type Description System.String Methods | Improve this Doc View Source Dispose() Closes the DocMaker . Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Closes the DocMaker . The base implementation closes the ContentSource , and it can be overridden to do more work (but make sure to call base.Dispose(bool) ). Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetDocState() Declaration protected virtual DocMaker.DocState GetDocState() Returns Type Description DocMaker.DocState | Improve this Doc View Source MakeDocument() Creates a Document object ready for indexing. This method uses the ContentSource to get the next document from the source, and creates a Document object from the returned fields. If reuseFields was set to true , it will reuse Document and Field instances. Declaration public virtual Document MakeDocument() Returns Type Description Document | Improve this Doc View Source MakeDocument(Int32) Same as MakeDocument() , only this method creates a document of the given size input by size . Declaration public virtual Document MakeDocument(int size) Parameters Type Name Description System.Int32 size Returns Type Description Document | Improve this Doc View Source ResetInputs() Reset inputs so that the test run would behave, input wise, as if it just started. Declaration public virtual void ResetInputs() | Improve this Doc View Source SetConfig(Config, ContentSource) Set the configuration parameters of this doc maker. Declaration public virtual void SetConfig(Config config, ContentSource source) Parameters Type Name Description Config config ContentSource source"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.EnwikiContentSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.EnwikiContentSource.html",
    "title": "Class EnwikiContentSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnwikiContentSource A ContentSource which reads the English Wikipedia dump. You can read the .bz2 file directly (it will be decompressed on the fly). Config properties: keep.image.only.docsfalse|true (default true ). docs.file<path to the file> Inheritance System.Object ContentItemsSource ContentSource EnwikiContentSource Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.PrintStatistics(String) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class EnwikiContentSource : ContentSource Constructors | Improve this Doc View Source EnwikiContentSource() Declaration public EnwikiContentSource() Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides ContentSource.GetNextDocData(DocData) | Improve this Doc View Source OpenInputStream() Open the input stream. Declaration protected virtual Stream OpenInputStream() Returns Type Description Stream | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs() | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides ContentItemsSource.SetConfig(Config)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.EnwikiQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.EnwikiQueryMaker.html",
    "title": "Class EnwikiQueryMaker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnwikiQueryMaker A QueryMaker that uses common and uncommon actual Wikipedia queries for searching the English Wikipedia collection. 90 queries total. Inheritance System.Object AbstractQueryMaker EnwikiQueryMaker Implements IQueryMaker Inherited Members AbstractQueryMaker.m_qnum AbstractQueryMaker.m_queries AbstractQueryMaker.m_config AbstractQueryMaker.ResetInputs() AbstractQueryMaker.SetConfig(Config) AbstractQueryMaker.PrintQueries() AbstractQueryMaker.MakeQuery() AbstractQueryMaker.NextQnum() AbstractQueryMaker.MakeQuery(Int32) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class EnwikiQueryMaker : AbstractQueryMaker, IQueryMaker Methods | Improve this Doc View Source PrepareQueries() Declaration protected override Query[] PrepareQueries() Returns Type Description Query [] Overrides AbstractQueryMaker.PrepareQueries() Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.FacetSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.FacetSource.html",
    "title": "Class FacetSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetSource Source items for facets. For supported configuration parameters see ContentItemsSource . Inheritance System.Object ContentItemsSource FacetSource RandomFacetSource Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.Dispose(Boolean) ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.SetConfig(Config) ContentItemsSource.PrintStatistics(String) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class FacetSource : ContentItemsSource Methods | Improve this Doc View Source Configure(FacetsConfig) Declaration public abstract void Configure(FacetsConfig config) Parameters Type Name Description FacetsConfig config | Improve this Doc View Source GetNextFacets(IList<FacetField>) Fills the next facets content items in the given list. Implementations must account for multi-threading, as multiple threads can call this method simultaneously. Declaration public abstract void GetNextFacets(IList<FacetField> facets) Parameters Type Name Description IList < FacetField > facets | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.FileBasedQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.FileBasedQueryMaker.html",
    "title": "Class FileBasedQueryMaker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FileBasedQueryMaker Create queries from a . One per line, pass them through the QueryParser. Lines beginning with # are treated as comments. Inheritance System.Object AbstractQueryMaker FileBasedQueryMaker Implements IQueryMaker Inherited Members AbstractQueryMaker.m_qnum AbstractQueryMaker.m_queries AbstractQueryMaker.m_config AbstractQueryMaker.ResetInputs() AbstractQueryMaker.SetConfig(Config) AbstractQueryMaker.PrintQueries() AbstractQueryMaker.MakeQuery() AbstractQueryMaker.NextQnum() AbstractQueryMaker.MakeQuery(Int32) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class FileBasedQueryMaker : AbstractQueryMaker, IQueryMaker Remarks File can be specified as a absolute, relative or resource. Two properties can be set: file.query.maker.file<Full path to file containing queries> file.query.maker.default.field<Name of default field - Default value is \"body\"> Example: file.query.maker.file=c:/myqueries.txt file.query.maker.default.field=body Methods | Improve this Doc View Source PrepareQueries() Declaration protected override Query[] PrepareQueries() Returns Type Description Query [] Overrides AbstractQueryMaker.PrepareQueries() Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.GeonamesLineParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.GeonamesLineParser.html",
    "title": "Class GeonamesLineParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GeonamesLineParser A line parser for Geonames.org data. See 'geoname' table . Requires SpatialDocMaker . Inheritance System.Object LineParser GeonamesLineParser Inherited Members LineParser.m_header Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class GeonamesLineParser : LineParser Constructors | Improve this Doc View Source GeonamesLineParser(String[]) This header will be ignored; the geonames format is fixed and doesn't have a header line. Declaration public GeonamesLineParser(string[] header) Parameters Type Name Description System.String [] header Methods | Improve this Doc View Source ParseLine(DocData, String) Declaration public override void ParseLine(DocData docData, string line) Parameters Type Name Description DocData docData System.String line Overrides LineParser.ParseLine(DocData, String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.HeaderLineParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.HeaderLineParser.html",
    "title": "Class HeaderLineParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HeaderLineParser LineParser which sets field names and order by the header - any header - of the lines file. It is less efficient than SimpleLineParser but more powerful. Inheritance System.Object LineParser HeaderLineParser Inherited Members LineParser.m_header Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class HeaderLineParser : LineParser Constructors | Improve this Doc View Source HeaderLineParser(String[]) Declaration public HeaderLineParser(string[] header) Parameters Type Name Description System.String [] header Methods | Improve this Doc View Source ParseLine(DocData, String) Declaration public override void ParseLine(DocData docData, string line) Parameters Type Name Description DocData docData System.String line Overrides LineParser.ParseLine(DocData, String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.html",
    "title": "Namespace Lucene.Net.Benchmarks.ByTask.Feeds | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.ByTask.Feeds <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Sources for benchmark inputs: documents and queries. Classes AbstractQueryMaker Abstract base query maker. Each query maker should just implement the PrepareQueries() method. ContentItemsSource Base class for source of data for benchmarking. ContentSource Represents content from a specified source, such as TREC, Reuters etc. A ContentSource is responsible for creating DocData objects for its documents to be consumed by DocMaker . It also keeps track of various statistics, such as how many documents were generated, size in bytes etc. For supported configuration parameters see ContentItemsSource . DemoHTMLParser Simple HTML Parser extracting title, meta tags, and body text that is based on NekoHTML . DemoHTMLParser.Parser The actual parser to read HTML documents. DirContentSource A ContentSource using the Dir collection for its input. Supports the following configuration parameters (on top of ContentSource ): work.dirspecifies the working directory. Required if \"docs.dir\" denotes a relative path ( default=work ). docs.dirspecifies the directory the Dir collection. Can be set to a relative path if \"work.dir\" is also specified ( default=dir-out ). DirContentSource.Iterator Iterator over the files in the directory. DocData Output of parsing (e.g. HTML parsing) of an input document. DocMaker Creates Document objects. Uses a ContentSource to generate DocData objects. DocMaker.DocState Document state, supports reuse of field instances across documents (see reuseFields parameter). EnwikiContentSource A ContentSource which reads the English Wikipedia dump. You can read the .bz2 file directly (it will be decompressed on the fly). Config properties: keep.image.only.docsfalse|true (default true ). docs.file<path to the file> EnwikiQueryMaker A QueryMaker that uses common and uncommon actual Wikipedia queries for searching the English Wikipedia collection. 90 queries total. FacetSource Source items for facets. For supported configuration parameters see ContentItemsSource . FileBasedQueryMaker Create queries from a . One per line, pass them through the QueryParser. Lines beginning with # are treated as comments. GeonamesLineParser A line parser for Geonames.org data. See 'geoname' table . Requires SpatialDocMaker . HeaderLineParser LineParser which sets field names and order by the header - any header - of the lines file. It is less efficient than SimpleLineParser but more powerful. Int64ToEnglishContentSource Creates documents whose content is a number starting from + 10 . Int64ToEnglishQueryMaker Creates queries whose content is a spelled-out number starting from + 10 . LineDocSource A ContentSource reading one line at a time as a Document from a single file. This saves IO cost (over DirContentSource) of recursing through a directory and opening a new file for every document. LineParser Reader of a single input line into DocData . NoMoreDataException Exception indicating there is no more data. Thrown by Docs Makers if doc.maker.forever is false and docs sources of that maker where exhausted. This is useful for iterating all document of a source, in case we don't know in advance how many docs there are. RandomFacetSource Simple implementation of a random facet source. ReutersContentSource A ContentSource reading from the Reuters collection. Config properties: work.dir path to the root of docs and indexes dirs (default work ). docs.dir path to the docs dir (default reuters-out ). ReutersQueryMaker A IQueryMaker that makes queries devised manually (by Grant Ingersoll) for searching in the Reuters collection. SimpleLineParser LineParser which ignores the header passed to its constructor and assumes simply that field names and their order are the same as in DEFAULT_FIELDS . SimpleQueryMaker A IQueryMaker that makes queries for a collection created using SingleDocSource . SimpleSloppyPhraseQueryMaker Create sloppy phrase queries for performance test, in an index created using simple doc maker. SingleDocSource Creates the same document each time GetNextDocData(DocData) is called. SortableSingleDocSource Adds fields appropriate for sorting: country, random_string and sort_field (int). Supports the following parameters: sort.rng defines the range for sort-by-int field (default 20000 ). rand.seed defines the seed to initialize Random with (default 13 ). SpatialDocMaker Indexes spatial data according to a configured SpatialStrategy with optional shape transformation via a configured IShapeConverter . The converter can turn points into circles and bounding boxes, in order to vary the type of indexing performance tests. Unless it's subclass-ed to do otherwise, this class configures a , SpatialPrefixTree , and RecursivePrefixTreeStrategy . The Strategy is made available to a query maker via the static method GetSpatialStrategy(Int32) . See spatial.alg for a listing of spatial parameters, in particular those starting with \"spatial.\" and \"doc.spatial\". SpatialFileQueryMaker Reads spatial data from the body field docs from an internally created LineDocSource . It's parsed by and then further manipulated via a configurable IShapeConverter . When using point data, it's likely you'll want to configure the shape converter so that the query shapes actually cover a region. The queries are all created & cached in advance. This query maker works in conjunction with SpatialDocMaker . See spatial.alg for a listing of options, in particular the options starting with \"query.\". TrecContentSource Implements a ContentSource over the TREC collection. TrecDocParser Parser for trec doc content, invoked on doc text excluding <DOC> and <DOCNO> which are handled in TrecContentSource. Required to be stateless and hence thread safe. TrecFBISParser Parser for the FBIS docs in trec disks 4+5 collection format TrecFR94Parser Parser for the FR94 docs in trec disks 4+5 collection format TrecFTParser Parser for the FT docs in trec disks 4+5 collection format TrecGov2Parser Parser for the GOV2 collection format TrecLATimesParser Parser for the FT docs in trec disks 4+5 collection format TrecParserByPath Parser for trec docs which selects the parser to apply according to the source files path, defaulting to TrecGov2Parser . Interfaces IHTMLParser HTML Parsing Interface for test purposes. IQueryMaker Create queries for the test. IShapeConverter Converts one shape to another. Created by MakeShapeConverter(SpatialStrategy, Config, String) . Enums TrecDocParser.ParsePathType Types of trec parse paths,"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.IHTMLParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.IHTMLParser.html",
    "title": "Interface IHTMLParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IHTMLParser HTML Parsing Interface for test purposes. Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public interface IHTMLParser Methods | Improve this Doc View Source Parse(DocData, String, Nullable<DateTime>, TextReader, TrecContentSource) Parse the input TextReader and return DocData. The provided name, title, date are used for the result, unless when they're null, in which case an attempt is made to set them from the parsed data. Declaration DocData Parse(DocData docData, string name, DateTime? date, TextReader reader, TrecContentSource trecSrc) Parameters Type Name Description DocData docData Result reused. System.String name Name of the result doc data. System.Nullable < DateTime > date Date of the result doc data. If null, attempt to set by parsed data. TextReader reader Reader of html text to parse. TrecContentSource trecSrc The TrecContentSource used to parse dates. Returns Type Description DocData Parsed doc data."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.Int64ToEnglishContentSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.Int64ToEnglishContentSource.html",
    "title": "Class Int64ToEnglishContentSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64ToEnglishContentSource Creates documents whose content is a number starting from + 10 . Inheritance System.Object ContentItemsSource ContentSource Int64ToEnglishContentSource Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.SetConfig(Config) ContentItemsSource.PrintStatistics(String) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class Int64ToEnglishContentSource : ContentSource Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides ContentSource.GetNextDocData(DocData) | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.Int64ToEnglishQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.Int64ToEnglishQueryMaker.html",
    "title": "Class Int64ToEnglishQueryMaker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64ToEnglishQueryMaker Creates queries whose content is a spelled-out number starting from + 10 . Inheritance System.Object Int64ToEnglishQueryMaker Implements IQueryMaker Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class Int64ToEnglishQueryMaker : object, IQueryMaker Fields | Improve this Doc View Source m_parser Declaration protected QueryParser m_parser Field Value Type Description QueryParser Methods | Improve this Doc View Source MakeQuery() Declaration public virtual Query MakeQuery() Returns Type Description Query | Improve this Doc View Source MakeQuery(Int32) Declaration public virtual Query MakeQuery(int size) Parameters Type Name Description System.Int32 size Returns Type Description Query | Improve this Doc View Source PrintQueries() Declaration public virtual string PrintQueries() Returns Type Description System.String | Improve this Doc View Source ResetInputs() Declaration public virtual void ResetInputs() | Improve this Doc View Source SetConfig(Config) Declaration public virtual void SetConfig(Config config) Parameters Type Name Description Config config Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.IQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.IQueryMaker.html",
    "title": "Interface IQueryMaker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IQueryMaker Create queries for the test. Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public interface IQueryMaker Methods | Improve this Doc View Source MakeQuery() Create the next query Declaration Query MakeQuery() Returns Type Description Query | Improve this Doc View Source MakeQuery(Int32) Create the next query, of the given size. Declaration Query MakeQuery(int size) Parameters Type Name Description System.Int32 size The size of the query - number of terms, etc. Returns Type Description Query | Improve this Doc View Source PrintQueries() Print the queries Declaration string PrintQueries() Returns Type Description System.String | Improve this Doc View Source ResetInputs() Reset inputs so that the test run would behave, input wise, as if it just started. Declaration void ResetInputs() | Improve this Doc View Source SetConfig(Config) Set the properties Declaration void SetConfig(Config config) Parameters Type Name Description Config config"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.IShapeConverter.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.IShapeConverter.html",
    "title": "Interface IShapeConverter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IShapeConverter Converts one shape to another. Created by MakeShapeConverter(SpatialStrategy, Config, String) . Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public interface IShapeConverter Methods | Improve this Doc View Source Convert(IShape) Declaration IShape Convert(IShape shape) Parameters Type Name Description IShape shape Returns Type Description IShape"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.LineDocSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.LineDocSource.html",
    "title": "Class LineDocSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LineDocSource A ContentSource reading one line at a time as a Document from a single file. This saves IO cost (over DirContentSource) of recursing through a directory and opening a new file for every document. Inheritance System.Object ContentItemsSource ContentSource LineDocSource Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.PrintStatistics(String) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class LineDocSource : ContentSource Remarks The expected format of each line is (arguments are separated by <TAB>): title, date, body . If a line is read in a different format, a will be thrown. In general, you should use this content source for files that were created with WriteLineDocTask . Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides ContentSource.GetNextDocData(DocData) | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs() | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides ContentItemsSource.SetConfig(Config)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.LineParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.LineParser.html",
    "title": "Class LineParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LineParser Reader of a single input line into DocData . Inheritance System.Object LineParser GeonamesLineParser HeaderLineParser SimpleLineParser Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class LineParser : object Constructors | Improve this Doc View Source LineParser(String[]) Construct with the header Declaration public LineParser(string[] header) Parameters Type Name Description System.String [] header header line found in the input file, or null if none. Fields | Improve this Doc View Source m_header Declaration protected readonly string[] m_header Field Value Type Description System.String [] Methods | Improve this Doc View Source ParseLine(DocData, String) parse an input line and fill doc data appropriately Declaration public abstract void ParseLine(DocData docData, string line) Parameters Type Name Description DocData docData System.String line"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.NoMoreDataException.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.NoMoreDataException.html",
    "title": "Class NoMoreDataException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoMoreDataException Exception indicating there is no more data. Thrown by Docs Makers if doc.maker.forever is false and docs sources of that maker where exhausted. This is useful for iterating all document of a source, in case we don't know in advance how many docs there are. Inheritance System.Object NoMoreDataException Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class NoMoreDataException : Exception Constructors | Improve this Doc View Source NoMoreDataException() Declaration public NoMoreDataException()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.RandomFacetSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.RandomFacetSource.html",
    "title": "Class RandomFacetSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RandomFacetSource Simple implementation of a random facet source. Inheritance System.Object ContentItemsSource FacetSource RandomFacetSource Inherited Members FacetSource.ResetInputs() ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.PrintStatistics(String) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class RandomFacetSource : FacetSource Remarks Supports the following parameters: rand.seeddefines the seed to initialize with (default: 13 ). max.doc.facet.dimsMax number of random dimensions to create (default: 5 ); actual number of dimensions would be anything between 1 and that number. max.doc.facetsmaximal #facets per doc (default: 10 ). Actual number of facets in a certain doc would be anything between 1 and that number. max.facet.depthmaximal #components in a facet (default: 3 ). Actual number of components in a certain facet would be anything between 1 and that number. Methods | Improve this Doc View Source Configure(FacetsConfig) Declaration public override void Configure(FacetsConfig config) Parameters Type Name Description FacetsConfig config Overrides FacetSource.Configure(FacetsConfig) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextFacets(IList<FacetField>) Declaration public override void GetNextFacets(IList<FacetField> facets) Parameters Type Name Description IList < FacetField > facets Overrides FacetSource.GetNextFacets(IList<FacetField>) | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides ContentItemsSource.SetConfig(Config)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ReutersContentSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ReutersContentSource.html",
    "title": "Class ReutersContentSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReutersContentSource A ContentSource reading from the Reuters collection. Config properties: work.dir path to the root of docs and indexes dirs (default work ). docs.dir path to the docs dir (default reuters-out ). Inheritance System.Object ContentItemsSource ContentSource ReutersContentSource Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.PrintStatistics(String) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class ReutersContentSource : ContentSource Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides ContentSource.GetNextDocData(DocData) | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs() | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides ContentItemsSource.SetConfig(Config)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ReutersQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.ReutersQueryMaker.html",
    "title": "Class ReutersQueryMaker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReutersQueryMaker A IQueryMaker that makes queries devised manually (by Grant Ingersoll) for searching in the Reuters collection. Inheritance System.Object AbstractQueryMaker ReutersQueryMaker Implements IQueryMaker Inherited Members AbstractQueryMaker.m_qnum AbstractQueryMaker.m_queries AbstractQueryMaker.m_config AbstractQueryMaker.ResetInputs() AbstractQueryMaker.SetConfig(Config) AbstractQueryMaker.PrintQueries() AbstractQueryMaker.MakeQuery() AbstractQueryMaker.NextQnum() AbstractQueryMaker.MakeQuery(Int32) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class ReutersQueryMaker : AbstractQueryMaker, IQueryMaker Methods | Improve this Doc View Source PrepareQueries() Declaration protected override Query[] PrepareQueries() Returns Type Description Query [] Overrides AbstractQueryMaker.PrepareQueries() Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SimpleLineParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SimpleLineParser.html",
    "title": "Class SimpleLineParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleLineParser LineParser which ignores the header passed to its constructor and assumes simply that field names and their order are the same as in DEFAULT_FIELDS . Inheritance System.Object LineParser SimpleLineParser Inherited Members LineParser.m_header Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class SimpleLineParser : LineParser Constructors | Improve this Doc View Source SimpleLineParser(String[]) Declaration public SimpleLineParser(string[] header) Parameters Type Name Description System.String [] header Methods | Improve this Doc View Source ParseLine(DocData, String) Declaration public override void ParseLine(DocData docData, string line) Parameters Type Name Description DocData docData System.String line Overrides LineParser.ParseLine(DocData, String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SimpleQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SimpleQueryMaker.html",
    "title": "Class SimpleQueryMaker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleQueryMaker A IQueryMaker that makes queries for a collection created using SingleDocSource . Inheritance System.Object AbstractQueryMaker SimpleQueryMaker SimpleSloppyPhraseQueryMaker Implements IQueryMaker Inherited Members AbstractQueryMaker.m_qnum AbstractQueryMaker.m_queries AbstractQueryMaker.m_config AbstractQueryMaker.ResetInputs() AbstractQueryMaker.SetConfig(Config) AbstractQueryMaker.PrintQueries() AbstractQueryMaker.MakeQuery() AbstractQueryMaker.NextQnum() AbstractQueryMaker.MakeQuery(Int32) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class SimpleQueryMaker : AbstractQueryMaker, IQueryMaker Methods | Improve this Doc View Source PrepareQueries() Prepare the queries for this test. Extending classes can override this method for preparing different queries. Declaration protected override Query[] PrepareQueries() Returns Type Description Query [] Prepared queries. Overrides AbstractQueryMaker.PrepareQueries() Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SimpleSloppyPhraseQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SimpleSloppyPhraseQueryMaker.html",
    "title": "Class SimpleSloppyPhraseQueryMaker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleSloppyPhraseQueryMaker Create sloppy phrase queries for performance test, in an index created using simple doc maker. Inheritance System.Object AbstractQueryMaker SimpleQueryMaker SimpleSloppyPhraseQueryMaker Implements IQueryMaker Inherited Members AbstractQueryMaker.m_qnum AbstractQueryMaker.m_queries AbstractQueryMaker.m_config AbstractQueryMaker.ResetInputs() AbstractQueryMaker.SetConfig(Config) AbstractQueryMaker.PrintQueries() AbstractQueryMaker.MakeQuery() AbstractQueryMaker.NextQnum() AbstractQueryMaker.MakeQuery(Int32) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class SimpleSloppyPhraseQueryMaker : SimpleQueryMaker, IQueryMaker Methods | Improve this Doc View Source PrepareQueries() Declaration protected override Query[] PrepareQueries() Returns Type Description Query [] Overrides SimpleQueryMaker.PrepareQueries() See Also PrepareQueries () Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SingleDocSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SingleDocSource.html",
    "title": "Class SingleDocSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleDocSource Creates the same document each time GetNextDocData(DocData) is called. Inheritance System.Object ContentItemsSource ContentSource SingleDocSource SortableSingleDocSource Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.SetConfig(Config) ContentItemsSource.PrintStatistics(String) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class SingleDocSource : ContentSource Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides ContentSource.GetNextDocData(DocData) | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SortableSingleDocSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SortableSingleDocSource.html",
    "title": "Class SortableSingleDocSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortableSingleDocSource Adds fields appropriate for sorting: country, random_string and sort_field (int). Supports the following parameters: sort.rng defines the range for sort-by-int field (default 20000 ). rand.seed defines the seed to initialize Random with (default 13 ). Inheritance System.Object ContentItemsSource ContentSource SingleDocSource SortableSingleDocSource Inherited Members SingleDocSource.Dispose(Boolean) SingleDocSource.ResetInputs() ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.PrintStatistics(String) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class SortableSingleDocSource : SingleDocSource Methods | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides SingleDocSource.GetNextDocData(DocData) | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides ContentItemsSource.SetConfig(Config)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SpatialDocMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SpatialDocMaker.html",
    "title": "Class SpatialDocMaker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpatialDocMaker Indexes spatial data according to a configured SpatialStrategy with optional shape transformation via a configured IShapeConverter . The converter can turn points into circles and bounding boxes, in order to vary the type of indexing performance tests. Unless it's subclass-ed to do otherwise, this class configures a , SpatialPrefixTree , and RecursivePrefixTreeStrategy . The Strategy is made available to a query maker via the static method GetSpatialStrategy(Int32) . See spatial.alg for a listing of spatial parameters, in particular those starting with \"spatial.\" and \"doc.spatial\". Inheritance System.Object DocMaker SpatialDocMaker Inherited Members DocMaker.BODY_FIELD DocMaker.TITLE_FIELD DocMaker.DATE_FIELD DocMaker.DATE_MSEC_FIELD DocMaker.TIME_SEC_FIELD DocMaker.ID_FIELD DocMaker.BYTES_FIELD DocMaker.NAME_FIELD DocMaker.m_config DocMaker.m_valType DocMaker.m_bodyValType DocMaker.m_source DocMaker.m_reuseFields DocMaker.m_indexProperties DocMaker.GetDocState() DocMaker.Dispose() DocMaker.Dispose(Boolean) DocMaker.ResetInputs() Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class SpatialDocMaker : DocMaker Fields | Improve this Doc View Source SPATIAL_FIELD Declaration public static readonly string SPATIAL_FIELD Field Value Type Description System.String Methods | Improve this Doc View Source GetSpatialStrategy(Int32) Looks up the SpatialStrategy from the given round -- RoundNumber . It's an error if it wasn't created already for this round -- when SpatialDocMaker is initialized. Declaration public static SpatialStrategy GetSpatialStrategy(int roundNumber) Parameters Type Name Description System.Int32 roundNumber Returns Type Description SpatialStrategy | Improve this Doc View Source MakeDocument() Declaration public override Document MakeDocument() Returns Type Description Document Overrides DocMaker.MakeDocument() | Improve this Doc View Source MakeDocument(Int32) Declaration public override Document MakeDocument(int size) Parameters Type Name Description System.Int32 size Returns Type Description Document Overrides DocMaker.MakeDocument(Int32) | Improve this Doc View Source MakeShapeConverter(SpatialStrategy, Config, String) Optionally converts points to circles, and optionally bbox'es result. Declaration public static IShapeConverter MakeShapeConverter(SpatialStrategy spatialStrategy, Config config, string configKeyPrefix) Parameters Type Name Description SpatialStrategy spatialStrategy Config config System.String configKeyPrefix Returns Type Description IShapeConverter | Improve this Doc View Source MakeShapeFromString(SpatialStrategy, String, String) Declaration public static IShape MakeShapeFromString(SpatialStrategy strategy, string name, string shapeStr) Parameters Type Name Description SpatialStrategy strategy System.String name System.String shapeStr Returns Type Description IShape | Improve this Doc View Source MakeSpatialStrategy(Config) Builds a SpatialStrategy from configuration options. Declaration protected virtual SpatialStrategy MakeSpatialStrategy(Config config) Parameters Type Name Description Config config Returns Type Description SpatialStrategy | Improve this Doc View Source MakeSpatialStrategy(Config, IDictionary<String, String>, SpatialContext) Declaration protected virtual SpatialStrategy MakeSpatialStrategy(Config config, IDictionary<string, string> configMap, SpatialContext ctx) Parameters Type Name Description Config config IDictionary < System.String , System.String > configMap SpatialContext ctx Returns Type Description SpatialStrategy | Improve this Doc View Source SetConfig(Config, ContentSource) Declaration public override void SetConfig(Config config, ContentSource source) Parameters Type Name Description Config config ContentSource source Overrides DocMaker.SetConfig(Config, ContentSource)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SpatialFileQueryMaker.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.SpatialFileQueryMaker.html",
    "title": "Class SpatialFileQueryMaker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpatialFileQueryMaker Reads spatial data from the body field docs from an internally created LineDocSource . It's parsed by and then further manipulated via a configurable IShapeConverter . When using point data, it's likely you'll want to configure the shape converter so that the query shapes actually cover a region. The queries are all created & cached in advance. This query maker works in conjunction with SpatialDocMaker . See spatial.alg for a listing of options, in particular the options starting with \"query.\". Inheritance System.Object AbstractQueryMaker SpatialFileQueryMaker Implements IQueryMaker Inherited Members AbstractQueryMaker.m_qnum AbstractQueryMaker.m_queries AbstractQueryMaker.m_config AbstractQueryMaker.ResetInputs() AbstractQueryMaker.PrintQueries() AbstractQueryMaker.MakeQuery() AbstractQueryMaker.NextQnum() AbstractQueryMaker.MakeQuery(Int32) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class SpatialFileQueryMaker : AbstractQueryMaker, IQueryMaker Fields | Improve this Doc View Source m_distErrPct Declaration protected double m_distErrPct Field Value Type Description System.Double | Improve this Doc View Source m_operation Declaration protected SpatialOperation m_operation Field Value Type Description SpatialOperation | Improve this Doc View Source m_score Declaration protected bool m_score Field Value Type Description System.Boolean | Improve this Doc View Source m_shapeConverter Declaration protected IShapeConverter m_shapeConverter Field Value Type Description IShapeConverter | Improve this Doc View Source m_strategy Declaration protected SpatialStrategy m_strategy Field Value Type Description SpatialStrategy Methods | Improve this Doc View Source MakeQueryFromShape(IShape) Declaration protected virtual Query MakeQueryFromShape(IShape shape) Parameters Type Name Description IShape shape Returns Type Description Query | Improve this Doc View Source PrepareQueries() Declaration protected override Query[] PrepareQueries() Returns Type Description Query [] Overrides AbstractQueryMaker.PrepareQueries() | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides AbstractQueryMaker.SetConfig(Config) Implements IQueryMaker"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecContentSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecContentSource.html",
    "title": "Class TrecContentSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrecContentSource Implements a ContentSource over the TREC collection. Inheritance System.Object ContentItemsSource ContentSource TrecContentSource Inherited Members ContentItemsSource.m_forever ContentItemsSource.m_logStep ContentItemsSource.m_verbose ContentItemsSource.m_encoding ContentItemsSource.AddBytes(Int64) ContentItemsSource.AddItem() ContentItemsSource.CollectFiles(DirectoryInfo, IList<FileInfo>) ContentItemsSource.ShouldLog() ContentItemsSource.Dispose() ContentItemsSource.BytesCount ContentItemsSource.ItemsCount ContentItemsSource.Config ContentItemsSource.TotalBytesCount ContentItemsSource.TotalItemsCount ContentItemsSource.PrintStatistics(String) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecContentSource : ContentSource Remarks Supports the following configuration parameters (on top of ContentSource ): work.dirspecifies the working directory. Required if \"docs.dir\" denotes a relative path ( default=work ). docs.dirspecifies the directory where the TREC files reside. Can be set to a relative path if \"work.dir\" is also specified ( default=trec ). trec.doc.parserspecifies the TrecDocParser class to use for parsing the TREC documents content ( default=TrecGov2Parser ). html.parserspecifies the IHTMLParser class to use for parsing the HTML parts of the TREC documents content ( default=DemoHTMLParser ). content.source.encodingif not specified, ISO-8859-1 is used. if true , do not append iteration number to docname Fields | Improve this Doc View Source DOC Declaration public static readonly string DOC Field Value Type Description System.String | Improve this Doc View Source DOCNO Declaration public static readonly string DOCNO Field Value Type Description System.String | Improve this Doc View Source NEW_LINE separator between lines in the buffer Declaration public static readonly string NEW_LINE Field Value Type Description System.String | Improve this Doc View Source TERMINATING_DOC Declaration public static readonly string TERMINATING_DOC Field Value Type Description System.String | Improve this Doc View Source TERMINATING_DOCNO Declaration public static readonly string TERMINATING_DOCNO Field Value Type Description System.String Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ContentItemsSource.Dispose(Boolean) | Improve this Doc View Source GetNextDocData(DocData) Declaration public override DocData GetNextDocData(DocData docData) Parameters Type Name Description DocData docData Returns Type Description DocData Overrides ContentSource.GetNextDocData(DocData) | Improve this Doc View Source ParseDate(String) Declaration public virtual DateTime? ParseDate(string dateStr) Parameters Type Name Description System.String dateStr Returns Type Description System.Nullable < DateTime > | Improve this Doc View Source ResetInputs() Declaration public override void ResetInputs() Overrides ContentItemsSource.ResetInputs() | Improve this Doc View Source SetConfig(Config) Declaration public override void SetConfig(Config config) Parameters Type Name Description Config config Overrides ContentItemsSource.SetConfig(Config)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecDocParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecDocParser.html",
    "title": "Class TrecDocParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrecDocParser Parser for trec doc content, invoked on doc text excluding <DOC> and <DOCNO> which are handled in TrecContentSource. Required to be stateless and hence thread safe. Inheritance System.Object TrecDocParser TrecFBISParser TrecFR94Parser TrecFTParser TrecGov2Parser TrecLATimesParser TrecParserByPath Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class TrecDocParser : object Fields | Improve this Doc View Source DEFAULT_PATH_TYPE trec parser type used for unknown extensions Declaration public static readonly TrecDocParser.ParsePathType DEFAULT_PATH_TYPE Field Value Type Description TrecDocParser.ParsePathType Methods | Improve this Doc View Source Extract(StringBuilder, String, String, Int32, String[]) Extract from buf the text of interest within specified tags. Declaration public static string Extract(StringBuilder buf, string startTag, string endTag, int maxPos, string[] noisePrefixes) Parameters Type Name Description StringBuilder buf Entire input text. System.String startTag Tag marking start of text of interest. System.String endTag Tag marking end of text of interest. System.Int32 maxPos if ≥ 0 sets a limit on start of text of interest. System.String [] noisePrefixes Text of interest or null if not found. Returns Type Description System.String | Improve this Doc View Source Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType) Parse the text prepared in docBuf into a result DocData, no synchronization is required. Declaration public abstract DocData Parse(DocData docData, string name, TrecContentSource trecSrc, StringBuilder docBuf, TrecDocParser.ParsePathType pathType) Parameters Type Name Description DocData docData Reusable result. System.String name Name that should be set to the result. TrecContentSource trecSrc Calling trec content source. StringBuilder docBuf Text to parse. TrecDocParser.ParsePathType pathType Type of parsed file, or UNKNOWN if unknown - may be used by parsers to alter their behavior according to the file path type. Returns Type Description DocData | Improve this Doc View Source PathType(FileInfo) Compute the path type of a file by inspecting name of file and its parents. Declaration public static TrecDocParser.ParsePathType PathType(FileInfo f) Parameters Type Name Description FileInfo f Returns Type Description TrecDocParser.ParsePathType | Improve this Doc View Source StripTags(StringBuilder, Int32) strip tags from buf : each tag is replaced by a single blank. Declaration public static string StripTags(StringBuilder buf, int start) Parameters Type Name Description StringBuilder buf System.Int32 start Returns Type Description System.String Text obtained when stripping all tags from buf (input is unmodified). | Improve this Doc View Source StripTags(String, Int32) Strip tags from input. Declaration public static string StripTags(string buf, int start) Parameters Type Name Description System.String buf System.Int32 start Returns Type Description System.String See Also StripTags(StringBuilder, Int32)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecDocParser.ParsePathType.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecDocParser.ParsePathType.html",
    "title": "Enum TrecDocParser.ParsePathType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum TrecDocParser.ParsePathType Types of trec parse paths, Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public enum ParsePathType : int Fields Name Description FBIS FR94 FT GOV2 LATIMES UNKNOWN"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecFBISParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecFBISParser.html",
    "title": "Class TrecFBISParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrecFBISParser Parser for the FBIS docs in trec disks 4+5 collection format Inheritance System.Object TrecDocParser TrecFBISParser Inherited Members TrecDocParser.DEFAULT_PATH_TYPE TrecDocParser.PathType(FileInfo) TrecDocParser.StripTags(StringBuilder, Int32) TrecDocParser.StripTags(String, Int32) TrecDocParser.Extract(StringBuilder, String, String, Int32, String[]) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecFBISParser : TrecDocParser Methods | Improve this Doc View Source Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType) Declaration public override DocData Parse(DocData docData, string name, TrecContentSource trecSrc, StringBuilder docBuf, TrecDocParser.ParsePathType pathType) Parameters Type Name Description DocData docData System.String name TrecContentSource trecSrc StringBuilder docBuf TrecDocParser.ParsePathType pathType Returns Type Description DocData Overrides TrecDocParser.Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecFR94Parser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecFR94Parser.html",
    "title": "Class TrecFR94Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrecFR94Parser Parser for the FR94 docs in trec disks 4+5 collection format Inheritance System.Object TrecDocParser TrecFR94Parser Inherited Members TrecDocParser.DEFAULT_PATH_TYPE TrecDocParser.PathType(FileInfo) TrecDocParser.StripTags(StringBuilder, Int32) TrecDocParser.StripTags(String, Int32) TrecDocParser.Extract(StringBuilder, String, String, Int32, String[]) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecFR94Parser : TrecDocParser Methods | Improve this Doc View Source Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType) Declaration public override DocData Parse(DocData docData, string name, TrecContentSource trecSrc, StringBuilder docBuf, TrecDocParser.ParsePathType pathType) Parameters Type Name Description DocData docData System.String name TrecContentSource trecSrc StringBuilder docBuf TrecDocParser.ParsePathType pathType Returns Type Description DocData Overrides TrecDocParser.Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecFTParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecFTParser.html",
    "title": "Class TrecFTParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrecFTParser Parser for the FT docs in trec disks 4+5 collection format Inheritance System.Object TrecDocParser TrecFTParser Inherited Members TrecDocParser.DEFAULT_PATH_TYPE TrecDocParser.PathType(FileInfo) TrecDocParser.StripTags(StringBuilder, Int32) TrecDocParser.StripTags(String, Int32) TrecDocParser.Extract(StringBuilder, String, String, Int32, String[]) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecFTParser : TrecDocParser Methods | Improve this Doc View Source Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType) Declaration public override DocData Parse(DocData docData, string name, TrecContentSource trecSrc, StringBuilder docBuf, TrecDocParser.ParsePathType pathType) Parameters Type Name Description DocData docData System.String name TrecContentSource trecSrc StringBuilder docBuf TrecDocParser.ParsePathType pathType Returns Type Description DocData Overrides TrecDocParser.Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecGov2Parser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecGov2Parser.html",
    "title": "Class TrecGov2Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrecGov2Parser Parser for the GOV2 collection format Inheritance System.Object TrecDocParser TrecGov2Parser Inherited Members TrecDocParser.DEFAULT_PATH_TYPE TrecDocParser.PathType(FileInfo) TrecDocParser.StripTags(StringBuilder, Int32) TrecDocParser.StripTags(String, Int32) TrecDocParser.Extract(StringBuilder, String, String, Int32, String[]) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecGov2Parser : TrecDocParser Methods | Improve this Doc View Source Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType) Declaration public override DocData Parse(DocData docData, string name, TrecContentSource trecSrc, StringBuilder docBuf, TrecDocParser.ParsePathType pathType) Parameters Type Name Description DocData docData System.String name TrecContentSource trecSrc StringBuilder docBuf TrecDocParser.ParsePathType pathType Returns Type Description DocData Overrides TrecDocParser.Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecLATimesParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecLATimesParser.html",
    "title": "Class TrecLATimesParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrecLATimesParser Parser for the FT docs in trec disks 4+5 collection format Inheritance System.Object TrecDocParser TrecLATimesParser Inherited Members TrecDocParser.DEFAULT_PATH_TYPE TrecDocParser.PathType(FileInfo) TrecDocParser.StripTags(StringBuilder, Int32) TrecDocParser.StripTags(String, Int32) TrecDocParser.Extract(StringBuilder, String, String, Int32, String[]) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecLATimesParser : TrecDocParser Methods | Improve this Doc View Source Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType) Declaration public override DocData Parse(DocData docData, string name, TrecContentSource trecSrc, StringBuilder docBuf, TrecDocParser.ParsePathType pathType) Parameters Type Name Description DocData docData System.String name TrecContentSource trecSrc StringBuilder docBuf TrecDocParser.ParsePathType pathType Returns Type Description DocData Overrides TrecDocParser.Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecParserByPath.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Feeds.TrecParserByPath.html",
    "title": "Class TrecParserByPath | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrecParserByPath Parser for trec docs which selects the parser to apply according to the source files path, defaulting to TrecGov2Parser . Inheritance System.Object TrecDocParser TrecParserByPath Inherited Members TrecDocParser.DEFAULT_PATH_TYPE TrecDocParser.PathType(FileInfo) TrecDocParser.StripTags(StringBuilder, Int32) TrecDocParser.StripTags(String, Int32) TrecDocParser.Extract(StringBuilder, String, String, Int32, String[]) Namespace : Lucene.Net.Benchmarks.ByTask.Feeds Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecParserByPath : TrecDocParser Methods | Improve this Doc View Source Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType) Declaration public override DocData Parse(DocData docData, string name, TrecContentSource trecSrc, StringBuilder docBuf, TrecDocParser.ParsePathType pathType) Parameters Type Name Description DocData docData System.String name TrecContentSource trecSrc StringBuilder docBuf TrecDocParser.ParsePathType pathType Returns Type Description DocData Overrides TrecDocParser.Parse(DocData, String, TrecContentSource, StringBuilder, TrecDocParser.ParsePathType)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.html",
    "title": "Namespace Lucene.Net.Benchmarks.ByTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.ByTask <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Benchmarking Lucene By Tasks. This package provides \"task based\" performance benchmarking of Lucene. One can use the predefined benchmarks, or create new ones. Contained packages: Package Description stats Statistics maintained when running benchmark tasks. tasks Benchmark tasks. feeds Sources for benchmark inputs: documents and queries. utils Utilities used for the benchmark, and for the reports. programmatic Sample performance test written programmatically. Table Of Contents Benchmarking By Tasks 2. How to use 3. Benchmark \"algorithm\" 4. Supported tasks/commands 5. Benchmark properties 6. Example input algorithm and the result benchmark report. 7. Results record counting clarified Benchmarking By Tasks Benchmark Lucene using task primitives. A benchmark is composed of some predefined tasks, allowing for creating an index, adding documents, optimizing, searching, generating reports, and more. A benchmark run takes an \"algorithm\" file that contains a description of the sequence of tasks making up the run, and some properties defining a few additional characteristics of the benchmark run. How to use Easiest way to run a benchmarks is using the predefined ant task: * ant run-task would run the micro-standard.alg \"algorithm\". * ant run-task -Dtask.alg=conf/compound-penalty.alg would run the compound-penalty.alg \"algorithm\". * ant run-task -Dtask.alg=[full-path-to-your-alg-file] would run your perf test \"algorithm\". * java org.apache.lucene.benchmark.byTask.programmatic.Sample would run a performance test programmatically - without using an alg file. This is less readable, and less convenient, but possible. You may find existing tasks sufficient for defining the benchmark you need, otherwise, you can extend the framework to meet your needs, as explained herein. Each benchmark run has a DocMaker and a QueryMaker. These two should usually match, so that \"meaningful\" queries are used for a certain collection. Properties set at the header of the alg file define which \"makers\" should be used. You can also specify your own makers, extending DocMaker and implementing QueryMaker. Note: since 2.9, DocMaker is a concrete class which accepts a ContentSource. In most cases, you can use the DocMaker class to create Documents, while providing your own ContentSource implementation. For example, the current Benchmark package includes ContentSource implementations for TREC, Enwiki and Reuters collections, as well as others like LineDocSource which reads a 'line' file produced by WriteLineDocTask. Benchmark .alg file contains the benchmark \"algorithm\". The syntax is described below. Within the algorithm, you can specify groups of commands, assign them names, specify commands that should be repeated, do commands in serial or in parallel, and also control the speed of \"firing\" the commands. This allows, for instance, to specify that an index should be opened for update, documents should be added to it one by one but not faster than 20 docs a minute, and, in parallel with this, some N queries should be searched against that index, again, no more than 2 queries a second. You can have the searches all share an index reader, or have them each open its own reader and close it afterwords. If the commands available for use in the algorithm do not meet your needs, you can add commands by adding a new task under org.apache.lucene.benchmark.byTask.tasks - you should extend the PerfTask abstract class. Make sure that your new task class name is suffixed by Task. Assume you added the class \"WonderfulTask\" - doing so also enables the command \"Wonderful\" to be used in the algorithm. External classes : It is sometimes useful to invoke the benchmark package with your external alg file that configures the use of your own doc/query maker and or html parser. You can work this out without modifying the benchmark package code, by passing your class path with the benchmark.ext.classpath property: * ant run-task -Dtask.alg=[full-path-to-your-alg-file] -Dbenchmark.ext.classpath=/mydir/classes -Dtask.mem=512M External tasks : When writing your own tasks under a package other than org.apache.lucene.benchmark.byTask.tasks specify that package thru the alt.tasks.packages property. Benchmark \"algorithm\" The following is an informal description of the supported syntax. Measuring : When a command is executed, statistics for the elapsed execution time and memory consumption are collected. At any time, those statistics can be printed, using one of the available ReportTasks. Comments start with ' # '. Serial sequences are enclosed within ' { } '. Parallel sequences are enclosed within ' [ ] ' Sequence naming: To name a sequence, put ' \"name\" ' just after ' { ' or ' [ '. Example - { \"ManyAdds\" AddDoc } : 1000000 - would name the sequence of 1M add docs \"ManyAdds\", and this name would later appear in statistic reports. If you don't specify a name for a sequence, it is given one: you can see it as the algorithm is printed just before benchmark execution starts. Repeating : To repeat sequence tasks N times, add ' : N ' just after the sequence closing tag - ' } ' or ' ] ' or ' > '. Example - [ AddDoc ] : 4 - would do 4 addDoc in parallel, spawning 4 threads at once. Example - [ AddDoc AddDoc ] : 4 - would do 8 addDoc in parallel, spawning 8 threads at once. Example - { AddDoc } : 30 - would do addDoc 30 times in a row. Example - { AddDoc AddDoc } : 30 - would do addDoc 60 times in a row. Exhaustive repeating : use * instead of a number to repeat exhaustively. This is sometimes useful, for adding as many files as a doc maker can create, without iterating over the same file again, especially when the exact number of documents is not known in advance. For instance, TREC files extracted from a zip file. Note: when using this, you must also set doc.maker.forever to false. Example - { AddDoc } : * - would add docs until the doc maker is \"exhausted\". Command parameter : a command can optionally take a single parameter. If the certain command does not support a parameter, or if the parameter is of the wrong type, reading the algorithm will fail with an exception and the test would not start. Currently the following tasks take optional parameters: AddDoc takes a numeric parameter, indicating the required size of added document. Note: if the DocMaker implementation used in the test does not support makeDoc(size), an exception would be thrown and the test would fail. DeleteDoc takes numeric parameter, indicating the docid to be deleted. The latter is not very useful for loops, since the docid is fixed, so for deletion in loops it is better to use the doc.delete.step property. SetProp takes a name,value mandatory param, ',' used as a separator. SearchTravRetTask and SearchTravTask take a numeric parameter, indicating the required traversal size. SearchTravRetLoadFieldSelectorTask takes a string parameter: a comma separated list of Fields to load. SearchTravRetHighlighterTask takes a string parameter: a comma separated list of parameters to define highlighting. See that tasks javadocs for more information Example - AddDoc(2000) - would add a document of size 2000 (~bytes). See conf/task-sample.alg for how this can be used, for instance, to check which is faster, adding many smaller documents, or few larger documents. Next candidates for supporting a parameter may be the Search tasks, for controlling the query size. Statistic recording elimination : - a sequence can also end with ' > ', in which case child tasks would not store their statistics. This can be useful to avoid exploding stats data, for adding say 1M docs. Example - { \"ManyAdds\" AddDoc > : 1000000 - would add million docs, measure that total, but not save stats for each addDoc. Notice that the granularity of System.currentTimeMillis() (which is used here) is system dependant, and in some systems an operation that takes 5 ms to complete may show 0 ms latency time in performance measurements. Therefore it is sometimes more accurate to look at the elapsed time of a larger sequence, as demonstrated here. Rate : To set a rate (ops/sec or ops/min) for a sequence, add ' : N : R ' just after sequence closing tag. This would specify repetition of N with rate of R operations/sec. Use ' R/sec ' or ' R/min ' to explicitly specify that the rate is per second or per minute. The default is per second, Example - [ AddDoc ] : 400 : 3 - would do 400 addDoc in parallel, starting up to 3 threads per second. Example - { AddDoc } : 100 : 200/min - would do 100 addDoc serially, waiting before starting next add, if otherwise rate would exceed 200 adds/min. Disable Counting : Each task executed contributes to the records count. This count is reflected in reports under recs/s and under recsPerRun. Most tasks count 1, some count 0, and some count more. (See Results record counting clarified for more details.) It is possible to disable counting for a task by preceding it with - . Example - -CreateIndex - would count 0 while the default behavior for CreateIndex is to count 1. Command names : Each class \"AnyNameTask\" in the package org.apache.lucene.benchmark.byTask.tasks, that extends PerfTask, is supported as command \"AnyName\" that can be used in the benchmark \"algorithm\" description. This allows to add new commands by just adding such classes. Supported tasks/commands Existing tasks can be divided into a few groups: regular index/search work tasks, report tasks, and control tasks. Report tasks : There are a few Report commands for generating reports. Only task runs that were completed are reported. (The 'Report tasks' themselves are not measured and not reported.) RepAll - all (completed) task runs. RepSumByName - all statistics, aggregated by name. So, if AddDoc was executed 2000 times, only 1 report line would be created for it, aggregating all those 2000 statistic records. RepSelectByPref prefixWord - all records for tasks whose name start with prefixWord . RepSumByPref prefixWord - all records for tasks whose name start with prefixWord , aggregated by their full task name. RepSumByNameRound - all statistics, aggregated by name and by Round . So, if AddDoc was executed 2000 times in each of 3 rounds , 3 report lines would be created for it, aggregating all those 2000 statistic records in each round. See more about rounds in the NewRound command description below. RepSumByPrefRound prefixWord - similar to RepSumByNameRound , just that only tasks whose name starts with prefixWord are included. If needed, additional reports can be added by extending the abstract class ReportTask, and by manipulating the statistics data in Points and TaskStats. Control tasks : Few of the tasks control the benchmark algorithm all over: ClearStats - clears the entire statistics. Further reports would only include task runs that would start after this call. NewRound - virtually start a new round of performance test. Although this command can be placed anywhere, it mostly makes sense at the end of an outermost sequence. This increments a global \"round counter\". All task runs that would start now would record the new, updated round counter as their round number. This would appear in reports. In particular, see RepSumByNameRound above. An additional effect of NewRound, is that numeric and boolean properties defined (at the head of the .alg file) as a sequence of values, e.g. merge.factor=mrg:10 💯 10:100 would increment (cyclic) to the next value. Note: this would also be reflected in the reports, in this case under a column that would be named \"mrg\". * <font color=\"#FF0066\">ResetInputs</font> - DocMaker and the various QueryMakers would reset their counters to start. The way these Maker interfaces work, each call for makeDocument() or makeQuery() creates the next document or query that it \"knows\" to create. If that pool is \"exhausted\", the \"maker\" start over again. The ResetInputs command therefore allows to make the rounds comparable. It is therefore useful to invoke ResetInputs together with NewRound. * <font color=\"#FF0066\">ResetSystemErase</font> - reset all index and input data and call gc. Does NOT reset statistics. This contains ResetInputs. All writers/readers are nullified, deleted, closed. Index is erased. Directory is erased. You would have to call CreateIndex once this was called... * <font color=\"#FF0066\">ResetSystemSoft</font> - reset all index and input data and call gc. Does NOT reset statistics. This contains ResetInputs. All writers/readers are nullified, closed. Index is NOT erased. Directory is NOT erased. This is useful for testing performance on an existing index, for instance if the construction of a large index took a very long time and now you would to test its search or update performance. Other existing tasks are quite straightforward and would just be briefly described here. CreateIndex and OpenIndex both leave the index open for later update operations. CloseIndex would close it. OpenReader , similarly, would leave an index reader open for later search operations. But this have further semantics. If a Read operation is performed, and an open reader exists, it would be used. Otherwise, the read operation would open its own reader and close it when the read operation is done. This allows testing various scenarios - sharing a reader, searching with \"cold\" reader, with \"warmed\" reader, etc. The read operations affected by this are: Warm , Search , SearchTrav (search and traverse), and SearchTravRet (search and traverse and retrieve). Notice that each of the 3 search task types maintains its own queryMaker instance. CommitIndex and ForceMerge can be used to commit changes to the index then merge the index segments. The integer parameter specifies how many segments to merge down to (default 1). WriteLineDoc prepares a 'line' file where each line holds a document with title , date and body elements, separated by [TAB]. A line file is useful if one wants to measure pure indexing performance, without the overhead of parsing the data. You can use LineDocSource as a ContentSource over a 'line' file. ConsumeContentSource consumes a ContentSource. Useful for e.g. testing a ContentSource performance, without the overhead of preparing a Document out of it. Benchmark properties Properties are read from the header of the .alg file, and define several parameters of the performance test. As mentioned above for the NewRound task, numeric and boolean properties that are defined as a sequence of values, e.g. merge.factor=mrg:10 💯 10:100 would increment (cyclic) to the next value, when NewRound is called, and would also appear as a named column in the reports (column name would be \"mrg\" in this example). Some of the currently defined properties are: analyzer - full class name for the analyzer to use. Same analyzer would be used in the entire test. directory - valid values are This tells which directory to use for the performance test. Index work parameters : Multi int/boolean values would be iterated with calls to NewRound. There would be also added as columns in the reports, first string in the sequence is the column name. (Make sure it is no shorter than any value in the sequence). max.buffered Example: max.buffered=buf:10:10 💯 100 - this would define using maxBufferedDocs of 10 in iterations 0 and 1, and 100 in iterations 2 and 3. * <font color=\"#FF0066\">merge.factor</font> - which merge factor to use. * <font color=\"#FF0066\">compound</font> - whether the index is using the compound format or not. Valid values are \"true\" and \"false\". Here is a list of currently defined properties: Root directory for data and indexes: work.dir (default is System property \"benchmark.work.dir\" or \"work\".) Docs and queries creation: analyzer doc.maker doc.maker.forever html.parser doc.stored doc.tokenized doc.term.vector doc.term.vector.positions doc.term.vector.offsets doc.store.body.bytes docs.dir query.maker file.query.maker.file file.query.maker.default.field search.num.hits Logging : log.step log.step.[class name]Task ie log.step.DeleteDoc (e.g. log.step.Wonderful for the WonderfulTask example above). log.queries task.max.depth.log Index writing : compound merge.factor max.buffered directory ram.flush.mb Doc deletion : doc.delete.step Spatial : Numerous; see spatial.alg Task alternative packages : alt.tasks.packages comma separated list of additional packages where tasks classes will be looked for when not found in the default package (that of PerfTask). If the same task class appears in more than one package, the package indicated first in this list will be used. For sample use of these properties see the *.alg files under conf. Example input algorithm and the result benchmark report The following example is in conf/sample.alg: # -------------------------------------------------------- # # Sample: what is the effect of doc size on indexing time? # # There are two parts in this test: # - PopulateShort adds 2N documents of length L # - PopulateLong adds N documents of length 2L # Which one would be faster? # The comparison is done twice. # # -------------------------------------------------------- # ------------------------------------------------------------------------------------- # multi val params are iterated by NewRound's, added to reports, start with column name. merge.factor=mrg:10:20 max.buffered=buf 💯 1000 compound=true analyzer=org.apache.lucene.analysis.standard.StandardAnalyzer directory=FSDirectory doc.stored=true doc.tokenized=true doc.term.vector=false doc.add.log.step=500 docs.dir=reuters-out doc.maker=org.apache.lucene.benchmark.byTask.feeds.SimpleDocMaker query.maker=org.apache.lucene.benchmark.byTask.feeds.SimpleQueryMaker # task at this depth or less would print when they start task.max.depth.log=2 log.queries=false # ------------------------------------------------------------------------------------- { { \"PopulateShort\" CreateIndex { AddDoc(4000) > : 20000 Optimize CloseIndex > ResetSystemErase { \"PopulateLong\" CreateIndex { AddDoc(8000) > : 10000 Optimize CloseIndex > ResetSystemErase NewRound } : 2 RepSumByName RepSelectByPref Populate The command line for running this sample: ant run-task -Dtask.alg=conf/sample.alg The output report from running this test contains the following: Operation round mrg buf runCnt recsPerRun rec/s elapsedSec avgUsedMem avgTotalMem PopulateShort 0 10 100 1 20003 119.6 167.26 12,959,120 14,241,792 PopulateLong - - 0 10 100 - - 1 - - 10003 - - - 74.3 - - 134.57 - 17,085,208 - 20,635,648 PopulateShort 1 20 1000 1 20003 143.5 139.39 63,982,040 94,756,864 PopulateLong - - 1 20 1000 - - 1 - - 10003 - - - 77.0 - - 129.92 - 87,309,608 - 100,831,232 Results record counting clarified Two columns in the results table indicate records counts: records-per-run and records-per-second. What does it mean? Almost every task gets 1 in this count just for being executed. Task sequences aggregate the counts of their child tasks, plus their own count of 1. So, a task sequence containing 5 other task sequences, each running a single other task 10 times, would have a count of 1 + 5 * (1 + 10) = 56. The traverse and retrieve tasks \"count\" more: a traverse task would add 1 for each traversed result (hit), and a retrieve task would additionally add 1 for each retrieved doc. So, regular Search would count 1, SearchTrav that traverses 10 hits would count 11, and a SearchTravRet task that retrieves (and traverses) 10, would count 21. Confusing? this might help: always examine the elapsedSec column, and always compare \"apples to apples\", .i.e. it is interesting to check how the rec/s changed for the same task (or sequence) between two different runs, but it is not very useful to know how the rec/s differs between Search and SearchTrav tasks. For the latter, elapsedSec would bring more insight. Classes Benchmark Run the benchmark algorithm. PerfRunData Data maintained by a performance test run."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.PerfRunData.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.PerfRunData.html",
    "title": "Class PerfRunData | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PerfRunData Data maintained by a performance test run. Inheritance System.Object PerfRunData Namespace : Lucene.Net.Benchmarks.ByTask Assembly : Lucene.Net.Benchmark.dll Syntax public class PerfRunData : IDisposable Remarks Data includes: Configuration. Directory, Writer, Reader. Taxonomy Directory, Writer, Reader. DocMaker, FacetSource and a few instances of QueryMaker. Named AnalysisFactories. Analyzer. Statistics data which updated during the run. Config properties: work.dir<path to root of docs and index dirs| Default: work> analyzer<class name for analyzer| Default: StandardAnalyzer> doc.maker<class name for doc-maker| Default: DocMaker> facet.source<class name for facet-source| Default: RandomFacetSource> query.maker<class name for query-maker| Default: SimpleQueryMaker> log.queries<whether queries should be printed| Default: false> directory<type of directory to use for the index| Default: RAMDirectory> taxonomy.directory<type of directory for taxonomy index| Default: RAMDirectory> Constructors | Improve this Doc View Source PerfRunData(Config) Declaration public PerfRunData(Config config) Parameters Type Name Description Config config Properties | Improve this Doc View Source Analyzer Gets or sets the analyzer. Declaration public virtual Analyzer Analyzer { get; set; } Property Value Type Description Analyzer | Improve this Doc View Source AnalyzerFactories Declaration public virtual IDictionary<string, AnalyzerFactory> AnalyzerFactories { get; } Property Value Type Description IDictionary < System.String , AnalyzerFactory > | Improve this Doc View Source Config Gets the config. Declaration public virtual Config Config { get; } Property Value Type Description Config | Improve this Doc View Source ContentSource Gets the ContentSource . Declaration public virtual ContentSource ContentSource { get; } Property Value Type Description ContentSource | Improve this Doc View Source Directory Gets or sets the directory. Declaration public virtual Directory Directory { get; set; } Property Value Type Description Directory | Improve this Doc View Source DocMaker Returns the DocMaker . Declaration public virtual DocMaker DocMaker { get; } Property Value Type Description DocMaker | Improve this Doc View Source FacetSource Gets the FacetSource . Declaration public virtual FacetSource FacetSource { get; } Property Value Type Description FacetSource | Improve this Doc View Source IndexWriter Gets or sets the indexWriter. Declaration public virtual IndexWriter IndexWriter { get; set; } Property Value Type Description IndexWriter | Improve this Doc View Source Locale Gets or sets the culture. Declaration public virtual CultureInfo Locale { get; set; } Property Value Type Description CultureInfo | Improve this Doc View Source Points Gets the points. Declaration public virtual Points Points { get; } Property Value Type Description Points | Improve this Doc View Source StartTimeMillis Gets start time in milliseconds. Declaration public virtual long StartTimeMillis { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TaxonomyDir Gets the taxonomy directory. Declaration public virtual Directory TaxonomyDir { get; } Property Value Type Description Directory | Improve this Doc View Source TaxonomyWriter Gets or sets the taxonomy writer. Declaration public virtual ITaxonomyWriter TaxonomyWriter { get; set; } Property Value Type Description ITaxonomyWriter Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetIndexReader() Returns the indexReader. NOTE: this returns a reference. You must call IndexReader.DecRef() when you're done. Declaration public virtual DirectoryReader GetIndexReader() Returns Type Description DirectoryReader | Improve this Doc View Source GetIndexSearcher() Returns the indexSearcher. NOTE: this returns a reference to the underlying IndexReader. You must call IndexReader.DecRef() when you're done. Declaration public virtual IndexSearcher GetIndexSearcher() Returns Type Description IndexSearcher | Improve this Doc View Source GetPerfObject(String) Returns an object that was previously set by SetPerfObject(String, Object) . Declaration public virtual object GetPerfObject(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetQueryMaker(ReadTask) Returns the queryMaker by read task type (class). Declaration public virtual IQueryMaker GetQueryMaker(ReadTask readTask) Parameters Type Name Description ReadTask readTask Returns Type Description IQueryMaker | Improve this Doc View Source GetTaxonomyReader() Returns the taxonomyReader. NOTE: this returns a reference. You must call TaxonomyReader.DecRef() when you're done. Declaration public virtual TaxonomyReader GetTaxonomyReader() Returns Type Description TaxonomyReader | Improve this Doc View Source Reinit(Boolean) Declaration public virtual void Reinit(bool eraseIndex) Parameters Type Name Description System.Boolean eraseIndex | Improve this Doc View Source ResetInputs() Declaration public virtual void ResetInputs() | Improve this Doc View Source SetIndexReader(DirectoryReader) Set the index reader. Takes ownership of that index reader, that is, internally performs indexReader.incRef() (If caller no longer needs that reader it should decRef()/close() it after calling this method, otherwise, the reader will remain open). Declaration public virtual void SetIndexReader(DirectoryReader indexReader) Parameters Type Name Description DirectoryReader indexReader The indexReader to set. | Improve this Doc View Source SetPerfObject(String, Object) Sets an object that is required by PerfTask s, keyed by the given key . If the object implements , it will be disposed by Dispose() . Declaration public virtual void SetPerfObject(string key, object obj) Parameters Type Name Description System.String key System.Object obj | Improve this Doc View Source SetStartTimeMillis() Declaration public virtual long SetStartTimeMillis() Returns Type Description System.Int64 | Improve this Doc View Source SetTaxonomyReader(TaxonomyReader) Set the taxonomy reader. Takes ownership of that taxonomy reader, that is, internally performs taxoReader.IncRef() (If caller no longer needs that reader it should DecRef()/Dispose() it after calling this method, otherwise, the reader will remain open). Declaration public virtual void SetTaxonomyReader(TaxonomyReader taxoReader) Parameters Type Name Description TaxonomyReader taxoReader The taxonomy reader to set."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Programmatic.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Programmatic.html",
    "title": "Namespace Lucene.Net.Benchmarks.ByTask.Programmatic | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.ByTask.Programmatic <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Sample performance test written programmatically - no algorithm file is needed here. Classes Sample Sample performance test written programmatically - no algorithm file is needed here."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Programmatic.Sample.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Programmatic.Sample.html",
    "title": "Class Sample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Sample Sample performance test written programmatically - no algorithm file is needed here. Inheritance System.Object Sample Namespace : Lucene.Net.Benchmarks.ByTask.Programmatic Assembly : Lucene.Net.Benchmark.dll Syntax public class Sample : object Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.html",
    "title": "Namespace Lucene.Net.Benchmarks.ByTask.Stats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.ByTask.Stats <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Statistics maintained when running benchmark tasks. Classes Points Test run data points collected as the test proceeds. Report Textual report of current statistics. TaskStats Statistics for a task run. The same task can run more than once, but, if that task records statistics, each run would create its own TaskStats."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.Points.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.Points.html",
    "title": "Class Points | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Points Test run data points collected as the test proceeds. Inheritance System.Object Points Namespace : Lucene.Net.Benchmarks.ByTask.Stats Assembly : Lucene.Net.Benchmark.dll Syntax public class Points : object Constructors | Improve this Doc View Source Points(Config) Create a Points statistics object. Declaration public Points(Config config) Parameters Type Name Description Config config Properties | Improve this Doc View Source CurrentStats Declaration public virtual TaskStats CurrentStats { get; } Property Value Type Description TaskStats | Improve this Doc View Source TaskStats Gets the current task stats. The actual task stats are returned, so caller should not modify this task stats. Declaration public virtual IList<TaskStats> TaskStats { get; } Property Value Type Description IList < TaskStats > Methods | Improve this Doc View Source ClearData() Clear all data, prepare for more tests. Declaration public virtual void ClearData() | Improve this Doc View Source MarkTaskEnd(TaskStats, Int32) mark the end of a task Declaration public virtual void MarkTaskEnd(TaskStats stats, int count) Parameters Type Name Description TaskStats stats System.Int32 count | Improve this Doc View Source MarkTaskStart(PerfTask, Int32) Mark that a task is starting. Create a task stats for it and store it as a point. Declaration public virtual TaskStats MarkTaskStart(PerfTask task, int round) Parameters Type Name Description PerfTask task The starting task. System.Int32 round The new task stats created for the starting task. Returns Type Description TaskStats"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.Report.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.Report.html",
    "title": "Class Report | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Report Textual report of current statistics. Inheritance System.Object Report Namespace : Lucene.Net.Benchmarks.ByTask.Stats Assembly : Lucene.Net.Benchmark.dll Syntax public class Report : object Constructors | Improve this Doc View Source Report(String, Int32, Int32, Int32) Declaration public Report(string text, int size, int reported, int outOf) Parameters Type Name Description System.String text System.Int32 size System.Int32 reported System.Int32 outOf Properties | Improve this Doc View Source Count Gets number of lines in the report. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source OutOf Gets total number of stats points when this report was created. Declaration public virtual int OutOf { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Reported Gets number of stats points represented in this report. Declaration public virtual int Reported { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Gets the report text. Declaration public virtual string Text { get; } Property Value Type Description System.String"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.TaskStats.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Stats.TaskStats.html",
    "title": "Class TaskStats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaskStats Statistics for a task run. The same task can run more than once, but, if that task records statistics, each run would create its own TaskStats. Inheritance System.Object TaskStats Namespace : Lucene.Net.Benchmarks.ByTask.Stats Assembly : Lucene.Net.Benchmark.dll Syntax public class TaskStats : object Properties | Improve this Doc View Source Count Gets the count. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source CountsByTimeStepMSec Declaration public virtual long CountsByTimeStepMSec { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Elapsed Gets elapsed time. Declaration public virtual long Elapsed { get; } Property Value Type Description System.Int64 | Improve this Doc View Source MaxTotMem Gets the maxTotMem. Declaration public virtual long MaxTotMem { get; } Property Value Type Description System.Int64 | Improve this Doc View Source MaxUsedMem Gets the maxUsedMem. Declaration public virtual long MaxUsedMem { get; } Property Value Type Description System.Int64 | Improve this Doc View Source NumParallelTasks Gets the numParallelTasks. Declaration public virtual int NumParallelTasks { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumRuns Gets the numRuns. Declaration public virtual int NumRuns { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Round Gets the round number. Declaration public virtual int Round { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Task Gets the task. Declaration public virtual PerfTask Task { get; } Property Value Type Description PerfTask | Improve this Doc View Source TaskRunNum Gets the taskRunNum. Declaration public virtual int TaskRunNum { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(TaskStats) Add data from another stat, for aggregation. Declaration public virtual void Add(TaskStats stat2) Parameters Type Name Description TaskStats stat2 The added stat data. | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source GetCountsByTime() Declaration public virtual int[] GetCountsByTime() Returns Type Description System.Int32 [] | Improve this Doc View Source SetCountsByTime(Int32[], Int64) Declaration public virtual void SetCountsByTime(int[] counts, long msecStep) Parameters Type Name Description System.Int32 [] counts System.Int64 msecStep | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AddDocTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AddDocTask.html",
    "title": "Class AddDocTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AddDocTask Add a document, optionally of a certain size. Other side effects: none. Takes optional param: document size. Inheritance System.Object PerfTask AddDocTask AddFacetedDocTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class AddDocTask : PerfTask Constructors | Improve this Doc View Source AddDocTask(PerfRunData) Declaration public AddDocTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_doc Volatile data passed between Setup() , DoLogic() , TearDown() . The doc is created at Setup() and added at DoLogic() . Declaration protected Document m_doc Field Value Type Description Document Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams See Also SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetLogMessage(Int32) Declaration protected override string GetLogMessage(int recsCount) Parameters Type Name Description System.Int32 recsCount Returns Type Description System.String Overrides PerfTask.GetLogMessage(Int32) | Improve this Doc View Source SetParams(String) Set the params (docSize only). Declaration public override void SetParams(string params) Parameters Type Name Description System.String params docSize, or 0 for no limit. Overrides PerfTask.SetParams(String) | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides PerfTask.Setup() | Improve this Doc View Source TearDown() Declaration public override void TearDown() Overrides PerfTask.TearDown()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AddFacetedDocTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AddFacetedDocTask.html",
    "title": "Class AddFacetedDocTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AddFacetedDocTask Add a faceted document. Inheritance System.Object PerfTask AddDocTask AddFacetedDocTask Inherited Members AddDocTask.m_doc AddDocTask.TearDown() AddDocTask.SetParams(String) AddDocTask.SupportsParams PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class AddFacetedDocTask : AddDocTask Remarks Config properties: with.facets <tells whether to actually add any facets to the document| Default: true> This config property allows to easily compare the performance of adding docs with and without facets. Note that facets are created even when this is false , just that they are not added to the document (nor to the taxonomy). See AddDocTask for general document parameters and configuration. Makes use of the FacetSource in effect - see PerfRunData for facet source settings. Constructors | Improve this Doc View Source AddFacetedDocTask(PerfRunData) Declaration public AddFacetedDocTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides AddDocTask.DoLogic() | Improve this Doc View Source GetLogMessage(Int32) Declaration protected override string GetLogMessage(int recsCount) Parameters Type Name Description System.Int32 recsCount Returns Type Description System.String Overrides AddDocTask.GetLogMessage(Int32) | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides AddDocTask.Setup()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AddIndexesTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AddIndexesTask.html",
    "title": "Class AddIndexesTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AddIndexesTask Adds an input index to an existing index, using AddIndexes(Directory[]) or AddIndexes(IndexReader[]) . The location of the input index is specified by the parameter ADDINDEXES_INPUT_DIR and is assumed to be a directory on the file system. Takes optional parameter Lucene.Net.Benchmarks.ByTask.Tasks.AddIndexesTask.useAddIndexesDir which specifies which AddIndexes variant to use (defaults to true , to use AddIndexes(Directory) ). Inheritance System.Object PerfTask AddIndexesTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class AddIndexesTask : PerfTask Constructors | Improve this Doc View Source AddIndexesTask(PerfRunData) Declaration public AddIndexesTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source ADDINDEXES_INPUT_DIR Declaration public static readonly string ADDINDEXES_INPUT_DIR Field Value Type Description System.String Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Set the params (useAddIndexesDir only) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params useAddIndexesDir=true for using AddIndexes(Directory[]) or false for using AddIndexes(IndexReader[]) . Defaults to true . Overrides PerfTask.SetParams(String) | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides PerfTask.Setup() | Improve this Doc View Source TearDown() Declaration public override void TearDown() Overrides PerfTask.TearDown()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AnalyzerFactoryTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.AnalyzerFactoryTask.html",
    "title": "Class AnalyzerFactoryTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnalyzerFactoryTask Analyzer factory construction task. The name given to the constructed factory may be given to NewAnalyzerTask , which will call Create() . Inheritance System.Object PerfTask AnalyzerFactoryTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class AnalyzerFactoryTask : PerfTask Remarks Params are in the form argname:argvalue or argname:\"argvalue\" or argname:'argvalue'; use backslashes to escape '\"' or \"'\" inside a quoted value when it's used as the enclosing quotation mark, Specify params in a comma separated list of the following, in order: Required : name: analyzer-factory-name Optional: positionIncrementGap: int value (default: 0) Optional: offsetGap: int value (default: 1) zero or more CharFilterFactory's, followed by exactly one TokenizerFactory, followed by zero or more TokenFilterFactory's Each component analysis factory map specify luceneMatchVersion (defaults to LUCENE_CURRENT ) and any of the args understood by the specified *Factory class, in the above-describe param format. Example: -AnalyzerFactory(name:'strip html, fold to ascii, whitespace tokenize, max 10k tokens', positionIncrementGap:100, HTMLStripCharFilter, MappingCharFilter(mapping:'mapping-FoldToASCII.txt'), WhitespaceTokenizer(luceneMatchVersion:LUCENE_43), TokenLimitFilter(maxTokenCount:10000, consumeAllTokens:false)) [...] -NewAnalyzer('strip html, fold to ascii, whitespace tokenize, max 10k tokens') AnalyzerFactory will direct analysis component factories to look for resources under the directory specified in the \"work.dir\" property. Constructors | Improve this Doc View Source AnalyzerFactoryTask(PerfRunData) Declaration public AnalyzerFactoryTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams See Also SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetLineNumber(StreamTokenizer) Returns the current line in the algorithm file Declaration public virtual int GetLineNumber(StreamTokenizer stok) Parameters Type Name Description StreamTokenizer stok Returns Type Description System.Int32 | Improve this Doc View Source LookupAnalysisClass(String, Type) This method looks up a class with its fully qualified name (FQN), or a short-name class-simplename, or with a package suffix, assuming \"Lucene.Net.Analysis.\" as the namespace prefix (e.g. \"standard.ClassicTokenizerFactory\" -> \"Lucene.Net.Analysis.Standard.ClassicTokenizerFactory\"). Declaration public virtual Type LookupAnalysisClass(string className, Type expectedType) Parameters Type Name Description System.String className The namespace qualified name or the short name of the class. Type expectedType The superclass className is expected to extend. Returns Type Description Type The loaded type. Remarks If className contains a period, the class is first looked up as-is, assuming that it is an FQN. If this fails, lookup is retried after prepending the Lucene analysis package prefix to the class name. If className does not contain a period, the analysis SPI *Factory.LookupClass() methods are used to find the class. | Improve this Doc View Source SetParams(String) Sets the params. Analysis component factory names may optionally include the \"Factory\" suffix. Declaration public override void SetParams(string params) Parameters Type Name Description System.String params analysis pipeline specification: name, (optional) positionIncrementGap, (optional) offsetGap, 0+ CharFilterFactory's, 1 TokenizerFactory, and 0+ TokenFilterFactory's Overrides PerfTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.BenchmarkHighlighter.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.BenchmarkHighlighter.html",
    "title": "Class BenchmarkHighlighter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BenchmarkHighlighter Abstract class for benchmarking highlighting performance Inheritance System.Object BenchmarkHighlighter Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class BenchmarkHighlighter : object Methods | Improve this Doc View Source DoHighlight(IndexReader, Int32, String, Document, Analyzer, String) Declaration public abstract int DoHighlight(IndexReader reader, int doc, string field, Document document, Analyzer analyzer, string text) Parameters Type Name Description IndexReader reader System.Int32 doc System.String field Document document Analyzer analyzer System.String text Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ClearStatsTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ClearStatsTask.html",
    "title": "Class ClearStatsTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClearStatsTask Clear statistics data. Other side effects: None. Inheritance System.Object PerfTask ClearStatsTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ClearStatsTask : PerfTask Constructors | Improve this Doc View Source ClearStatsTask(PerfRunData) Declaration public ClearStatsTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source ShouldNotRecordStats Declaration protected override bool ShouldNotRecordStats { get; } Property Value Type Description System.Boolean Overrides PerfTask.ShouldNotRecordStats See Also ShouldNotRecordStats Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseIndexTask.html",
    "title": "Class CloseIndexTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CloseIndexTask Close index writer. Other side effects: index writer object in perfRunData is nullified. Takes optional param \"doWait\": if false, then close(false) is called. Inheritance System.Object PerfTask CloseIndexTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CloseIndexTask : PerfTask Constructors | Improve this Doc View Source CloseIndexTask(PerfRunData) Declaration public CloseIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseReaderTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseReaderTask.html",
    "title": "Class CloseReaderTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CloseReaderTask Close index reader. Other side effects: index reader in perfRunData is nullified. This would cause read related tasks to reopen their own reader. Inheritance System.Object PerfTask CloseReaderTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CloseReaderTask : PerfTask Constructors | Improve this Doc View Source CloseReaderTask(PerfRunData) Declaration public CloseReaderTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseTaxonomyIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseTaxonomyIndexTask.html",
    "title": "Class CloseTaxonomyIndexTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CloseTaxonomyIndexTask Close taxonomy index. Other side effects: taxonomy writer object in perfRunData is nullified. Inheritance System.Object PerfTask CloseTaxonomyIndexTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CloseTaxonomyIndexTask : PerfTask Constructors | Improve this Doc View Source CloseTaxonomyIndexTask(PerfRunData) Declaration public CloseTaxonomyIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseTaxonomyReaderTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CloseTaxonomyReaderTask.html",
    "title": "Class CloseTaxonomyReaderTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CloseTaxonomyReaderTask Close taxonomy reader. Other side effects: taxonomy reader in perfRunData is nullified. Inheritance System.Object PerfTask CloseTaxonomyReaderTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CloseTaxonomyReaderTask : PerfTask Constructors | Improve this Doc View Source CloseTaxonomyReaderTask(PerfRunData) Declaration public CloseTaxonomyReaderTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CommitIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CommitIndexTask.html",
    "title": "Class CommitIndexTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CommitIndexTask Commits the IndexWriter . Inheritance System.Object PerfTask CommitIndexTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CommitIndexTask : PerfTask Constructors | Improve this Doc View Source CommitIndexTask(PerfRunData) Declaration public CommitIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CommitTaxonomyIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CommitTaxonomyIndexTask.html",
    "title": "Class CommitTaxonomyIndexTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CommitTaxonomyIndexTask Commits the Taxonomy Index. Inheritance System.Object PerfTask CommitTaxonomyIndexTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CommitTaxonomyIndexTask : PerfTask Constructors | Improve this Doc View Source CommitTaxonomyIndexTask(PerfRunData) Declaration public CommitTaxonomyIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ConsumeContentSourceTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ConsumeContentSourceTask.html",
    "title": "Class ConsumeContentSourceTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConsumeContentSourceTask Consumes a ContentSource . Inheritance System.Object PerfTask ConsumeContentSourceTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ConsumeContentSourceTask : PerfTask Constructors | Improve this Doc View Source ConsumeContentSourceTask(PerfRunData) Declaration public ConsumeContentSourceTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetLogMessage(Int32) Declaration protected override string GetLogMessage(int recsCount) Parameters Type Name Description System.Int32 recsCount Returns Type Description System.String Overrides PerfTask.GetLogMessage(Int32)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CreateIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CreateIndexTask.html",
    "title": "Class CreateIndexTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CreateIndexTask Creates an index. Inheritance System.Object PerfTask CreateIndexTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CreateIndexTask : PerfTask Remarks Other side effects: index writer object in perfRunData is set. Relevant properties: merge.factor(default 10) max.buffered(default no flush) compound(default true) ram.flush.mb[default 0] merge.policy(default Lucene.Net.Index.LogByteSizeMergePolicy, Lucene.Net) merge.scheduler(default Lucene.Net.Index.ConcurrentMergeScheduler, Lucene.Net) concurrent.merge.scheduler.max.thread.count(defaults per ConcurrentMergeScheduler) concurrent.merge.scheduler.max.merge.count(defaults per ConcurrentMergeScheduler) default.codec This task also supports a \"writer.info.stream\" property with the following values: SystemOutSets SetInfoStream(InfoStream) to Out . SystemErrSets SetInfoStream(InfoStream) to Error <file_name> Attempts to create a file given that name and sets SetInfoStream(InfoStream) to that file. If this denotes an invalid file name, or some error occurs, an exception will be thrown. Constructors | Improve this Doc View Source CreateIndexTask(PerfRunData) Declaration public CreateIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source ConfigureWriter(Config, PerfRunData, OpenMode, IndexCommit) Declaration public static IndexWriter ConfigureWriter(Config config, PerfRunData runData, OpenMode mode, IndexCommit commit) Parameters Type Name Description Config config PerfRunData runData OpenMode mode IndexCommit commit Returns Type Description IndexWriter | Improve this Doc View Source CreateWriterConfig(Config, PerfRunData, OpenMode, IndexCommit) Declaration public static IndexWriterConfig CreateWriterConfig(Config config, PerfRunData runData, OpenMode mode, IndexCommit commit) Parameters Type Name Description Config config PerfRunData runData OpenMode mode IndexCommit commit Returns Type Description IndexWriterConfig | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetIndexDeletionPolicy(Config) Declaration public static IndexDeletionPolicy GetIndexDeletionPolicy(Config config) Parameters Type Name Description Config config Returns Type Description IndexDeletionPolicy"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CreateTaxonomyIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.CreateTaxonomyIndexTask.html",
    "title": "Class CreateTaxonomyIndexTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CreateTaxonomyIndexTask Create a taxonomy index. Other side effects: taxonomy writer object in perfRunData is set. Inheritance System.Object PerfTask CreateTaxonomyIndexTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class CreateTaxonomyIndexTask : PerfTask Constructors | Improve this Doc View Source CreateTaxonomyIndexTask(PerfRunData) Declaration public CreateTaxonomyIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ForceMergeTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ForceMergeTask.html",
    "title": "Class ForceMergeTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ForceMergeTask Runs forceMerge on the index. Other side effects: none. Inheritance System.Object PerfTask ForceMergeTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ForceMergeTask : PerfTask Constructors | Improve this Doc View Source ForceMergeTask(PerfRunData) Declaration public ForceMergeTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.html",
    "title": "Namespace Lucene.Net.Benchmarks.ByTask.Tasks | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.ByTask.Tasks <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Extendable benchmark tasks. Classes AddDocTask Add a document, optionally of a certain size. Other side effects: none. Takes optional param: document size. AddFacetedDocTask Add a faceted document. AddIndexesTask Adds an input index to an existing index, using AddIndexes(Directory[]) or AddIndexes(IndexReader[]) . The location of the input index is specified by the parameter ADDINDEXES_INPUT_DIR and is assumed to be a directory on the file system. Takes optional parameter Lucene.Net.Benchmarks.ByTask.Tasks.AddIndexesTask.useAddIndexesDir which specifies which AddIndexes variant to use (defaults to true , to use AddIndexes(Directory) ). AnalyzerFactoryTask Analyzer factory construction task. The name given to the constructed factory may be given to NewAnalyzerTask , which will call Create() . BenchmarkHighlighter Abstract class for benchmarking highlighting performance ClearStatsTask Clear statistics data. Other side effects: None. CloseIndexTask Close index writer. Other side effects: index writer object in perfRunData is nullified. Takes optional param \"doWait\": if false, then close(false) is called. CloseReaderTask Close index reader. Other side effects: index reader in perfRunData is nullified. This would cause read related tasks to reopen their own reader. CloseTaxonomyIndexTask Close taxonomy index. Other side effects: taxonomy writer object in perfRunData is nullified. CloseTaxonomyReaderTask Close taxonomy reader. Other side effects: taxonomy reader in perfRunData is nullified. CommitIndexTask Commits the IndexWriter . CommitTaxonomyIndexTask Commits the Taxonomy Index. ConsumeContentSourceTask Consumes a ContentSource . CreateIndexTask Creates an index. CreateTaxonomyIndexTask Create a taxonomy index. Other side effects: taxonomy writer object in perfRunData is set. ForceMergeTask Runs forceMerge on the index. Other side effects: none. ImplementationExtensions LUCENENET specific extension methods for the NewCollationAnalyzerTask.Implementation enumeration. NearRealtimeReaderTask Spawns a BG thread that periodically (defaults to 3.0 seconds, but accepts param in seconds) wakes up and asks IndexWriter for a near real-time reader. Then runs a single query (body: 1) sorted by docdate, and prints time to reopen and time to run the search. @lucene.experimental It's also not generally usable, eg you cannot change which query is executed. NewAnalyzerTask Create a new Analyzer and set it it in the getRunData() for use by all future tasks. NewCollationAnalyzerTask NewLocaleTask Set a for use in benchmarking. NewRoundTask Increment the counter for properties maintained by Round Number. Other side effects: if there are props by round number, log value change. OpenIndexTask Open an index writer. OpenReaderTask Open an index reader. Other side effects: index reader object in perfRunData is set. Optional params commitUserData eg. OpenReader(false,commit1) OpenTaxonomyIndexTask Open a taxonomy index. Other side effects: taxonomy writer object in perfRunData is set. OpenTaxonomyReaderTask Open a taxonomy index reader. Other side effects: taxonomy reader object in perfRunData is set. PerfTask An abstract task to be tested for performance. PrintReaderTask Opens a reader and prints basic statistics. ReadTask Read index (abstract) task. Sub classes implement WithSearch , WithWarm , WithTraverse and WithRetrieve ReadTokensTask Simple task to test performance of tokenizers. It just creates a token stream for each field of the document and read all tokens out of that stream. ReopenReaderTask Reopens IndexReader and closes old IndexReader . RepAllTask Report all statistics with no aggregations. Other side effects: None. ReportTask Report (abstract) task - all report tasks extend this task. RepSelectByPrefTask Report by-name-prefix statistics with no aggregations. Other side effects: None. RepSumByNameRoundTask Report all statistics grouped/aggregated by name and round. Other side effects: None. RepSumByNameTask Report all statistics aggregated by name. Other side effects: None. RepSumByPrefRoundTask Report all prefix matching statistics grouped/aggregated by name and round. Other side effects: None. RepSumByPrefTask Report by-name-prefix statistics aggregated by name. Other side effects: None. ResetInputsTask Reset inputs so that the test run would behave, input wise, as if it just started. This affects e.g. the generation of docs and queries. ResetSystemEraseTask Reset all index and input data and call gc, erase index and dir, does NOT clear statistics. This contains ResetInputs. Other side effects: writers/readers nullified, deleted, closed. Index is erased. Directory is erased. ResetSystemSoftTask Reset all index and input data and call gc, does NOT erase index/dir, does NOT clear statistics. This contains ResetInputs. Other side effects: writers/readers nullified, closed. Index is NOT erased. Directory is NOT erased. RollbackIndexTask Rollback the index writer. SearchTask Search task. Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. SearchTravRetHighlightTask Search and Traverse and Retrieve docs task. Highlight the fields in the retrieved documents. SearchTravRetLoadFieldSelectorTask Search and Traverse and Retrieve docs task using a FieldVisitor loading only the requested fields. SearchTravRetTask Search and Traverse and Retrieve docs task. SearchTravRetVectorHighlightTask Search and Traverse and Retrieve docs task. Highlight the fields in the retrieved documents by using FastVectorHighlighter . SearchTravTask Search and Traverse task. SearchWithCollectorTask Does search w/ a custom collector SearchWithSortTask Does sort search on specified field. SetPropTask Set a performance test configuration property. A property may have a single value, or a sequence of values, separated by \":\". If a sequence of values is specified, each time a new round starts, the next (cyclic) value is taken. Other side effects: none. Takes mandatory param: \"name,value\" pair. TaskSequence Sequence of parallel or sequential tasks. UpdateDocTask Update a document, using , optionally with of a certain size. Other side effects: none. Takes optional param: document size. WaitForMergesTask Waits for merges to finish. WaitTask Simply waits for the specified (via the parameter) amount of time. For example Wait(30s) waits for 30 seconds. This is useful with background tasks to control how long the tasks run. You can specify h, m, or s (hours, minutes, seconds) as the trailing time unit. No unit is interpreted as seconds. WarmTask Warm reader task: retrieve all reader documents. WriteEnwikiLineDocTask A WriteLineDocTask which for Wikipedia input, will write category pages to another file, while remaining pages will be written to the original file. The categories file is derived from the original file, by adding a prefix \"categories-\". WriteLineDocTask A task which writes documents, one line per document. Each line is in the following format: title <TAB> date <TAB> body. The output of this task can be consumed by LineDocSource and is intended to save the IO overhead of opening a file per document to be indexed. Enums NewCollationAnalyzerTask.Implementation Different Collation implementations: currently limited to what is provided in ICU. See Comparison of implementations"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ImplementationExtensions.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ImplementationExtensions.html",
    "title": "Class ImplementationExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ImplementationExtensions LUCENENET specific extension methods for the NewCollationAnalyzerTask.Implementation enumeration. Inheritance System.Object ImplementationExtensions Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public static class ImplementationExtensions : object Methods | Improve this Doc View Source GetAnalyzerType(NewCollationAnalyzerTask.Implementation) Declaration public static Type GetAnalyzerType(this NewCollationAnalyzerTask.Implementation impl) Parameters Type Name Description NewCollationAnalyzerTask.Implementation impl Returns Type Description Type | Improve this Doc View Source GetCollatorType(NewCollationAnalyzerTask.Implementation) Declaration public static Type GetCollatorType(this NewCollationAnalyzerTask.Implementation impl) Parameters Type Name Description NewCollationAnalyzerTask.Implementation impl Returns Type Description Type"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NearRealtimeReaderTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NearRealtimeReaderTask.html",
    "title": "Class NearRealtimeReaderTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NearRealtimeReaderTask Spawns a BG thread that periodically (defaults to 3.0 seconds, but accepts param in seconds) wakes up and asks IndexWriter for a near real-time reader. Then runs a single query (body: 1) sorted by docdate, and prints time to reopen and time to run the search. @lucene.experimental It's also not generally usable, eg you cannot change which query is executed. Inheritance System.Object PerfTask NearRealtimeReaderTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class NearRealtimeReaderTask : PerfTask Constructors | Improve this Doc View Source NearRealtimeReaderTask(PerfRunData) Declaration public NearRealtimeReaderTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PerfTask.Dispose(Boolean) | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewAnalyzerTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewAnalyzerTask.html",
    "title": "Class NewAnalyzerTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NewAnalyzerTask Create a new Analyzer and set it it in the getRunData() for use by all future tasks. Inheritance System.Object PerfTask NewAnalyzerTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class NewAnalyzerTask : PerfTask Constructors | Improve this Doc View Source NewAnalyzerTask(PerfRunData) Declaration public NewAnalyzerTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams See Also SupportsParams Methods | Improve this Doc View Source CreateAnalyzer(String) Declaration public static Analyzer CreateAnalyzer(string className) Parameters Type Name Description System.String className Returns Type Description Analyzer | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Set the params (analyzerName only), Comma-separate list of Analyzer class names. If the Analyzer lives in Lucene.Net.Analysis, the name can be shortened by dropping the Lucene.Net.Analysis part of the Fully Qualified Class Name. Analyzer names may also refer to previously defined AnalyzerFactory's. Example Declaration: {\"NewAnalyzer\" NewAnalyzer(WhitespaceAnalyzer, SimpleAnalyzer, StopAnalyzer, Standard.StandardAnalyzer) > Example AnalyzerFactory usage: -AnalyzerFactory(name:'whitespace tokenized',WhitespaceTokenizer) -NewAnalyzer('whitespace tokenized') Declaration public override void SetParams(string params) Parameters Type Name Description System.String params analyzerClassName, or empty for the StandardAnalyzer Overrides PerfTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewCollationAnalyzerTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewCollationAnalyzerTask.html",
    "title": "Class NewCollationAnalyzerTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NewCollationAnalyzerTask Inheritance System.Object PerfTask NewCollationAnalyzerTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class NewCollationAnalyzerTask : PerfTask Constructors | Improve this Doc View Source NewCollationAnalyzerTask(PerfRunData) Declaration public NewCollationAnalyzerTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewCollationAnalyzerTask.Implementation.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewCollationAnalyzerTask.Implementation.html",
    "title": "Enum NewCollationAnalyzerTask.Implementation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum NewCollationAnalyzerTask.Implementation Different Collation implementations: currently limited to what is provided in ICU. See Comparison of implementations Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public enum Implementation : int Fields Name Description ICU Extension Methods ImplementationExtensions.GetAnalyzerType() ImplementationExtensions.GetCollatorType()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewLocaleTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewLocaleTask.html",
    "title": "Class NewLocaleTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NewLocaleTask Set a for use in benchmarking. Inheritance System.Object PerfTask NewLocaleTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class NewLocaleTask : PerfTask Remarks Locales can be specified in the following ways: de : Language \"de\" en,US : Language \"en\", country \"US\" nb-NO : Language \"nb\" (Bokmål), country \"NO\" ROOT : The Constructors | Improve this Doc View Source NewLocaleTask(PerfRunData) Create a new and set it it in the RunData for use by all future tasks. Declaration public NewLocaleTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewRoundTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.NewRoundTask.html",
    "title": "Class NewRoundTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NewRoundTask Increment the counter for properties maintained by Round Number. Other side effects: if there are props by round number, log value change. Inheritance System.Object PerfTask NewRoundTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class NewRoundTask : PerfTask Constructors | Improve this Doc View Source NewRoundTask(PerfRunData) Declaration public NewRoundTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source ShouldNotRecordStats Declaration protected override bool ShouldNotRecordStats { get; } Property Value Type Description System.Boolean Overrides PerfTask.ShouldNotRecordStats See Also ShouldNotRecordStats Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenIndexTask.html",
    "title": "Class OpenIndexTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenIndexTask Open an index writer. Inheritance System.Object PerfTask OpenIndexTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class OpenIndexTask : PerfTask Remarks Other side effects: index writer object in perfRunData is set. Relevant properties: merge.factor max.buffered max.field.length ram.flush.mb[default 0] Accepts a param specifying the commit point as previously saved with CommitIndexTask . If you specify this, it rolls the index back to that commit on opening the IndexWriter . Constructors | Improve this Doc View Source OpenIndexTask(PerfRunData) Declaration public OpenIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source DEFAULT_MAX_BUFFERED Declaration public static readonly int DEFAULT_MAX_BUFFERED Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MERGE_PFACTOR Declaration public static readonly int DEFAULT_MERGE_PFACTOR Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_RAM_FLUSH_MB Declaration public static readonly double DEFAULT_RAM_FLUSH_MB Field Value Type Description System.Double Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenReaderTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenReaderTask.html",
    "title": "Class OpenReaderTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenReaderTask Open an index reader. Other side effects: index reader object in perfRunData is set. Optional params commitUserData eg. OpenReader(false,commit1) Inheritance System.Object PerfTask OpenReaderTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class OpenReaderTask : PerfTask Constructors | Improve this Doc View Source OpenReaderTask(PerfRunData) Declaration public OpenReaderTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source USER_DATA Declaration public static readonly string USER_DATA Field Value Type Description System.String Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source FindIndexCommit(Directory, String) Declaration public static IndexCommit FindIndexCommit(Directory dir, string userData) Parameters Type Name Description Directory dir System.String userData Returns Type Description IndexCommit | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenTaxonomyIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenTaxonomyIndexTask.html",
    "title": "Class OpenTaxonomyIndexTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenTaxonomyIndexTask Open a taxonomy index. Other side effects: taxonomy writer object in perfRunData is set. Inheritance System.Object PerfTask OpenTaxonomyIndexTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class OpenTaxonomyIndexTask : PerfTask Constructors | Improve this Doc View Source OpenTaxonomyIndexTask(PerfRunData) Declaration public OpenTaxonomyIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenTaxonomyReaderTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.OpenTaxonomyReaderTask.html",
    "title": "Class OpenTaxonomyReaderTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenTaxonomyReaderTask Open a taxonomy index reader. Other side effects: taxonomy reader object in perfRunData is set. Inheritance System.Object PerfTask OpenTaxonomyReaderTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class OpenTaxonomyReaderTask : PerfTask Constructors | Improve this Doc View Source OpenTaxonomyReaderTask(PerfRunData) Declaration public OpenTaxonomyReaderTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.PerfTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.PerfTask.html",
    "title": "Class PerfTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PerfTask An abstract task to be tested for performance. Inheritance System.Object PerfTask AddDocTask AddIndexesTask AnalyzerFactoryTask ClearStatsTask CloseIndexTask CloseReaderTask CloseTaxonomyIndexTask CloseTaxonomyReaderTask CommitIndexTask CommitTaxonomyIndexTask ConsumeContentSourceTask CreateIndexTask CreateTaxonomyIndexTask ForceMergeTask NearRealtimeReaderTask NewAnalyzerTask NewCollationAnalyzerTask NewLocaleTask NewRoundTask OpenIndexTask OpenReaderTask OpenTaxonomyIndexTask OpenTaxonomyReaderTask PrintReaderTask ReadTask ReadTokensTask ReopenReaderTask ReportTask ResetInputsTask RollbackIndexTask SetPropTask TaskSequence UpdateDocTask WaitForMergesTask WaitTask WriteLineDocTask Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class PerfTask : IDisposable Remarks Every performance task extends this class, and provides its own DoLogic() method, which performs the actual task. Tasks performing some work that should be measured for the task, can override Setup() and/or TearDown() and place that work there. Relevant properties: task.max.depth.log Also supports the following logging attributes: log.step specifies how often to log messages about the current running task. Default is 1000 DoLogic() invocations. Set to -1 to disable logging. log.step.[class Task Name] specifies the same as 'log.step', only for a particular task name. For example, log.step.AddDoc will be applied only for AddDocTask . It's a way to control per task logging settings. If you want to omit logging for any other task, include log.step=-1. The syntax is \"log.step.\" together with the Task's 'short' name (i.e., without the 'Task' part). Constructors | Improve this Doc View Source PerfTask(PerfRunData) Declaration public PerfTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_logStep Declaration protected int m_logStep Field Value Type Description System.Int32 | Improve this Doc View Source m_params Declaration protected string m_params Field Value Type Description System.String | Improve this Doc View Source NEW_LINE Declaration protected static readonly string NEW_LINE Field Value Type Description System.String Properties | Improve this Doc View Source AlgLineNum Declaration public virtual int AlgLineNum { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source BackgroundDeltaPriority Declaration public virtual int BackgroundDeltaPriority { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Depth Gets or Sets the depth. Declaration public virtual int Depth { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source DisableCounting Return true if counting is disabled for this task. Declaration public virtual bool DisableCounting { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Params Gets the Params. Declaration public virtual string Params { get; } Property Value Type Description System.String | Improve this Doc View Source RunData Gets the run data. Declaration public virtual PerfRunData RunData { get; } Property Value Type Description PerfRunData | Improve this Doc View Source RunInBackground Declaration public virtual bool RunInBackground { get; } Property Value Type Description System.Boolean | Improve this Doc View Source ShouldNeverLogAtStart Tasks that should never log at start can override this. Returns true if this task should never log when it start. Declaration protected virtual bool ShouldNeverLogAtStart { get; } Property Value Type Description System.Boolean | Improve this Doc View Source ShouldNotRecordStats Tasks that should not record statistics can override this. Returns true if this task should never record its statistics. Declaration protected virtual bool ShouldNotRecordStats { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Stop Declaration protected bool Stop { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source SupportsParams Sub classes that support parameters must override this method to return true if this task supports command line params. Declaration public virtual bool SupportsParams { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source DoLogic() Perform the task once (ignoring repetitions specification). Return number of work items done by this task. For indexing that can be number of docs added. For warming that can be number of scanned items, etc. Declaration public abstract int DoLogic() Returns Type Description System.Int32 Number of work items done by this task. | Improve this Doc View Source GetLogMessage(Int32) Declaration protected virtual string GetLogMessage(int recsCount) Parameters Type Name Description System.Int32 recsCount Returns Type Description System.String | Improve this Doc View Source GetName() Returns the name. Declaration public virtual string GetName() Returns Type Description System.String | Improve this Doc View Source RunAndMaybeStats(Boolean) Run the task, record statistics. Declaration public int RunAndMaybeStats(bool reportStats) Parameters Type Name Description System.Boolean reportStats Returns Type Description System.Int32 Number of work items done by this task. | Improve this Doc View Source SetName(String) Sets the name. Declaration protected virtual void SetName(string name) Parameters Type Name Description System.String name The name to set. | Improve this Doc View Source SetParams(String) Set the params of this task. Declaration public virtual void SetParams(string params) Parameters Type Name Description System.String params | Improve this Doc View Source SetRunInBackground(Int32) Declaration public virtual void SetRunInBackground(int deltaPri) Parameters Type Name Description System.Int32 deltaPri | Improve this Doc View Source Setup() Task setup work that should not be measured for that specific task. By default it does nothing, but tasks can implement this, moving work from DoLogic() to this method. Only the work done in DoLogic() is measured for this task. Notice that higher level (sequence) tasks containing this task would then measure larger time than the sum of their contained tasks. Declaration public virtual void Setup() | Improve this Doc View Source StopNow() Declaration public virtual void StopNow() | Improve this Doc View Source TearDown() Task teardown work that should not be measured for that specific task. By default it does nothing, but tasks can implement this, moving work from DoLogic() to this method. Only the work done in DoLogic() is measured for this task. Notice that higher level (sequence) tasks containing this task would then measure larger time than the sum of their contained tasks. Declaration public virtual void TearDown() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.PrintReaderTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.PrintReaderTask.html",
    "title": "Class PrintReaderTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrintReaderTask Opens a reader and prints basic statistics. Inheritance System.Object PerfTask PrintReaderTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class PrintReaderTask : PerfTask Constructors | Improve this Doc View Source PrintReaderTask(PerfRunData) Declaration public PrintReaderTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReadTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReadTask.html",
    "title": "Class ReadTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReadTask Read index (abstract) task. Sub classes implement WithSearch , WithWarm , WithTraverse and WithRetrieve Inheritance System.Object PerfTask ReadTask SearchTask SearchTravTask SearchWithSortTask WarmTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class ReadTask : PerfTask Remarks Note: All ReadTasks reuse the reader if it is already open. Otherwise a reader is opened at start and closed at the end. The search.num.hits config parameter sets the top number of hits to collect during searching. If print.hits.field is set, then each hit is printed along with the value of that field. Other side effects: none. Constructors | Improve this Doc View Source ReadTask(PerfRunData) Declaration public ReadTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source NumHits Specify the number of hits to retrieve. Tasks should override this if they want to restrict the number of hits that are collected during searching. Must be greater than 0. Returns 10 by default, or search.num.hits config if set. Declaration public virtual int NumHits { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumToHighlight The number of documents to highlight. 0 means no docs will be highlighted. Declaration public virtual int NumToHighlight { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Sort Declaration public virtual Sort Sort { get; } Property Value Type Description Sort | Improve this Doc View Source TraversalSize Specify the number of hits to traverse. Tasks should override this if they want to restrict the number of hits that are traversed when WithTraverse is true . Must be greater than 0. Read task calculates the traversal as: Math.Min(hits.Length, TraversalSize) Declaration public virtual int TraversalSize { get; } Property Value Type Description System.Int32 Remarks Unless overridden, the return value is . | Improve this Doc View Source WithCollector Declaration public virtual bool WithCollector { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WithMaxScore Whether maxScores should be computed (only useful with field sort) Declaration public virtual bool WithMaxScore { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WithRetrieve Return true if, with search & results traversing, docs should be retrieved. Declaration public abstract bool WithRetrieve { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WithScore Whether scores should be computed (only useful with field sort) Declaration public virtual bool WithScore { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WithSearch Return true if search should be performed. Declaration public abstract bool WithSearch { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WithTraverse Return true if, with search, results should be traversed. Declaration public abstract bool WithTraverse { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WithWarm Return true if warming should be performed. Declaration public abstract bool WithWarm { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source CreateCollector() Declaration protected virtual ICollector CreateCollector() Returns Type Description ICollector | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetBenchmarkHighlighter(Query) Return an appropriate highlighter to be used with highlighting tasks. Declaration protected virtual BenchmarkHighlighter GetBenchmarkHighlighter(Query q) Parameters Type Name Description Query q Returns Type Description BenchmarkHighlighter | Improve this Doc View Source GetFieldsToHighlight(Document) Define the fields to highlight. Base implementation returns all fields. Declaration protected virtual ICollection<string> GetFieldsToHighlight(Document document) Parameters Type Name Description Document document The Document . Returns Type Description ICollection < System.String > An ICollection{string} of Field names. | Improve this Doc View Source GetQueryMaker() Return query maker used for this task. Declaration public abstract IQueryMaker GetQueryMaker() Returns Type Description IQueryMaker | Improve this Doc View Source RetrieveDoc(IndexReader, Int32) Declaration protected virtual Document RetrieveDoc(IndexReader ir, int id) Parameters Type Name Description IndexReader ir System.Int32 id Returns Type Description Document | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides PerfTask.Setup()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReadTokensTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReadTokensTask.html",
    "title": "Class ReadTokensTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReadTokensTask Simple task to test performance of tokenizers. It just creates a token stream for each field of the document and read all tokens out of that stream. Inheritance System.Object PerfTask ReadTokensTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ReadTokensTask : PerfTask Constructors | Improve this Doc View Source ReadTokensTask(PerfRunData) Declaration public ReadTokensTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetLogMessage(Int32) Declaration protected override string GetLogMessage(int recsCount) Parameters Type Name Description System.Int32 recsCount Returns Type Description System.String Overrides PerfTask.GetLogMessage(Int32) | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides PerfTask.Setup() | Improve this Doc View Source TearDown() Declaration public override void TearDown() Overrides PerfTask.TearDown()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReopenReaderTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReopenReaderTask.html",
    "title": "Class ReopenReaderTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReopenReaderTask Reopens IndexReader and closes old IndexReader . Inheritance System.Object PerfTask ReopenReaderTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ReopenReaderTask : PerfTask Constructors | Improve this Doc View Source ReopenReaderTask(PerfRunData) Declaration public ReopenReaderTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepAllTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepAllTask.html",
    "title": "Class RepAllTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RepAllTask Report all statistics with no aggregations. Other side effects: None. Inheritance System.Object PerfTask ReportTask RepAllTask Inherited Members ReportTask.ShouldNeverLogAtStart ReportTask.ShouldNotRecordStats ReportTask.newline ReportTask.OP ReportTask.ROUND ReportTask.RUNCNT ReportTask.RECCNT ReportTask.RECSEC ReportTask.ELAPSED ReportTask.USEDMEM ReportTask.TOTMEM ReportTask.COLS ReportTask.TableTitle(String) ReportTask.LongestOp(IEnumerable<TaskStats>) ReportTask.TaskReportLine(String, TaskStats) ReportTask.GenPartialReport(Int32, LinkedHashMap<String, TaskStats>, Int32) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class RepAllTask : ReportTask Constructors | Improve this Doc View Source RepAllTask(PerfRunData) Declaration public RepAllTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source ReportAll(IList<TaskStats>) Report detailed statistics as a string. Declaration protected virtual Report ReportAll(IList<TaskStats> taskStats) Parameters Type Name Description IList < TaskStats > taskStats Returns Type Description Report The report."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReportTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ReportTask.html",
    "title": "Class ReportTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReportTask Report (abstract) task - all report tasks extend this task. Inheritance System.Object PerfTask ReportTask RepAllTask RepSumByNameRoundTask RepSumByNameTask RepSumByPrefTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.DoLogic() PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class ReportTask : PerfTask Constructors | Improve this Doc View Source ReportTask(PerfRunData) Declaration public ReportTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source COLS Declaration protected static readonly string[] COLS Field Value Type Description System.String [] | Improve this Doc View Source ELAPSED Declaration protected static readonly string ELAPSED Field Value Type Description System.String | Improve this Doc View Source newline From here start the code used to generate the reports. Subclasses would use this part to generate reports. Declaration protected static readonly string newline Field Value Type Description System.String | Improve this Doc View Source OP Get a textual summary of the benchmark results, average from all test runs. Declaration protected static readonly string OP Field Value Type Description System.String | Improve this Doc View Source RECCNT Declaration protected static readonly string RECCNT Field Value Type Description System.String | Improve this Doc View Source RECSEC Declaration protected static readonly string RECSEC Field Value Type Description System.String | Improve this Doc View Source ROUND Declaration protected static readonly string ROUND Field Value Type Description System.String | Improve this Doc View Source RUNCNT Declaration protected static readonly string RUNCNT Field Value Type Description System.String | Improve this Doc View Source TOTMEM Declaration protected static readonly string TOTMEM Field Value Type Description System.String | Improve this Doc View Source USEDMEM Declaration protected static readonly string USEDMEM Field Value Type Description System.String Properties | Improve this Doc View Source ShouldNeverLogAtStart Declaration protected override bool ShouldNeverLogAtStart { get; } Property Value Type Description System.Boolean Overrides PerfTask.ShouldNeverLogAtStart See Also ShouldNeverLogAtStart | Improve this Doc View Source ShouldNotRecordStats Declaration protected override bool ShouldNotRecordStats { get; } Property Value Type Description System.Boolean Overrides PerfTask.ShouldNotRecordStats See Also ShouldNotRecordStats Methods | Improve this Doc View Source GenPartialReport(Int32, LinkedHashMap<String, TaskStats>, Int32) Declaration protected virtual Report GenPartialReport(int reported, LinkedHashMap<string, TaskStats> partOfTasks, int totalSize) Parameters Type Name Description System.Int32 reported LinkedHashMap < System.String , TaskStats > partOfTasks System.Int32 totalSize Returns Type Description Report | Improve this Doc View Source LongestOp(IEnumerable<TaskStats>) Find the longest op name out of completed tasks. Declaration protected virtual string LongestOp(IEnumerable<TaskStats> taskStats) Parameters Type Name Description IEnumerable < TaskStats > taskStats Completed tasks to be considered. Returns Type Description System.String The longest op name out of completed tasks. | Improve this Doc View Source TableTitle(String) Compute a title line for a report table. Declaration protected virtual string TableTitle(string longestOp) Parameters Type Name Description System.String longestOp Size of longest op name in the table. Returns Type Description System.String The table title line. | Improve this Doc View Source TaskReportLine(String, TaskStats) Compute a report line for the given task stat. Declaration protected virtual string TaskReportLine(string longestOp, TaskStats stat) Parameters Type Name Description System.String longestOp Size of longest op name in the table. TaskStats stat Task stat to be printed. Returns Type Description System.String The report line."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSelectByPrefTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSelectByPrefTask.html",
    "title": "Class RepSelectByPrefTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RepSelectByPrefTask Report by-name-prefix statistics with no aggregations. Other side effects: None. Inheritance System.Object PerfTask ReportTask RepSumByPrefTask RepSelectByPrefTask Inherited Members RepSumByPrefTask.m_prefix RepSumByPrefTask.ReportSumByPrefix(IList<TaskStats>) RepSumByPrefTask.SetPrefix(String) RepSumByPrefTask.ToString() ReportTask.ShouldNeverLogAtStart ReportTask.ShouldNotRecordStats ReportTask.newline ReportTask.OP ReportTask.ROUND ReportTask.RUNCNT ReportTask.RECCNT ReportTask.RECSEC ReportTask.ELAPSED ReportTask.USEDMEM ReportTask.TOTMEM ReportTask.COLS ReportTask.TableTitle(String) ReportTask.LongestOp(IEnumerable<TaskStats>) ReportTask.TaskReportLine(String, TaskStats) ReportTask.GenPartialReport(Int32, LinkedHashMap<String, TaskStats>, Int32) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.GetLogMessage(Int32) PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class RepSelectByPrefTask : RepSumByPrefTask Constructors | Improve this Doc View Source RepSelectByPrefTask(PerfRunData) Declaration public RepSelectByPrefTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides RepSumByPrefTask.DoLogic() | Improve this Doc View Source ReportSelectByPrefix(IList<TaskStats>) Declaration protected virtual Report ReportSelectByPrefix(IList<TaskStats> taskStats) Parameters Type Name Description IList < TaskStats > taskStats Returns Type Description Report"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByNameRoundTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByNameRoundTask.html",
    "title": "Class RepSumByNameRoundTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RepSumByNameRoundTask Report all statistics grouped/aggregated by name and round. Other side effects: None. Inheritance System.Object PerfTask ReportTask RepSumByNameRoundTask Inherited Members ReportTask.ShouldNeverLogAtStart ReportTask.ShouldNotRecordStats ReportTask.newline ReportTask.OP ReportTask.ROUND ReportTask.RUNCNT ReportTask.RECCNT ReportTask.RECSEC ReportTask.ELAPSED ReportTask.USEDMEM ReportTask.TOTMEM ReportTask.COLS ReportTask.TableTitle(String) ReportTask.LongestOp(IEnumerable<TaskStats>) ReportTask.TaskReportLine(String, TaskStats) ReportTask.GenPartialReport(Int32, LinkedHashMap<String, TaskStats>, Int32) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class RepSumByNameRoundTask : ReportTask Constructors | Improve this Doc View Source RepSumByNameRoundTask(PerfRunData) Declaration public RepSumByNameRoundTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source ReportSumByNameRound(IList<TaskStats>) Report statistics as a string, aggregate for tasks named the same, and from the same round. Declaration protected virtual Report ReportSumByNameRound(IList<TaskStats> taskStats) Parameters Type Name Description IList < TaskStats > taskStats Returns Type Description Report The report."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByNameTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByNameTask.html",
    "title": "Class RepSumByNameTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RepSumByNameTask Report all statistics aggregated by name. Other side effects: None. Inheritance System.Object PerfTask ReportTask RepSumByNameTask Inherited Members ReportTask.ShouldNeverLogAtStart ReportTask.ShouldNotRecordStats ReportTask.newline ReportTask.OP ReportTask.ROUND ReportTask.RUNCNT ReportTask.RECCNT ReportTask.RECSEC ReportTask.ELAPSED ReportTask.USEDMEM ReportTask.TOTMEM ReportTask.COLS ReportTask.TableTitle(String) ReportTask.LongestOp(IEnumerable<TaskStats>) ReportTask.TaskReportLine(String, TaskStats) ReportTask.GenPartialReport(Int32, LinkedHashMap<String, TaskStats>, Int32) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class RepSumByNameTask : ReportTask Constructors | Improve this Doc View Source RepSumByNameTask(PerfRunData) Declaration public RepSumByNameTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source ReportSumByName(IList<TaskStats>) Report statistics as a string, aggregate for tasks named the same. Declaration protected virtual Report ReportSumByName(IList<TaskStats> taskStats) Parameters Type Name Description IList < TaskStats > taskStats Returns Type Description Report The report."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByPrefRoundTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByPrefRoundTask.html",
    "title": "Class RepSumByPrefRoundTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RepSumByPrefRoundTask Report all prefix matching statistics grouped/aggregated by name and round. Other side effects: None. Inheritance System.Object PerfTask ReportTask RepSumByPrefTask RepSumByPrefRoundTask Inherited Members RepSumByPrefTask.m_prefix RepSumByPrefTask.ReportSumByPrefix(IList<TaskStats>) RepSumByPrefTask.SetPrefix(String) RepSumByPrefTask.ToString() ReportTask.ShouldNeverLogAtStart ReportTask.ShouldNotRecordStats ReportTask.newline ReportTask.OP ReportTask.ROUND ReportTask.RUNCNT ReportTask.RECCNT ReportTask.RECSEC ReportTask.ELAPSED ReportTask.USEDMEM ReportTask.TOTMEM ReportTask.COLS ReportTask.TableTitle(String) ReportTask.LongestOp(IEnumerable<TaskStats>) ReportTask.TaskReportLine(String, TaskStats) ReportTask.GenPartialReport(Int32, LinkedHashMap<String, TaskStats>, Int32) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.GetLogMessage(Int32) PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class RepSumByPrefRoundTask : RepSumByPrefTask Constructors | Improve this Doc View Source RepSumByPrefRoundTask(PerfRunData) Declaration public RepSumByPrefRoundTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides RepSumByPrefTask.DoLogic() | Improve this Doc View Source ReportSumByPrefixRound(IList<TaskStats>) Declaration protected virtual Report ReportSumByPrefixRound(IList<TaskStats> taskStats) Parameters Type Name Description IList < TaskStats > taskStats Returns Type Description Report"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByPrefTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RepSumByPrefTask.html",
    "title": "Class RepSumByPrefTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RepSumByPrefTask Report by-name-prefix statistics aggregated by name. Other side effects: None. Inheritance System.Object PerfTask ReportTask RepSumByPrefTask RepSelectByPrefTask RepSumByPrefRoundTask Inherited Members ReportTask.ShouldNeverLogAtStart ReportTask.ShouldNotRecordStats ReportTask.newline ReportTask.OP ReportTask.ROUND ReportTask.RUNCNT ReportTask.RECCNT ReportTask.RECSEC ReportTask.ELAPSED ReportTask.USEDMEM ReportTask.TOTMEM ReportTask.COLS ReportTask.TableTitle(String) ReportTask.LongestOp(IEnumerable<TaskStats>) ReportTask.TaskReportLine(String, TaskStats) ReportTask.GenPartialReport(Int32, LinkedHashMap<String, TaskStats>, Int32) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.GetLogMessage(Int32) PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class RepSumByPrefTask : ReportTask Constructors | Improve this Doc View Source RepSumByPrefTask(PerfRunData) Declaration public RepSumByPrefTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_prefix Declaration protected string m_prefix Field Value Type Description System.String Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source ReportSumByPrefix(IList<TaskStats>) Declaration protected virtual Report ReportSumByPrefix(IList<TaskStats> taskStats) Parameters Type Name Description IList < TaskStats > taskStats Returns Type Description Report | Improve this Doc View Source SetPrefix(String) Declaration public virtual void SetPrefix(string prefix) Parameters Type Name Description System.String prefix | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PerfTask.ToString() See Also ToString ()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ResetInputsTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ResetInputsTask.html",
    "title": "Class ResetInputsTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ResetInputsTask Reset inputs so that the test run would behave, input wise, as if it just started. This affects e.g. the generation of docs and queries. Inheritance System.Object PerfTask ResetInputsTask ResetSystemSoftTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ResetInputsTask : PerfTask Constructors | Improve this Doc View Source ResetInputsTask(PerfRunData) Declaration public ResetInputsTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source ShouldNotRecordStats Declaration protected override bool ShouldNotRecordStats { get; } Property Value Type Description System.Boolean Overrides PerfTask.ShouldNotRecordStats See Also ShouldNotRecordStats Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ResetSystemEraseTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ResetSystemEraseTask.html",
    "title": "Class ResetSystemEraseTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ResetSystemEraseTask Reset all index and input data and call gc, erase index and dir, does NOT clear statistics. This contains ResetInputs. Other side effects: writers/readers nullified, deleted, closed. Index is erased. Directory is erased. Inheritance System.Object PerfTask ResetInputsTask ResetSystemSoftTask ResetSystemEraseTask Inherited Members ResetInputsTask.ShouldNotRecordStats PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ResetSystemEraseTask : ResetSystemSoftTask Constructors | Improve this Doc View Source ResetSystemEraseTask(PerfRunData) Declaration public ResetSystemEraseTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides ResetSystemSoftTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ResetSystemSoftTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.ResetSystemSoftTask.html",
    "title": "Class ResetSystemSoftTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ResetSystemSoftTask Reset all index and input data and call gc, does NOT erase index/dir, does NOT clear statistics. This contains ResetInputs. Other side effects: writers/readers nullified, closed. Index is NOT erased. Directory is NOT erased. Inheritance System.Object PerfTask ResetInputsTask ResetSystemSoftTask ResetSystemEraseTask Inherited Members ResetInputsTask.ShouldNotRecordStats PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class ResetSystemSoftTask : ResetInputsTask Constructors | Improve this Doc View Source ResetSystemSoftTask(PerfRunData) Declaration public ResetSystemSoftTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides ResetInputsTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RollbackIndexTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.RollbackIndexTask.html",
    "title": "Class RollbackIndexTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RollbackIndexTask Rollback the index writer. Inheritance System.Object PerfTask RollbackIndexTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class RollbackIndexTask : PerfTask Constructors | Improve this Doc View Source RollbackIndexTask(PerfRunData) Declaration public RollbackIndexTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTask.html",
    "title": "Class SearchTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchTask Search task. Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. Inheritance System.Object PerfTask ReadTask SearchTask SearchWithCollectorTask Inherited Members ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithCollector ReadTask.WithScore ReadTask.WithMaxScore ReadTask.TraversalSize ReadTask.Setup() ReadTask.NumHits ReadTask.NumToHighlight ReadTask.GetBenchmarkHighlighter(Query) ReadTask.Sort ReadTask.GetFieldsToHighlight(Document) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchTask : ReadTask Constructors | Improve this Doc View Source SearchTask(PerfRunData) Declaration public SearchTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithRetrieve | Improve this Doc View Source WithSearch Declaration public override bool WithSearch { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithSearch | Improve this Doc View Source WithTraverse Declaration public override bool WithTraverse { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithTraverse | Improve this Doc View Source WithWarm Declaration public override bool WithWarm { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithWarm Methods | Improve this Doc View Source GetQueryMaker() Declaration public override IQueryMaker GetQueryMaker() Returns Type Description IQueryMaker Overrides ReadTask.GetQueryMaker()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetHighlightTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetHighlightTask.html",
    "title": "Class SearchTravRetHighlightTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchTravRetHighlightTask Search and Traverse and Retrieve docs task. Highlight the fields in the retrieved documents. Inheritance System.Object PerfTask ReadTask SearchTravTask SearchTravRetHighlightTask Inherited Members SearchTravTask.m_traversalSize SearchTravTask.WithSearch SearchTravTask.WithTraverse SearchTravTask.WithWarm SearchTravTask.GetQueryMaker() SearchTravTask.TraversalSize SearchTravTask.SupportsParams ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithCollector ReadTask.WithScore ReadTask.WithMaxScore ReadTask.NumHits ReadTask.Sort PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchTravRetHighlightTask : SearchTravTask Remarks Uses the SimpleHTMLFormatter for formatting. Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. Takes optional multivalued, comma separated param string as: size[<traversal size>],highlight[<int>],maxFrags[<int>],mergeContiguous[<boolean>],fields[name1;name2;...] traversal size The number of hits to traverse, otherwise all will be traversed. highlight The number of the hits to highlight. Will always be less than or equal to traversal size. Default is (i.e. hits.Length). maxFrags The maximum number of fragments to score by the highlighter. mergeContiguous true if contiguous fragments should be merged. fields The fields to highlight. If not specified all fields will be highlighted (or at least attempted). Example: \"SearchHlgtSameRdr\" SearchTravRetHighlight(size[10],highlight[10],mergeContiguous[true],maxFrags[3],fields[body]) > : 1000 Documents must be stored in order for this task to work. Additionally, term vector positions can be used as well. Other side effects: counts additional 1 (record) for each traversed hit, and 1 more for each retrieved (non null) document and 1 for each fragment returned. Constructors | Improve this Doc View Source SearchTravRetHighlightTask(PerfRunData) Declaration public SearchTravRetHighlightTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_highlighter Declaration protected Highlighter m_highlighter Field Value Type Description Highlighter | Improve this Doc View Source m_maxDocCharsToAnalyze Declaration protected int m_maxDocCharsToAnalyze Field Value Type Description System.Int32 | Improve this Doc View Source m_maxFrags Declaration protected int m_maxFrags Field Value Type Description System.Int32 | Improve this Doc View Source m_mergeContiguous Declaration protected bool m_mergeContiguous Field Value Type Description System.Boolean | Improve this Doc View Source m_numToHighlight Declaration protected int m_numToHighlight Field Value Type Description System.Int32 | Improve this Doc View Source m_paramFields Declaration protected ISet<string> m_paramFields Field Value Type Description ISet < System.String > Properties | Improve this Doc View Source NumToHighlight Declaration public override int NumToHighlight { get; } Property Value Type Description System.Int32 Overrides ReadTask.NumToHighlight | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides SearchTravTask.WithRetrieve Methods | Improve this Doc View Source GetBenchmarkHighlighter(Query) Declaration protected override BenchmarkHighlighter GetBenchmarkHighlighter(Query q) Parameters Type Name Description Query q Returns Type Description BenchmarkHighlighter Overrides ReadTask.GetBenchmarkHighlighter(Query) | Improve this Doc View Source GetFieldsToHighlight(Document) Declaration protected override ICollection<string> GetFieldsToHighlight(Document document) Parameters Type Name Description Document document Returns Type Description ICollection < System.String > Overrides ReadTask.GetFieldsToHighlight(Document) | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides SearchTravTask.SetParams(String) | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides ReadTask.Setup()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetLoadFieldSelectorTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetLoadFieldSelectorTask.html",
    "title": "Class SearchTravRetLoadFieldSelectorTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchTravRetLoadFieldSelectorTask Search and Traverse and Retrieve docs task using a FieldVisitor loading only the requested fields. Inheritance System.Object PerfTask ReadTask SearchTravTask SearchTravRetLoadFieldSelectorTask Inherited Members SearchTravTask.m_traversalSize SearchTravTask.WithSearch SearchTravTask.WithTraverse SearchTravTask.WithWarm SearchTravTask.GetQueryMaker() SearchTravTask.TraversalSize ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.WithCollector ReadTask.WithScore ReadTask.WithMaxScore ReadTask.Setup() ReadTask.NumHits ReadTask.NumToHighlight ReadTask.GetBenchmarkHighlighter(Query) ReadTask.Sort ReadTask.GetFieldsToHighlight(Document) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchTravRetLoadFieldSelectorTask : SearchTravTask Remarks Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. Takes optional param: comma separated list of Fields to load. Other side effects: counts additional 1 (record) for each traversed hit, and 1 more for each retrieved (non null) document. Constructors | Improve this Doc View Source SearchTravRetLoadFieldSelectorTask(PerfRunData) Declaration public SearchTravRetLoadFieldSelectorTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_fieldsToLoad Declaration protected ISet<string> m_fieldsToLoad Field Value Type Description ISet < System.String > Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides SearchTravTask.SupportsParams See Also SupportsParams | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides SearchTravTask.WithRetrieve Methods | Improve this Doc View Source RetrieveDoc(IndexReader, Int32) Declaration protected override Document RetrieveDoc(IndexReader ir, int id) Parameters Type Name Description IndexReader ir System.Int32 id Returns Type Description Document Overrides ReadTask.RetrieveDoc(IndexReader, Int32) | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides SearchTravTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetTask.html",
    "title": "Class SearchTravRetTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchTravRetTask Search and Traverse and Retrieve docs task. Inheritance System.Object PerfTask ReadTask SearchTravTask SearchTravRetTask Inherited Members SearchTravTask.m_traversalSize SearchTravTask.WithSearch SearchTravTask.WithTraverse SearchTravTask.WithWarm SearchTravTask.GetQueryMaker() SearchTravTask.TraversalSize SearchTravTask.SetParams(String) SearchTravTask.SupportsParams ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithCollector ReadTask.WithScore ReadTask.WithMaxScore ReadTask.Setup() ReadTask.NumHits ReadTask.NumToHighlight ReadTask.GetBenchmarkHighlighter(Query) ReadTask.Sort ReadTask.GetFieldsToHighlight(Document) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchTravRetTask : SearchTravTask Remarks Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. Takes optional param: traversal size (otherwise all results are traversed). Other side effects: counts additional 1 (record) for each traversed hit, and 1 more for each retrieved (non null) document. Constructors | Improve this Doc View Source SearchTravRetTask(PerfRunData) Declaration public SearchTravRetTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides SearchTravTask.WithRetrieve"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetVectorHighlightTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravRetVectorHighlightTask.html",
    "title": "Class SearchTravRetVectorHighlightTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchTravRetVectorHighlightTask Search and Traverse and Retrieve docs task. Highlight the fields in the retrieved documents by using FastVectorHighlighter . Inheritance System.Object PerfTask ReadTask SearchTravTask SearchTravRetVectorHighlightTask Inherited Members SearchTravTask.m_traversalSize SearchTravTask.WithSearch SearchTravTask.WithTraverse SearchTravTask.WithWarm SearchTravTask.GetQueryMaker() SearchTravTask.TraversalSize SearchTravTask.SupportsParams ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithCollector ReadTask.WithScore ReadTask.WithMaxScore ReadTask.NumHits ReadTask.Sort PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchTravRetVectorHighlightTask : SearchTravTask Remarks Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. Takes optional multivalued, comma separated param string as: size[<traversal size>],highlight[<int>],maxFrags[<int>],mergeContiguous[<boolean>],fields[name1;name2;...] traversal sizeThe number of hits to traverse, otherwise all will be traversed. highlightThe number of the hits to highlight. Will always be less than or equal to traversal size. Default is (i.e. hits.Length). maxFragsThe maximum number of fragments to score by the highlighter. fragSizeThe length of fragments. fieldsThe fields to highlight. If not specified all fields will be highlighted (or at least attempted). Example: \"SearchVecHlgtSameRdr\" SearchTravRetVectorHighlight(size[10],highlight[10],maxFrags[3],fields[body]) > : 1000 Fields must be stored and term vector offsets and positions in order must be true for this task to work. Other side effects: counts additional 1 (record) for each traversed hit, and 1 more for each retrieved (non null) document and 1 for each fragment returned. Constructors | Improve this Doc View Source SearchTravRetVectorHighlightTask(PerfRunData) Declaration public SearchTravRetVectorHighlightTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_fragSize Declaration protected int m_fragSize Field Value Type Description System.Int32 | Improve this Doc View Source m_highlighter Declaration protected FastVectorHighlighter m_highlighter Field Value Type Description FastVectorHighlighter | Improve this Doc View Source m_maxFrags Declaration protected int m_maxFrags Field Value Type Description System.Int32 | Improve this Doc View Source m_numToHighlight Declaration protected int m_numToHighlight Field Value Type Description System.Int32 | Improve this Doc View Source m_paramFields Declaration protected ISet<string> m_paramFields Field Value Type Description ISet < System.String > Properties | Improve this Doc View Source NumToHighlight Declaration public override int NumToHighlight { get; } Property Value Type Description System.Int32 Overrides ReadTask.NumToHighlight | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides SearchTravTask.WithRetrieve Methods | Improve this Doc View Source GetBenchmarkHighlighter(Query) Declaration protected override BenchmarkHighlighter GetBenchmarkHighlighter(Query q) Parameters Type Name Description Query q Returns Type Description BenchmarkHighlighter Overrides ReadTask.GetBenchmarkHighlighter(Query) | Improve this Doc View Source GetFieldsToHighlight(Document) Declaration protected override ICollection<string> GetFieldsToHighlight(Document document) Parameters Type Name Description Document document Returns Type Description ICollection < System.String > Overrides ReadTask.GetFieldsToHighlight(Document) | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides SearchTravTask.SetParams(String) | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides ReadTask.Setup()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchTravTask.html",
    "title": "Class SearchTravTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchTravTask Search and Traverse task. Inheritance System.Object PerfTask ReadTask SearchTravTask SearchTravRetHighlightTask SearchTravRetLoadFieldSelectorTask SearchTravRetTask SearchTravRetVectorHighlightTask Inherited Members ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithCollector ReadTask.WithScore ReadTask.WithMaxScore ReadTask.Setup() ReadTask.NumHits ReadTask.NumToHighlight ReadTask.GetBenchmarkHighlighter(Query) ReadTask.Sort ReadTask.GetFieldsToHighlight(Document) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchTravTask : ReadTask Remarks Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. Takes optional param: traversal size (otherwise all results are traversed). Other side effects: counts additional 1 (record) for each traversed hit. Constructors | Improve this Doc View Source SearchTravTask(PerfRunData) Declaration public SearchTravTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_traversalSize Declaration protected int m_traversalSize Field Value Type Description System.Int32 Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams See Also SupportsParams | Improve this Doc View Source TraversalSize Declaration public override int TraversalSize { get; } Property Value Type Description System.Int32 Overrides ReadTask.TraversalSize | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithRetrieve | Improve this Doc View Source WithSearch Declaration public override bool WithSearch { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithSearch | Improve this Doc View Source WithTraverse Declaration public override bool WithTraverse { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithTraverse | Improve this Doc View Source WithWarm Declaration public override bool WithWarm { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithWarm Methods | Improve this Doc View Source GetQueryMaker() Declaration public override IQueryMaker GetQueryMaker() Returns Type Description IQueryMaker Overrides ReadTask.GetQueryMaker() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchWithCollectorTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchWithCollectorTask.html",
    "title": "Class SearchWithCollectorTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchWithCollectorTask Does search w/ a custom collector Inheritance System.Object PerfTask ReadTask SearchTask SearchWithCollectorTask Inherited Members ReadTask.DoLogic() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithScore ReadTask.WithMaxScore ReadTask.TraversalSize ReadTask.NumHits ReadTask.NumToHighlight ReadTask.GetBenchmarkHighlighter(Query) ReadTask.Sort ReadTask.GetFieldsToHighlight(Document) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchWithCollectorTask : SearchTask Constructors | Improve this Doc View Source SearchWithCollectorTask(PerfRunData) Declaration public SearchWithCollectorTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source m_clnName Declaration protected string m_clnName Field Value Type Description System.String Properties | Improve this Doc View Source WithCollector Declaration public override bool WithCollector { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithCollector | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides SearchTask.WithRetrieve | Improve this Doc View Source WithSearch Declaration public override bool WithSearch { get; } Property Value Type Description System.Boolean Overrides SearchTask.WithSearch | Improve this Doc View Source WithTraverse Declaration public override bool WithTraverse { get; } Property Value Type Description System.Boolean Overrides SearchTask.WithTraverse | Improve this Doc View Source WithWarm Declaration public override bool WithWarm { get; } Property Value Type Description System.Boolean Overrides SearchTask.WithWarm Methods | Improve this Doc View Source CreateCollector() Declaration protected override ICollector CreateCollector() Returns Type Description ICollector Overrides ReadTask.CreateCollector() | Improve this Doc View Source GetQueryMaker() Declaration public override IQueryMaker GetQueryMaker() Returns Type Description IQueryMaker Overrides SearchTask.GetQueryMaker() | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides ReadTask.Setup()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchWithSortTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SearchWithSortTask.html",
    "title": "Class SearchWithSortTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchWithSortTask Does sort search on specified field. Inheritance System.Object PerfTask ReadTask SearchWithSortTask Inherited Members ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithCollector ReadTask.TraversalSize ReadTask.Setup() ReadTask.NumHits ReadTask.NumToHighlight ReadTask.GetBenchmarkHighlighter(Query) ReadTask.GetFieldsToHighlight(Document) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SearchWithSortTask : ReadTask Constructors | Improve this Doc View Source SearchWithSortTask(PerfRunData) Declaration public SearchWithSortTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source Sort Declaration public override Sort Sort { get; } Property Value Type Description Sort Overrides ReadTask.Sort | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams | Improve this Doc View Source WithMaxScore Declaration public override bool WithMaxScore { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithMaxScore | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithRetrieve | Improve this Doc View Source WithScore Declaration public override bool WithScore { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithScore | Improve this Doc View Source WithSearch Declaration public override bool WithSearch { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithSearch | Improve this Doc View Source WithTraverse Declaration public override bool WithTraverse { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithTraverse | Improve this Doc View Source WithWarm Declaration public override bool WithWarm { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithWarm Methods | Improve this Doc View Source GetQueryMaker() Declaration public override IQueryMaker GetQueryMaker() Returns Type Description IQueryMaker Overrides ReadTask.GetQueryMaker() | Improve this Doc View Source SetParams(String) SortFields: field:type,field:type[,noscore][,nomaxscore] If noscore is present, then we turn off score tracking in TopFieldCollector . If nomaxscore is present, then we turn off maxScore tracking in TopFieldCollector . name:string,page:int,subject:string Declaration public override void SetParams(string sortField) Parameters Type Name Description System.String sortField Overrides PerfTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SetPropTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.SetPropTask.html",
    "title": "Class SetPropTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SetPropTask Set a performance test configuration property. A property may have a single value, or a sequence of values, separated by \":\". If a sequence of values is specified, each time a new round starts, the next (cyclic) value is taken. Other side effects: none. Takes mandatory param: \"name,value\" pair. Inheritance System.Object PerfTask SetPropTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class SetPropTask : PerfTask Constructors | Improve this Doc View Source SetPropTask(PerfRunData) Declaration public SetPropTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams See Also SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Set the params (property name and value). Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Property name and value separated by ','. Overrides PerfTask.SetParams(String) See Also NewRoundTask"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.TaskSequence.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.TaskSequence.html",
    "title": "Class TaskSequence | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaskSequence Sequence of parallel or sequential tasks. Inheritance System.Object PerfTask TaskSequence Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.Dispose() PerfTask.RunAndMaybeStats(Boolean) PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class TaskSequence : PerfTask Constructors | Improve this Doc View Source TaskSequence(PerfRunData, String, TaskSequence, Boolean) Declaration public TaskSequence(PerfRunData runData, String name, TaskSequence parent, bool parallel) Parameters Type Name Description PerfRunData runData String name TaskSequence parent System.Boolean parallel Fields | Improve this Doc View Source REPEAT_EXHAUST Declaration public static int REPEAT_EXHAUST Field Value Type Description System.Int32 Properties | Improve this Doc View Source IsCollapsable Return true if can be collapsed in case it is outermost sequence. Declaration public virtual bool IsCollapsable { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsParallel Gets the parallel. Declaration public virtual bool IsParallel { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Parent Gets the parent. Declaration public virtual TaskSequence Parent { get; } Property Value Type Description TaskSequence | Improve this Doc View Source Repetitions Gets the repetitions. Declaration public virtual int Repetitions { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Tasks Gets the tasks. Declaration public virtual IList<PerfTask> Tasks { get; } Property Value Type Description IList < PerfTask > Methods | Improve this Doc View Source AddTask(PerfTask) Declaration public virtual void AddTask(PerfTask task) Parameters Type Name Description PerfTask task | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides PerfTask.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PerfTask.Dispose(Boolean) | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() See Also DoLogic () | Improve this Doc View Source GetName() Declaration public override string GetName() Returns Type Description System.String Overrides PerfTask.GetName() | Improve this Doc View Source GetRate() Returns the rate per minute: how many operations should be performed in a minute. If 0 this has no effect. Declaration public virtual int GetRate() Returns Type Description System.Int32 The rate per min: how many operations should be performed in a minute. | Improve this Doc View Source SetNoChildReport() Execute child tasks in a way that they do not report their time separately. Declaration public virtual void SetNoChildReport() | Improve this Doc View Source SetRate(Int32, Boolean) Declaration public virtual void SetRate(int rate, bool perMin) Parameters Type Name Description System.Int32 rate The rate to set. System.Boolean perMin | Improve this Doc View Source SetRepetitions(Int32) Sets the repetitions. Declaration public virtual void SetRepetitions(int repetitions) Parameters Type Name Description System.Int32 repetitions The repetitions to set. | Improve this Doc View Source SetRunTime(Double) Declaration public virtual void SetRunTime(double sec) Parameters Type Name Description System.Double sec | Improve this Doc View Source StopNow() Declaration public override void StopNow() Overrides PerfTask.StopNow() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PerfTask.ToString()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.UpdateDocTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.UpdateDocTask.html",
    "title": "Class UpdateDocTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UpdateDocTask Update a document, using , optionally with of a certain size. Other side effects: none. Takes optional param: document size. Inheritance System.Object PerfTask UpdateDocTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class UpdateDocTask : PerfTask Constructors | Improve this Doc View Source UpdateDocTask(PerfRunData) Declaration public UpdateDocTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams See Also SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetLogMessage(Int32) Declaration protected override string GetLogMessage(int recsCount) Parameters Type Name Description System.Int32 recsCount Returns Type Description System.String Overrides PerfTask.GetLogMessage(Int32) | Improve this Doc View Source SetParams(String) Set the params (docSize only) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params docSize, or 0 for no limit. Overrides PerfTask.SetParams(String) | Improve this Doc View Source Setup() Declaration public override void Setup() Overrides PerfTask.Setup() | Improve this Doc View Source TearDown() Declaration public override void TearDown() Overrides PerfTask.TearDown()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WaitForMergesTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WaitForMergesTask.html",
    "title": "Class WaitForMergesTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WaitForMergesTask Waits for merges to finish. Inheritance System.Object PerfTask WaitForMergesTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class WaitForMergesTask : PerfTask Constructors | Improve this Doc View Source WaitForMergesTask(PerfRunData) Declaration public WaitForMergesTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WaitTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WaitTask.html",
    "title": "Class WaitTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WaitTask Simply waits for the specified (via the parameter) amount of time. For example Wait(30s) waits for 30 seconds. This is useful with background tasks to control how long the tasks run. You can specify h, m, or s (hours, minutes, seconds) as the trailing time unit. No unit is interpreted as seconds. Inheritance System.Object PerfTask WaitTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class WaitTask : PerfTask Constructors | Improve this Doc View Source WaitTask(PerfRunData) Declaration public WaitTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source SetParams(String) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params Overrides PerfTask.SetParams(String)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WarmTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WarmTask.html",
    "title": "Class WarmTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WarmTask Warm reader task: retrieve all reader documents. Inheritance System.Object PerfTask ReadTask WarmTask Inherited Members ReadTask.DoLogic() ReadTask.CreateCollector() ReadTask.RetrieveDoc(IndexReader, Int32) ReadTask.WithCollector ReadTask.WithScore ReadTask.WithMaxScore ReadTask.TraversalSize ReadTask.Setup() ReadTask.NumHits ReadTask.NumToHighlight ReadTask.GetBenchmarkHighlighter(Query) ReadTask.Sort ReadTask.GetFieldsToHighlight(Document) PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.Dispose(Boolean) PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.GetLogMessage(Int32) PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.TearDown() PerfTask.SupportsParams PerfTask.SetParams(String) PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class WarmTask : ReadTask Remarks Note: This task reuses the reader if it is already open. Otherwise a reader is opened at start and closed at the end. Other side effects: counts additional 1 (record) for each retrieved (non null) document. Constructors | Improve this Doc View Source WarmTask(PerfRunData) Declaration public WarmTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Properties | Improve this Doc View Source WithRetrieve Declaration public override bool WithRetrieve { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithRetrieve | Improve this Doc View Source WithSearch Declaration public override bool WithSearch { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithSearch | Improve this Doc View Source WithTraverse Declaration public override bool WithTraverse { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithTraverse | Improve this Doc View Source WithWarm Declaration public override bool WithWarm { get; } Property Value Type Description System.Boolean Overrides ReadTask.WithWarm Methods | Improve this Doc View Source GetQueryMaker() Declaration public override IQueryMaker GetQueryMaker() Returns Type Description IQueryMaker Overrides ReadTask.GetQueryMaker()"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WriteEnwikiLineDocTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WriteEnwikiLineDocTask.html",
    "title": "Class WriteEnwikiLineDocTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WriteEnwikiLineDocTask A WriteLineDocTask which for Wikipedia input, will write category pages to another file, while remaining pages will be written to the original file. The categories file is derived from the original file, by adding a prefix \"categories-\". Inheritance System.Object PerfTask WriteLineDocTask WriteEnwikiLineDocTask Inherited Members WriteLineDocTask.FIELDS_HEADER_INDICATOR WriteLineDocTask.SEP WriteLineDocTask.DEFAULT_FIELDS WriteLineDocTask.DEFAULT_SUFFICIENT_FIELDS WriteLineDocTask.m_fname WriteLineDocTask.WriteHeader(TextWriter) WriteLineDocTask.GetLogMessage(Int32) WriteLineDocTask.DoLogic() WriteLineDocTask.SetParams(String) WriteLineDocTask.SupportsParams PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class WriteEnwikiLineDocTask : WriteLineDocTask Constructors | Improve this Doc View Source WriteEnwikiLineDocTask(PerfRunData) Declaration public WriteEnwikiLineDocTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Methods | Improve this Doc View Source CategoriesLineFile(FileInfo) Compose categories line file out of original line file Declaration public static FileInfo CategoriesLineFile(FileInfo f) Parameters Type Name Description FileInfo f Returns Type Description FileInfo | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides WriteLineDocTask.Dispose(Boolean) | Improve this Doc View Source LineFileOut(Document) Declaration protected override TextWriter LineFileOut(Document doc) Parameters Type Name Description Document doc Returns Type Description TextWriter Overrides WriteLineDocTask.LineFileOut(Document)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WriteLineDocTask.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Tasks.WriteLineDocTask.html",
    "title": "Class WriteLineDocTask | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WriteLineDocTask A task which writes documents, one line per document. Each line is in the following format: title <TAB> date <TAB> body. The output of this task can be consumed by LineDocSource and is intended to save the IO overhead of opening a file per document to be indexed. Inheritance System.Object PerfTask WriteLineDocTask WriteEnwikiLineDocTask Inherited Members PerfTask.m_logStep PerfTask.m_params PerfTask.NEW_LINE PerfTask.SetRunInBackground(Int32) PerfTask.RunInBackground PerfTask.BackgroundDeltaPriority PerfTask.Stop PerfTask.StopNow() PerfTask.Clone() PerfTask.Dispose() PerfTask.RunAndMaybeStats(Boolean) PerfTask.GetName() PerfTask.SetName(String) PerfTask.RunData PerfTask.Depth PerfTask.ToString() PerfTask.ShouldNeverLogAtStart PerfTask.ShouldNotRecordStats PerfTask.Setup() PerfTask.TearDown() PerfTask.Params PerfTask.DisableCounting PerfTask.AlgLineNum Namespace : Lucene.Net.Benchmarks.ByTask.Tasks Assembly : Lucene.Net.Benchmark.dll Syntax public class WriteLineDocTask : PerfTask Remarks The format of the output is set according to the output file extension. Compression is recommended when the output file is expected to be large. See info on file extensions in FileType . Supports the following parameters: line.file.outthe name of the file to write the output to. That parameter is mandatory. NOTE: the file is re-created. line.fieldswhich fields should be written in each line. (optional, default: DEFAULT_FIELDS ). sufficient.fields list of field names, separated by comma, which, if all of them are missing, the document will be skipped. For example, to require that at least one of f1,f2 is not empty, specify: \"f1,f2\" in this field. To specify that no field is required, i.e. that even empty docs should be emitted, specify \",\" (optional, default: DEFAULT_SUFFICIENT_FIELDS ). NOTE: this class is not thread-safe and if used by multiple threads the output is unspecified (as all will write to the same output file in a non-synchronized way). Constructors | Improve this Doc View Source WriteLineDocTask(PerfRunData) Declaration public WriteLineDocTask(PerfRunData runData) Parameters Type Name Description PerfRunData runData Fields | Improve this Doc View Source DEFAULT_FIELDS Fields to be written by default Declaration public static readonly string[] DEFAULT_FIELDS Field Value Type Description System.String [] | Improve this Doc View Source DEFAULT_SUFFICIENT_FIELDS Default fields which at least one of them is required to not skip the doc. Declaration public static readonly string DEFAULT_SUFFICIENT_FIELDS Field Value Type Description System.String | Improve this Doc View Source FIELDS_HEADER_INDICATOR Declaration public static readonly string FIELDS_HEADER_INDICATOR Field Value Type Description System.String | Improve this Doc View Source m_fname Declaration protected readonly string m_fname Field Value Type Description System.String | Improve this Doc View Source SEP Declaration public static readonly char SEP Field Value Type Description System.Char Properties | Improve this Doc View Source SupportsParams Declaration public override bool SupportsParams { get; } Property Value Type Description System.Boolean Overrides PerfTask.SupportsParams Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PerfTask.Dispose(Boolean) | Improve this Doc View Source DoLogic() Declaration public override int DoLogic() Returns Type Description System.Int32 Overrides PerfTask.DoLogic() | Improve this Doc View Source GetLogMessage(Int32) Declaration protected override string GetLogMessage(int recsCount) Parameters Type Name Description System.Int32 recsCount Returns Type Description System.String Overrides PerfTask.GetLogMessage(Int32) | Improve this Doc View Source LineFileOut(Document) Selects output line file by written doc. Default: original output line file. Declaration protected virtual TextWriter LineFileOut(Document doc) Parameters Type Name Description Document doc Returns Type Description TextWriter | Improve this Doc View Source SetParams(String) Set the params (docSize only) Declaration public override void SetParams(string params) Parameters Type Name Description System.String params docSize, or 0 for no limit. Overrides PerfTask.SetParams(String) | Improve this Doc View Source WriteHeader(TextWriter) Write header to the lines file - indicating how to read the file later. Declaration protected virtual void WriteHeader(TextWriter out) Parameters Type Name Description TextWriter out"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.Algorithm.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.Algorithm.html",
    "title": "Class Algorithm | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Algorithm Test algorithm, as read from file Inheritance System.Object Algorithm Namespace : Lucene.Net.Benchmarks.ByTask.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class Algorithm : object Constructors | Improve this Doc View Source Algorithm(PerfRunData) Read algorithm from file. Property examined: alt.tasks.packages == comma separated list of alternate Assembly names where tasks would be searched for, when not found in the default Assembly (that of PerfTask ). If the same task class appears in more than one Assembly, the Assembly indicated first in this list will be used. The Lucene.Net implementation differs from Lucene in that all referenced assemblies are also scanned for the type. However, alt.tasks.packages may be included for assemblies that are not referenced in your project. Declaration public Algorithm(PerfRunData runData) Parameters Type Name Description PerfRunData runData perf-run-data used at running the tasks. Methods | Improve this Doc View Source Execute() Execute this algorithm. Declaration public virtual void Execute() | Improve this Doc View Source ExtractTasks() Expert: for test purposes, return all tasks participating in this algorithm. Declaration public virtual IList<PerfTask> ExtractTasks() Returns Type Description IList < PerfTask > All tasks participating in this algorithm. | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.AnalyzerFactory.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.AnalyzerFactory.html",
    "title": "Class AnalyzerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnalyzerFactory A factory to create an analyzer. Inheritance System.Object AnalyzerFactory Namespace : Lucene.Net.Benchmarks.ByTask.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public sealed class AnalyzerFactory : object Constructors | Improve this Doc View Source AnalyzerFactory(IList<CharFilterFactory>, TokenizerFactory, IList<TokenFilterFactory>) Declaration public AnalyzerFactory(IList<CharFilterFactory> charFilterFactories, TokenizerFactory tokenizerFactory, IList<TokenFilterFactory> tokenFilterFactories) Parameters Type Name Description IList < CharFilterFactory > charFilterFactories TokenizerFactory tokenizerFactory IList < TokenFilterFactory > tokenFilterFactories Properties | Improve this Doc View Source Name Declaration public string Name { get; set; } Property Value Type Description System.String | Improve this Doc View Source OffsetGap Declaration public int? OffsetGap { get; set; } Property Value Type Description System.Nullable < System.Int32 > | Improve this Doc View Source PositionIncrementGap Declaration public int? PositionIncrementGap { get; set; } Property Value Type Description System.Nullable < System.Int32 > Methods | Improve this Doc View Source Create() Declaration public Analyzer Create() Returns Type Description Analyzer | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String See Also AnalyzerFactoryTask"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.Config.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.Config.html",
    "title": "Class Config | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Config Perf run configuration properties. Inheritance System.Object Config Namespace : Lucene.Net.Benchmarks.ByTask.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class Config : object Remarks Numeric property containing \":\", e.g. \"10 💯 5\" is interpreted as array of numeric values. It is extracted once, on first use, and maintain a round number to return the appropriate value. The config property \"work.dir\" tells where is the root of docs data dirs and indexes dirs. It is set to either of: value supplied for it in the alg file; otherwise, value of environment variable \"benchmark.work.dir\"; otherwise, \"work\". Constructors | Improve this Doc View Source Config(IDictionary<String, String>) Create config without algorithm - useful for a programmatic perf test. Declaration public Config(IDictionary<string, string> props) Parameters Type Name Description IDictionary < System.String , System.String > props Configuration properties. | Improve this Doc View Source Config(TextReader) Read both algorithm and config properties. Declaration public Config(TextReader algReader) Parameters Type Name Description TextReader algReader From where to read algorithm and config properties. Properties | Improve this Doc View Source AlgorithmText Gets the algorithmText. Declaration public virtual string AlgorithmText { get; } Property Value Type Description System.String | Improve this Doc View Source RoundNumber Gets the round number. Declaration public virtual int RoundNumber { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(String, Boolean) Return a boolean property. If the property contain \":\", e.g. \"true.true.false\", it is interpreted as array of booleans. It is extracted once, on first call to Get() it, and a by-round-value is returned. Declaration public virtual bool Get(string name, bool dflt) Parameters Type Name Description System.String name Name of property. System.Boolean dflt Default value. Returns Type Description System.Boolean A property. | Improve this Doc View Source Get(String, Double) Return a double property. If the property contain \":\", e.g. \"10 💯 5\", it is interpreted as array of doubles. It is extracted once, on first call to Get() it, and a by-round-value is returned. Declaration public virtual double Get(string name, double dflt) Parameters Type Name Description System.String name Name of property. System.Double dflt Default value. Returns Type Description System.Double A double property. | Improve this Doc View Source Get(String, Int32) Return an property. If the property contain \":\", e.g. \"10 💯 5\", it is interpreted as array of ints. It is extracted once, on first call to Get() it, and a by-round-value is returned. Declaration public virtual int Get(string name, int dflt) Parameters Type Name Description System.String name Name of property. System.Int32 dflt Default value. Returns Type Description System.Int32 An property. | Improve this Doc View Source Get(String, String) Return a string property. Declaration public virtual string Get(string name, string dflt) Parameters Type Name Description System.String name Name of property. System.String dflt Default value. Returns Type Description System.String A string property. | Improve this Doc View Source GetColsNamesForValsByRound() Gets names of params set by round, for reports title. Declaration public virtual string GetColsNamesForValsByRound() Returns Type Description System.String | Improve this Doc View Source GetColsValuesForValsByRound(Int32) Gets values of params set by round, for reports lines. Declaration public virtual string GetColsValuesForValsByRound(int roundNum) Parameters Type Name Description System.Int32 roundNum Returns Type Description System.String | Improve this Doc View Source NewRound() Increment the round number, for config values that are extracted by round number. Declaration public virtual int NewRound() Returns Type Description System.Int32 The new round number. | Improve this Doc View Source Set(String, String) Set a property. Note: once a multiple values property is set, it can no longer be modified. Declaration public virtual void Set(string name, string value) Parameters Type Name Description System.String name Name of property. System.String value Either single or multiple property value (multiple values are separated by \":\")"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.FileType.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.FileType.html",
    "title": "Enum FileType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum FileType File format type. Namespace : Lucene.Net.Benchmarks.ByTask.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public enum FileType : int Fields Name Description BZIP2 BZIP2 is automatically used for .bz2 and .bzip2 extensions. GZIP GZIP is automatically used for .gz and .gzip extensions. PLAIN Plain text is used for anything which is not GZIP or BZIP."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.FileUtils.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.FileUtils.html",
    "title": "Class FileUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FileUtils File utilities. Inheritance System.Object FileUtils Namespace : Lucene.Net.Benchmarks.ByTask.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class FileUtils : object Methods | Improve this Doc View Source FullyDelete(DirectoryInfo) Delete files and directories, even if non-empty. Declaration public static bool FullyDelete(DirectoryInfo dir) Parameters Type Name Description DirectoryInfo dir File or directory. Returns Type Description System.Boolean true on success, false if no or part of files have been deleted."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.Formatter.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.Formatter.html",
    "title": "Class Formatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Formatter Formatting utilities (for reports). Inheritance System.Object Formatter Namespace : Lucene.Net.Benchmarks.ByTask.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class Formatter : object Methods | Improve this Doc View Source Format(Int32, Double, String) Declaration public static string Format(int numFracDigits, double f, string col) Parameters Type Name Description System.Int32 numFracDigits System.Double f System.String col Returns Type Description System.String | Improve this Doc View Source Format(Int32, Single, String) Padd a number from left. Declaration public static string Format(int numFracDigits, float f, string col) Parameters Type Name Description System.Int32 numFracDigits Number of digits in fraction part - must be 0 or 1 or 2. System.Single f Number to be formatted. System.String col Column name (used for deciding on length). Returns Type Description System.String Formatted string. | Improve this Doc View Source Format(Int32, String) Pad a number from left. Declaration public static string Format(int n, string col) Parameters Type Name Description System.Int32 n Number to be formatted. System.String col Column name (used for deciding on length). Returns Type Description System.String Formatted string. | Improve this Doc View Source Format(String, String) Pad a string from right. Declaration public static string Format(string s, string col) Parameters Type Name Description System.String s String to be formatted. System.String col Column name (used for deciding on length). Returns Type Description System.String Formatted string. | Improve this Doc View Source FormatPaddLeft(String, String) Pad a string from left. Declaration public static string FormatPaddLeft(string s, string col) Parameters Type Name Description System.String s String to be formatted. System.String col Column name (used for deciding on length). Returns Type Description System.String Formatted string. | Improve this Doc View Source FormatPaddRight(Int32, Double, String) Declaration public static string FormatPaddRight(int numFracDigits, double f, string col) Parameters Type Name Description System.Int32 numFracDigits System.Double f System.String col Returns Type Description System.String | Improve this Doc View Source FormatPaddRight(Int32, Single, String) Pad a number from right. Declaration public static string FormatPaddRight(int numFracDigits, float f, string col) Parameters Type Name Description System.Int32 numFracDigits Number of digits in fraction part - must be 0 or 1 or 2. System.Single f Number to be formatted. System.String col Column name (used for deciding on length). Returns Type Description System.String Formatted string."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.html",
    "title": "Namespace Lucene.Net.Benchmarks.ByTask.Utils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.ByTask.Utils <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Utilities used for the benchmark, and for the reports. Classes Algorithm Test algorithm, as read from file AnalyzerFactory A factory to create an analyzer. Config Perf run configuration properties. FileUtils File utilities. Formatter Formatting utilities (for reports). StreamUtils Stream utilities. Enums FileType File format type."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.StreamUtils.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.ByTask.Utils.StreamUtils.html",
    "title": "Class StreamUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StreamUtils Stream utilities. Inheritance System.Object StreamUtils Namespace : Lucene.Net.Benchmarks.ByTask.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class StreamUtils : object Fields | Improve this Doc View Source BUFFER_SIZE Buffer size used across the benchmark package Declaration public static readonly int BUFFER_SIZE Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetInputStream(FileInfo) Returns an over the requested file. This method attempts to identify the appropriate instance to return based on the file name (e.g., if it ends with .bz2 or .bzip, return a 'bzip' ). Declaration public static Stream GetInputStream(FileInfo file) Parameters Type Name Description FileInfo file Returns Type Description Stream | Improve this Doc View Source GetOutputStream(FileInfo) Returns an over the requested file, identifying the appropriate instance similar to GetInputStream(FileInfo) . Declaration public static Stream GetOutputStream(FileInfo file) Parameters Type Name Description FileInfo file Returns Type Description Stream"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Constants.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Constants.html",
    "title": "Class Constants | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Constants Various benchmarking constants (mostly defaults) Inheritance System.Object Constants Namespace : Lucene.Net.Benchmarks Assembly : Lucene.Net.Benchmark.dll Syntax public class Constants : object Fields | Improve this Doc View Source BOOLEANS Declaration public static bool[] BOOLEANS Field Value Type Description System.Boolean [] | Improve this Doc View Source DEFAULT_LOG_STEP Declaration public static readonly int DEFAULT_LOG_STEP Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MAXIMUM_DOCUMENTS Declaration public static readonly int DEFAULT_MAXIMUM_DOCUMENTS Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_RUN_COUNT Declaration public static readonly int DEFAULT_RUN_COUNT Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_SCALE_UP Declaration public static readonly int DEFAULT_SCALE_UP Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.html",
    "title": "Lucene.Net.Benchmarks | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The benchmark contribution contains tools for benchmarking Lucene using standard, freely available corpora. ANT will download the corpus automatically, place it in a temp directory and then unpack it to the working.dir directory specified in the build. The temp directory and working directory can be safely removed after a run. However, the next time the task is run, it will need to download the files again. Classes implementing the Benchmarker interface should have a no-argument constructor if they are to be used with the Driver class. The Driver class is provided for convenience only. Feel free to implement your own main class for your benchmarker. The StandardBenchmarker is meant to be just that, a standard that runs out of the box with no configuration or changes needed. Other benchmarking classes may derive from it to provide alternate views or to take in command line options. When reporting benchmarking runs you should state any alterations you have made. To run the short version of the StandardBenchmarker, call \"ant run-micro-standard\". This should take a minute or so to complete and give you a preliminary idea of how your change affects the code To run the long version of the StandardBenchmarker, call \"ant run-standard\". This takes considerably longer. The original code for these classes was donated by Andrzej Bialecki at http://issues.apache.org/jira/browse/LUCENE-675 and has been updated by Grant Ingersoll to make some parts of the code reusable in other benchmarkers Classes Constants Various benchmarking constants (mostly defaults)"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.html",
    "title": "Namespace Lucene.Net.Benchmarks.Quality | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.Quality <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Search Quality Benchmarking. This package allows to benchmark search quality of a Lucene application. In order to use this package you should provide: A IndexSearcher . Quality queries . Judging object . Reporting object . For benchmarking TREC collections with TREC QRels, take a look at the trec package . Here is a sample code used to run the TREC 2006 queries 701-850 on the .Gov2 collection: File topicsFile = new File(\"topics-701-850.txt\"); File qrelsFile = new File(\"qrels-701-850.txt\"); IndexReader ir = DirectoryReader.open(directory): IndexSearcher searcher = new IndexSearcher(ir); int maxResults = 1000; String docNameField = \"docname\"; PrintWriter logger = new PrintWriter(System.out,true); // use trec utilities to read trec topics into quality queries TrecTopicsReader qReader = new TrecTopicsReader(); QualityQuery qqs[] = qReader.readQueries(new BufferedReader(new FileReader(topicsFile))); // prepare judge, with trec utilities that read from a QRels file Judge judge = new TrecJudge(new BufferedReader(new FileReader(qrelsFile))); // validate topics & judgments match each other judge.validateData(qqs, logger); // set the parsing of quality queries into Lucene queries. QualityQueryParser qqParser = new SimpleQQParser(\"title\", \"body\"); // run the benchmark QualityBenchmark qrun = new QualityBenchmark(qqs, qqParser, searcher, docNameField); SubmissionReport submitLog = null; QualityStats stats[] = qrun.execute(maxResults, judge, submitLog, logger); // print an avarage sum of the results QualityStats avg = QualityStats.average(stats); avg.log(\"SUMMARY\",2,logger, \" \"); Some immediate ways to modify this program to your needs are: To run on different formats of queries and judgements provide your own Judge and Quality queries . Create sophisticated Lucene queries by supplying a different Quality query parser . Classes QualityBenchmark Main entry point for running a quality benchmark. There are two main configurations for running a quality benchmark: Against existing judgements. For submission (e.g. for a contest). The first configuration requires a non null IJudge . The second configuration requires a non null SubmissionReport . QualityQuery A QualityQuery has an ID and some name-value pairs. The ID allows to map the quality query with its judgements. The name-value pairs are used by a IQualityQueryParser to create a Lucene Query . It is very likely that name-value-pairs would be mapped into fields in a Lucene query, but it is up to the QualityQueryParser how to map - e.g. all values in a single field, or each pair as its own field, etc., - and this of course must match the way the searched index was constructed. QualityStats Results of quality benchmark run for a single query or for a set of queries. QualityStats.RecallPoint A certain rank in which a relevant doc was found. Interfaces IJudge Judge if a document is relevant for a quality query. IQualityQueryParser Parse a QualityQuery into a Lucene query."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.IJudge.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.IJudge.html",
    "title": "Interface IJudge | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IJudge Judge if a document is relevant for a quality query. Namespace : Lucene.Net.Benchmarks.Quality Assembly : Lucene.Net.Benchmark.dll Syntax public interface IJudge Methods | Improve this Doc View Source IsRelevant(String, QualityQuery) Judge if document docName is relevant for the given quality query. Declaration bool IsRelevant(string docName, QualityQuery query) Parameters Type Name Description System.String docName Name of doc tested for relevancy. QualityQuery query Tested quality query. Returns Type Description System.Boolean true if relevant, false if not. | Improve this Doc View Source MaxRecall(QualityQuery) Return the maximal recall for the input quality query. It is the number of relevant docs this IJudge \"knows\" for the query. Declaration int MaxRecall(QualityQuery query) Parameters Type Name Description QualityQuery query The query whose maximal recall is needed. Returns Type Description System.Int32 | Improve this Doc View Source ValidateData(QualityQuery[], TextWriter) Validate that queries and this IJudge match each other. To be perfectly valid, this Judge must have some data for each and every input quality query, and must not have any data on any other quality query. Note : the quality benchmark run would not fail in case of imperfect validity, just a warning message would be logged. Declaration bool ValidateData(QualityQuery[] qq, TextWriter logger) Parameters Type Name Description QualityQuery [] qq Quality queries to be validated. TextWriter logger If not null , validation issues are logged. Returns Type Description System.Boolean true if perfectly valid, false if not."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.IQualityQueryParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.IQualityQueryParser.html",
    "title": "Interface IQualityQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IQualityQueryParser Parse a QualityQuery into a Lucene query. Namespace : Lucene.Net.Benchmarks.Quality Assembly : Lucene.Net.Benchmark.dll Syntax public interface IQualityQueryParser Methods | Improve this Doc View Source Parse(QualityQuery) Parse a given QualityQuery into a Lucene query. Declaration Query Parse(QualityQuery qq) Parameters Type Name Description QualityQuery qq The quality query to be parsed. Returns Type Description Query"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityBenchmark.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityBenchmark.html",
    "title": "Class QualityBenchmark | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QualityBenchmark Main entry point for running a quality benchmark. There are two main configurations for running a quality benchmark: Against existing judgements. For submission (e.g. for a contest). The first configuration requires a non null IJudge . The second configuration requires a non null SubmissionReport . Inheritance System.Object QualityBenchmark Namespace : Lucene.Net.Benchmarks.Quality Assembly : Lucene.Net.Benchmark.dll Syntax public class QualityBenchmark : object Constructors | Improve this Doc View Source QualityBenchmark(QualityQuery[], IQualityQueryParser, IndexSearcher, String) Create a QualityBenchmark . Declaration public QualityBenchmark(QualityQuery[] qqs, IQualityQueryParser qqParser, IndexSearcher searcher, string docNameField) Parameters Type Name Description QualityQuery [] qqs Quality queries to run. IQualityQueryParser qqParser Parser for turning QualityQueries into Lucene Queries. IndexSearcher searcher Index to be searched. System.String docNameField Name of field containing the document name. This allows to extract the doc name for search results, and is important for judging the results. Fields | Improve this Doc View Source m_docNameField index field to extract doc name for each search result; used for judging the results. Declaration protected string m_docNameField Field Value Type Description System.String | Improve this Doc View Source m_qqParser Parser for turning QualityQueries into Lucene Queries. Declaration protected IQualityQueryParser m_qqParser Field Value Type Description IQualityQueryParser | Improve this Doc View Source m_qualityQueries Quality Queries that this quality benchmark would execute. Declaration protected QualityQuery[] m_qualityQueries Field Value Type Description QualityQuery [] | Improve this Doc View Source m_searcher Index to be searched. Declaration protected IndexSearcher m_searcher Field Value Type Description IndexSearcher Properties | Improve this Doc View Source MaxQueries The maximum number of quality queries to run. Useful at debugging. Declaration public virtual int MaxQueries { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxResults The maximum number of results to collect for each quality query. Declaration public virtual int MaxResults { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Execute(IJudge, SubmissionReport, TextWriter) Run the quality benchmark. Declaration public virtual QualityStats[] Execute(IJudge judge, SubmissionReport submitRep, TextWriter qualityLog) Parameters Type Name Description IJudge judge The judge that can tell if a certain result doc is relevant for a certain quality query. If null, no judgements would be made. Usually null for a submission run. SubmissionReport submitRep Submission report is created if non null. TextWriter qualityLog If not null, quality run data would be printed for each query. Returns Type Description QualityStats [] QualityStats of each quality query that was executed."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityQuery.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityQuery.html",
    "title": "Class QualityQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QualityQuery A QualityQuery has an ID and some name-value pairs. The ID allows to map the quality query with its judgements. The name-value pairs are used by a IQualityQueryParser to create a Lucene Query . It is very likely that name-value-pairs would be mapped into fields in a Lucene query, but it is up to the QualityQueryParser how to map - e.g. all values in a single field, or each pair as its own field, etc., - and this of course must match the way the searched index was constructed. Inheritance System.Object QualityQuery Namespace : Lucene.Net.Benchmarks.Quality Assembly : Lucene.Net.Benchmark.dll Syntax public class QualityQuery : IComparable<QualityQuery> Constructors | Improve this Doc View Source QualityQuery(String, IDictionary<String, String>) Create a QualityQuery with given ID and name-value pairs. Declaration public QualityQuery(string queryID, IDictionary<string, string> nameValPairs) Parameters Type Name Description System.String queryID ID of this quality query. IDictionary < System.String , System.String > nameValPairs The contents of this quality query. Properties | Improve this Doc View Source QueryID Gets the ID of this query. The ID allows to map the quality query with its judgements. Declaration public virtual string QueryID { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(QualityQuery) For a nicer sort of input queries before running them. Try first as ints, fall back to string if not int. Declaration public virtual int CompareTo(QualityQuery other) Parameters Type Name Description QualityQuery other Returns Type Description System.Int32 | Improve this Doc View Source GetNames() Return all the names of name-value-pairs in this QualityQuery . Declaration public virtual string[] GetNames() Returns Type Description System.String [] | Improve this Doc View Source GetValue(String) Return the value of a certain name-value pair. Declaration public virtual string GetValue(string name) Parameters Type Name Description System.String name The name whose value should be returned. Returns Type Description System.String"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityStats.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityStats.html",
    "title": "Class QualityStats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QualityStats Results of quality benchmark run for a single query or for a set of queries. Inheritance System.Object QualityStats Namespace : Lucene.Net.Benchmarks.Quality Assembly : Lucene.Net.Benchmark.dll Syntax public class QualityStats : object Constructors | Improve this Doc View Source QualityStats(Double, Int64) Construct a QualityStats object with anticipated maximal number of relevant hits. Declaration public QualityStats(double maxGoodPoints, long searchTime) Parameters Type Name Description System.Double maxGoodPoints maximal possible relevant hits. System.Int64 searchTime Fields | Improve this Doc View Source MAX_POINTS Number of points for which precision is computed. Declaration public static readonly int MAX_POINTS Field Value Type Description System.Int32 Properties | Improve this Doc View Source DocNamesExtractTime Returns the time it took to extract doc names for judging the measured query, in milliseconds. Declaration public virtual long DocNamesExtractTime { get; } Property Value Type Description System.Int64 | Improve this Doc View Source MaxGoodPoints Returns the maximal number of good points. This is the number of relevant docs known by the judge for the measured query. Declaration public virtual double MaxGoodPoints { get; } Property Value Type Description System.Double | Improve this Doc View Source MRR Returns the Mean reciprocal rank over the queries or RR for a single query. Declaration public virtual double MRR { get; } Property Value Type Description System.Double Remarks Reciprocal rank is defined as 1/r where r is the rank of the first correct result, or 0 if there are no correct results within the top 5 results. This follows the definition in Question Answering - CNLP at the TREC-10 Question Answering Track . | Improve this Doc View Source NumGoodPoints Returns the number of good points (only relevant points). Declaration public virtual double NumGoodPoints { get; } Property Value Type Description System.Double | Improve this Doc View Source NumPoints Returns the number of points (both relevant and irrelevant points). Declaration public virtual double NumPoints { get; } Property Value Type Description System.Double | Improve this Doc View Source Recall Return the recall: |{relevant hits found}| / |{relevant hits existing}|. Declaration public virtual double Recall { get; } Property Value Type Description System.Double | Improve this Doc View Source SearchTime Returns the search time in milliseconds for the measured query. Declaration public virtual long SearchTime { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source AddResult(Int32, Boolean, Int64) Add a (possibly relevant) doc. Declaration public virtual void AddResult(int n, bool isRelevant, long docNameExtractTime) Parameters Type Name Description System.Int32 n rank of the added doc (its ordinal position within the query results). System.Boolean isRelevant true if the added doc is relevant, false otherwise. System.Int64 docNameExtractTime | Improve this Doc View Source Average(QualityStats[]) Create a QualityStats object that is the average of the input QualityStats objects. Declaration public static QualityStats Average(QualityStats[] stats) Parameters Type Name Description QualityStats [] stats array of input stats to be averaged. Returns Type Description QualityStats an average over the input stats. | Improve this Doc View Source GetAvp() Return the average precision at recall points. Declaration public virtual double GetAvp() Returns Type Description System.Double | Improve this Doc View Source GetPrecisionAt(Int32) Return the precision at rank n: |{relevant hits within first n hits}| / n . Declaration public virtual double GetPrecisionAt(int n) Parameters Type Name Description System.Int32 n requested precision point, must be at least 1 and at most MAX_POINTS . Returns Type Description System.Double | Improve this Doc View Source GetRecallPoints() Returns the recallPoints. Declaration public virtual QualityStats.RecallPoint[] GetRecallPoints() Returns Type Description QualityStats.RecallPoint [] | Improve this Doc View Source Log(String, Int32, TextWriter, String) Log information on this QualityStats object. Declaration public virtual void Log(string title, int paddLines, TextWriter logger, string prefix) Parameters Type Name Description System.String title System.Int32 paddLines TextWriter logger Logger. System.String prefix prefix before each log line."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityStats.RecallPoint.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.QualityStats.RecallPoint.html",
    "title": "Class QualityStats.RecallPoint | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QualityStats.RecallPoint A certain rank in which a relevant doc was found. Inheritance System.Object QualityStats.RecallPoint Namespace : Lucene.Net.Benchmarks.Quality Assembly : Lucene.Net.Benchmark.dll Syntax public class RecallPoint : object Properties | Improve this Doc View Source Rank Returns the rank: where on the list of returned docs this relevant doc appeared. Declaration public virtual int Rank { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Recall Returns the recall: how many relevant docs were returned up to this point, inclusive. Declaration public virtual double Recall { get; } Property Value Type Description System.Double"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.html",
    "title": "Namespace Lucene.Net.Benchmarks.Quality.Trec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.Quality.Trec <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Utilities for Trec related quality benchmarking, feeding from Trec Topics and QRels inputs. Classes QueryDriver Command-line tool for doing a TREC evaluation run. Trec1MQReader Read topics of TREC 1MQ track. Expects this topic format - qnum:qtext Comment lines starting with '#' are ignored. All topics will have a single name value pair. TrecJudge Judge if given document is relevant to given quality query, based on Trec format for judgements. TrecTopicsReader Read TREC topics."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.QueryDriver.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.QueryDriver.html",
    "title": "Class QueryDriver | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryDriver Command-line tool for doing a TREC evaluation run. Inheritance System.Object QueryDriver Namespace : Lucene.Net.Benchmarks.Quality.Trec Assembly : Lucene.Net.Benchmark.dll Syntax public class QueryDriver : object Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.Trec1MQReader.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.Trec1MQReader.html",
    "title": "Class Trec1MQReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Trec1MQReader Read topics of TREC 1MQ track. Expects this topic format - qnum:qtext Comment lines starting with '#' are ignored. All topics will have a single name value pair. Inheritance System.Object Trec1MQReader Namespace : Lucene.Net.Benchmarks.Quality.Trec Assembly : Lucene.Net.Benchmark.dll Syntax public class Trec1MQReader : object Constructors | Improve this Doc View Source Trec1MQReader(String) Constructor for Trec's 1MQ TopicsReader Declaration public Trec1MQReader(string name) Parameters Type Name Description System.String name Name of name-value pair to set for all queries. Methods | Improve this Doc View Source ReadQueries(TextReader) Read quality queries from trec 1MQ format topics file. Declaration public virtual QualityQuery[] ReadQueries(TextReader reader) Parameters Type Name Description TextReader reader where queries are read from. Returns Type Description QualityQuery [] the result quality queries."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.TrecJudge.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.TrecJudge.html",
    "title": "Class TrecJudge | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrecJudge Judge if given document is relevant to given quality query, based on Trec format for judgements. Inheritance System.Object TrecJudge Implements IJudge Namespace : Lucene.Net.Benchmarks.Quality.Trec Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecJudge : object, IJudge Constructors | Improve this Doc View Source TrecJudge(TextReader) Constructor from a reader. Declaration public TrecJudge(TextReader reader) Parameters Type Name Description TextReader reader Where judgments are read from. Remarks Expected input format: qnum 0 doc-name is-relevant Two sample lines: 19 0 doc303 1 19 0 doc7295 0 Methods | Improve this Doc View Source IsRelevant(String, QualityQuery) Declaration public virtual bool IsRelevant(string docName, QualityQuery query) Parameters Type Name Description System.String docName QualityQuery query Returns Type Description System.Boolean | Improve this Doc View Source MaxRecall(QualityQuery) Declaration public virtual int MaxRecall(QualityQuery query) Parameters Type Name Description QualityQuery query Returns Type Description System.Int32 | Improve this Doc View Source ValidateData(QualityQuery[], TextWriter) Declaration public virtual bool ValidateData(QualityQuery[] qq, TextWriter logger) Parameters Type Name Description QualityQuery [] qq TextWriter logger Returns Type Description System.Boolean Implements IJudge"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.TrecTopicsReader.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Trec.TrecTopicsReader.html",
    "title": "Class TrecTopicsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrecTopicsReader Read TREC topics. Inheritance System.Object TrecTopicsReader Namespace : Lucene.Net.Benchmarks.Quality.Trec Assembly : Lucene.Net.Benchmark.dll Syntax public class TrecTopicsReader : object Remarks Expects this topic format - <top> <num> Number: nnn <title> title of the topic <desc> Description: description of the topic <narr> Narrative: \"story\" composed by assessors. </top> Comment lines starting with '#' are ignored. Constructors | Improve this Doc View Source TrecTopicsReader() Constructor for Trec's TopicsReader Declaration public TrecTopicsReader() Methods | Improve this Doc View Source ReadQueries(TextReader) Read quality queries from trec format topics file. Declaration public virtual QualityQuery[] ReadQueries(TextReader reader) Parameters Type Name Description TextReader reader where queries are read from. Returns Type Description QualityQuery [] the result quality queries."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.DocNameExtractor.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.DocNameExtractor.html",
    "title": "Class DocNameExtractor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocNameExtractor Utility: extract doc names from an index Inheritance System.Object DocNameExtractor Namespace : Lucene.Net.Benchmarks.Quality.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class DocNameExtractor : object Constructors | Improve this Doc View Source DocNameExtractor(String) Constructor for DocNameExtractor . Declaration public DocNameExtractor(string docNameField) Parameters Type Name Description System.String docNameField name of the stored field containing the doc name. Methods | Improve this Doc View Source DocName(IndexSearcher, Int32) Extract the name of the input doc from the index. Declaration public virtual string DocName(IndexSearcher searcher, int docid) Parameters Type Name Description IndexSearcher searcher access to the index. System.Int32 docid ID of doc whose name is needed. Returns Type Description System.String the name of the input doc as extracted from the index."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.html",
    "title": "Namespace Lucene.Net.Benchmarks.Quality.Utils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.Quality.Utils <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Miscellaneous utilities for search quality benchmarking: query parsing, submission reports. Classes DocNameExtractor Utility: extract doc names from an index QualityQueriesFinder Suggest Quality queries based on an index contents. Utility class, used for making quality test benchmarks. SimpleQQParser Simplistic quality query parser. A Lucene query is created by passing the value of the specified QualityQuery name-value pair(s) into a Lucene's QueryParser using StandardAnalyzer . SubmissionReport Create a log ready for submission. Extend this class and override Report(QualityQuery, TopDocs, String, IndexSearcher) to create different reports."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.QualityQueriesFinder.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.QualityQueriesFinder.html",
    "title": "Class QualityQueriesFinder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QualityQueriesFinder Suggest Quality queries based on an index contents. Utility class, used for making quality test benchmarks. Inheritance System.Object QualityQueriesFinder Namespace : Lucene.Net.Benchmarks.Quality.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class QualityQueriesFinder : object Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args {index-dir}"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.SimpleQQParser.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.SimpleQQParser.html",
    "title": "Class SimpleQQParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleQQParser Simplistic quality query parser. A Lucene query is created by passing the value of the specified QualityQuery name-value pair(s) into a Lucene's QueryParser using StandardAnalyzer . Inheritance System.Object SimpleQQParser Implements IQualityQueryParser Namespace : Lucene.Net.Benchmarks.Quality.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class SimpleQQParser : object, IQualityQueryParser Constructors | Improve this Doc View Source SimpleQQParser(String, String) Constructor of a simple qq parser. Declaration public SimpleQQParser(string qqName, string indexField) Parameters Type Name Description System.String qqName Name-value pair of quality query to use for creating the query. System.String indexField Corresponding index field. | Improve this Doc View Source SimpleQQParser(String[], String) Constructor of a simple qq parser. Declaration public SimpleQQParser(string[] qqNames, string indexField) Parameters Type Name Description System.String [] qqNames Name-value pairs of quality query to use for creating the query. System.String indexField Corresponding index field. Methods | Improve this Doc View Source Parse(QualityQuery) Declaration public virtual Query Parse(QualityQuery qq) Parameters Type Name Description QualityQuery qq Returns Type Description Query See Also Parse ( QualityQuery ) Implements IQualityQueryParser"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.SubmissionReport.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Quality.Utils.SubmissionReport.html",
    "title": "Class SubmissionReport | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SubmissionReport Create a log ready for submission. Extend this class and override Report(QualityQuery, TopDocs, String, IndexSearcher) to create different reports. Inheritance System.Object SubmissionReport Namespace : Lucene.Net.Benchmarks.Quality.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class SubmissionReport : object Constructors | Improve this Doc View Source SubmissionReport(TextWriter, String) Constructor for SubmissionReport . Declaration public SubmissionReport(TextWriter logger, string name) Parameters Type Name Description TextWriter logger If null , no submission data is created. System.String name Name of this run. Methods | Improve this Doc View Source Flush() Declaration public virtual void Flush() | Improve this Doc View Source Report(QualityQuery, TopDocs, String, IndexSearcher) Report a search result for a certain quality query. Declaration public virtual void Report(QualityQuery qq, TopDocs td, string docNameField, IndexSearcher searcher) Parameters Type Name Description QualityQuery qq quality query for which the results are reported. TopDocs td search results for the query. System.String docNameField stored field used for fetching the result doc name. IndexSearcher searcher index access for fetching doc name."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Utils.ExtractReuters.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Utils.ExtractReuters.html",
    "title": "Class ExtractReuters | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExtractReuters Split the Reuters SGML documents into Simple Text files containing: Title, Date, Dateline, Body Inheritance System.Object ExtractReuters Namespace : Lucene.Net.Benchmarks.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class ExtractReuters : object Constructors | Improve this Doc View Source ExtractReuters(DirectoryInfo, DirectoryInfo) Declaration public ExtractReuters(DirectoryInfo reutersDir, DirectoryInfo outputDir) Parameters Type Name Description DirectoryInfo reutersDir DirectoryInfo outputDir Methods | Improve this Doc View Source Extract() Declaration public virtual void Extract() | Improve this Doc View Source ExtractFile(FileInfo) Override if you wish to change what is extracted Declaration protected virtual void ExtractFile(FileInfo sgmFile) Parameters Type Name Description FileInfo sgmFile | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Utils.ExtractWikipedia.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Utils.ExtractWikipedia.html",
    "title": "Class ExtractWikipedia | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExtractWikipedia Extract the downloaded Wikipedia dump into separate files for indexing. Inheritance System.Object ExtractWikipedia Namespace : Lucene.Net.Benchmarks.Utils Assembly : Lucene.Net.Benchmark.dll Syntax public class ExtractWikipedia : object Constructors | Improve this Doc View Source ExtractWikipedia(DocMaker, DirectoryInfo) Declaration public ExtractWikipedia(DocMaker docMaker, DirectoryInfo outputDir) Parameters Type Name Description DocMaker docMaker DirectoryInfo outputDir Fields | Improve this Doc View Source count Declaration public static int count Field Value Type Description System.Int32 | Improve this Doc View Source m_docMaker Declaration protected DocMaker m_docMaker Field Value Type Description DocMaker Methods | Improve this Doc View Source Create(String, String, String, String) Declaration public virtual void Create(string id, string title, string time, string body) Parameters Type Name Description System.String id System.String title System.String time System.String body | Improve this Doc View Source Directory(Int32, DirectoryInfo) Declaration public virtual DirectoryInfo Directory(int count, DirectoryInfo directory) Parameters Type Name Description System.Int32 count DirectoryInfo directory Returns Type Description DirectoryInfo | Improve this Doc View Source Extract() Declaration public virtual void Extract() | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Utils.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Benchmarks.Utils.html",
    "title": "Namespace Lucene.Net.Benchmarks.Utils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Benchmarks.Utils <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Benchmark Utility functions. Classes ExtractReuters Split the Reuters SGML documents into Simple Text files containing: Title, Date, Dateline, Body ExtractWikipedia Extract the downloaded Wikipedia dump into separate files for indexing."
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Support.EnglishNumberFormatExtensions.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Support.EnglishNumberFormatExtensions.html",
    "title": "Class EnglishNumberFormatExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnglishNumberFormatExtensions Extension methods to spell out numbers into English. Inspiration: https://stackoverflow.com/a/2601001 Inheritance System.Object EnglishNumberFormatExtensions Namespace : Lucene.Net.Support Assembly : Lucene.Net.Benchmark.dll Syntax public static class EnglishNumberFormatExtensions : object Methods | Improve this Doc View Source ToWords(Int32) Returns the spelled-out English words for the provided value . Declaration public static string ToWords(this int value) Parameters Type Name Description System.Int32 value Returns Type Description System.String | Improve this Doc View Source ToWords(Int64) Returns the spelled-out English words for the provided value . Declaration public static string ToWords(this long value) Parameters Type Name Description System.Int64 value Returns Type Description System.String"
  },
  "api/Lucene.Net.Benchmarks/Lucene.Net.Support.html": {
    "href": "api/Lucene.Net.Benchmarks/Lucene.Net.Support.html",
    "title": "Namespace Lucene.Net.Support | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Support Classes EnglishNumberFormatExtensions Extension methods to spell out numbers into English. Inspiration: https://stackoverflow.com/a/2601001"
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.Attributes2.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.Attributes2.html",
    "title": "Class Attributes2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Attributes2 SAX2 extension helper for additional Attributes information, implementing the Attributes2 interface. Inheritance System.Object Attributes Attributes2 Implements IAttributes2 IAttributes Inherited Members Attributes.Length Attributes.GetURI(Int32) Attributes.GetLocalName(Int32) Attributes.GetQName(Int32) Attributes.GetType(Int32) Attributes.GetValue(Int32) Attributes.GetIndex(String, String) Attributes.GetIndex(String) Attributes.GetType(String, String) Attributes.GetType(String) Attributes.GetValue(String, String) Attributes.GetValue(String) Attributes.Clear() Attributes.SetAttribute(Int32, String, String, String, String, String) Attributes.SetURI(Int32, String) Attributes.SetLocalName(Int32, String) Attributes.SetQName(Int32, String) Attributes.SetType(Int32, String) Attributes.SetValue(Int32, String) Namespace : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public class Attributes2 : Attributes, IAttributes2, IAttributes Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . This is not part of core-only SAX2 distributions. The specified flag for each attribute will always be true, unless it has been set to false in the copy constructor or using SetSpecified(Int32, Boolean) . Similarly, the declared flag for each attribute will always be false, except for defaulted attributes ( specified is false), non-CDATA attributes, or when it is set to true using SetDeclared(Int32, Boolean) . If you change an attribute's type by hand, you may need to modify its declared flag to match. Constructors | Improve this Doc View Source Attributes2() Construct a new, empty Attributes2 object. Declaration public Attributes2() | Improve this Doc View Source Attributes2(IAttributes) Copy an existing Attributes or Attributes2 object. If the object implements Attributes2, values of the specified and declared flags for each attribute are copied. Otherwise the flag values are defaulted to assume no DTD was used, unless there is evidence to the contrary (such as attributes with type other than CDATA, which must have been declared ). This constructor is especially useful inside a StartElement(String, String, String, IAttributes) event. Declaration public Attributes2(IAttributes atts) Parameters Type Name Description IAttributes atts The existing IAttributes object. Methods | Improve this Doc View Source AddAttribute(String, String, String, String, String) Add an attribute to the end of the list, setting its \"specified\" flag to true. To set that flag's value to false, use SetSpecified(Int32, Boolean) . Unless the attribute type is CDATA, this attribute is marked as being declared in the DTD. To set that flag's value to true for CDATA attributes, use SetDeclared(Int32, Boolean) . Declaration public override void AddAttribute(string uri, string localName, string qName, string type, string value) Parameters Type Name Description System.String uri System.String localName System.String qName System.String type System.String value Overrides Attributes.AddAttribute(String, String, String, String, String) See Also AddAttribute ( System.String , System.String , System.String , System.String , System.String ) | Improve this Doc View Source IsDeclared(Int32) Returns the current value of the attribute's \"declared\" flag. Declaration public bool IsDeclared(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source IsDeclared(String) Returns the current value of the attribute's \"declared\" flag. Declaration public bool IsDeclared(string qName) Parameters Type Name Description System.String qName Returns Type Description System.Boolean | Improve this Doc View Source IsDeclared(String, String) Returns the current value of the attribute's \"declared\" flag. Declaration public bool IsDeclared(string uri, string localName) Parameters Type Name Description System.String uri System.String localName Returns Type Description System.Boolean | Improve this Doc View Source IsSpecified(Int32) Returns the current value of an attribute's \"specified\" flag. Declaration public bool IsSpecified(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.Boolean current flag value | Improve this Doc View Source IsSpecified(String) Returns the current value of an attribute's \"specified\" flag. Declaration public bool IsSpecified(string qName) Parameters Type Name Description System.String qName The XML qualified (prefixed) name. Returns Type Description System.Boolean current flag value | Improve this Doc View Source IsSpecified(String, String) Returns the current value of an attribute's \"specified\" flag. Declaration public bool IsSpecified(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if the name has no Namespace URI. System.String localName The attribute's local name. Returns Type Description System.Boolean current flag value | Improve this Doc View Source RemoveAttribute(Int32) Declaration public override void RemoveAttribute(int index) Parameters Type Name Description System.Int32 index Overrides Attributes.RemoveAttribute(Int32) | Improve this Doc View Source SetAttributes(IAttributes) Copy an entire Attributes object. The \"specified\" flags are assigned as true, and \"declared\" flags as false (except when an attribute's type is not CDATA), unless the object is an Attributes2 object. In that case those flag values are all copied. Declaration public override void SetAttributes(IAttributes atts) Parameters Type Name Description IAttributes atts Overrides Attributes.SetAttributes(IAttributes) See Also SetAttributes ( IAttributes ) | Improve this Doc View Source SetDeclared(Int32, Boolean) Assign a value to the \"declared\" flag of a specific attribute. This is normally needed only for attributes of type CDATA, including attributes whose type is changed to or from CDATA. Declaration public virtual void SetDeclared(int index, bool value) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.Boolean value The desired flag value. | Improve this Doc View Source SetSpecified(Int32, Boolean) Assign a value to the \"specified\" flag of a specific attribute. This is the only way this flag can be cleared, except clearing by initialization with the copy constructor. Declaration public virtual void SetSpecified(int index, bool value) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.Boolean value The desired flag value. Implements IAttributes2 IAttributes"
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.DefaultHandler2.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.DefaultHandler2.html",
    "title": "Class DefaultHandler2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultHandler2 This class extends the SAX2 base handler class to support the SAX2 ILexicalHandler , IDeclHandler , and IEntityResolver2 extensions. Except for overriding the original SAX1 ResolveEntity(String, String) method the added handler methods just return. Subclassers may override everything on a method-by-method basis. Inheritance System.Object DefaultHandler DefaultHandler2 Implements IDTDHandler IContentHandler IErrorHandler ILexicalHandler IDeclHandler IEntityResolver2 IEntityResolver Inherited Members DefaultHandler.NotationDecl(String, String, String) DefaultHandler.UnparsedEntityDecl(String, String, String, String) DefaultHandler.SetDocumentLocator(ILocator) DefaultHandler.StartDocument() DefaultHandler.EndDocument() DefaultHandler.StartPrefixMapping(String, String) DefaultHandler.EndPrefixMapping(String) DefaultHandler.StartElement(String, String, String, IAttributes) DefaultHandler.EndElement(String, String, String) DefaultHandler.Characters(Char[], Int32, Int32) DefaultHandler.IgnorableWhitespace(Char[], Int32, Int32) DefaultHandler.ProcessingInstruction(String, String) DefaultHandler.SkippedEntity(String) DefaultHandler.Warning(SAXParseException) DefaultHandler.Error(SAXParseException) DefaultHandler.FatalError(SAXParseException) Namespace : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public class DefaultHandler2 : DefaultHandler, IDTDHandler, IContentHandler, IErrorHandler, ILexicalHandler, IDeclHandler, IEntityResolver2, IEntityResolver Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . Note: this class might yet learn that the SetDocumentLocator(ILocator) call might be passed a Locator2 object, and that the ContentHandler.startElement() call might be passed a Attributes2 object. Constructors | Improve this Doc View Source DefaultHandler2() Constructs a handler which ignores all parsing events. Declaration public DefaultHandler2() Methods | Improve this Doc View Source AttributeDecl(String, String, String, String, String) Declaration public virtual void AttributeDecl(string eName, string aName, string type, string mode, string value) Parameters Type Name Description System.String eName System.String aName System.String type System.String mode System.String value | Improve this Doc View Source Comment(Char[], Int32, Int32) Declaration public virtual void Comment(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch System.Int32 start System.Int32 length | Improve this Doc View Source ElementDecl(String, String) Declaration public virtual void ElementDecl(string name, string model) Parameters Type Name Description System.String name System.String model | Improve this Doc View Source EndCDATA() Declaration public virtual void EndCDATA() | Improve this Doc View Source EndDTD() Declaration public virtual void EndDTD() | Improve this Doc View Source EndEntity(String) Declaration public virtual void EndEntity(string name) Parameters Type Name Description System.String name | Improve this Doc View Source ExternalEntityDecl(String, String, String) Declaration public virtual void ExternalEntityDecl(string name, string publicId, string systemId) Parameters Type Name Description System.String name System.String publicId System.String systemId | Improve this Doc View Source GetExternalSubset(String, String) Tells the parser that if no external subset has been declared in the document text, none should be used. Declaration public virtual InputSource GetExternalSubset(string name, string baseURI) Parameters Type Name Description System.String name System.String baseURI Returns Type Description InputSource | Improve this Doc View Source InternalEntityDecl(String, String) Declaration public virtual void InternalEntityDecl(string name, string value) Parameters Type Name Description System.String name System.String value | Improve this Doc View Source ResolveEntity(String, String) Invokes ResolveEntity(String, String, String, String) with null entity name and base URI. You only need to override that method to use this class. Declaration public override InputSource ResolveEntity(string publicId, string systemId) Parameters Type Name Description System.String publicId System.String systemId Returns Type Description InputSource Overrides DefaultHandler.ResolveEntity(String, String) | Improve this Doc View Source ResolveEntity(String, String, String, String) Tells the parser to resolve the systemId against the baseURI and read the entity text from that resulting absolute URI. Note that because the older ResolveEntity(String, String) , method is overridden to call this one, this method may sometimes be invoked with null name and baseURI , and with the systemId already absolutized. Declaration public virtual InputSource ResolveEntity(string name, string publicId, string baseURI, string systemId) Parameters Type Name Description System.String name System.String publicId System.String baseURI System.String systemId Returns Type Description InputSource | Improve this Doc View Source StartCDATA() Declaration public virtual void StartCDATA() | Improve this Doc View Source StartDTD(String, String, String) Declaration public virtual void StartDTD(string name, string publicId, string systemId) Parameters Type Name Description System.String name System.String publicId System.String systemId | Improve this Doc View Source StartEntity(String) Declaration public virtual void StartEntity(string name) Parameters Type Name Description System.String name Implements IDTDHandler IContentHandler IErrorHandler ILexicalHandler IDeclHandler IEntityResolver2 IEntityResolver"
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.html",
    "title": "Namespace Sax.Ext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Sax.Ext Classes Attributes2 SAX2 extension helper for additional Attributes information, implementing the Attributes2 interface. DefaultHandler2 This class extends the SAX2 base handler class to support the SAX2 ILexicalHandler , IDeclHandler , and IEntityResolver2 extensions. Except for overriding the original SAX1 ResolveEntity(String, String) method the added handler methods just return. Subclassers may override everything on a method-by-method basis. Locator2 SAX2 extension helper for holding additional Entity information, implementing the Locator2 interface. Interfaces IAttributes2 SAX2 extension to augment the per-attribute information provided though IAttributes . If an implementation supports this extension, the attributes provided in IContentHandler will implement this interface, and the http://xml.org/sax/features/use-attributes2 feature flag will have the value true . This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . XMLReader implementations are not required to support this information, and it is not part of core-only SAX2 distributions. Note that if an attribute was defaulted ( !IsSpecified() ) it will of necessity also have been declared( IsDeclared() ) in the DTD. Similarly if an attribute's type is anything except CDATA, then it must have been declared. IDeclHandler SAX2 extension handler for DTD declaration events. IEntityResolver2 Extended interface for mapping external entity references to input sources, or providing a missing external subset. The EntityResolver property is used to provide implementations of this interface to parsers. When a parser uses the methods in this interface, the ResolveEntity(String, String, String, String) method (in this interface) is used instead of the older (SAX 1.0) ResolveEntity(String, String) method. ILexicalHandler SAX2 extension handler for lexical events. ILocator2 SAX2 extension to augment the entity information provided though a ILocator ."
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.IAttributes2.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.IAttributes2.html",
    "title": "Interface IAttributes2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAttributes2 SAX2 extension to augment the per-attribute information provided though IAttributes . If an implementation supports this extension, the attributes provided in IContentHandler will implement this interface, and the http://xml.org/sax/features/use-attributes2 feature flag will have the value true . This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . XMLReader implementations are not required to support this information, and it is not part of core-only SAX2 distributions. Note that if an attribute was defaulted ( !IsSpecified() ) it will of necessity also have been declared( IsDeclared() ) in the DTD. Similarly if an attribute's type is anything except CDATA, then it must have been declared. Inherited Members IAttributes.Length IAttributes.GetURI(Int32) IAttributes.GetLocalName(Int32) IAttributes.GetQName(Int32) IAttributes.GetType(Int32) IAttributes.GetValue(Int32) IAttributes.GetIndex(String, String) IAttributes.GetIndex(String) IAttributes.GetType(String, String) IAttributes.GetType(String) IAttributes.GetValue(String, String) IAttributes.GetValue(String) Namespace : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public interface IAttributes2 : IAttributes Methods | Improve this Doc View Source IsDeclared(Int32) Returns false unless the attribute was declared in the DTD. This helps distinguish two kinds of attributes that SAX reports as CDATA: ones that were declared (and hence are usually valid), and those that were not (and which are never valid). Declaration bool IsDeclared(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.Boolean true if the attribute was declared in the DTD, false otherwise. | Improve this Doc View Source IsDeclared(String) Returns false unless the attribute was declared in the DTD. This helps distinguish two kinds of attributes that SAX reports as CDATA: ones that were declared (and hence are usually valid), and those that were not (and which are never valid). Declaration bool IsDeclared(string qName) Parameters Type Name Description System.String qName The XML qualified (prefixed) name. Returns Type Description System.Boolean true if the attribute was declared in the DTD, false otherwise. | Improve this Doc View Source IsDeclared(String, String) Returns false unless the attribute was declared in the DTD. This helps distinguish two kinds of attributes that SAX reports as CDATA: ones that were declared (and hence are usually valid), and those that were not (and which are never valid). Declaration bool IsDeclared(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if the name has no Namespace URI. System.String localName The attribute's local name. Returns Type Description System.Boolean true if the attribute was declared in the DTD, false otherwise. Remarks Remember that since DTDs do not \"understand\" namespaces, the namespace URI associated with an attribute may not have come from the DTD.The declaration will have applied to the attribute's qName | Improve this Doc View Source IsSpecified(Int32) Returns true unless the attribute value was provided by DTD defaulting. Declaration bool IsSpecified(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.Boolean true if the value was found in the XML text, false if the value was provided by DTD defaulting. | Improve this Doc View Source IsSpecified(String) Returns true unless the attribute value was provided by DTD defaulting. Declaration bool IsSpecified(string qName) Parameters Type Name Description System.String qName The XML qualified (prefixed) name. Returns Type Description System.Boolean true if the value was found in the XML text, false if the value was provided by DTD defaulting. | Improve this Doc View Source IsSpecified(String, String) Returns true unless the attribute value was provided by DTD defaulting. Declaration bool IsSpecified(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if the name has no Namespace URI. System.String localName The attribute's local name. Returns Type Description System.Boolean true if the value was found in the XML text, false if the value was provided by DTD defaulting. Remarks Remember that since DTDs do not \"understand\" namespaces, the namespace URI associated with an attribute may not have come from the DTD.The declaration will have applied to the attribute's qName ."
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.IDeclHandler.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.IDeclHandler.html",
    "title": "Interface IDeclHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDeclHandler SAX2 extension handler for DTD declaration events. Namespace : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public interface IDeclHandler Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This is an optional extension handler for SAX2 to provide more complete information about DTD declarations in an XML document. XML readers are not required to recognize this handler, and it is not part of core-only SAX2 distributions. Note that data-related DTD declarations (unparsed entities and notations) are already reported through the IDTDHandler interface. If you are using the declaration handler together with a lexical handler, all of the events will occur between the StartDTD(String, String, String) and the EndDTD() events. To set the DeclHandler for an XML reader, use the SetProperty(String, Object) method with the property name http://xml.org/sax/properties/declaration-handler and an object implementing this interface (or null) as the value. If the reader does not report declaration events, it will throw a SAXNotRecognizedException when you attempt to register the handler. Methods | Improve this Doc View Source AttributeDecl(String, String, String, String, String) Report an attribute type declaration. Declaration void AttributeDecl(string eName, string aName, string type, string mode, string value) Parameters Type Name Description System.String eName The name of the associated element. System.String aName The name of the attribute. System.String type A string representing the attribute type. System.String mode A string representing the attribute defaulting mode (\"#IMPLIED\", \"#REQUIRED\", or \"#FIXED\") or null if none of these applies. System.String value A string representing the attribute's default value, or null if there is none. Remarks Only the effective (first) declaration for an attribute will be reported.The type will be one of the strings \"CDATA\", \"ID\", \"IDREF\", \"IDREFS\", \"NMTOKEN\", \"NMTOKENS\", \"ENTITY\", \"ENTITIES\", a parenthesized token group with the separator \"|\" and all whitespace removed, or the word \"NOTATION\" followed by a space followed by a parenthesized token group with all whitespace removed. The value will be the value as reported to applications, appropriately normalized and with entity and character references expanded. Exceptions Type Condition SAXException The application may raise an exception. | Improve this Doc View Source ElementDecl(String, String) Report an element type declaration. Declaration void ElementDecl(string name, string model) Parameters Type Name Description System.String name The element type name. System.String model The content model as a normalized string. Remarks The content model will consist of the string \"EMPTY\", the string \"ANY\", or a parenthesised group, optionally followed by an occurrence indicator.The model will be normalized so that all parameter entities are fully resolved and all whitespace is removed,and will include the enclosing parentheses.Other normalization (such as removing redundant parentheses or simplifying occurrence indicators) is at the discretion of the parser. Exceptions Type Condition SAXException The application may raise an exception. | Improve this Doc View Source ExternalEntityDecl(String, String, String) Report a parsed external entity declaration. Declaration void ExternalEntityDecl(string name, string publicId, string systemId) Parameters Type Name Description System.String name The name of the entity. If it is a parameter entity, the name will begin with '%'. System.String publicId The entity's public identifier, or null if none was given. System.String systemId The entity's system identifier. Remarks Only the effective (first) declaration for each entity will be reported. If the system identifier is a URL, the parser must resolve it fully before passing it to the application. Exceptions Type Condition SAXException The application may raise an exception. See Also InternalEntityDecl(String, String) UnparsedEntityDecl ( System.String , System.String , System.String , System.String ) | Improve this Doc View Source InternalEntityDecl(String, String) Report an internal entity declaration. Declaration void InternalEntityDecl(string name, string value) Parameters Type Name Description System.String name The name of the entity. If it is a parameter entity, the name will begin with '%'. System.String value The replacement text of the entity. Remarks Only the effective (first) declaration for each entity will be reported.All parameter entities in the value will be expanded, but general entities will not. Exceptions Type Condition SAXException The application may raise an exception. See Also ExternalEntityDecl(String, String, String) UnparsedEntityDecl ( System.String , System.String , System.String , System.String )"
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.IEntityResolver2.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.IEntityResolver2.html",
    "title": "Interface IEntityResolver2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IEntityResolver2 Extended interface for mapping external entity references to input sources, or providing a missing external subset. The EntityResolver property is used to provide implementations of this interface to parsers. When a parser uses the methods in this interface, the ResolveEntity(String, String, String, String) method (in this interface) is used instead of the older (SAX 1.0) ResolveEntity(String, String) method. Inherited Members IEntityResolver.ResolveEntity(String, String) Namespace : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public interface IEntityResolver2 : IEntityResolver Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . If a SAX application requires the customized handling which this interface defines for external entities, it must ensure that it uses an XMLReader with the http://xml.org/sax/features/use-entity-resolver2 feature flag set to true (which is its default value when the feature is recognized). If that flag is unrecognized, or its value is false, or the resolver does not implement this interface, then only the IEntityResolver method will be used. That supports three categories of application that modify entity resolution. Old Style applications won't know about this interface; they will provide an IEntityResolver . Transitional Mode provide an IEntityResolver2 and automatically get the benefit of its methods in any systems (parsers or other tools) supporting it, due to polymorphism. Both Old Style and Transitional Mode applications will work with any SAX2 parser. New style applications will fail to run except on SAX2 parsers that support this particular feature. They will insist that feature flag have a value of \"true\", and the IEntityResolver2 implementation they provide might throw an exception if the original SAX 1.0 style entity resolution method is invoked. Methods | Improve this Doc View Source GetExternalSubset(String, String) Allows applications to provide an external subset for documents that don't explicitly define one. Documents with DOCTYPE declarations that omit an external subset can thus augment the declarations available for validation, entity processing, and attribute processing (normalization, defaulting, and reporting types including ID). This augmentation is reported through the StartDTD(String, String, String) method as if the document text had originally included the external subset; this callback is made before any internal subset data or errors are reported. This method can also be used with documents that have no DOCTYPE declaration.When the root element is encountered, but no DOCTYPE declaration has been seen, this method is invoked.If it returns a value for the external subset, that root element is declared to be the root element, giving the effect of splicing a DOCTYPE declaration at the end the prolog of a document that could not otherwise be valid. The sequence of parser callbacks in that case logically resembles this: ... comments and PIs from the prolog (as usual) StartDTD(\"rootName\", source.getPublicId (), source.getSystemId ()); StartEntity(\"[dtd]\"); ... declarations, comments, and PIs from the external subset EndEntity(\"[dtd]\"); EndDTD(); ... then the rest of the document(as usual) StartElement(..., \"rootName\", ...); Note that the InputSource gets no further resolution. Implementations of this method may wish to invoke ResolveEntity(String, String, String, String) to gain benefits such as use of local caches of DTD entities.Also, this method will never be used by a (non - validating) processor that is not including external parameter entities. Uses for this method include facilitating data validation when interoperating with XML processors that would always require undesirable network accesses for external entities, or which for other reasons adopt a \"no DTDs\" policy. Non - validation motives include forcing documents to include DTDs so that attributes are handled consistently. For example, an XPath processor needs to know which attibutes have type \"ID\" before it can process a widely used type of reference. Warning: Returning an external subset modifies the input document.By providing definitions for general entities, it can make a malformed document appear to be well formed. Declaration InputSource GetExternalSubset(string name, string baseURI) Parameters Type Name Description System.String name Identifies the document root element. This name comes from a DOCTYPE declaration (where available) or from the actual root element. System.String baseURI The document's base URI, serving as an additional hint for selecting the external subset. This is always an absolute URI, unless it is null because the XMLReader was given an InputSource without one. Returns Type Description InputSource An InputSource object describing the new external subset to be used by the parser, or null to indicate that no external subset is provided. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. | Improve this Doc View Source ResolveEntity(String, String, String, String) Allows applications to map references to external entities into input sources, or tell the parser it should use conventional URI resolution. This method is only called for external entities which have been properly declared. This method provides more flexibility than the IEntityResolver interface, supporting implementations of more complex catalogue schemes such as the one defined by the OASIS XML Catalogs specification. Parsers configured to use this resolver method will call it to determine the input source to use for any external entity being included because of a reference in the XML text. That excludes the document entity, and any external entity returned by GetExternalSubset(String, String) . When a(non - validating) processor is configured not to include a class of entities(parameter or general) through use of feature flags, this method is not invoked for such entities. Note that the entity naming scheme used here is the same one used in the ILexicalHandler , or in the SkippedEntity(String) method. Declaration InputSource ResolveEntity(string name, string publicId, string baseURI, string systemId) Parameters Type Name Description System.String name Identifies the external entity being resolved. Either \"[dtd]\" for the external subset, or a name starting with \"%\" to indicate a parameter entity, or else the name of a general entity. This is never null when invoked by a SAX2 System.String publicId The public identifier of the external entity being referenced (normalized as required by the XML specification), or null if none was supplied. System.String baseURI The URI with respect to which relative systemIDs are interpreted. This is always an absolute URI, unless it is null (likely because the IXMLReader was given an InputSource without one). This URI is defined by the XML specification to be the one associated with the \"<\" starting the relevant declaration. System.String systemId The system identifier of the external entity being referenced; either a relative or absolute URI. This is never null when invoked by a SAX2 parser; only declared entities, and any external subset, are resolved by such parsers. Returns Type Description InputSource An InputSource object describing the new input source to be used by the parser. Returning null directs the parser to resolve the system ID against the base URI and open a connection to resulting URI. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also EntityResolver"
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.ILexicalHandler.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.ILexicalHandler.html",
    "title": "Interface ILexicalHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ILexicalHandler SAX2 extension handler for lexical events. Namespace : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public interface ILexicalHandler Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This is an optional extension handler for SAX2 to provide lexical information about an XML document, such as comments and CDATA section boundaries. XML readers are not required to recognize this handler, and it is not part of core-only SAX2 distributions. The events in the lexical handler apply to the entire document, not just to the document element, and all lexical handler events must appear between the content handler's StartDocument and EndDocument events. To set the LexicalHandler for an XML reader, use the SetProperty(String, Object) method with the property name http://xml.org/sax/properties/lexical-handler and an object implementing this interface (or null) as the value. If the reader does not report lexical events, it will throw a SAXNotRecognizedException when you attempt to register the handler. Methods | Improve this Doc View Source Comment(Char[], Int32, Int32) Report an XML comment anywhere in the document. This callback will be used for comments inside or outside the document element, including comments in the external DTD subset(if read). Comments in the DTD must be properly nested inside start/endDTD and start/endEntity events(if used). Declaration void Comment(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch An array holding the characters in the comment. System.Int32 start The starting position in the array. System.Int32 length The number of characters to use from the array. Exceptions Type Condition SAXException The application may raise an exception. | Improve this Doc View Source EndCDATA() Report the end of a CDATA section. Declaration void EndCDATA() Exceptions Type Condition SAXException The application may raise an exception. See Also StartCDATA() | Improve this Doc View Source EndDTD() Report the end of DTD declarations. This method is intended to report the end of the DOCTYPE declaration; if the document has no DOCTYPE declaration, this method will not be invoked. Declaration void EndDTD() Exceptions Type Condition SAXException The application may raise an exception. See Also StartDTD(String, String, String) | Improve this Doc View Source EndEntity(String) Report the end of an entity. Declaration void EndEntity(string name) Parameters Type Name Description System.String name The name of the entity that is ending. Exceptions Type Condition SAXException The application may raise an exception. See Also StartEntity(String) | Improve this Doc View Source StartCDATA() Report the start of a CDATA section. Declaration void StartCDATA() Remarks The contents of the CDATA section will be reported through the regular Characters(Char[], Int32, Int32) event; this event is intended only to report the boundary. Exceptions Type Condition SAXException The application may raise an exception. See Also EndEntity(String) | Improve this Doc View Source StartDTD(String, String, String) Report the start of DTD declarations, if any. Declaration void StartDTD(string name, string publicId, string systemId) Parameters Type Name Description System.String name The document type name. System.String publicId The declared public identifier for the external DTD subset, or null if none was declared. System.String systemId The declared system identifier for the external DTD subset, or null if none was declared. (Note that this is not resolved against the document base URI.) Remarks This method is intended to report the beginning of the DOCTYPE declaration; if the document has no DOCTYPE declaration, this method will not be invoked. All declarations reported through IDTDHandler or IDeclHandler events must appear between the startDTD and EndDTD() events. Declarations are assumed to belong to the internal DTD subset unless they appear between StartEntity(String) and EndEntity(String) events. Comments and processing instructions from the DTD should also be reported between the StartDTD(String, String, String) and EndDTD() events, in their original order of(logical) occurrence; they are not required to appear in their correct locations relative to IDTDHandler or IDeclHandler events, however. Note that the start / endDTD events will appear within the start / endDocument events from IContentHandler and before the first StartElement(String, String, String, IAttributes) event. Exceptions Type Condition SAXException The application may raise an exception. | Improve this Doc View Source StartEntity(String) Report the beginning of some internal and external XML entities. Declaration void StartEntity(string name) Parameters Type Name Description System.String name The name of the entity. If it is a parameter entity, the name will begin with '%', and if it is the external DTD subset, it will be \"[dtd]\". Remarks The reporting of parameter entities (including the external DTD subset) is optional, and SAX2 drivers that report LexicalHandler events may not implement it; you can use the http://xml.org/sax/features/lexical-handler/parameter-entities feature to query or control the reporting of parameter entities. General entities are reported with their regular names, parameter entities have '%' prepended to their names, and the external DTD subset has the pseudo-entity name \"[dtd]\". When a SAX2 driver is providing these events, all other events must be properly nested within start/end entity events. There is no additional requirement that events from IDeclHandler or IDTDHandler be properly ordered. Note that skipped entities will be reported through the SkippedEntity(String) event, which is part of the ContentHandler interface. Because of the streaming event model that SAX uses, some entity boundaries cannot be reported under any circumstances: general entities within attribute values parameter entities within declarations These will be silently expanded, with no indication of where the original entity boundaries were. Note also that the boundaries of character references (which are not really entities anyway) are not reported. All start/endEntity events must be properly nested. Exceptions Type Condition SAXException The application may raise an exception. See Also EndEntity(String) InternalEntityDecl ( System.String , System.String ) ExternalEntityDecl ( System.String , System.String , System.String )"
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.ILocator2.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.ILocator2.html",
    "title": "Interface ILocator2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ILocator2 SAX2 extension to augment the entity information provided though a ILocator . Inherited Members ILocator.PublicId ILocator.SystemId ILocator.LineNumber ILocator.ColumnNumber Namespace : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public interface ILocator2 : ILocator Remarks If an implementation supports this extension, the Locator provided in SetDocumentLocator(ILocator) will implement this interface, and the http://xml.org/sax/features/use-locator2 feature flag will have the value true . This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . XMLReader implementations are not required to support this information, and it is not part of core-only SAX2 distributions. Properties | Improve this Doc View Source Encoding Returns the name of the character encoding for the entity. If the encoding was declared externally(for example, in a MIME Content-Type header), that will be the name returned.Else if there was an <?xml ...encoding='...'?> declaration at the start of the document, that encoding name will be returned. Otherwise the encoding will been inferred (normally to be UTF-8, or some UTF-16 variant), and that inferred name will be returned. When an InputSource is used to provide an entity's character stream, this method returns the encoding provided in that input stream. Note that some recent W3C specifications require that text in some encodings be normalized, using Unicode Normalization Form C, before processing.Such normalization must be performed by applications, and would normally be triggered based on the value returned by this method. Encoding names may be those used by the underlying JVM, and comparisons should be case-insensitive. Declaration Encoding Encoding { get; } Property Value Type Description Encoding | Improve this Doc View Source XMLVersion Returns the version of XML used for the entity. This will normally be the identifier from the current entity's <?xml version='...' ...?> declaration, or be defaulted by the parser. Declaration string XMLVersion { get; } Property Value Type Description System.String"
  },
  "api/Lucene.Net.Benchmarks/Sax.Ext.Locator2.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Ext.Locator2.html",
    "title": "Class Locator2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Locator2 SAX2 extension helper for holding additional Entity information, implementing the Locator2 interface. Inheritance System.Object Locator Locator2 Implements ILocator2 ILocator Inherited Members Locator.PublicId Locator.SystemId Locator.LineNumber Locator.ColumnNumber Namespace : Sax.Ext Assembly : Lucene.Net.Benchmark.dll Syntax public class Locator2 : Locator, ILocator2, ILocator Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . This is not part of core-only SAX2 distributions. Constructors | Improve this Doc View Source Locator2() Construct a new, empty Locator2 object. This will not normally be useful, since the main purpose of this class is to make a snapshot of an existing Locator . Declaration public Locator2() | Improve this Doc View Source Locator2(ILocator) Copy an existing Locator or Locator2 object. If the object implements Locator2 , values of the encoding and version strings are copied, otherwise they set to null . Declaration public Locator2(ILocator locator) Parameters Type Name Description ILocator locator The existing Locator object. Properties | Improve this Doc View Source Encoding Gets the current value of the encoding property. Declaration public Encoding Encoding { get; set; } Property Value Type Description Encoding | Improve this Doc View Source XMLVersion Gets the current value of the version property. Declaration public string XMLVersion { get; set; } Property Value Type Description System.String Implements ILocator2 ILocator"
  },
  "api/Lucene.Net.Benchmarks/Sax.Helpers.Attributes.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Helpers.Attributes.html",
    "title": "Class Attributes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Attributes Default implementation of the Attributes interface. Inheritance System.Object Attributes Attributes2 Implements IAttributes Namespace : Sax.Helpers Assembly : Lucene.Net.Benchmark.dll Syntax public class Attributes : object, IAttributes Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class provides a default implementation of the SAX2 Attributes interface, with the addition of manipulators so that the list can be modified or reused. There are two typical uses of this class: to take a persistent snapshot of an Attributes object in a StartElement(String, String, String, IAttributes) event; or to construct or modify an Attributes object in a SAX2 driver or filter. This class replaces the now-deprecated SAX1 AttributeListImpl class; in addition to supporting the updated Attributes interface rather than the deprecated IAttributeList interface, it also includes a much more efficient implementation using a single array rather than a set of Vectors. Constructors | Improve this Doc View Source Attributes() Construct a new, empty Attributes object. Declaration public Attributes() | Improve this Doc View Source Attributes(IAttributes) Copy an existing Attributes object. This constructor is especially useful inside a StartElement(String, String, String, IAttributes) . Declaration public Attributes(IAttributes atts) Parameters Type Name Description IAttributes atts The existing Attributes object. Properties | Improve this Doc View Source Length Return the number of attributes in the list. Declaration public virtual int Length { get; } Property Value Type Description System.Int32 See Also Length Methods | Improve this Doc View Source AddAttribute(String, String, String, String, String) Add an attribute to the end of the list. For the sake of speed, this method does no checking to see if the attribute is already in the list: that is the responsibility of the application. Declaration public virtual void AddAttribute(string uri, string localName, string qName, string type, string value) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if none is available or Namespace processing is not being performed. System.String localName The local name, or the empty string if Namespace processing is not being performed. System.String qName The qualified (prefixed) name, or the empty string if qualified names are not available. System.String type The attribute type as a string. System.String value The attribute value. | Improve this Doc View Source Clear() Clear the attribute list for reuse. Note that little memory is freed by this call: the current array is kept so it can be reused. Declaration public virtual void Clear() | Improve this Doc View Source GetIndex(String) Look up an attribute's index by qualified (prefixed) name. Declaration public virtual int GetIndex(string qName) Parameters Type Name Description System.String qName The qualified name. Returns Type Description System.Int32 The attribute's index, or -1 if none matches. See Also GetIndex(String) | Improve this Doc View Source GetIndex(String, String) Look up an attribute's index by Namespace name. Declaration public virtual int GetIndex(string uri, string localName) Parameters Type Name Description System.String uri The attribute's Namespace URI, or the empty string if none is available. System.String localName The attribute's local name. Returns Type Description System.Int32 The attribute's index, or -1 if none matches. Remarks In many cases, it will be more efficient to look up the name once and use the index query methods rather than using the name query methods repeatedly. See Also GetIndex(String, String) | Improve this Doc View Source GetLocalName(Int32) Return an attribute's local name. Declaration public virtual string GetLocalName(int index) Parameters Type Name Description System.Int32 index The attribute's index (zero-based). Returns Type Description System.String The attribute's local name, the empty string if none is available, or null if the index if out of range. See Also GetLocalName(Int32) | Improve this Doc View Source GetQName(Int32) Return an attribute's qualified (prefixed) name. Declaration public virtual string GetQName(int index) Parameters Type Name Description System.Int32 index The attribute's index (zero-based). Returns Type Description System.String The attribute's qualified name, the empty string if none is available, or null if the index is out of bounds. See Also GetQName(Int32) | Improve this Doc View Source GetType(Int32) Return an attribute's type by index. Declaration public virtual string GetType(int index) Parameters Type Name Description System.Int32 index The attribute's index (zero-based). Returns Type Description System.String The attribute's type, \"CDATA\" if the type is unknown, or null if the index is out of bounds. See Also GetType(Int32) | Improve this Doc View Source GetType(String) Look up an attribute's type by qualified (prefixed) name. Declaration public virtual string GetType(string qName) Parameters Type Name Description System.String qName The qualified name. Returns Type Description System.String The attribute's type, or null if there is no matching attribute. See Also GetType(String) | Improve this Doc View Source GetType(String, String) Look up an attribute's type by Namespace-qualified name. Declaration public virtual string GetType(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string for a name with no explicit Namespace URI. System.String localName The local name. Returns Type Description System.String The attribute's type, or null if there is no matching attribute. See Also GetType(String, String) | Improve this Doc View Source GetURI(Int32) Return an attribute's Namespace URI. Declaration public virtual string GetURI(int index) Parameters Type Name Description System.Int32 index The attribute's index (zero-based). Returns Type Description System.String The Namespace URI, the empty string if none is available, or null if the index is out of range. See Also GetURI(Int32) | Improve this Doc View Source GetValue(Int32) Return an attribute's value by index. Declaration public virtual string GetValue(int index) Parameters Type Name Description System.Int32 index The attribute's index (zero-based). Returns Type Description System.String The attribute's value or null if the index is out of bounds. See Also GetValue(Int32) | Improve this Doc View Source GetValue(String) Look up an attribute's value by qualified (prefixed) name. Declaration public virtual string GetValue(string qName) Parameters Type Name Description System.String qName The qualified name. Returns Type Description System.String The attribute's value, or null if there is no matching attribute. See Also GetValue(String) | Improve this Doc View Source GetValue(String, String) Look up an attribute's value by Namespace-qualified name. Declaration public virtual string GetValue(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string for a name with no explicit Namespace URI. System.String localName The local name. Returns Type Description System.String The attribute's value, or null if there is no matching attribute. See Also GetValue(String, String) | Improve this Doc View Source RemoveAttribute(Int32) Remove an attribute from the list. Declaration public virtual void RemoveAttribute(int index) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). | Improve this Doc View Source SetAttribute(Int32, String, String, String, String, String) Set an attribute in the list. For the sake of speed, this method does no checking for name conflicts or well-formedness: such checks are the responsibility of the application. Declaration public virtual void SetAttribute(int index, string uri, string localName, string qName, string type, string value) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.String uri The Namespace URI, or the empty string if none is available or Namespace processing is not being performed. System.String localName The local name, or the empty string if Namespace processing is not being performed. System.String qName The qualified name, or the empty string if qualified names are not available. System.String type The attribute type as a string. System.String value The attribute value. | Improve this Doc View Source SetAttributes(IAttributes) Copy an entire Attributes object. It may be more efficient to reuse an existing object rather than constantly allocating new ones. Declaration public virtual void SetAttributes(IAttributes atts) Parameters Type Name Description IAttributes atts The attributes to copy. | Improve this Doc View Source SetLocalName(Int32, String) Set the local name of a specific attribute. Declaration public virtual void SetLocalName(int index, string localName) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.String localName The attribute's local name, or the empty string for none. | Improve this Doc View Source SetQName(Int32, String) Set the qualified name of a specific attribute. Declaration public virtual void SetQName(int index, string qName) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.String qName The attribute's qualified name, or the empty string for none. | Improve this Doc View Source SetType(Int32, String) Set the type of a specific attribute. Declaration public virtual void SetType(int index, string type) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.String type The attribute's type. | Improve this Doc View Source SetURI(Int32, String) Set the Namespace URI of a specific attribute. Declaration public virtual void SetURI(int index, string uri) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.String uri The attribute's Namespace URI, or the empty string for none. | Improve this Doc View Source SetValue(Int32, String) Set the value of a specific attribute. Declaration public virtual void SetValue(int index, string value) Parameters Type Name Description System.Int32 index The index of the attribute (zero-based). System.String value The attribute's value. Implements IAttributes"
  },
  "api/Lucene.Net.Benchmarks/Sax.Helpers.DefaultHandler.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Helpers.DefaultHandler.html",
    "title": "Class DefaultHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultHandler Default base class for SAX2 event handlers. Inheritance System.Object DefaultHandler DefaultHandler2 Parser Implements IEntityResolver IDTDHandler IContentHandler IErrorHandler Namespace : Sax.Helpers Assembly : Lucene.Net.Benchmark.dll Syntax public class DefaultHandler : object, IEntityResolver, IDTDHandler, IContentHandler, IErrorHandler Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class is available as a convenience base class for SAX2 applications: it provides default implementations for all of the callbacks in the four core SAX2 handler classes: IEntityResolver IDTDHandler IContentHandler IErrorHandler Application writers can extend this class when they need to implement only part of an interface; parser writers can instantiate this class to provide default handlers when the application has not supplied its own. This class replaces the deprecated SAX1 Sax.HandlerBase class. Methods | Improve this Doc View Source Characters(Char[], Int32, Int32) Receive notification of character data inside an element. By default, do nothing. Application writers may override this method to take specific actions for each chunk of character data (such as adding the data to a node or buffer, or printing it to a file). Declaration public virtual void Characters(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch The characters. System.Int32 start The start position in the character array. System.Int32 length The number of characters to use from the character array. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also Characters ( System.Char [], System.Int32 , System.Int32 ) | Improve this Doc View Source EndDocument() Receive notification of the end of the document. By default, do nothing. Application writers may override this method in a subclass to take specific actions at the end of a document (such as finalising a tree or closing an output file). Declaration public virtual void EndDocument() Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also EndDocument () | Improve this Doc View Source EndElement(String, String, String) Receive notification of the end of an element. By default, do nothing. Application writers may override this method in a subclass to take specific actions at the end of each element (such as finalising a tree node or writing output to a file). Declaration public virtual void EndElement(string uri, string localName, string qName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed. System.String localName The local name (without prefix), or the empty string if Namespace processing is not being performed. System.String qName The qualified name (with prefix), or the empty string if qualified names are not available. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also EndElement ( System.String , System.String , System.String ) | Improve this Doc View Source EndPrefixMapping(String) Receive notification of the end of a Namespace mapping. By default, do nothing. Application writers may override this method in a subclass to take specific actions at the end of each prefix mapping. Declaration public virtual void EndPrefixMapping(string prefix) Parameters Type Name Description System.String prefix The Namespace prefix being declared. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also EndPrefixMapping ( System.String ) | Improve this Doc View Source Error(SAXParseException) Receive notification of a recoverable parser error. The default implementation does nothing. Application writers may override this method in a subclass to take specific actions for each error, such as inserting the message in a log file or printing it to the console. Declaration public virtual void Error(SAXParseException e) Parameters Type Name Description SAXParseException e The warning information encoded as an exception. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also Warning ( SAXParseException ) SAXParseException | Improve this Doc View Source FatalError(SAXParseException) Report a fatal XML parsing error. The default implementation throws a SAXParseException . Application writers may override this method in a subclass if they need to take specific actions for each fatal error (such as collecting all of the errors into a single report): in any case, the application must stop all regular processing when this method is invoked, since the document is no longer reliable, and the parser may no longer report parsing events. Declaration public virtual void FatalError(SAXParseException e) Parameters Type Name Description SAXParseException e The error information encoded as an exception. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also FatalError ( SAXParseException ) SAXParseException | Improve this Doc View Source IgnorableWhitespace(Char[], Int32, Int32) Receive notification of ignorable whitespace in element content. By default, do nothing. Application writers may override this method to take specific actions for each chunk of ignorable whitespace (such as adding data to a node or buffer, or printing it to a file). Declaration public virtual void IgnorableWhitespace(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch The whitespace characters. System.Int32 start The start position in the character array. System.Int32 length The number of characters to use from the character array. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also IgnorableWhitespace ( System.Char [], System.Int32 , System.Int32 ) | Improve this Doc View Source NotationDecl(String, String, String) Receive notification of a notation declaration. By default, do nothing. Application writers may override this method in a subclass if they wish to keep track of the notations declared in a document. Declaration public virtual void NotationDecl(string name, string publicId, string systemId) Parameters Type Name Description System.String name The notation name. System.String publicId The notation public identifier, or null if not available. System.String systemId The notation system identifier. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also NotationDecl ( System.String , System.String , System.String ) | Improve this Doc View Source ProcessingInstruction(String, String) Receive notification of a processing instruction. By default, do nothing. Application writers may override this method in a subclass to take specific actions for each processing instruction, such as setting status variables or invoking other methods. Declaration public virtual void ProcessingInstruction(string target, string data) Parameters Type Name Description System.String target The processing instruction target. System.String data The processing instruction data, or null if none is supplied. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also ProcessingInstruction ( System.String , System.String ) | Improve this Doc View Source ResolveEntity(String, String) Resolve an external entity. Always return null, so that the parser will use the system identifier provided in the XML document. This method implements the SAX default behaviour: application writers can override it in a subclass to do special translations such as catalog lookups or URI redirection. Declaration public virtual InputSource ResolveEntity(string publicId, string systemId) Parameters Type Name Description System.String publicId The public identifer, or null if none is available. System.String systemId The system identifier provided in the XML document. Returns Type Description InputSource Remarks The new input source, or null to require the default behaviour. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also ResolveEntity ( System.String , System.String ) | Improve this Doc View Source SetDocumentLocator(ILocator) Receive a Locator object for document events. By default, do nothing. Application writers may override this method in a subclass if they wish to store the locator for use with other document events. Declaration public virtual void SetDocumentLocator(ILocator locator) Parameters Type Name Description ILocator locator A locator for all SAX document events. See Also SetDocumentLocator ( ILocator ) ILocator | Improve this Doc View Source SkippedEntity(String) Receive notification of a skipped entity. By default, do nothing. Application writers may override this method in a subclass to take specific actions for each processing instruction, such as setting status variables or invoking other methods. Declaration public virtual void SkippedEntity(string name) Parameters Type Name Description System.String name The name of the skipped entity. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also ProcessingInstruction ( System.String , System.String ) | Improve this Doc View Source StartDocument() Receive notification of the beginning of the document. By default, do nothing. Application writers may override this method in a subclass to take specific actions at the beginning of a document (such as allocating the root node of a tree or creating an output file). Declaration public virtual void StartDocument() Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also StartDocument () | Improve this Doc View Source StartElement(String, String, String, IAttributes) Receive notification of the start of an element. By default, do nothing. Application writers may override this method in a subclass to take specific actions at the start of each element (such as allocating a new tree node or writing output to a file). Declaration public virtual void StartElement(string uri, string localName, string qName, IAttributes attributes) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed. System.String localName The local name (without prefix), or the empty string if Namespace processing is not being performed. System.String qName The qualified name (with prefix), or the empty string if qualified names are not available. IAttributes attributes The attributes attached to the element. If there are no attributes, it shall be an empty Attributes object. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also StartElement ( System.String , System.String , System.String , IAttributes ) | Improve this Doc View Source StartPrefixMapping(String, String) Receive notification of the start of a Namespace mapping. By default, do nothing. Application writers may override this method in a subclass to take specific actions at the start of each Namespace prefix scope (such as storing the prefix mapping). Declaration public virtual void StartPrefixMapping(string prefix, string uri) Parameters Type Name Description System.String prefix The Namespace prefix being declared. System.String uri The Namespace URI mapped to the prefix. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also StartPrefixMapping ( System.String , System.String ) | Improve this Doc View Source UnparsedEntityDecl(String, String, String, String) Receive notification of an unparsed entity declaration. By default, do nothing. Application writers may override this method in a subclass to keep track of the unparsed entities declared in a document. Declaration public virtual void UnparsedEntityDecl(string name, string publicId, string systemId, string notationName) Parameters Type Name Description System.String name The entity name. System.String publicId The entity public identifier, or null if not available. System.String systemId The entity system identifier. System.String notationName The name of the associated notation. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also UnparsedEntityDecl ( System.String , System.String , System.String , System.String ) | Improve this Doc View Source Warning(SAXParseException) Receive notification of a parser warning. The default implementation does nothing. Application writers may override this method in a subclass to take specific actions for each warning, such as inserting the message in a log file or printing it to the console. Declaration public virtual void Warning(SAXParseException e) Parameters Type Name Description SAXParseException e The warning information encoded as an exception. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also Warning ( SAXParseException ) SAXParseException Implements IEntityResolver IDTDHandler IContentHandler IErrorHandler See Also IEntityResolver IDTDHandler IContentHandler IErrorHandler"
  },
  "api/Lucene.Net.Benchmarks/Sax.Helpers.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Helpers.html",
    "title": "Namespace Sax.Helpers | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Sax.Helpers Classes Attributes Default implementation of the Attributes interface. DefaultHandler Default base class for SAX2 event handlers. Locator Provide an optional convenience implementation of ILocator . NamespaceSupport Encapsulate Namespace logic for use by applications using SAX, or internally by SAX drivers. This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class encapsulates the logic of Namespace processing: it tracks the declarations currently in force for each context and automatically processes qualified XML names into their Namespace parts; it can also be used in reverse for generating XML qnames from Namespaces. Namespace support objects are reusable, but the reset method must be invoked between each session. Here is a simple session: string parts[] = new string[3]; NamespaceSupport support = new NamespaceSupport(); support.PushContext(); support.DeclarePrefix(\"\", \"http://www.w3.org/1999/xhtml\"); support.DeclarePrefix(\"dc\", \"http://www.purl.org/dc#\"); parts = support.ProcessName(\"p\", parts, false); Console.WriteLine(\"Namespace URI: \" + parts[0]); Console.WriteLine(\"Local name: \" + parts[1]); Console.WriteLine(\"Raw name: \" + parts[2]); parts = support.ProcessName(\"dc:title\", parts, false); Console.WriteLine(\"Namespace URI: \" + parts[0]); Console.WriteLine(\"Local name: \" + parts[1]); Console.WriteLine(\"Raw name: \" + parts[2]); support.PopContext(); Note that this class is optimized for the use case where most elements do not contain Namespace declarations: if the same prefix/URI mapping is repeated for each context (for example), this class will be somewhat less efficient. Although SAX drivers (parsers) may choose to use this class to implement namespace handling, they are not required to do so. Applications must track namespace information themselves if they want to use namespace information. XMLFilter Base class for deriving an XML filter. This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class is designed to sit between an IXMLReader and the client application's event handlers. By default, it does nothing but pass requests up to the reader and events on to the handlers unmodified, but subclasses can override specific methods to modify the event stream or the configuration requests as they pass through."
  },
  "api/Lucene.Net.Benchmarks/Sax.Helpers.Locator.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Helpers.Locator.html",
    "title": "Class Locator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Locator Provide an optional convenience implementation of ILocator . Inheritance System.Object Locator Locator2 Implements ILocator Namespace : Sax.Helpers Assembly : Lucene.Net.Benchmark.dll Syntax public class Locator : object, ILocator Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class is available mainly for application writers, who can use it to make a persistent snapshot of a locator at any point during a document parse: ILocator locator; ILocator startloc; public void SetLocator(ILocator locator) { // note the locator this.locator = locator; } public void StartDocument() { // save the location of the start of the document // for future use. ILocator startloc = new Locator(locator); } Normally, parser writers will not use this class, since it is more efficient to provide location information only when requested, rather than constantly updating a ILocator object. Constructors | Improve this Doc View Source Locator() Zero-argument constructor. This will not normally be useful, since the main purpose of this class is to make a snapshot of an existing ILocator . Declaration public Locator() | Improve this Doc View Source Locator(ILocator) Copy constructor. Create a persistent copy of the current state of a locator. When the original locator changes, this copy will still keep the original values (and it can be used outside the scope of DocumentHandler methods). Declaration public Locator(ILocator locator) Parameters Type Name Description ILocator locator The locator to copy. Properties | Improve this Doc View Source ColumnNumber Gets the saved column number (1-based). Returns the column number as an integer, or -1 if none is available. Declaration public int ColumnNumber { get; set; } Property Value Type Description System.Int32 See Also ColumnNumber | Improve this Doc View Source LineNumber Gets the saved line number (1-based). Returns the line number as an integer, or -1 if none is available. Declaration public int LineNumber { get; set; } Property Value Type Description System.Int32 See Also LineNumber | Improve this Doc View Source PublicId Gets the public identifier as a string, or null if none is available. Declaration public string PublicId { get; set; } Property Value Type Description System.String See Also PublicId | Improve this Doc View Source SystemId Gets the system identifier as a string, or null if none is available. Declaration public string SystemId { get; set; } Property Value Type Description System.String See Also SystemId Implements ILocator"
  },
  "api/Lucene.Net.Benchmarks/Sax.Helpers.NamespaceSupport.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Helpers.NamespaceSupport.html",
    "title": "Class NamespaceSupport | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NamespaceSupport Encapsulate Namespace logic for use by applications using SAX, or internally by SAX drivers. This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class encapsulates the logic of Namespace processing: it tracks the declarations currently in force for each context and automatically processes qualified XML names into their Namespace parts; it can also be used in reverse for generating XML qnames from Namespaces. Namespace support objects are reusable, but the reset method must be invoked between each session. Here is a simple session: string parts[] = new string[3]; NamespaceSupport support = new NamespaceSupport(); support.PushContext(); support.DeclarePrefix(\"\", \"http://www.w3.org/1999/xhtml\"); support.DeclarePrefix(\"dc\", \"http://www.purl.org/dc#\"); parts = support.ProcessName(\"p\", parts, false); Console.WriteLine(\"Namespace URI: \" + parts[0]); Console.WriteLine(\"Local name: \" + parts[1]); Console.WriteLine(\"Raw name: \" + parts[2]); parts = support.ProcessName(\"dc:title\", parts, false); Console.WriteLine(\"Namespace URI: \" + parts[0]); Console.WriteLine(\"Local name: \" + parts[1]); Console.WriteLine(\"Raw name: \" + parts[2]); support.PopContext(); Note that this class is optimized for the use case where most elements do not contain Namespace declarations: if the same prefix/URI mapping is repeated for each context (for example), this class will be somewhat less efficient. Although SAX drivers (parsers) may choose to use this class to implement namespace handling, they are not required to do so. Applications must track namespace information themselves if they want to use namespace information. Inheritance System.Object NamespaceSupport Namespace : Sax.Helpers Assembly : Lucene.Net.Benchmark.dll Syntax public class NamespaceSupport : object Constructors | Improve this Doc View Source NamespaceSupport() Create a new Namespace support object. Declaration public NamespaceSupport() Fields | Improve this Doc View Source NSDECL The namespace declaration URI as a constant. The value is http://www.w3.org/xmlns/2000/ , as defined in a backwards-incompatible erratum to the \"Namespaces in XML\" recommendation. Because that erratum postdated SAX2, SAX2 defaults to the original recommendation, and does not normally use this URI. This is the Namespace URI that is optionally applied to xmlns and xmlns:* attributes, which are used to declare namespaces. Declaration public const string NSDECL = null Field Value Type Description System.String See Also SetNamespaceDeclUris(Boolean) IsNamespaceDeclUris | Improve this Doc View Source XMLNS The XML Namespace URI as a constant. The value is http://www.w3.org/XML/1998/namespace as defined in the \"Namespaces in XML\" * recommendation. This is the Namespace URI that is automatically mapped to the \"xml\" prefix. Declaration public const string XMLNS = null Field Value Type Description System.String Properties | Improve this Doc View Source IsNamespaceDeclUris Returns true if namespace declaration attributes are placed into a namespace. This behavior is not the default. Declaration public bool IsNamespaceDeclUris { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source DeclarePrefix(String, String) Declare a Namespace prefix. All prefixes must be declared before they are referenced. For example, a SAX driver (parser) would scan an element's attributes in two passes: first for namespace declarations, then a second pass using ProcessName(String, String[], Boolean) to interpret prefixes against (potentially redefined) prefixes. This method declares a prefix in the current Namespace context; the prefix will remain in force until this context is popped, unless it is shadowed in a descendant context. To declare the default element Namespace, use the empty string as the prefix. Note that you must not declare a prefix after you've pushed and popped another Namespace context, or treated the declarations phase as complete by processing a prefixed name. Note that there is an asymmetry in this library: GetPrefix(String) will not return the \"\" prefix, even if you have declared a default element namespace. To check for a default namespace, you have to look it up explicitly using GetUri(String) . This asymmetry exists to make it easier to look up prefixes for attribute names, where the default prefix is not allowed. Declaration public bool DeclarePrefix(string prefix, string uri) Parameters Type Name Description System.String prefix The prefix to declare, or the empty string to indicate the default element namespace. This may never have the value \"xml\" or \"xmlns\". System.String uri The Namespace URI to associate with the prefix. Returns Type Description System.Boolean true if the prefix was legal, false otherwise See Also ProcessName(String, String[], Boolean) GetUri(String) GetPrefix(String) | Improve this Doc View Source GetDeclaredPrefixes() Return an enumeration of all prefixes declared in this context. The empty (default) prefix will be included in this enumeration; note that this behaviour differs from that of GetPrefix(String) and GetPrefixes() . Declaration public IEnumerable GetDeclaredPrefixes() Returns Type Description IEnumerable An enumeration of all prefixes declared in this context. See Also GetPrefixes() GetUri(String) | Improve this Doc View Source GetPrefix(String) Return one of the prefixes mapped to a Namespace URI. If more than one prefix is currently mapped to the same URI, this method will make an arbitrary selection; if you want all of the prefixes, use the GetPrefixes() method instead. Note: this will never return the empty (default) prefix; to check for a default prefix, use the GetUri(String) method with an argument of \"\". Declaration public string GetPrefix(string uri) Parameters Type Name Description System.String uri the namespace URI Returns Type Description System.String one of the prefixes currently mapped to the URI supplied, or null if none is mapped or if the URI is assigned to the default namespace See Also GetPrefixes(String) GetUri(String) | Improve this Doc View Source GetPrefixes() Return an enumeration of all prefixes whose declarations are active in the current context. This includes declarations from parent contexts that have not been overridden. Note: if there is a default prefix, it will not be returned in this enumeration; check for the default prefix using the GetUri(String) with an argument of \"\". Declaration public IEnumerable GetPrefixes() Returns Type Description IEnumerable An enumeration of prefixes (never empty). See Also GetDeclaredPrefixes() GetUri(String) | Improve this Doc View Source GetPrefixes(String) Return an enumeration of all prefixes for a given URI whose declarations are active in the current context. This includes declarations from parent contexts that have not been overridden. This method returns prefixes mapped to a specific Namespace URI. The xml: prefix will be included. If you want only one prefix that's mapped to the Namespace URI, and you don't care which one you get, use the GetPrefix(String) method instead. Note: the empty (default) prefix is never included in this enumeration; to check for the presence of a default Namespace, use the GetUri(String) method with an argument of \"\". Declaration public IEnumerable GetPrefixes(string uri) Parameters Type Name Description System.String uri The Namespace URI. Returns Type Description IEnumerable An enumeration of prefixes (never empty). See Also GetPrefix(String) GetDeclaredPrefixes() GetUri(String) | Improve this Doc View Source GetUri(String) Look up a prefix and get the currently-mapped Namespace URI. This method looks up the prefix in the current context. Use the empty string (\"\") for the default Namespace. Declaration public string GetUri(string prefix) Parameters Type Name Description System.String prefix The prefix to look up. Returns Type Description System.String The associated Namespace URI, or null if the prefix is undeclared in this context. See Also GetPrefix(String) GetPrefixes() | Improve this Doc View Source PopContext() Revert to the previous Namespace context. Normally, you should pop the context at the end of each XML element. After popping the context, all Namespace prefix mappings that were previously in force are restored. You must not attempt to declare additional Namespace prefixes after popping a context, unless you push another context first. Declaration public void PopContext() See Also PushContext() | Improve this Doc View Source ProcessName(String, String[], Boolean) Process a raw XML qualified name, after all declarations in the current context have been handled by DeclarePrefix(String, String) . This method processes a raw XML qualified name in the current context by removing the prefix and looking it up among the prefixes currently declared. The return value will be the array supplied by the caller, filled in as follows: parts[0] The Namespace URI, or an empty string if none is in use. parts[1] The local name (without prefix). parts[2] The original raw name. All of the strings in the array will be internalized. If the raw name has a prefix that has not been declared, then the return value will be null. Note that attribute names are processed differently than element names: an unprefixed element name will receive the default Namespace (if any), while an unprefixed attribute name will not. Declaration public string[] ProcessName(string qName, string[] parts, bool isAttribute) Parameters Type Name Description System.String qName The XML qualified name to be processed. System.String [] parts An array supplied by the caller, capable of holding at least three members. System.Boolean isAttribute A flag indicating whether this is an attribute name (true) or an element name (false). Returns Type Description System.String [] The supplied array holding three internalized strings representing the Namespace URI (or empty string), the local name, and the XML qualified name; or null if there is an undeclared prefix. See Also DeclarePrefix(String, String) | Improve this Doc View Source PushContext() Start a new Namespace context. The new context will automatically inherit the declarations of its parent context, but it will also keep track of which declarations were made within this context. Event callback code should start a new context once per element. This means being ready to call this in either of two places. For elements that don't include namespace declarations, the StartElement(String, String, String, IAttributes) callback is the right place. For elements with such a declaration, it'd done in the first StartPrefixMapping(String, String) callback. A boolean flag can be used to track whether a context has been started yet. When either of those methods is called, it checks the flag to see if a new context needs to be started. If so, it starts the context and sets the flag. After StartElement(String, String, String, IAttributes) does that, it always clears the flag. Normally, SAX drivers would push a new context at the beginning of each XML element. Then they perform a first pass over the attributes to process all namespace declarations, making StartPrefixMapping(String, String) callbacks. Then a second pass is made, to determine the namespace-qualified names for all attributes and for the element name. Finally all the information for the StartElement(String, String, String, IAttributes) callback is available, so it can then be made. The Namespace support object always starts with a base context already in force: in this context, only the \"xml\" prefix is declared. Declaration public void PushContext() See Also IContentHandler PopContext() | Improve this Doc View Source Reset() Reset this Namespace support object for reuse. It is necessary to invoke this method before reusing the Namespace support object for a new session. If namespace declaration URIs are to be supported, that flag must also be set to a non-default value. Declaration public void Reset() See Also SetNamespaceDeclUris(Boolean) | Improve this Doc View Source SetNamespaceDeclUris(Boolean) Controls whether namespace declaration attributes are placed into the NSDECL namespace by ProcessName(String, String[], Boolean) . This may only be changed before any contexts have been pushed. Declaration public void SetNamespaceDeclUris(bool value) Parameters Type Name Description System.Boolean value"
  },
  "api/Lucene.Net.Benchmarks/Sax.Helpers.XMLFilter.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.Helpers.XMLFilter.html",
    "title": "Class XMLFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class XMLFilter Base class for deriving an XML filter. This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class is designed to sit between an IXMLReader and the client application's event handlers. By default, it does nothing but pass requests up to the reader and events on to the handlers unmodified, but subclasses can override specific methods to modify the event stream or the configuration requests as they pass through. Inheritance System.Object XMLFilter XMLWriter Implements IXMLFilter IXMLReader IEntityResolver IDTDHandler IContentHandler IErrorHandler Namespace : Sax.Helpers Assembly : Lucene.Net.Benchmark.dll Syntax public class XMLFilter : object, IXMLFilter, IXMLReader, IEntityResolver, IDTDHandler, IContentHandler, IErrorHandler Constructors | Improve this Doc View Source XMLFilter() Construct an empty XML filter, with no parent. This filter will have no parent: you must assign a parent before you start a parse or do any configuration with setFeature or setProperty, unless you use this as a pure event consumer rather than as an IXMLReader . Declaration public XMLFilter() See Also SetFeature ( System.String , System.Boolean ) SetProperty ( System.String , System.Object ) Parent | Improve this Doc View Source XMLFilter(IXMLReader) Construct an XML filter with the specified parent. Declaration public XMLFilter(IXMLReader parent) Parameters Type Name Description IXMLReader parent The parent See Also Parent Properties | Improve this Doc View Source ContentHandler Gets or Sets the content event handler. Declaration public IContentHandler ContentHandler { get; set; } Property Value Type Description IContentHandler | Improve this Doc View Source DTDHandler Gets or Sets the DTD event handler. Declaration public IDTDHandler DTDHandler { get; set; } Property Value Type Description IDTDHandler | Improve this Doc View Source EntityResolver Gets or Sets the entity resolver. Declaration public IEntityResolver EntityResolver { get; set; } Property Value Type Description IEntityResolver | Improve this Doc View Source ErrorHandler Gets or Sets the error event handler. Declaration public IErrorHandler ErrorHandler { get; set; } Property Value Type Description IErrorHandler | Improve this Doc View Source Parent Gets or sets the parent reader. Declaration public IXMLReader Parent { get; set; } Property Value Type Description IXMLReader Remarks This is the IXMLReader from which this filter will obtain its events and to which it will pass its configuration requests. The parent may itself be another filter. If there is no parent reader set, any attempt to parse or to set or get a feature or property will fail. Methods | Improve this Doc View Source Characters(Char[], Int32, Int32) Filter a character data event. Declaration public virtual void Characters(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch An array of characters. System.Int32 start The starting position in the array. System.Int32 length The number of characters to use from the array. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source EndDocument() Filter an end document event. Declaration public virtual void EndDocument() Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source EndElement(String, String, String) Filter an end element event. Declaration public virtual void EndElement(string uri, string localName, string qName) Parameters Type Name Description System.String uri The element's Namespace URI, or the empty string. System.String localName The element's local name, or the empty string. System.String qName The element's qualified (prefixed) name, or the empty string. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source EndPrefixMapping(String) Filter an end Namespace prefix mapping event. Declaration public virtual void EndPrefixMapping(string prefix) Parameters Type Name Description System.String prefix The Namespace prefix. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source Error(SAXParseException) Filter an error event. Declaration public virtual void Error(SAXParseException e) Parameters Type Name Description SAXParseException e The error as an exception. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source FatalError(SAXParseException) Filter a fatal error event. Declaration public virtual void FatalError(SAXParseException e) Parameters Type Name Description SAXParseException e The error as an exception. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source GetFeature(String) Look up the value of a feature. This will always fail if the parent is null. Declaration public virtual bool GetFeature(string name) Parameters Type Name Description System.String name The feature name. Returns Type Description System.Boolean The current value of the feature. Exceptions Type Condition SAXNotRecognizedException If the feature value can't be assigned or retrieved from the parent. SAXNotSupportedException When the parent recognizes the feature name but cannot determine its value at this time. | Improve this Doc View Source GetProperty(String) Look up the value of a property. Declaration public virtual object GetProperty(string name) Parameters Type Name Description System.String name The property name. Returns Type Description System.Object The current value of the property. Exceptions Type Condition SAXNotRecognizedException If the property value can't be assigned or retrieved from the parent. SAXNotSupportedException When the parent recognizes the property name but cannot determine its value at this time. | Improve this Doc View Source IgnorableWhitespace(Char[], Int32, Int32) Filter an ignorable whitespace event. Declaration public virtual void IgnorableWhitespace(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch An array of characters. System.Int32 start The starting position in the array. System.Int32 length The number of characters to use from the array. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source NotationDecl(String, String, String) Filter a notation declaration event. Declaration public virtual void NotationDecl(string name, string publicId, string systemId) Parameters Type Name Description System.String name The notation name. System.String publicId The notation's public identifier, or null. System.String systemId The notation's system identifier, or null. See Also SAXException | Improve this Doc View Source Parse(InputSource) Parse an XML document. The application can use this method to instruct the XML reader to begin parsing an XML document from any valid input source (a character stream, a byte stream, or a URI). Applications may not invoke this method while a parse is in progress (they should create a new XMLReader instead for each nested XML document). Once a parse is complete, an application may reuse the same XMLReader object, possibly with a different input source. Configuration of the XMLReader object (such as handler bindings and values established for feature flags and properties) is unchanged by completion of a parse, unless the definition of that aspect of the configuration explicitly specifies other behavior. (For example, feature flags or properties exposing characteristics of the document being parsed.) During the parse, the XMLReader will provide information about the XML document through the registered event handlers. This method is synchronous: it will not return until parsing has ended. If a client application wants to terminate parsing early, it should throw an exception. Declaration public virtual void Parse(InputSource input) Parameters Type Name Description InputSource input The input source for the top-level of the XML document. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also InputSource Parse(String) IEntityResolver IDTDHandler IContentHandler IErrorHandler | Improve this Doc View Source Parse(String) Parse a document. Declaration public virtual void Parse(string systemId) Parameters Type Name Description System.String systemId The system identifier as a fully-qualified URI. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. | Improve this Doc View Source ProcessingInstruction(String, String) Filter a processing instruction event. Declaration public virtual void ProcessingInstruction(string target, string data) Parameters Type Name Description System.String target The processing instruction target. System.String data The text following the target. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source ResolveEntity(String, String) Filter an external entity resolution. Declaration public virtual InputSource ResolveEntity(string publicId, string systemId) Parameters Type Name Description System.String publicId The entity's public identifier, or null. System.String systemId The entity's system identifier. Returns Type Description InputSource A new InputSource or null for the default. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source SetDocumentLocator(ILocator) Filter a new document locator event. Declaration public virtual void SetDocumentLocator(ILocator locator) Parameters Type Name Description ILocator locator The document locator. | Improve this Doc View Source SetFeature(String, Boolean) Set the value of a feature. This will always fail if the parent is null. Declaration public virtual void SetFeature(string name, bool value) Parameters Type Name Description System.String name The feature name. System.Boolean value The requested feature value. Exceptions Type Condition SAXNotRecognizedException If the feature value can't be assigned or retrieved from the parent. SAXNotSupportedException When the parent recognizes the feature name but cannot set the requested value. | Improve this Doc View Source SetProperty(String, Object) Set the value of a property. This will always fail if the parent is null. Declaration public virtual void SetProperty(string name, object value) Parameters Type Name Description System.String name The property name. System.Object value The requested property value. Exceptions Type Condition SAXNotRecognizedException If the property value can't be assigned or retrieved from the parent. SAXNotSupportedException When the parent recognizes the property name but cannot set the requested value. | Improve this Doc View Source SkippedEntity(String) Filter a skipped entity event. Declaration public virtual void SkippedEntity(string name) Parameters Type Name Description System.String name The name of the skipped entity. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source StartDocument() Filter a start document event. Declaration public virtual void StartDocument() Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source StartElement(String, String, String, IAttributes) Filter a start element event. Declaration public virtual void StartElement(string uri, string localName, string qName, IAttributes atts) Parameters Type Name Description System.String uri The element's Namespace URI, or the empty string. System.String localName The element's local name, or the empty string. System.String qName The element's qualified (prefixed) name, or the empty string. IAttributes atts The element's attributes. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source StartPrefixMapping(String, String) Filter a start Namespace prefix mapping event. Declaration public virtual void StartPrefixMapping(string prefix, string uri) Parameters Type Name Description System.String prefix The Namespace prefix. System.String uri The Namespace URI. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source UnparsedEntityDecl(String, String, String, String) Filter an unparsed entity declaration event. Declaration public virtual void UnparsedEntityDecl(string name, string publicId, string systemId, string notationName) Parameters Type Name Description System.String name The entity name. System.String publicId The entity's public identifier, or null. System.String systemId The entity's system identifier, or null. System.String notationName The name of the associated notation. Exceptions Type Condition SAXException The client may throw an exception during processing. | Improve this Doc View Source Warning(SAXParseException) Filter a warning event. Declaration public virtual void Warning(SAXParseException e) Parameters Type Name Description SAXParseException e The warning as an exception. Exceptions Type Condition SAXException The client may throw an exception during processing. Implements IXMLFilter IXMLReader IEntityResolver IDTDHandler IContentHandler IErrorHandler See Also IXMLFilter IXMLReader IEntityResolver IDTDHandler IContentHandler IErrorHandler"
  },
  "api/Lucene.Net.Benchmarks/Sax.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.html",
    "title": "Namespace Sax | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Sax Classes InputSource A single input source for an XML entity. SAXException Encapsulate a general SAX error or warning. SAXNotRecognizedException Exception class for an unrecognized identifier. SAXNotSupportedException Exception class for an unsupported operation. SAXParseException Encapsulate an XML parse error or warning. Interfaces IAttributes Interface for a list of XML attributes. IContentHandler Receive notification of the logical content of a document. IDTDHandler Receive notification of basic DTD-related events. IEntityResolver Basic interface for resolving entities. IErrorHandler Basic interface for SAX error handlers. ILocator Interface for associating a SAX event with a document location. IXMLFilter Interface for an XML filter. IXMLReader Interface for an XML filter."
  },
  "api/Lucene.Net.Benchmarks/Sax.IAttributes.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.IAttributes.html",
    "title": "Interface IAttributes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAttributes Interface for a list of XML attributes. Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface IAttributes Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This interface allows access to a list of attributes in three different ways: by attribute index; by Namespace-qualified name; or by qualified (prefixed) name. The list will not contain attributes that were declared IMPLIED but not specified in the start tag. It will also not contain attributes used as Namespace declarations(xmlns*) unless the http://xml.org/sax/features/namespace-prefixes feature is set to true (it is false by default). Because SAX2 conforms to the original \"Namespaces in XML\" recommendation, it normally does not give namespace declaration attributes a namespace URI. Some SAX2 parsers may support using an optional feature flag ( http://xml.org/sax/features/xmlns-uris ) to request that those attributes be given URIs, conforming to a later backwards-incompatible revision of that recommendation. (The attribute's \"local name\" will be the prefix, or \"xmlns\" when defining a default element namespace.) For portability, handler code should always resolve that conflict, rather than requiring parsers that can change the setting of that feature flag. If the namespace-prefixes feature (see above) is false , access by qualified name may not be available; if the http://xml.org/sax/features/namespaces feature is false , access by Namespace-qualified names may not be available. This interface replaces the now-deprecated SAX1 { @link org.xml.sax.AttributeList AttributeList } interface, which does not contain Namespace support.In addition to Namespace support, it adds the getIndex methods (below). The order of attributes in the list is unspecified, and will vary from implementation to implementation. Properties | Improve this Doc View Source Length Return the number of attributes in the list. Once you know the number of attributes, you can iterate through the list. Declaration int Length { get; } Property Value Type Description System.Int32 The number of attributes in the list. See Also GetURI(Int32) GetLocalName(Int32) GetQName(Int32) GetType(Int32) GetValue(Int32) Methods | Improve this Doc View Source GetIndex(String) Look up the index of an attribute by XML qualified (prefixed) name. Declaration int GetIndex(string qName) Parameters Type Name Description System.String qName The qualified (prefixed) name. Returns Type Description System.Int32 The index of the attribute, or -1 if it does not appear in the list. | Improve this Doc View Source GetIndex(String, String) Look up the index of an attribute by Namespace name. Declaration int GetIndex(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if the name has no Namespace URI. System.String localName The attribute's local name. Returns Type Description System.Int32 The index of the attribute, or -1 if it does not appear in the list. | Improve this Doc View Source GetLocalName(Int32) Look up an attribute's local name by index. Declaration string GetLocalName(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.String The local name, or the empty string if Namespace processing is not being performed, or null if the index is out of range. See Also Length | Improve this Doc View Source GetQName(Int32) Look up an attribute's XML qualified (prefixed) name by index. Declaration string GetQName(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.String The XML qualified name, or the empty string if none is available, or null if the index is out of range. See Also Length | Improve this Doc View Source GetType(Int32) Look up an attribute's type by index. Declaration string GetType(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.String The attribute's type as a string, or null if the index is out of range. Remarks The attribute type is one of the strings \"CDATA\", \"ID\", \"IDREF\", \"IDREFS\", \"NMTOKEN\", \"NMTOKENS\", \"ENTITY\", \"ENTITIES\", or \"NOTATION\" (always in upper case). If the parser has not read a declaration for the attribute, or if the parser does not report attribute types, then it must return the value \"CDATA\" as stated in the XML 1.0 Recommendation (clause 3.3.3, \"Attribute-Value Normalization\"). For an enumerated attribute that is not a notation, the parser will report the type as \"NMTOKEN\". See Also Length | Improve this Doc View Source GetType(String) Look up an attribute's type by XML qualified (prefixed) name. See GetType(Int32) for a description of the possible types. Declaration string GetType(string qName) Parameters Type Name Description System.String qName The XML qualified name. Returns Type Description System.String The attribute type as a string, or null if the attribute is not in the list or if qualified names are not available. | Improve this Doc View Source GetType(String, String) Look up an attribute's type by Namespace name. See GetType(Int32) for a description of the possible types. Declaration string GetType(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty String if the name has no Namespace URI. System.String localName The local name of the attribute. Returns Type Description System.String The attribute type as a string, or null if the attribute is not in the list or if Namespace processing is not being performed. | Improve this Doc View Source GetURI(Int32) Look up an attribute's Namespace URI by index. Declaration string GetURI(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.String The Namespace URI, or the empty string if none is available, or null if the index is out of range. See Also GetURI(Int32) | Improve this Doc View Source GetValue(Int32) Look up an attribute's value by index. Declaration string GetValue(int index) Parameters Type Name Description System.Int32 index The attribute index (zero-based). Returns Type Description System.String The attribute's value as a string, or null if the index is out of range. Remarks If the attribute value is a list of tokens (IDREFS, ENTITIES, or NMTOKENS), the tokens will be concatenated into a single string with each token separated by a single space. See Also Length | Improve this Doc View Source GetValue(String) Look up an attribute's value by XML qualified (prefixed) name. See GetValue(Int32) for a description of the possible values. Declaration string GetValue(string qName) Parameters Type Name Description System.String qName Returns Type Description System.String | Improve this Doc View Source GetValue(String, String) Look up an attribute's value by Namespace name. See GetValue(Int32) for a description of the possible values. Declaration string GetValue(string uri, string localName) Parameters Type Name Description System.String uri The Namespace URI, or the empty String if the name has no Namespace URI. System.String localName The local name of the attribute. Returns Type Description System.String The attribute value as a string, or null if the attribute is not in the list. See Also Attributes IDeclHandler"
  },
  "api/Lucene.Net.Benchmarks/Sax.IContentHandler.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.IContentHandler.html",
    "title": "Interface IContentHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IContentHandler Receive notification of the logical content of a document. Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface IContentHandler Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This is the main interface that most SAX applications implement: if the application needs to be informed of basic parsing events, it implements this interface and registers an instance with the SAX parser using the ContentHandler method.The parser uses the instance to report basic document-related events like the start and end of elements and character data. The order of events in this interface is very important, and mirrors the order of information in the document itself.For example, all of an element's content (character data, processing instructions, and/or subelements) will appear, in order, between the startElement event and the corresponding endElement event. This interface is similar to the now-deprecated SAX 1.0 DocumentHandler interface, but it adds support for Namespaces and for reporting skipped entities(in non-validating XML processors). Methods | Improve this Doc View Source Characters(Char[], Int32, Int32) Receive notification of character data. Declaration void Characters(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch the characters from the XML document System.Int32 start the start position in the array System.Int32 length the number of characters to read from the array Remarks The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity so that the Locator provides useful information. The application must not attempt to read from the array outside of the specified range. Individual characters may consist of more than one Java char value.There are two important cases where this happens, because characters can't be represented in just sixteen bits. In one case, characters are represented in a Surrogate Pair , using two special Unicode values. Such characters are in the so-called \"Astral Planes\", with a code point above U+FFFF.A second case involves composite characters, such as a base character combining with one or more accent characters. Your code should not assume that algorithms using char -at-a-time idioms will be working in character units; in some cases they will split characters. This is relevant wherever XML permits arbitrary characters, such as attribute values, processing instruction data, and comments as well as in data reported from this method. It's also generally relevant whenever Java code manipulates internationalized text; the issue isn't unique to XML. Note that some parsers will report whitespace in element content using the IgnorableWhitespace(Char[], Int32, Int32) method rather than this one (validating parsers must do so). Exceptions Type Condition SAXException any SAX exception, possibly wrapping another exception See Also IgnorableWhitespace(Char[], Int32, Int32) ILocator | Improve this Doc View Source EndDocument() Receive notification of the end of a document. Declaration void EndDocument() Remarks There is an apparent contradiction between the documentation for this method and the documentation for FatalError(SAXParseException) . Until this ambiguity is resolved in a future major release, clients should make no assumptions about whether EndDocument() will or will not be invoked when the parser has reported a FatalError(SAXParseException) or thrown an exception. The SAX parser will invoke this method only once, and it will be the last method invoked during the parse.The parser shall not invoke this method until it has either abandoned parsing (because of an unrecoverable error) or reached the end of input. Exceptions Type Condition SAXException any SAX exception, possibly wrapping another exception See Also StartDocument() | Improve this Doc View Source EndElement(String, String, String) Receive notification of the end of an element. Declaration void EndElement(string uri, string localName, string qName) Parameters Type Name Description System.String uri the Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed System.String localName the local name (without prefix), or the empty string if Namespace processing is not being performed System.String qName the qualified XML name (with prefix), or the empty string if qualified names are not available Remarks The SAX parser will invoke this method at the end of every element in the XML document; there will be a corresponding StartElement(String, String, String, IAttributes) event for every endElement event (even when the element is empty). For information on the names, see StartElement(String, String, String, IAttributes) . Exceptions Type Condition SAXException any SAX exception, possibly wrapping another exception | Improve this Doc View Source EndPrefixMapping(String) End the scope of a prefix-URI mapping. Declaration void EndPrefixMapping(string prefix) Parameters Type Name Description System.String prefix the prefix that was being mapped. This is the empty string when a default mapping scope ends. Remarks See StartPrefixMapping(String, String) for details. These events will always occur immediately after the corresponding EndElement(String, String, String) event, but the order of EndPrefixMapping(String) events is not otherwise guaranteed. Exceptions Type Condition SAXException the client may throw an exception during processing See Also EndPrefixMapping(String) EndElement(String, String, String) | Improve this Doc View Source IgnorableWhitespace(Char[], Int32, Int32) Receive notification of ignorable whitespace in element content. Declaration void IgnorableWhitespace(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch the characters from the XML document System.Int32 start the start position in the array System.Int32 length the number of characters to read from the array Remarks Validating Parsers must use this method to report each chunk of whitespace in element content (see the W3C XML 1.0 recommendation, section 2.10): non-validating parsers may also use this method if they are capable of parsing and using content models. SAX parsers may return all contiguous whitespace in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity, so that the Locator provides useful information. The application must not attempt to read from the array outside of the specified range. Exceptions Type Condition SAXException any SAX exception, possibly wrapping another exception See Also Characters(Char[], Int32, Int32) | Improve this Doc View Source ProcessingInstruction(String, String) Receive notification of a processing instruction. Declaration void ProcessingInstruction(string target, string data) Parameters Type Name Description System.String target the processing instruction target System.String data the processing instruction data, or null if none was supplied. The data does not include any whitespace separating it from the target Remarks The Parser will invoke this method once for each processing instruction found: note that processing instructions may occur before or after the main document element. A SAX parser must never report an XML declaration(XML 1.0, section 2.8) or a text declaration(XML 1.0, section 4.3.1) using this method. Like Characters(Char[], Int32, Int32) , processing instruction data may have characters that need more than one char value. Exceptions Type Condition SAXException any SAX exception, possibly wrapping another exception | Improve this Doc View Source SetDocumentLocator(ILocator) Receive an object for locating the origin of SAX document events. Declaration void SetDocumentLocator(ILocator locator) Parameters Type Name Description ILocator locator an object that can return the location of any SAX document event Remarks SAX parsers are strongly encouraged (though not absolutely required) to supply a locator: if it does so, it must supply the locator to the application by invoking this method before invoking any of the other methods in the ContentHandler interface. The locator allows the application to determine the end position of any document-related event, even if the parser is not reporting an error. Typically, the application will use this information for reporting its own errors (such as character content that does not match an application's business rules). The information returned by the locator is probably not sufficient for use with a search engine. Note that the locator will return correct information only during the invocation SAX event callbacks after StartDocument() returns and before EndDocument() is called. The application should not attempt to use it at any other time. See Also ILocator | Improve this Doc View Source SkippedEntity(String) Receive notification of a skipped entity. This is not called for entity references within markup constructs such as element start tags or markup declarations. (The XML recommendation requires reporting skipped external entities. SAX also reports internal entity expansion/non-expansion, except within markup constructs.) The Parser will invoke this method each time the entity is skipped.Non-validating processors may skip entities if they have not seen the declarations(because, for example, the entity was declared in an external DTD subset). All processors may skip external entities, depending on the values of the http://xml.org/sax/features/external-general-entities and the http://xml.org/sax/features/external-general-entities properties. Declaration void SkippedEntity(string name) Parameters Type Name Description System.String name the name of the skipped entity. If it is a parameter entity, the name will begin with '%', and if it is the external DTD subset, it will be the string \"[dtd]\" See Also SAXException | Improve this Doc View Source StartDocument() Receive notification of the beginning of a document. Declaration void StartDocument() Remarks The SAX parser will invoke this method only once, before any other event callbacks (except for SetDocumentLocator(ILocator) . Exceptions Type Condition SAXException any SAX exception, possibly wrapping another exception See Also EndDocument() | Improve this Doc View Source StartElement(String, String, String, IAttributes) Receive notification of the beginning of an element. The Parser will invoke this method at the beginning of every element in the XML document; there will be a corresponding EndElement(String, String, String) event for every StartElement(String, String, String, IAttributes) event (even when the element is empty). All of the element's content will be reported, in order, before the corresponding EndElement(String, String, String) event. This event allows up to three name components for each element: the Namespace URI; the local name; and the qualified (prefixed) name. Any or all of these may be provided, depending on the values of the http://xml.org/sax/features/namespaces and the http://xml.org/sax/features/namespace-prefixes properties: the Namespace URI and local name are required when the namespaces property is true (the default), and are optional when the namespaces property is false (if one is specified, both must be); the qualified name is required when the namespace-prefixes property is true , and is optional when the namespace-prefixes property is false (the default). Note that the attribute list provided will contain only attributes with explicit values (specified or defaulted): IMPLIED attributes will be omitted. The attribute list will contain attributes used for Namespace declarations (xmlns/// attributes) only if the http://xml.org/sax/features/namespace-prefixes property is true (it is false by default, and support for a true value is optional). Like Characters(Char[], Int32, Int32) , attribute values may have characters that need more than one char value. Declaration void StartElement(string uri, string localName, string qName, IAttributes atts) Parameters Type Name Description System.String uri uri the Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed System.String localName the local name (without prefix), or the empty string if Namespace processing is not being performed System.String qName the qualified name (with prefix), or the empty string if qualified names are not available IAttributes atts the attributes attached to the element. If there are no attributes, it shall be an empty IAttributes object. The value of this object after StartElement(String, String, String, IAttributes) returns is undefined Exceptions Type Condition SAXException any SAX exception, possibly wrapping another exception See Also EndElement(String, String, String) IAttributes Attributes | Improve this Doc View Source StartPrefixMapping(String, String) Begin the scope of a prefix-URI Namespace mapping. Declaration void StartPrefixMapping(string prefix, string uri) Parameters Type Name Description System.String prefix the Namespace prefix being declared. An empty string is used for the default element namespace, which has no prefix. System.String uri the Namespace URI the prefix is mapped to Remarks The information from this event is not necessary for normal Namespace processing: the SAX XML reader will automatically replace prefixes for element and attribute names when the http://xml.org/sax/features/namespaces feature is true (the default). There are cases, however, when applications need to use prefixes in character data or in attribute values, where they cannot safely be expanded automatically; the start/endPrefixMapping event supplies the information to the application to expand prefixes in those contexts itself, if necessary. Note that start/endPrefixMapping events are not guaranteed to be properly nested relative to each other: all startPrefixMapping events will occur immediately before the corresponding StartElement(String, String, String, IAttributes) event, and all EndPrefixMapping(String) events will occur immediately after the corresponding EndElement(String, String, String) event, but their order is not otherwise guaranteed. There should never be start/endPrefixMapping events for the \"xml\" prefix, since it is predeclared and immutable. Exceptions Type Condition SAXException the client may throw an exception during processing See Also EndPrefixMapping(String) StartElement(String, String, String, IAttributes) See Also IXMLReader IDTDHandler IErrorHandler"
  },
  "api/Lucene.Net.Benchmarks/Sax.IDTDHandler.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.IDTDHandler.html",
    "title": "Interface IDTDHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDTDHandler Receive notification of basic DTD-related events. Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface IDTDHandler Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. If a SAX application needs information about notations and unparsed entities, then the application implements this interface and registers an instance with the SAX parser using the parser's setDTDHandler method. The parser uses the instance to report notation and unparsed entity declarations to the application. Note that this interface includes only those DTD events that the XML recommendation requires processors to report: notation and unparsed entity declarations. The SAX parser may report these events in any order, regardless of the order in which the notations and unparsed entities were declared; however, all DTD events must be reported after the document handler's startDocument event, and before the first startElement event. (If the ILexicalHandler is used, these events must also be reported before the endDTD event.) It is up to the application to store the information for future use(perhaps in a hash table or object tree). If the application encounters attributes of type \"NOTATION\", \"ENTITY\", or \"ENTITIES\", it can use the information that it obtained through this interface to find the entity and/or notation corresponding with the attribute value. Methods | Improve this Doc View Source NotationDecl(String, String, String) Receive notification of a notation declaration event. Declaration void NotationDecl(string name, string publicId, string systemId) Parameters Type Name Description System.String name The notation name. System.String publicId The notation's public identifier, or null if none was given. System.String systemId The notation's system identifier, or null if none was given. Remarks It is up to the application to record the notation for later reference, if necessary; notations may appear as attribute values and in unparsed entity declarations, and are sometime used with processing instruction target names. At least one of publicId and systemId must be non-null. If a system identifier is present, and it is a URL, the SAX parser must resolve it fully before passing it to the application through this event. There is no guarantee that the notation declaration will be reported before any unparsed entities that use it. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also UnparsedEntityDecl(String, String, String, String) IAttributes | Improve this Doc View Source UnparsedEntityDecl(String, String, String, String) Receive notification of an unparsed entity declaration event. Declaration void UnparsedEntityDecl(string name, string publicId, string systemId, string notationName) Parameters Type Name Description System.String name The unparsed entity's name. System.String publicId The entity's public identifier, or null if none was given. System.String systemId The entity's system identifier. System.String notationName The name of the associated notation. Remarks Note that the notation name corresponds to a notation reported by the NotationDecl(String, String, String) event. It is up to the application to record the entity for later reference, if necessary; unparsed entities may appear as attribute values. If the system identifier is a URL, the parser must resolve it fully before passing it to the application. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also NotationDecl(String, String, String) IAttributes See Also DTDHandler"
  },
  "api/Lucene.Net.Benchmarks/Sax.IEntityResolver.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.IEntityResolver.html",
    "title": "Interface IEntityResolver | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IEntityResolver Basic interface for resolving entities. Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface IEntityResolver Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. If a SAX application needs to implement customized handling for external entities, it must implement this interface and register an instance with the SAX driver using the EntityResolver property. The XML reader will then allow the application to intercept any external entities(including the external DTD subset and external parameter entities, if any) before including them. Many SAX applications will not need to implement this interface, but it will be especially useful for applications that build XML documents from databases or other specialised input sources, or for applications that use URI types other than URLs. The following resolver would provide the application with a special character stream for the entity with the system identifier \" http://www.myhost.com/today&quot ;: public class MyResolver : IEntityResolver { public InputSource ResolveEntity (string publicId, string systemId) { if (systemId.Equals(\"http://www.myhost.com/today\", StringComparison.Ordinal)) { // return a special input source MyReader reader = new MyReader(); return new InputSource(reader); } else { // use the default behaviour return null; } } } The application can also use this interface to redirect system identifiers to local URIs or to look up replacements in a catalog (possibly by using the public identifier). Methods | Improve this Doc View Source ResolveEntity(String, String) Allow the application to resolve external entities. Declaration InputSource ResolveEntity(string publicId, string systemId) Parameters Type Name Description System.String publicId The public identifier of the external entity being referenced, or null if none was supplied. System.String systemId The system identifier of the external entity being referenced. Returns Type Description InputSource An InputSource object describing the new input source, or null to request that the parser open a regular URI connection to the system identifier. Remarks The parser will call this method before opening any external entity except the top-level document entity.Such entities include the external DTD subset and external parameter entities referenced within the DTD(in either case, only if the parser reads external parameter entities), and external general entities referenced within the document element(if the parser reads external general entities). The application may request that the parser locate the entity itself, that it use an alternative URI, or that it use data provided by the application(as a character or byte input stream). Application writers can use this method to redirect external system identifiers to secure and/or local URIs, to look up public identifiers in a catalogue, or to read an entity from a database or other input source(including, for example, a dialog box). Neither XML nor SAX specifies a preferred policy for using public or system IDs to resolve resources.However, SAX specifies how to interpret any InputSource returned by this method, and that if none is returned, then the system ID will be dereferenced as a URL. If the system identifier is a URL, the SAX parser must resolve it fully before reporting it to the application. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also InputSource See Also EntityResolver InputSource"
  },
  "api/Lucene.Net.Benchmarks/Sax.IErrorHandler.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.IErrorHandler.html",
    "title": "Interface IErrorHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IErrorHandler Basic interface for SAX error handlers. Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface IErrorHandler Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. If a SAX application needs to implement customized error handling, it must implement this interface and then register an instance with the XML reader using the ErrorHandler property. The parser will then report all errors and warnings through this interface. WARNING: If an application does not register an ErrorHandler, XML parsing errors will go unreported, except that SAXParseException s will be thrown for fatal errors. In order to detect validity errors, an ErrorHandler that does something with Error(SAXParseException) calls must be registered. For XML processing errors, a SAX driver must use this interface in preference to throwing an exception: it is up to the application to decide whether to throw an exception for different types of errors and warnings.Note, however, that there is no requirement that the parser continue to report additional errors after a call to FatalError(SAXParseException) . In other words, a SAX driver class may throw an exception after reporting any fatalError. Also parsers may throw appropriate exceptions for non - XML errors. For example, Parse(InputSource) would throw an for errors accessing entities or the document. Methods | Improve this Doc View Source Error(SAXParseException) Receive notification of a recoverable error. Declaration void Error(SAXParseException exception) Parameters Type Name Description SAXParseException exception The error information encapsulated in a SAX parse exception. Remarks This corresponds to the definition of \"error\" in section 1.2 of the W3C XML 1.0 Recommendation.For example, a validating parser would use this callback to report the violation of a validity constraint.The default behaviour is to take no action. The SAX parser must continue to provide normal parsing events after invoking this method: it should still be possible for the application to process the document through to the end. If the application cannot do so, then the parser should report a fatal error even if the XML recommendation does not require it to do so. Filters may use this method to report other, non-XML errors as well. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also SAXParseException | Improve this Doc View Source FatalError(SAXParseException) Receive notification of a non-recoverable error. Declaration void FatalError(SAXParseException exception) Parameters Type Name Description SAXParseException exception The error information encapsulated in a SAX parse exception. Remarks There is an apparent contradiction between the documentation for this method and the documentation for EndDocument() . Until this ambiguity is resolved in a future major release, clients should make no assumptions about whether EndDocument() will or will not be invoked when the parser has reported a FatalError() or thrown an exception. This corresponds to the definition of \"fatal error\" in section 1.2 of the W3C XML 1.0 Recommendation.For example, a parser would use this callback to report the violation of a well-formedness constraint. The application must assume that the document is unusable after the parser has invoked this method, and should continue (if at all) only for the sake of collecting additional error messages: in fact, SAX parsers are free to stop reporting any other events once this method has been invoked. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also SAXParseException | Improve this Doc View Source Warning(SAXParseException) Receive notification of a warning. Declaration void Warning(SAXParseException exception) Parameters Type Name Description SAXParseException exception The warning information encapsulated in a SAX parse exception. Remarks SAX parsers will use this method to report conditions that are not errors or fatal errors as defined by the XML recommendation.The default behaviour is to take no action. The SAX parser must continue to provide normal parsing events after invoking this method: it should still be possible for the application to process the document through to the end. Filters may use this method to report other, non-XML warnings as well. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also SAXParseException See Also ErrorHandler SAXParseException"
  },
  "api/Lucene.Net.Benchmarks/Sax.ILocator.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.ILocator.html",
    "title": "Interface ILocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ILocator Interface for associating a SAX event with a document location. Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface ILocator Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. If a SAX parser provides location information to the SAX application, it does so by implementing this interface and then passing an instance to the application using the content handler's SetDocumentLocator(ILocator) method.The application can use the object to obtain the location of any other SAX event in the XML source document. Note that the results returned by the object will be valid only during the scope of each callback method: the application will receive unpredictable results if it attempts to use the locator at any other time, or after parsing completes. SAX parsers are not required to supply a locator, but they are very strongly encouraged to do so. If the parser supplies a locator, it must do so before reporting any other document events. If no locator has been set by the time the application receives the StartDocument() event, the application should assume that a locator is not available. Properties | Improve this Doc View Source ColumnNumber Return the column number where the current document event ends. This is one-based number of Java char values since the last line end. Warning: The return value from the method is intended only as an approximation for the sake of diagnostics; it is not intended to provide sufficient information to edit the character content of the original XML document. For example, when lines contain combining character sequences, wide characters, surrogate pairs, or bi-directional text, the value may not correspond to the column in a text editor's display. The return value is an approximation of the column number in the document entity or external parsed entity where the markup triggering the event appears. If possible, the SAX driver should provide the line position of the first character after the text associated with the document event. The first column in each line is column 1. Returns the column number, or -1 if none is available. Declaration int ColumnNumber { get; } Property Value Type Description System.Int32 See Also LineNumber | Improve this Doc View Source LineNumber Return the line number where the current document event ends. Lines are delimited by line ends, which are defined in the XML specification. Warning: The return value from the method is intended only as an approximation for the sake of diagnostics; it is not intended to provide sufficient information to edit the character content of the original XML document. In some cases, these \"line\" numbers match what would be displayed as columns, and in others they may not match the source text due to internal entity expansion. The return value is an approximation of the line number in the document entity or external parsed entity where the markup triggering the event appears. If possible, the SAX driver should provide the line position of the first character after the text associated with the document event. The first line is line 1. Returns the line number, or -1 if none is available. Declaration int LineNumber { get; } Property Value Type Description System.Int32 See Also ColumnNumber | Improve this Doc View Source PublicId Gets the public identifier for the current document event. The return value is the public identifier of the document entity or of the external parsed entity in which the markup triggering the event appears. Returns a string containing the public identifier, or null if none is available. Declaration string PublicId { get; } Property Value Type Description System.String See Also SystemId | Improve this Doc View Source SystemId Return the system identifier for the current document event. The return value is the system identifier of the document entity or of the external parsed entity in which the markup triggering the event appears. If the system identifier is a URL, the parser must resolve it fully before passing it to the application. For example, a file name must always be provided as a file:... URL, and other kinds of relative URI are also resolved against their bases. Returns a string containing the system identifier, or null if none is available. Declaration string SystemId { get; } Property Value Type Description System.String See Also PublicId See Also SetDocumentLocator ( ILocator )"
  },
  "api/Lucene.Net.Benchmarks/Sax.InputSource.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.InputSource.html",
    "title": "Class InputSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InputSource A single input source for an XML entity. Inheritance System.Object InputSource Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public class InputSource : object Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class allows a SAX application to encapsulate information about an input source in a single object, which may include a public identifier, a system identifier, a byte stream (possibly with a specified encoding), and/or a character stream. There are two places that the application can deliver an input source to the parser: as the argument to the IParser.Parse(InputSource) method, or as the return value of the ResolveEntity(String, String) method. The SAX parser will use the InputSource object to determine how to read XML input. If there is a character stream available, the parser will read that stream directly, disregarding any text encoding declaration found in that stream. If there is no character stream, but there is a byte stream, the parser will use that byte stream, using the encoding specified in the InputSource or else (if no encoding is specified) autodetecting the character encoding using an algorithm such as the one in the XML specification. If neither a character stream nor a byte stream is available, the parser will attempt to open a URL connection to the resource identified by the system identifier. An InputSource object belongs to the application: the SAX parser shall never modify it in any way (it may modify a copy if necessary). However, standard processing of both byte and character streams is to close them on as part of end-of-parse cleanup, so applications should not attempt to re-use such streams after they have been handed to a parser. Constructors | Improve this Doc View Source InputSource() Zero-argument default constructor. Declaration public InputSource() See Also PublicId SystemId Stream TextReader Encoding | Improve this Doc View Source InputSource(Stream) Create a new input source with a byte stream. Declaration public InputSource(Stream byteStream) Parameters Type Name Description Stream byteStream The raw byte stream containing the document. Remarks Application writers should use SystemId to provide a base for resolving relative URIs, may use PublicId to include a public identifier, and may use Encoding to specify the object's character encoding. See Also PublicId SystemId Encoding Stream TextReader | Improve this Doc View Source InputSource(String) Create a new input source with a system identifier. Declaration public InputSource(string systemId) Parameters Type Name Description System.String systemId The system identifier (URI). Remarks Applications may use PublicId to include a public identifier as well, or Encoding to specify the character encoding, if known. If the system identifier is a URL, it must be fully resolved (it may not be a relative URL). See Also PublicId SystemId Stream TextReader Encoding | Improve this Doc View Source InputSource(TextReader) Create a new input source with a character stream. Declaration public InputSource(TextReader characterStream) Parameters Type Name Description TextReader characterStream Remarks Application writers should use SystemId to provide a base for resolving relative URIs, and may use PublicId to include a public identifier. The character stream shall not include a byte order mark. See Also PublicId SystemId Stream TextReader Properties | Improve this Doc View Source Encoding Gets or Sets the character encoding. Declaration public virtual Encoding Encoding { get; set; } Property Value Type Description Encoding Remarks The encoding must be a string acceptable for an XML encoding declaration(see section 4.3.3 of the XML 1.0 recommendation). This method has no effect when the application provides a character stream. See Also SystemId Stream | Improve this Doc View Source PublicId Gets or Sets the public identifier for this input source. Declaration public virtual string PublicId { get; set; } Property Value Type Description System.String Remarks The public identifier is always optional: if the application writer includes one, it will be provided as part of the location information. See Also PublicId PublicId | Improve this Doc View Source Stream Gets or Sets the byte stream for this input source. Declaration public virtual Stream Stream { get; set; } Property Value Type Description Stream Remarks The SAX parser will ignore this if there is also a character stream specified, but it will use a byte stream in preference to opening a URI connection itself. If the application knows the character encoding of the byte stream, it should set it with the setEncoding method. See Also Encoding Stream | Improve this Doc View Source SystemId Gets or Sets the system identifier for this input source. Declaration public virtual string SystemId { get; set; } Property Value Type Description System.String Remarks The system identifier is optional if there is a byte stream or a character stream, but it is still useful to provide one, since the application can use it to resolve relative URIs and can include it in error messages and warnings(the parser will attempt to open a connection to the URI only if there is no byte stream or character stream specified). If the application knows the character encoding of the object pointed to by the system identifier, it can register the encoding using the Encoding property setter. If the system identifier is a URL, it must be fully resolved(it may not be a relative URL). See Also Encoding SystemId SystemId SystemId | Improve this Doc View Source TextReader Gets or Sets the character stream for this input source. Declaration public virtual TextReader TextReader { get; set; } Property Value Type Description TextReader Remarks If there is a character stream specified, the SAX parser will ignore any byte stream and will not attempt to open a URI connection to the system identifier. See Also Parse ( InputSource ) ResolveEntity ( System.String , System.String )"
  },
  "api/Lucene.Net.Benchmarks/Sax.IXMLFilter.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.IXMLFilter.html",
    "title": "Interface IXMLFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IXMLFilter Interface for an XML filter. Inherited Members IXMLReader.GetFeature(String) IXMLReader.SetFeature(String, Boolean) IXMLReader.GetProperty(String) IXMLReader.SetProperty(String, Object) IXMLReader.EntityResolver IXMLReader.DTDHandler IXMLReader.ContentHandler IXMLReader.ErrorHandler IXMLReader.Parse(InputSource) IXMLReader.Parse(String) Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface IXMLFilter : IXMLReader Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. An XML filter is like an XML reader, except that it obtains its events from another XML reader rather than a primary source like an XML document or database.Filters can modify a stream of events as they pass on to the final application. The XMLFilterImpl helper class provides a convenient base for creating SAX2 filters, by passing on all IEntityResolver , IDTDHandler , IContentHandler and IErrorHandler events automatically. Properties | Improve this Doc View Source Parent Gets or sets the parent reader. Returns the parent filter, or null if none has been set. Declaration IXMLReader Parent { get; set; } Property Value Type Description IXMLReader Remarks This method allows the application to link or query the parent reader (which may be another filter). It is generally a bad idea to perform any operations on the parent reader directly: they should all pass through this filter."
  },
  "api/Lucene.Net.Benchmarks/Sax.IXMLReader.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.IXMLReader.html",
    "title": "Interface IXMLReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IXMLReader Interface for an XML filter. Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public interface IXMLReader Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. An XML filter is like an XML reader, except that it obtains its events from another XML reader rather than a primary source like an XML document or database.Filters can modify a stream of events as they pass on to the final application. The IXMLFilter helper class provides a convenient base for creating SAX2 filters, by passing on all IEntityResolver , IDTDHandler , IContentHandler and IErrorHandler events automatically. Properties | Improve this Doc View Source ContentHandler Gets or Sets a content event handler. Declaration IContentHandler ContentHandler { get; set; } Property Value Type Description IContentHandler Remarks If the application does not register a content handler, all content events reported by the SAX parser will be silently ignored. Applications may register a new or different handler in the middle of a parse, and the SAX parser must begin using the new handler immediately. | Improve this Doc View Source DTDHandler Gets or Sets a DTD event handler. Declaration IDTDHandler DTDHandler { get; set; } Property Value Type Description IDTDHandler Remarks If the application does not register a DTD handler, all DTD events reported by the SAX parser will be silently ignored. Applications may register a new or different handler in the middle of a parse, and the SAX parser must begin using the new handler immediately. | Improve this Doc View Source EntityResolver Gets or Sets an entity resolver. Declaration IEntityResolver EntityResolver { get; set; } Property Value Type Description IEntityResolver Remarks If the application does not register an entity resolver, the IXMLReader will perform its own default resolution. Applications may register a new or different resolver in the middle of a parse, and the SAX parser must begin using the new resolver immediately. | Improve this Doc View Source ErrorHandler Gets or Sets an error event handler. Declaration IErrorHandler ErrorHandler { get; set; } Property Value Type Description IErrorHandler Remarks If the application does not register an error handler, all error events reported by the SAX parser will be silently ignored; however, normal processing may not continue. It is highly recommended that all SAX applications implement an error handler to avoid unexpected bugs. Applications may register a new or different handler in the middle of a parse, and the SAX parser must begin using the new handler immediately. Methods | Improve this Doc View Source GetFeature(String) Look up the value of a feature flag. Declaration bool GetFeature(string name) Parameters Type Name Description System.String name The feature name, which is a fully-qualified URI. Returns Type Description System.Boolean The current value of the feature (true or false). Remarks The feature name is any fully-qualified URI. It is possible for an XMLReader to recognize a feature name but temporarily be unable to return its value. Some feature values may be available only in specific contexts, such as before, during, or after a parse. Also, some feature values may not be programmatically accessible. (In the case of an adapter for SAX1 {@link Parser}, there is no implementation-independent way to expose whether the underlying parser is performing validation, expanding external entities, and so forth.) All XMLReaders are required to recognize the http://xml.org/sax/features/namespaces and the http://xml.org/sax/features/namespace-prefixes feature names. Typical usage is something like this: XMLReader r = new MySAXDriver(); // try to activate validation try { r.SetFeature(\"http://xml.org/sax/features/validation\", true); } catch (SAXException e) { Console.Error.WriteLine(\"Cannot activate validation.\"); } // register event handlers r.ContentHandler = new MyContentHandler(); r.ErrorHandler = new MyErrorHandler(); // parse the first document try { r.Parse(\"http://www.foo.com/mydoc.xml\"); } catch (IOException e) { Console.Error.WriteLine(\"I/O exception reading XML document\"); } catch (SAXException e) { Console.Error.WriteLine(\"XML exception reading document.\"); } Implementors are free (and encouraged) to invent their own features, using names built on their own URIs. Exceptions Type Condition SAXNotRecognizedException If the feature value can't be assigned or retrieved. SAXNotSupportedException When the IXMLReader recognizes the feature name but cannot determine its value at this time. See Also SetFeature(String, Boolean) | Improve this Doc View Source GetProperty(String) Look up the value of a property. Declaration object GetProperty(string name) Parameters Type Name Description System.String name The property name, which is a fully-qualified URI. Returns Type Description System.Object The current value of the property. Remarks The property name is any fully-qualified URI. It is possible for an XMLReader to recognize a property name but temporarily be unable to return its value. Some property values may be available only in specific contexts, such as before, during, or after a parse. IXMLReader s are not required to recognize any specific property names, though an initial core set is documented for SAX2. Implementors are free (and encouraged) to invent their own properties, using names built on their own URIs. Exceptions Type Condition SAXNotRecognizedException If the property value can't be assigned or retrieved. SAXNotSupportedException When the IXMLReader recognizes the property name but cannot determine its value at this time. See Also SetProperty(String, Object) | Improve this Doc View Source Parse(InputSource) Parse an XML document. Declaration void Parse(InputSource input) Parameters Type Name Description InputSource input The input source for the top-level of the XML document. Remarks The application can use this method to instruct the XML reader to begin parsing an XML document from any valid input source (a character stream, a byte stream, or a URI). Applications may not invoke this method while a parse is in progress (they should create a new XMLReader instead for each nested XML document). Once a parse is complete, an application may reuse the same XMLReader object, possibly with a different input source. Configuration of the IXMLReader object (such as handler bindings and values established for feature flags and properties) is unchanged by completion of a parse, unless the definition of that aspect of the configuration explicitly specifies other behavior. (For example, feature flags or properties exposing characteristics of the document being parsed.) During the parse, the XMLReader will provide information about the XML document through the registered event handlers. This method is synchronous: it will not return until parsing has ended. If a client application wants to terminate parsing early, it should throw an exception. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. See Also InputSource Parse(String) EntityResolver DTDHandler ContentHandler ErrorHandler | Improve this Doc View Source Parse(String) Parse an XML document from a system identifier (URI). Declaration void Parse(string systemId) Parameters Type Name Description System.String systemId The system identifier (URI). Remarks This method is a shortcut for the common case of reading a document from a system identifier. It is the exact equivalent of the following: Parse(new InputSource(systemId)); If the system identifier is a URL, it must be fully resolved by the application before it is passed to the parser. Exceptions Type Condition SAXException Any SAX exception, possibly wrapping another exception. | Improve this Doc View Source SetFeature(String, Boolean) Set the value of a feature flag. The feature name is any fully-qualified URI. It is possible for an XMLReader to expose a feature value but to be unable to change the current value. Some feature values may be immutable or mutable only in specific contexts, such as before, during, or after a parse. All XMLReaders are required to support setting http://xml.org/sax/features/namespaces to true and http://xml.org/sax/features/namespace-prefixes to false. Declaration void SetFeature(string name, bool value) Parameters Type Name Description System.String name The feature name, which is a fully-qualified URI. System.Boolean value The requested value of the feature (true or false). Exceptions Type Condition SAXNotRecognizedException If the feature value can't be assigned or retrieved. SAXNotSupportedException When the IXMLReader recognizes the feature name but cannot set the requested value. See Also GetFeature(String) | Improve this Doc View Source SetProperty(String, Object) Set the value of a property. Declaration void SetProperty(string name, object value) Parameters Type Name Description System.String name The property name, which is a fully-qualified URI. System.Object value The requested value for the property. Remarks The property name is any fully-qualified URI. It is possible for an IXMLReader to recognize a property name but to be unable to change the current value. Some property values may be immutable or mutable only in specific contexts, such as before, during, or after a parse. IXMLReader s are not required to recognize setting any specific property names, though a core set is defined by SAX2. This method is also the standard mechanism for setting extended handlers. Exceptions Type Condition SAXNotRecognizedException If the property value can't be assigned or retrieved. SAXNotSupportedException When the IXMLReader recognizes the property name but cannot set the requested value. See Also XMLFilter"
  },
  "api/Lucene.Net.Benchmarks/Sax.SAXException.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.SAXException.html",
    "title": "Class SAXException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SAXException Encapsulate a general SAX error or warning. Inheritance System.Object SAXException SAXNotRecognizedException SAXNotSupportedException SAXParseException Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public class SAXException : Exception Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This class can contain basic error or warning information from either the XML parser or the application: a parser writer or application writer can subclass it to provide additional functionality. SAX handlers may throw this exception or any exception subclassed from it. If the application needs to pass through other types of exceptions, it must wrap those exceptions in a SAXException or an exception derived from a SAXException . If the parser or application needs to include information about a specific location in an XML document, it should use the SAXParseException subclass. Constructors | Improve this Doc View Source SAXException() Create a new SAXException . Declaration public SAXException() | Improve this Doc View Source SAXException(Exception) Create a new SAXException wrapping an existing exception. Declaration public SAXException(Exception e) Parameters Type Name Description Exception e The exception to be wrapped in a SAXException . Remarks The existing exception will be embedded in the new one, and its message will become the default message for the SAXException . | Improve this Doc View Source SAXException(String) Create a new SAXException . Declaration public SAXException(string message) Parameters Type Name Description System.String message The error or warning message. | Improve this Doc View Source SAXException(String, Exception) Create a new SAXException from an existing exception. Declaration public SAXException(string message, Exception e) Parameters Type Name Description System.String message The detail message. Exception e The exception to be wrapped in a SAXException. Remarks The existing exception will be embedded in the new one, but the new exception will have its own message. Properties | Improve this Doc View Source Exception Gets the embedded exception, if any, or null if there is none. Declaration public virtual Exception Exception { get; } Property Value Type Description Exception | Improve this Doc View Source Message Return a detail message for this exception. Declaration public override string Message { get; } Property Value Type Description System.String Remarks If there is an embedded exception, and if the SAXException has no detail message of its own, this method will return the detail message from the embedded exception. Methods | Improve this Doc View Source ToString() Override ToString to pick up any embedded exception. Declaration public override string ToString() Returns Type Description System.String A string representation of this exception."
  },
  "api/Lucene.Net.Benchmarks/Sax.SAXNotRecognizedException.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.SAXNotRecognizedException.html",
    "title": "Class SAXNotRecognizedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SAXNotRecognizedException Exception class for an unrecognized identifier. Inheritance System.Object SAXException SAXNotRecognizedException Inherited Members SAXException.Message SAXException.Exception SAXException.ToString() Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public class SAXNotRecognizedException : SAXException Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. An XMLReader will throw this exception when it finds an unrecognized feature or property identifier; SAX applications and extensions may use this class for other, similar purposes. Constructors | Improve this Doc View Source SAXNotRecognizedException() Default constructor. Declaration public SAXNotRecognizedException() | Improve this Doc View Source SAXNotRecognizedException(String) Construct a new exception with the given message. Declaration public SAXNotRecognizedException(string message) Parameters Type Name Description System.String message The text message of the exception."
  },
  "api/Lucene.Net.Benchmarks/Sax.SAXNotSupportedException.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.SAXNotSupportedException.html",
    "title": "Class SAXNotSupportedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SAXNotSupportedException Exception class for an unsupported operation. Inheritance System.Object SAXException SAXNotSupportedException Inherited Members SAXException.Message SAXException.Exception SAXException.ToString() Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public class SAXNotSupportedException : SAXException Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. An XMLReader will throw this exception when it recognizes a feature or property identifier, but cannot perform the requested operation(setting a state or value). Other SAX2 applications and extensions may use this class for similar purposes. Constructors | Improve this Doc View Source SAXNotSupportedException() Construct a new exception with no message. Declaration public SAXNotSupportedException() | Improve this Doc View Source SAXNotSupportedException(String) Construct a new exception with the given message. Declaration public SAXNotSupportedException(string message) Parameters Type Name Description System.String message The text message of the exception. See Also SAXNotRecognizedException"
  },
  "api/Lucene.Net.Benchmarks/Sax.SAXParseException.html": {
    "href": "api/Lucene.Net.Benchmarks/Sax.SAXParseException.html",
    "title": "Class SAXParseException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SAXParseException Encapsulate an XML parse error or warning. Inheritance System.Object SAXException SAXParseException Inherited Members SAXException.Message SAXException.Exception SAXException.ToString() Namespace : Sax Assembly : Lucene.Net.Benchmark.dll Syntax public class SAXParseException : SAXException Remarks This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY . See http://www.saxproject.org for further information. This exception may include information for locating the error in the original XML document, as if it came from a ILocator object. Note that although the application will receive a SAXParseException as the argument to the handlers in the IErrorHandler interface, the application is not actually required to throw the exception; instead, it can simply read the information in it and take a different action. Since this exception is a subclass of SAXException , it inherits the ability to wrap another exception. Constructors | Improve this Doc View Source SAXParseException(String, ILocator) Create a new SAXParseException from a message and a ILocator . Declaration public SAXParseException(string message, ILocator locator) Parameters Type Name Description System.String message The error or warning message. ILocator locator The locator object for the error or warning (may be null). Remarks This constructor is especially useful when an application is creating its own exception from within a IContentHandler callback. See Also ILocator | Improve this Doc View Source SAXParseException(String, ILocator, Exception) Wrap an existing exception in a SAXParseException. Declaration public SAXParseException(string message, ILocator locator, Exception e) Parameters Type Name Description System.String message The error or warning message, or null to use the message from the embedded exception. ILocator locator The locator object for the error or warning (may be null). Exception e Any exception. Remarks This constructor is especially useful when an application is creating its own exception from within a IContentHandler callback, and needs to wrap an existing exception that is not a subclass of SAXException . See Also ILocator | Improve this Doc View Source SAXParseException(String, String, String, Int32, Int32) Create a new SAXParseException. Declaration public SAXParseException(string message, string publicId, string systemId, int lineNumber, int columnNumber) Parameters Type Name Description System.String message The error or warning message. System.String publicId The public identifier of the entity that generated the error or warning. System.String systemId The system identifier of the entity that generated the error or warning. System.Int32 lineNumber The line number of the end of the text that caused the error or warning. System.Int32 columnNumber The column number of the end of the text that cause the error or warning. Remarks This constructor is most useful for parser writers. All parameters except the message are as if they were provided by a ILocator . For example, if the system identifier is a URL (including relative filename), the caller must resolve it fully before creating the exception. | Improve this Doc View Source SAXParseException(String, String, String, Int32, Int32, Exception) Create a new SAXParseException with an embedded exception. Declaration public SAXParseException(string message, string publicId, string systemId, int lineNumber, int columnNumber, Exception e) Parameters Type Name Description System.String message The error or warning message, or null to use the message from the embedded exception. System.String publicId The public identifier of the entity that generated the error or warning. System.String systemId The system identifier of the entity that generated the error or warning. System.Int32 lineNumber The line number of the end of the text that caused the error or warning. System.Int32 columnNumber The column number of the end of the text that cause the error or warning. Exception e Another exception to embed in this one. Remarks This constructor is most useful for parser writers who need to wrap an exception that is not a subclass of SAXException . All parameters except the message and exception are as if they were provided by a ILocator . For example, if the system identifier is a URL (including relative filename), the caller must resolve it fully before creating the exception. Properties | Improve this Doc View Source ColumnNumber The column number of the end of the text where the exception occurred. The first column in a line is position 1. An integer representing the column number, or -1 if none is available. Declaration public int ColumnNumber { get; } Property Value Type Description System.Int32 See Also ColumnNumber | Improve this Doc View Source LineNumber The line number of the end of the text where the exception occurred. The first line is line 1. An integer representing the line number, or -1 if none is available. Declaration public int LineNumber { get; } Property Value Type Description System.Int32 See Also LineNumber | Improve this Doc View Source PublicId Get the public identifier of the entity where the exception occurred. Returns a string containing the public identifier, or null if none is available. Declaration public string PublicId { get; } Property Value Type Description System.String See Also PublicId | Improve this Doc View Source SystemId Get the system identifier of the entity where the exception occurred. If the system identifier is a URL, it will have been resolved fully. A string containing the system identifier, or null if none is available. Declaration public string SystemId { get; } Property Value Type Description System.String See Also SystemId See Also SAXException ILocator IErrorHandler"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.Element.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.Element.html",
    "title": "Class Element | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Element The internal representation of an actual element (not an element type). An Element has an element type, attributes, and a successor Element for use in constructing stacks and queues of Elements. Inheritance System.Object Element Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class Element : object Constructors | Improve this Doc View Source Element(ElementType, Boolean) Return an Element from a specified ElementType. Declaration public Element(ElementType type, bool defaultAttributes) Parameters Type Name Description ElementType type The element type of the newly constructed element System.Boolean defaultAttributes True if default attributes are wanted Properties | Improve this Doc View Source Attributes Gets the attributes as an Attributes object. Returning an Attributes makes the attributes mutable. Declaration public virtual Attributes Attributes { get; } Property Value Type Description Attributes See Also Attributes | Improve this Doc View Source Flags Gets the flags vector of the element's type. Declaration public virtual int Flags { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsPreclosed Return true if this element has been preclosed. Declaration public virtual bool IsPreclosed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LocalName Gets the local name of the element's type. Declaration public virtual string LocalName { get; } Property Value Type Description System.String | Improve this Doc View Source MemberOf Gets the member-of vector of the element's type. Declaration public virtual int MemberOf { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Model Gets the content model vector of the element's type. Declaration public virtual int Model { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Name Gets the name of the element's type. Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source Namespace Gets the namespace name of the element's type. Declaration public virtual string Namespace { get; } Property Value Type Description System.String | Improve this Doc View Source Next Gets or sets the next element in an element stack or queue. Declaration public virtual Element Next { get; set; } Property Value Type Description Element | Improve this Doc View Source Parent Gets the parent element type of the element's type. Declaration public virtual ElementType Parent { get; } Property Value Type Description ElementType | Improve this Doc View Source Type Gets the element type. Declaration public virtual ElementType Type { get; } Property Value Type Description ElementType Methods | Improve this Doc View Source Anonymize() Make this element anonymous. Remove any id or name attribute present in the element's attributes. Declaration public virtual void Anonymize() | Improve this Doc View Source CanContain(Element) Return true if the type of this element can contain the type of another element. Convenience method. Declaration public virtual bool CanContain(Element other) Parameters Type Name Description Element other The other element Returns Type Description System.Boolean | Improve this Doc View Source Clean() Clean the attributes of this element. Attributes with null name (the name was ill-formed) or null value (the attribute was present in the element type but not in this actual element) are removed. Declaration public virtual void Clean() | Improve this Doc View Source Preclose() Force this element to preclosed status, meaning that an end-tag has been seen but the element cannot yet be closed for structural reasons. Declaration public virtual void Preclose() | Improve this Doc View Source SetAttribute(String, String, String) Set an attribute and its value into this element. Declaration public virtual void SetAttribute(string name, string type, string value) Parameters Type Name Description System.String name The attribute name (Qname) System.String type The attribute type System.String value The attribute value See Also ElementType Attributes"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.ElementType.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.ElementType.html",
    "title": "Class ElementType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ElementType This class represents an element type in the schema. An element type has a name, a content model vector, a member-of vector, a flags vector, default attributes, and a schema to which it belongs. Inheritance System.Object ElementType Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class ElementType : object Constructors | Improve this Doc View Source ElementType(String, Int32, Int32, Int32, Schema) Construct an ElementType : but it's better to use ElementType(String, Int32, Int32, Int32) instead. The content model, member-of, and flags vectors are specified as ints. Declaration public ElementType(string name, int model, int memberOf, int flags, Schema schema) Parameters Type Name Description System.String name The element type name System.Int32 model ORed-together bits representing the content models allowed in the content of this element type System.Int32 memberOf ORed-together bits representing the content models to which this element type belongs System.Int32 flags ORed-together bits representing the flags associated with this element type Schema schema The schema with which this element type will be associated Properties | Improve this Doc View Source Attributes Returns the default attributes associated with this element type. Attributes of type CDATA that don't have default values are typically not included. Other attributes without default values have an internal value of null . The return value is an Attributes to allow the caller to mutate the attributes. Declaration public virtual Attributes Attributes { get; } Property Value Type Description Attributes | Improve this Doc View Source Flags Gets or sets the flags associated with this element type as a vector of bits Declaration public virtual int Flags { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source LocalName Gets the local name of this element type. Declaration public virtual string LocalName { get; } Property Value Type Description System.String | Improve this Doc View Source MemberOf Gets or sets the content models to which this element type belongs as a vector of bits Declaration public virtual int MemberOf { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Model Gets or sets the content models of this element type as a vector of bits Declaration public virtual int Model { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Name Gets the name of this element type. Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source Namespace Gets the namespace name of this element type. Declaration public virtual string Namespace { get; } Property Value Type Description System.String | Improve this Doc View Source Parent Gets or sets the parent element type of this element type. Declaration public virtual ElementType Parent { get; set; } Property Value Type Description ElementType | Improve this Doc View Source Schema Gets the schema which this element type is associated with. Declaration public virtual Schema Schema { get; } Property Value Type Description Schema Methods | Improve this Doc View Source CanContain(ElementType) Returns true if this element type can contain another element type. That is, if any of the models in this element's model vector match any of the models in the other element type's member-of vector. Declaration public virtual bool CanContain(ElementType other) Parameters Type Name Description ElementType other The other element type Returns Type Description System.Boolean | Improve this Doc View Source GetLocalName(String) Return a local name from a Qname. Declaration public virtual string GetLocalName(string name) Parameters Type Name Description System.String name The Qname Returns Type Description System.String The local name | Improve this Doc View Source GetNamespace(String, Boolean) Return a namespace name from a Qname. The attribute flag tells us whether to return an empty namespace name if there is no prefix, or use the schema default instead. Declaration public virtual string GetNamespace(string name, bool attribute) Parameters Type Name Description System.String name The Qname System.Boolean attribute True if name is an attribute name Returns Type Description System.String The namespace name | Improve this Doc View Source Normalize(String) Normalize an attribute value (ID-style). CDATA-style attribute normalization is already done. Declaration public static string Normalize(string value) Parameters Type Name Description System.String value The value to normalize Returns Type Description System.String | Improve this Doc View Source SetAttribute(Attributes, String, String, String) Sets an attribute and its value into an IAttributes object. Attempts to set a namespace declaration are ignored. Declaration public virtual void SetAttribute(Attributes atts, string name, string type, string value) Parameters Type Name Description Attributes atts The Attributes object System.String name The name (Qname) of the attribute System.String type The type of the attribute System.String value The value of the attribute | Improve this Doc View Source SetAttribute(String, String, String) Sets an attribute and its value into this element type. Declaration public virtual void SetAttribute(string name, string type, string value) Parameters Type Name Description System.String name The name of the attribute System.String type The type of the attribute System.String value The value of the attribute See Also Schema"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.html",
    "title": "Namespace TagSoup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace TagSoup Classes Element The internal representation of an actual element (not an element type). An Element has an element type, attributes, and a successor Element for use in constructing stacks and queues of Elements. ElementType This class represents an element type in the schema. An element type has a name, a content model vector, a member-of vector, a flags vector, default attributes, and a schema to which it belongs. HTMLScanner This class implements a table-driven scanner for HTML, allowing for lots of defects. It implements the Scanner interface, which accepts a Reader object to fetch characters from and a ScanHandler object to report lexical events to. HTMLSchema This class provides a Schema that has been preinitialized with HTML elements, attributes, and character entity declarations. All the declarations normally provided with HTML 4.01 are given, plus some that are IE-specific and NS4-specific. Attribute declarations of type CDATA with no default value are not included. Parser The SAX parser class. PYXScanner A IScanner that accepts PYX format instead of HTML. Useful primarily for debugging. PYXWriter A IContentHandler that generates PYX format instead of XML. Primarily useful for debugging. Schema Abstract class representing a TSSL schema. Actual TSSL schemas are compiled into concrete subclasses of this class. XMLWriter Filter to write an XML document from a SAX event stream. Interfaces IAutoDetector Classes which accept an and provide a which figures out the encoding of the and reads characters from it should conform to this interface. IScanHandler An interface that Scanners use to report events in the input stream. IScanner An interface allowing Parser to invoke scanners."
  },
  "api/Lucene.Net.Benchmarks/TagSoup.HTMLScanner.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.HTMLScanner.html",
    "title": "Class HTMLScanner | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HTMLScanner This class implements a table-driven scanner for HTML, allowing for lots of defects. It implements the Scanner interface, which accepts a Reader object to fetch characters from and a ScanHandler object to report lexical events to. Inheritance System.Object HTMLScanner Implements IScanner ILocator Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class HTMLScanner : object, IScanner, ILocator Constructors | Improve this Doc View Source HTMLScanner() Declaration public HTMLScanner() Properties | Improve this Doc View Source ColumnNumber Declaration public virtual int ColumnNumber { get; } Property Value Type Description System.Int32 | Improve this Doc View Source LineNumber Declaration public virtual int LineNumber { get; } Property Value Type Description System.Int32 | Improve this Doc View Source PublicId Declaration public virtual string PublicId { get; } Property Value Type Description System.String | Improve this Doc View Source SystemId Declaration public virtual string SystemId { get; } Property Value Type Description System.String Methods | Improve this Doc View Source ResetDocumentLocator(String, String) Reset document locator, supplying systemid and publicid. Declaration public virtual void ResetDocumentLocator(string publicid, string systemid) Parameters Type Name Description System.String publicid Public id System.String systemid System id | Improve this Doc View Source Scan(TextReader, IScanHandler) Scan HTML source, reporting lexical events. Declaration public virtual void Scan(TextReader r, IScanHandler h) Parameters Type Name Description TextReader r Reader that provides characters IScanHandler h ScanHandler that accepts lexical events. | Improve this Doc View Source StartCDATA() A callback for the ScanHandler that allows it to force the lexer state to CDATA content (no markup is recognized except the end of element. Declaration public virtual void StartCDATA() Implements IScanner ILocator"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.HTMLSchema.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.HTMLSchema.html",
    "title": "Class HTMLSchema | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HTMLSchema This class provides a Schema that has been preinitialized with HTML elements, attributes, and character entity declarations. All the declarations normally provided with HTML 4.01 are given, plus some that are IE-specific and NS4-specific. Attribute declarations of type CDATA with no default value are not included. Inheritance System.Object Schema HTMLSchema Inherited Members Schema.M_ANY Schema.M_EMPTY Schema.M_PCDATA Schema.M_ROOT Schema.F_RESTART Schema.F_CDATA Schema.F_NOFORCE Schema.ElementType(String, Int32, Int32, Int32) Schema.RootElementType Schema.Attribute(String, String, String, String) Schema.Parent(String, String) Schema.Entity(String, Int32) Schema.GetElementType(String) Schema.GetEntity(String) Schema.Uri Schema.Prefix Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class HTMLSchema : Schema Constructors | Improve this Doc View Source HTMLSchema() Returns a newly constructed HTMLSchema object independent of any existing ones. Declaration public HTMLSchema() Fields | Improve this Doc View Source M_AREA Declaration public const int M_AREA = null Field Value Type Description System.Int32 | Improve this Doc View Source M_BLOCK Declaration public const int M_BLOCK = null Field Value Type Description System.Int32 | Improve this Doc View Source M_BLOCKINLINE Declaration public const int M_BLOCKINLINE = null Field Value Type Description System.Int32 | Improve this Doc View Source M_BODY Declaration public const int M_BODY = null Field Value Type Description System.Int32 | Improve this Doc View Source M_CELL Declaration public const int M_CELL = null Field Value Type Description System.Int32 | Improve this Doc View Source M_COL Declaration public const int M_COL = null Field Value Type Description System.Int32 | Improve this Doc View Source M_DEF Declaration public const int M_DEF = null Field Value Type Description System.Int32 | Improve this Doc View Source M_FORM Declaration public const int M_FORM = null Field Value Type Description System.Int32 | Improve this Doc View Source M_FRAME Declaration public const int M_FRAME = null Field Value Type Description System.Int32 | Improve this Doc View Source M_HEAD Declaration public const int M_HEAD = null Field Value Type Description System.Int32 | Improve this Doc View Source M_HTML Declaration public const int M_HTML = null Field Value Type Description System.Int32 | Improve this Doc View Source M_INLINE Declaration public const int M_INLINE = null Field Value Type Description System.Int32 | Improve this Doc View Source M_LEGEND Declaration public const int M_LEGEND = null Field Value Type Description System.Int32 | Improve this Doc View Source M_LI Declaration public const int M_LI = null Field Value Type Description System.Int32 | Improve this Doc View Source M_NOLINK Declaration public const int M_NOLINK = null Field Value Type Description System.Int32 | Improve this Doc View Source M_OPTION Declaration public const int M_OPTION = null Field Value Type Description System.Int32 | Improve this Doc View Source M_OPTIONS Declaration public const int M_OPTIONS = null Field Value Type Description System.Int32 | Improve this Doc View Source M_P Declaration public const int M_P = null Field Value Type Description System.Int32 | Improve this Doc View Source M_PARAM Declaration public const int M_PARAM = null Field Value Type Description System.Int32 | Improve this Doc View Source M_TABLE Declaration public const int M_TABLE = null Field Value Type Description System.Int32 | Improve this Doc View Source M_TABULAR Declaration public const int M_TABULAR = null Field Value Type Description System.Int32 | Improve this Doc View Source M_TR Declaration public const int M_TR = null Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.IAutoDetector.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.IAutoDetector.html",
    "title": "Interface IAutoDetector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAutoDetector Classes which accept an and provide a which figures out the encoding of the and reads characters from it should conform to this interface. Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public interface IAutoDetector Methods | Improve this Doc View Source AutoDetectingReader(Stream) Given a , return a suitable that understands the presumed character encoding of that . If bytes are consumed from the in the process, they must be pushed back onto the InputStream so that they can be reinterpreted as characters. Declaration TextReader AutoDetectingReader(Stream stream) Parameters Type Name Description Stream stream The Returns Type Description TextReader A that reads from the"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.IScanHandler.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.IScanHandler.html",
    "title": "Interface IScanHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IScanHandler An interface that Scanners use to report events in the input stream. Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public interface IScanHandler Methods | Improve this Doc View Source Adup(Char[], Int32, Int32) Reports an attribute name without a value. Declaration void Adup(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Aname(Char[], Int32, Int32) Reports an attribute name; a value will follow. Declaration void Aname(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Aval(Char[], Int32, Int32) Reports an attribute value. Declaration void Aval(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source CDSect(Char[], Int32, Int32) Reports the content of a CDATA section (not a CDATA element) Declaration void CDSect(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Cmnt(Char[], Int32, Int32) Reports a comment. Declaration void Cmnt(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Decl(Char[], Int32, Int32) Reports a <!....> declaration - typically a DOCTYPE Declaration void Decl(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Entity(Char[], Int32, Int32) Reports an entity reference or character reference. Declaration void Entity(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source EOF(Char[], Int32, Int32) Reports EOF. Declaration void EOF(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source ETag(Char[], Int32, Int32) Reports an end-tag. Declaration void ETag(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source GetEntity() Returns the value of the last entity or character reference reported. Declaration int GetEntity() Returns Type Description System.Int32 The value of the last entity or character reference reported. | Improve this Doc View Source GI(Char[], Int32, Int32) Reports the general identifier (element type name) of a start-tag. Declaration void GI(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PCDATA(Char[], Int32, Int32) Reports character content. Declaration void PCDATA(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PI(Char[], Int32, Int32) Reports the data part of a processing instruction. Declaration void PI(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PITarget(Char[], Int32, Int32) Reports the target part of a processing instruction. Declaration void PITarget(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source STagC(Char[], Int32, Int32) Reports the close of a start-tag. Declaration void STagC(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source STagE(Char[], Int32, Int32) Reports the close of an empty-tag. Declaration void STagE(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.IScanner.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.IScanner.html",
    "title": "Interface IScanner | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IScanner An interface allowing Parser to invoke scanners. Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public interface IScanner Methods | Improve this Doc View Source ResetDocumentLocator(String, String) Reset the embedded locator. Declaration void ResetDocumentLocator(string publicid, string systemid) Parameters Type Name Description System.String publicid The publicid of the source System.String systemid The systemid of the source | Improve this Doc View Source Scan(TextReader, IScanHandler) Invoke a scanner. Declaration void Scan(TextReader br, IScanHandler handler) Parameters Type Name Description TextReader br A source of characters to scan IScanHandler handler A IScanHandler to report events to | Improve this Doc View Source StartCDATA() Signal to the scanner to start CDATA content mode. Declaration void StartCDATA()"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.Parser.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.Parser.html",
    "title": "Class Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Parser The SAX parser class. Inheritance System.Object DefaultHandler Parser Implements IEntityResolver IDTDHandler IContentHandler IErrorHandler IScanHandler IXMLReader ILexicalHandler Inherited Members DefaultHandler.ResolveEntity(String, String) DefaultHandler.NotationDecl(String, String, String) DefaultHandler.UnparsedEntityDecl(String, String, String, String) DefaultHandler.SetDocumentLocator(ILocator) DefaultHandler.StartDocument() DefaultHandler.EndDocument() DefaultHandler.StartPrefixMapping(String, String) DefaultHandler.EndPrefixMapping(String) DefaultHandler.StartElement(String, String, String, IAttributes) DefaultHandler.EndElement(String, String, String) DefaultHandler.Characters(Char[], Int32, Int32) DefaultHandler.IgnorableWhitespace(Char[], Int32, Int32) DefaultHandler.ProcessingInstruction(String, String) DefaultHandler.SkippedEntity(String) DefaultHandler.Warning(SAXParseException) DefaultHandler.Error(SAXParseException) DefaultHandler.FatalError(SAXParseException) Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class Parser : DefaultHandler, IEntityResolver, IDTDHandler, IContentHandler, IErrorHandler, IScanHandler, IXMLReader, ILexicalHandler Constructors | Improve this Doc View Source Parser() Creates a new instance of Parser Declaration public Parser() Fields | Improve this Doc View Source AUTO_DETECTOR_PROPERTY Specifies the AutoDetector (for encoding detection) this Parser uses. Declaration public const string AUTO_DETECTOR_PROPERTY = null Field Value Type Description System.String | Improve this Doc View Source BOGONS_EMPTY_FEATURE A value of true indicates that the parser will give unknown elements a content model of EMPTY; a value of false , a content model of ANY. Declaration public const string BOGONS_EMPTY_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source CDATA_ELEMENTS_FEATURE A value of \"true\" indicates that the parser will treat CDATA elements specially. Normally true, since the input is by default HTML. Declaration public const string CDATA_ELEMENTS_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source DEFAULT_ATTRIBUTES_FEATURE A value of true indicates that the parser will return default attribute values for missing attributes that have default values. Declaration public const string DEFAULT_ATTRIBUTES_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source EXTERNAL_GENERAL_ENTITIES_FEATURE Reports whether this parser processes external general entities (it doe Declaration public const string EXTERNAL_GENERAL_ENTITIES_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source EXTERNAL_PARAMETER_ENTITIES_FEATURE Reports whether this parser processes external parameter entities (it doesn't). Declaration public const string EXTERNAL_PARAMETER_ENTITIES_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source IGNORABLE_WHITESPACE_FEATURE A value of \"true\" indicates that the parser will transmit whitespace in element-only content via the SAX ignorableWhitespace callback. Normally this is not done, because HTML is an SGML application and SGML suppresses such whitespace. Declaration public const string IGNORABLE_WHITESPACE_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source IGNORE_BOGONS_FEATURE A value of true indicates that the parser will ignore unknown elements. Declaration public const string IGNORE_BOGONS_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source IS_STANDALONE_FEATURE May be examined only during a parse, after the startDocument() callback has been completed; read-only. The value is true if the document specified standalone=\"yes\" in its XML declaration, and otherwise is false. (It's always false.) Declaration public const string IS_STANDALONE_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source LEXICAL_HANDLER_PARAMETER_ENTITIES_FEATURE A value of \"true\" indicates that the LexicalHandler will report the beginning and end of parameter entities (it won't). Declaration public const string LEXICAL_HANDLER_PARAMETER_ENTITIES_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source LEXICAL_HANDLER_PROPERTY Used to see some syntax events that are essential in some applications: comments, CDATA delimiters, selected general entity inclusions, and the start and end of the DTD (and declaration of document element name). The Object must implement ILexicalHandler Declaration public const string LEXICAL_HANDLER_PROPERTY = null Field Value Type Description System.String | Improve this Doc View Source NAMESPACE_PREFIXES_FEATURE A value of \"true\" indicates that XML qualified names (with prefixes) and attributes (including xmlns* attributes) will be available. We don't support this value. Declaration public const string NAMESPACE_PREFIXES_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source NAMESPACES_FEATURE A value of \"true\" indicates namespace URIs and unprefixed local names for element and attribute names will be available. Declaration public const string NAMESPACES_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source RESOLVE_DTD_URIS_FEATURE A value of \"true\" indicates that system IDs in declarations will be absolutized (relative to their base URIs) before reporting. (This returns true but doesn't actually do anything.) Declaration public const string RESOLVE_DTD_URIS_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source RESTART_ELEMENTS_FEATURE A value of true indicates that the parser will attempt to restart the restartable elements. Declaration public const string RESTART_ELEMENTS_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source ROOT_BOGONS_FEATURE A value of true indicates that the parser will allow unknown elements to be the root element. Declaration public const string ROOT_BOGONS_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source SCANNER_PROPERTY Specifies the Scanner object this Parser uses. Declaration public const string SCANNER_PROPERTY = null Field Value Type Description System.String | Improve this Doc View Source SCHEMA_PROPERTY Specifies the Schema object this Parser uses. Declaration public const string SCHEMA_PROPERTY = null Field Value Type Description System.String | Improve this Doc View Source STRING_INTERNING_FEATURE Has a value of \"true\" if all XML names (for elements, prefixes, attributes, entities, notations, and local names), as well as Namespace URIs, will have been interned using . This supports fast testing of equality/inequality against string constants, rather than forcing slower calls to . (We always intern.) Declaration public const string STRING_INTERNING_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source TRANSLATE_COLONS_FEATURE A value of true indicates that the parser will translate colons into underscores in names. Declaration public const string TRANSLATE_COLONS_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source UNICODE_NORMALIZATION_CHECKING_FEATURE Controls whether the parser reports Unicode normalization errors as described in section 2.13 and Appendix B of the XML 1.1 Recommendation. (We don't normalize.) Declaration public const string UNICODE_NORMALIZATION_CHECKING_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source USE_ATTRIBUTES2_FEATURE Returns \"true\" if the Attributes objects passed by this parser in StartElement(String, String, String, IAttributes) implement the IAttributes2 interface. (They don't.) Declaration public const string USE_ATTRIBUTES2_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source USE_ENTITY_RESOLVER2_FEATURE Returns \"true\" if, when setEntityResolver is given an object implementing the IEntityResolver2 interface, those new methods will be used. (They won't be.) Declaration public const string USE_ENTITY_RESOLVER2_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source USE_LOCATOR2_FEATURE Returns \"true\" if the Locator objects passed by this parser parser in SetDocumentLocator(ILocator) implement the ILocator2 interface. (They don't.) Declaration public const string USE_LOCATOR2_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source VALIDATION_FEATURE Controls whether the parser is reporting all validity errors (We don't report any validity errors.) Declaration public const string VALIDATION_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source XML11_FEATURE Returns true if the parser supports both XML 1.1 and XML 1.0. (Always false .) Declaration public const string XML11_FEATURE = null Field Value Type Description System.String | Improve this Doc View Source XMLNS_URIS_FEATURE Controls whether, when the namespace-prefixes feature is set, the parser treats namespace declaration attributes as being in the http://www.w3.org/2000/xmlns/ namespace. (It doesn't.) Declaration public const string XMLNS_URIS_FEATURE = null Field Value Type Description System.String Properties | Improve this Doc View Source ContentHandler Declaration public virtual IContentHandler ContentHandler { get; set; } Property Value Type Description IContentHandler | Improve this Doc View Source DTDHandler Declaration public virtual IDTDHandler DTDHandler { get; set; } Property Value Type Description IDTDHandler | Improve this Doc View Source EntityResolver Declaration public virtual IEntityResolver EntityResolver { get; set; } Property Value Type Description IEntityResolver | Improve this Doc View Source ErrorHandler Declaration public virtual IErrorHandler ErrorHandler { get; set; } Property Value Type Description IErrorHandler Methods | Improve this Doc View Source Adup(Char[], Int32, Int32) Declaration public virtual void Adup(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Aname(Char[], Int32, Int32) Declaration public virtual void Aname(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Aval(Char[], Int32, Int32) Declaration public virtual void Aval(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source CDSect(Char[], Int32, Int32) Declaration public virtual void CDSect(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Cmnt(Char[], Int32, Int32) Declaration public virtual void Cmnt(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Comment(Char[], Int32, Int32) Declaration public virtual void Comment(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch System.Int32 start System.Int32 length | Improve this Doc View Source Decl(Char[], Int32, Int32) Parsing the complete XML Document Type Definition is way too complex, but for many simple cases we can extract something useful from it. doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>' DeclSep ::= PEReference | S intSubset ::= (markupdecl | DeclSep)* markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral Declaration public virtual void Decl(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source EndCDATA() Declaration public virtual void EndCDATA() | Improve this Doc View Source EndDTD() Declaration public virtual void EndDTD() | Improve this Doc View Source EndEntity(String) Declaration public virtual void EndEntity(string name) Parameters Type Name Description System.String name | Improve this Doc View Source Entity(Char[], Int32, Int32) Declaration public virtual void Entity(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source EOF(Char[], Int32, Int32) Declaration public virtual void EOF(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source ETag(Char[], Int32, Int32) Declaration public virtual void ETag(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source ETagBasic(Char[], Int32, Int32) Declaration public virtual void ETagBasic(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source ETagCdata(Char[], Int32, Int32) Declaration public virtual bool ETagCdata(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length Returns Type Description System.Boolean | Improve this Doc View Source GetEntity() Declaration public virtual int GetEntity() Returns Type Description System.Int32 | Improve this Doc View Source GetFeature(String) Declaration public virtual bool GetFeature(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean | Improve this Doc View Source GetProperty(String) Declaration public virtual object GetProperty(string name) Parameters Type Name Description System.String name Returns Type Description System.Object | Improve this Doc View Source GI(Char[], Int32, Int32) Declaration public virtual void GI(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Parse(InputSource) Declaration public virtual void Parse(InputSource input) Parameters Type Name Description InputSource input | Improve this Doc View Source Parse(String) Declaration public virtual void Parse(string systemid) Parameters Type Name Description System.String systemid | Improve this Doc View Source PCDATA(Char[], Int32, Int32) Declaration public virtual void PCDATA(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PI(Char[], Int32, Int32) Declaration public virtual void PI(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PITarget(Char[], Int32, Int32) Declaration public virtual void PITarget(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source SetFeature(String, Boolean) Declaration public virtual void SetFeature(string name, bool value) Parameters Type Name Description System.String name System.Boolean value | Improve this Doc View Source SetProperty(String, Object) Declaration public virtual void SetProperty(string name, object value) Parameters Type Name Description System.String name System.Object value | Improve this Doc View Source STagC(Char[], Int32, Int32) Declaration public virtual void STagC(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source STagE(Char[], Int32, Int32) Declaration public virtual void STagE(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source StartCDATA() Declaration public virtual void StartCDATA() | Improve this Doc View Source StartDTD(String, String, String) Declaration public virtual void StartDTD(string name, string publicid, string systemid) Parameters Type Name Description System.String name System.String publicid System.String systemid | Improve this Doc View Source StartEntity(String) Declaration public virtual void StartEntity(string name) Parameters Type Name Description System.String name Implements IEntityResolver IDTDHandler IContentHandler IErrorHandler IScanHandler IXMLReader ILexicalHandler"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.PYXScanner.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.PYXScanner.html",
    "title": "Class PYXScanner | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PYXScanner A IScanner that accepts PYX format instead of HTML. Useful primarily for debugging. Inheritance System.Object PYXScanner Implements IScanner Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class PYXScanner : object, IScanner Methods | Improve this Doc View Source ResetDocumentLocator(String, String) Declaration public virtual void ResetDocumentLocator(string publicid, string systemid) Parameters Type Name Description System.String publicid System.String systemid | Improve this Doc View Source Scan(TextReader, IScanHandler) Declaration public virtual void Scan(TextReader br, IScanHandler h) Parameters Type Name Description TextReader br IScanHandler h | Improve this Doc View Source StartCDATA() Declaration public void StartCDATA() Implements IScanner"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.PYXWriter.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.PYXWriter.html",
    "title": "Class PYXWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PYXWriter A IContentHandler that generates PYX format instead of XML. Primarily useful for debugging. Inheritance System.Object PYXWriter Implements IScanHandler IContentHandler ILexicalHandler Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class PYXWriter : object, IScanHandler, IContentHandler, ILexicalHandler Constructors | Improve this Doc View Source PYXWriter(TextWriter) Declaration public PYXWriter(TextWriter w) Parameters Type Name Description TextWriter w Methods | Improve this Doc View Source Adup(Char[], Int32, Int32) Declaration public void Adup(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Aname(Char[], Int32, Int32) Declaration public void Aname(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Aval(Char[], Int32, Int32) Declaration public void Aval(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source CDSect(Char[], Int32, Int32) Declaration public void CDSect(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Characters(Char[], Int32, Int32) Declaration public void Characters(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Cmnt(Char[], Int32, Int32) Declaration public void Cmnt(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source Comment(Char[], Int32, Int32) Declaration public void Comment(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch System.Int32 start System.Int32 length | Improve this Doc View Source Decl(Char[], Int32, Int32) Declaration public void Decl(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source EndCDATA() Declaration public void EndCDATA() | Improve this Doc View Source EndDocument() Declaration public void EndDocument() | Improve this Doc View Source EndDTD() Declaration public void EndDTD() | Improve this Doc View Source EndElement(String, String, String) Declaration public void EndElement(string uri, string localname, string qname) Parameters Type Name Description System.String uri System.String localname System.String qname | Improve this Doc View Source EndEntity(String) Declaration public void EndEntity(string name) Parameters Type Name Description System.String name | Improve this Doc View Source EndPrefixMapping(String) Declaration public void EndPrefixMapping(string prefix) Parameters Type Name Description System.String prefix | Improve this Doc View Source Entity(Char[], Int32, Int32) Declaration public void Entity(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source EOF(Char[], Int32, Int32) Declaration public void EOF(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source ETag(Char[], Int32, Int32) Declaration public void ETag(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source GetEntity() Declaration public int GetEntity() Returns Type Description System.Int32 | Improve this Doc View Source GI(Char[], Int32, Int32) Declaration public void GI(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source IgnorableWhitespace(Char[], Int32, Int32) Declaration public void IgnorableWhitespace(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PCDATA(Char[], Int32, Int32) Declaration public void PCDATA(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PI(Char[], Int32, Int32) Declaration public void PI(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source PITarget(Char[], Int32, Int32) Declaration public void PITarget(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source ProcessingInstruction(String, String) Declaration public void ProcessingInstruction(string target, string data) Parameters Type Name Description System.String target System.String data | Improve this Doc View Source SetDocumentLocator(ILocator) Declaration public void SetDocumentLocator(ILocator locator) Parameters Type Name Description ILocator locator | Improve this Doc View Source SkippedEntity(String) Declaration public void SkippedEntity(string name) Parameters Type Name Description System.String name | Improve this Doc View Source STagC(Char[], Int32, Int32) Declaration public void STagC(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source STagE(Char[], Int32, Int32) Declaration public void STagE(char[] buff, int offset, int length) Parameters Type Name Description System.Char [] buff System.Int32 offset System.Int32 length | Improve this Doc View Source StartCDATA() Declaration public void StartCDATA() | Improve this Doc View Source StartDocument() Declaration public void StartDocument() | Improve this Doc View Source StartDTD(String, String, String) Declaration public void StartDTD(string name, string publicId, string systemId) Parameters Type Name Description System.String name System.String publicId System.String systemId | Improve this Doc View Source StartElement(String, String, String, IAttributes) Declaration public void StartElement(string uri, string localname, string qname, IAttributes atts) Parameters Type Name Description System.String uri System.String localname System.String qname IAttributes atts | Improve this Doc View Source StartEntity(String) Declaration public void StartEntity(string name) Parameters Type Name Description System.String name | Improve this Doc View Source StartPrefixMapping(String, String) Declaration public void StartPrefixMapping(string prefix, string uri) Parameters Type Name Description System.String prefix System.String uri Implements IScanHandler IContentHandler ILexicalHandler"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.Schema.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.Schema.html",
    "title": "Class Schema | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Schema Abstract class representing a TSSL schema. Actual TSSL schemas are compiled into concrete subclasses of this class. Inheritance System.Object Schema HTMLSchema Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public abstract class Schema : object Fields | Improve this Doc View Source F_CDATA Declaration public const int F_CDATA = null Field Value Type Description System.Int32 | Improve this Doc View Source F_NOFORCE Declaration public const int F_NOFORCE = null Field Value Type Description System.Int32 | Improve this Doc View Source F_RESTART Declaration public const int F_RESTART = null Field Value Type Description System.Int32 | Improve this Doc View Source M_ANY Declaration public const int M_ANY = null Field Value Type Description System.Int32 | Improve this Doc View Source M_EMPTY Declaration public const int M_EMPTY = null Field Value Type Description System.Int32 | Improve this Doc View Source M_PCDATA Declaration public const int M_PCDATA = null Field Value Type Description System.Int32 | Improve this Doc View Source M_ROOT Declaration public const int M_ROOT = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source Prefix Gets ot sets the prefix of this schema. Declaration public virtual string Prefix { get; set; } Property Value Type Description System.String | Improve this Doc View Source RootElementType Gets or sets the root element of this schema Declaration public virtual ElementType RootElementType { get; } Property Value Type Description ElementType | Improve this Doc View Source Uri Gets or sets the URI (namespace name) of this schema. Declaration public virtual string Uri { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source Attribute(String, String, String, String) Add or replace a default attribute for an element type in this schema. Declaration public virtual void Attribute(string elemName, string attrName, string type, string value) Parameters Type Name Description System.String elemName Name (Qname) of the element type System.String attrName Name (Qname) of the attribute System.String type Type of the attribute System.String value Default value of the attribute; null if no default | Improve this Doc View Source ElementType(String, Int32, Int32, Int32) Add or replace an element type for this schema. Declaration public virtual void ElementType(string name, int model, int memberOf, int flags) Parameters Type Name Description System.String name Name (Qname) of the element System.Int32 model Models of the element's content as a vector of bits System.Int32 memberOf Models the element is a member of as a vector of bits System.Int32 flags Flags for the element | Improve this Doc View Source Entity(String, Int32) Add to or replace a character entity in this schema. Declaration public virtual void Entity(string name, int value) Parameters Type Name Description System.String name Name of the entity System.Int32 value Value of the entity | Improve this Doc View Source GetElementType(String) Get an ElementType by name. Declaration public virtual ElementType GetElementType(string name) Parameters Type Name Description System.String name Name (Qname) of the element type Returns Type Description ElementType The corresponding ElementType | Improve this Doc View Source GetEntity(String) Get an entity value by name. Declaration public virtual int GetEntity(string name) Parameters Type Name Description System.String name Name of the entity Returns Type Description System.Int32 The corresponding character, or 0 if none | Improve this Doc View Source Parent(String, String) Specify natural parent of an element in this schema. Declaration public virtual void Parent(string name, string parentName) Parameters Type Name Description System.String name Name of the child element System.String parentName Name of the parent element"
  },
  "api/Lucene.Net.Benchmarks/TagSoup.XMLWriter.html": {
    "href": "api/Lucene.Net.Benchmarks/TagSoup.XMLWriter.html",
    "title": "Class XMLWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class XMLWriter Filter to write an XML document from a SAX event stream. Inheritance System.Object XMLFilter XMLWriter Implements IXMLFilter IXMLReader IEntityResolver IDTDHandler IContentHandler IErrorHandler ILexicalHandler Inherited Members XMLFilter.Parent XMLFilter.SetFeature(String, Boolean) XMLFilter.GetFeature(String) XMLFilter.SetProperty(String, Object) XMLFilter.GetProperty(String) XMLFilter.EntityResolver XMLFilter.DTDHandler XMLFilter.ContentHandler XMLFilter.ErrorHandler XMLFilter.Parse(InputSource) XMLFilter.Parse(String) XMLFilter.ResolveEntity(String, String) XMLFilter.NotationDecl(String, String, String) XMLFilter.UnparsedEntityDecl(String, String, String, String) XMLFilter.SetDocumentLocator(ILocator) XMLFilter.StartPrefixMapping(String, String) XMLFilter.EndPrefixMapping(String) XMLFilter.SkippedEntity(String) XMLFilter.Warning(SAXParseException) XMLFilter.Error(SAXParseException) XMLFilter.FatalError(SAXParseException) Namespace : TagSoup Assembly : Lucene.Net.Benchmark.dll Syntax public class XMLWriter : XMLFilter, IXMLFilter, IXMLReader, IEntityResolver, IDTDHandler, IContentHandler, IErrorHandler, ILexicalHandler Remarks This class can be used by itself or as part of a SAX event stream: it takes as input a series of SAX2 ContentHandler events and uses the information in those events to write an XML document. Since this class is a filter, it can also pass the events on down a filter chain for further processing (you can use the XMLWriter to take a snapshot of the current state at any point in a filter chain), and it can be used directly as a ContentHandler for a SAX2 XMLReader. The client creates a document by invoking the methods for standard SAX2 events, always beginning with the StartDocument() method and ending with the EndDocument() method. There are convenience methods provided so that clients to not have to create empty attribute lists or provide empty strings as parameters; for example, the method invocation w.StartElement(\"foo\"); is equivalent to the regular SAX2 ContentHandler method w.StartElement(\"\", \"foo\", \"\", new Attributes()); Except that it is more efficient because it does not allocate a new empty attribute list each time. The following code will send a simple XML document to standard output: XMLWriter w = new XMLWriter(); w.StartDocument(); w.StartElement(\"greeting\"); w.Characters(\"Hello, world!\"); w.EndElement(\"greeting\"); w.EndDocument(); The resulting document will look like this: <?xml version=\"1.0\" standalone=\"yes\"?> <greeting>Hello, world!</greeting> In fact, there is an even simpler convenience method, DataElement(String, String) , designed for writing elements that contain only character data, so the code to generate the document could be shortened to XMLWriter w = new XMLWriter(); w.StartDocument(); w.DataElement(\"greeting\", \"Hello, world!\"); w.EndDocument(); Whitespace According to the XML Recommendation, all whitespace in an XML document is potentially significant to an application, so this class never adds newlines or indentation. If you insert three elements in a row, as in w.DataElement(\"item\", \"1\"); w.DataElement(\"item\", \"2\"); w.DataElement(\"item\", \"3\"); you will end up with <item>1</item><item>3</item><item>3</item> You need to invoke one of the Characters methods explicitly to add newlines or indentation. Alternatively, you can use DataWriter, which is derived from this class -- it is optimized for writing purely data-oriented (or field-oriented) XML, and does automatic linebreaks and indentation (but does not support mixed content properly). Namespace Support The writer contains extensive support for XML Namespaces, so that a client application does not have to keep track of prefixes and supply xmlns attributes. By default, the XML writer will generate Namespace declarations in the form _NS1, _NS2, etc., wherever they are needed, as in the following example: w.StartDocument(); w.EmptyElement(\"http://www.foo.com/ns/\", \"foo\"); w.EndDocument(); The resulting document will look like this: <?xml version=\"1.0\" standalone=\"yes\"?> <_NS1:foo xmlns:_NS1=\"http://www.foo.com/ns/\"/> In many cases, document authors will prefer to choose their own prefixes rather than using the (ugly) default names. The XML writer allows two methods for selecting prefixes: the qualified name the SetPrefix(String, String) method. Whenever the XML writer finds a new Namespace URI, it checks to see if a qualified (prefixed) name is also available; if so it attempts to use the name's prefix (as long as the prefix is not already in use for another Namespace URI). Before writing a document, the client can also pre-map a prefix to a Namespace URI with the setPrefix method: w.SetPrefix(\"http://www.foo.com/ns/\", \"foo\"); w.StartDocument(); w.EmptyElement(\"http://www.foo.com/ns/\", \"foo\"); w.EndDocument(); The resulting document will look like this: <?xml version=\"1.0\" standalone=\"yes\"?> <foo:foo xmlns:foo=\"http://www.foo.com/ns/\"/> The default Namespace simply uses an empty string as the prefix: w.SetPrefix(\"http://www.foo.com/ns/\", \"\"); w.StartDocument(); w.EmptyElement(\"http://www.foo.com/ns/\", \"foo\"); w.EndDocument(); The resulting document will look like this: <?xml version=\"1.0\" standalone=\"yes\"?> <foo xmlns=\"http://www.foo.com/ns/\"/> By default, the XML writer will not declare a Namespace until it is actually used. Sometimes, this approach will create a large number of Namespace declarations, as in the following example: <xml version=\"1.0\" standalone=\"yes\"?> <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"> <rdf:Description about=\"http://www.foo.com/ids/books/12345\"> <dc:title xmlns:dc=\"http://www.purl.org/dc/\">A Dark Night</dc:title> <dc:creator xmlns:dc=\"http://www.purl.org/dc/\">Jane Smith</dc:title> <dc:date xmlns:dc=\"http://www.purl.org/dc/\">2000-09-09</dc:title> </rdf:Description> </rdf:RDF> The \"rdf\" prefix is declared only once, because the RDF Namespace is used by the root element and can be inherited by all of its descendants; the \"dc\" prefix, on the other hand, is declared three times, because no higher element uses the Namespace. To solve this problem, you can instruct the XML writer to predeclare Namespaces on the root element even if they are not used there: w.ForceNSDecl(\"http://www.purl.org/dc/\"); Now, the \"dc\" prefix will be declared on the root element even though it's not needed there, and can be inherited by its descendants: <xml version=\"1.0\" standalone=\"yes\"?> <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:dc=\"http://www.purl.org/dc/\"> <rdf:Description about=\"http://www.foo.com/ids/books/12345\"> <dc:title>A Dark Night</dc:title> <dc:creator>Jane Smith</dc:title> <dc:date>2000-09-09</dc:title> </rdf:Description> </rdf:RDF> This approach is also useful for declaring Namespace prefixes that be used by qualified names appearing in attribute values or character data. Constructors | Improve this Doc View Source XMLWriter() Create a new XML writer. Write to standard output. Declaration public XMLWriter() | Improve this Doc View Source XMLWriter(IXMLReader) Create a new XML writer. Use the specified XML reader as the parent. Declaration public XMLWriter(IXMLReader xmlreader) Parameters Type Name Description IXMLReader xmlreader The parent in the filter chain, or null for no parent. | Improve this Doc View Source XMLWriter(IXMLReader, TextWriter) Create a new XML writer. Use the specified XML reader as the parent, and write to the specified writer. Declaration public XMLWriter(IXMLReader xmlreader, TextWriter writer) Parameters Type Name Description IXMLReader xmlreader The parent in the filter chain, or null for no parent. TextWriter writer The output destination, or null to use standard output. | Improve this Doc View Source XMLWriter(TextWriter) Create a new XML writer. Write to the writer provided. Declaration public XMLWriter(TextWriter writer) Parameters Type Name Description TextWriter writer The output destination, or null to use standard output. Fields | Improve this Doc View Source CDATA_SECTION_ELEMENTS Declaration public const string CDATA_SECTION_ELEMENTS = null Field Value Type Description System.String | Improve this Doc View Source DOCTYPE_PUBLIC Declaration public const string DOCTYPE_PUBLIC = null Field Value Type Description System.String | Improve this Doc View Source DOCTYPE_SYSTEM Declaration public const string DOCTYPE_SYSTEM = null Field Value Type Description System.String | Improve this Doc View Source ENCODING Declaration public const string ENCODING = null Field Value Type Description System.String | Improve this Doc View Source INDENT Declaration public const string INDENT = null Field Value Type Description System.String | Improve this Doc View Source MEDIA_TYPE Declaration public const string MEDIA_TYPE = null Field Value Type Description System.String | Improve this Doc View Source METHOD Declaration public const string METHOD = null Field Value Type Description System.String | Improve this Doc View Source OMIT_XML_DECLARATION Declaration public const string OMIT_XML_DECLARATION = null Field Value Type Description System.String | Improve this Doc View Source STANDALONE Declaration public const string STANDALONE = null Field Value Type Description System.String | Improve this Doc View Source VERSION Declaration public const string VERSION = null Field Value Type Description System.String Methods | Improve this Doc View Source Characters(Char[], Int32, Int32) Write character data. Pass the event on down the filter chain for further processing. Declaration public override void Characters(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch The array of characters to write. System.Int32 start The starting position in the array. System.Int32 length The number of characters to write. Overrides XMLFilter.Characters(Char[], Int32, Int32) Exceptions Type Condition SAXException If there is an error writing the characters, or if a handler further down the filter chain raises an exception. See Also Characters ( System.Char [], System.Int32 , System.Int32 ) | Improve this Doc View Source Characters(String) Write a string of character data, with XML escaping. This is a convenience method that takes an XML string, converts it to a character array, then invokes Characters(Char[], Int32, Int32) . Declaration public virtual void Characters(string data) Parameters Type Name Description System.String data The character data. Exceptions Type Condition SAXException If there is an error writing the string, or if a handler further down the filter chain raises an exception. See Also Characters(Char[], Int32, Int32) | Improve this Doc View Source Comment(Char[], Int32, Int32) Declaration public virtual void Comment(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch System.Int32 start System.Int32 length | Improve this Doc View Source DataElement(String, String) Write an element with character data content but no attributes or Namespace URI. This is a convenience method to write a complete element with character data content, including the start tag and end tag. The method provides an empty string for the Namespace URI, and empty string for the qualified name, and an empty attribute list. This method invokes StartElement(String, String, String, IAttributes) , followed by Characters(String) , followed by EndElement(String, String, String) . Declaration public virtual void DataElement(string localName, string content) Parameters Type Name Description System.String localName The element's local name. System.String content The character data content. Exceptions Type Condition SAXException If there is an error writing the empty tag, or if a handler further down the filter chain raises an exception. See Also StartElement(String, String, String, IAttributes) Characters(String) EndElement(String, String, String) | Improve this Doc View Source DataElement(String, String, String) Write an element with character data content but no attributes. This is a convenience method to write a complete element with character data content, including the start tag and end tag. This method provides an empty string for the qname and an empty attribute list. This method invokes StartElement(String, String, String, IAttributes) , followed by Characters(String) , followed by EndElement(String, String, String) . Declaration public virtual void DataElement(string uri, string localName, string content) Parameters Type Name Description System.String uri The element's Namespace URI. System.String localName The element's local name. System.String content The character data content. Exceptions Type Condition SAXException If there is an error writing the empty tag, or if a handler further down the filter chain raises an exception. See Also StartElement(String, String, String, IAttributes) Characters(String) EndElement(String, String, String) | Improve this Doc View Source DataElement(String, String, String, IAttributes, String) Write an element with character data content. This is a convenience method to write a complete element with character data content, including the start tag and end tag. This method invokes StartElement(String, String, String, IAttributes) , followed by Characters(String) , followed by EndElement(String, String, String) . Declaration public virtual void DataElement(string uri, string localName, string qName, IAttributes atts, string content) Parameters Type Name Description System.String uri The element's Namespace URI. System.String localName The element's local name. System.String qName The element's default qualified name. IAttributes atts The element's attributes. System.String content The character data content. Exceptions Type Condition SAXException If there is an error writing the empty tag, or if a handler further down the filter chain raises an exception. See Also StartElement(String, String, String, IAttributes) Characters(String) EndElement(String, String, String) | Improve this Doc View Source EmptyElement(String) Add an empty element without a Namespace URI, qname or attributes. This method will supply an empty string for the qname, and empty string for the Namespace URI, and an empty attribute list. It invokes EmptyElement(String, String, String, IAttributes) directly. Declaration public virtual void EmptyElement(string localName) Parameters Type Name Description System.String localName The element's local name. Exceptions Type Condition SAXException If there is an error writing the empty tag, or if a handler further down the filter chain raises an exception. See Also EmptyElement(String, String, String, IAttributes) | Improve this Doc View Source EmptyElement(String, String) Add an empty element without a qname or attributes. This method will supply an empty string for the qname and an empty attribute list. It invokes EmptyElement(String, String, String, IAttributes) directly. Declaration public virtual void EmptyElement(string uri, string localName) Parameters Type Name Description System.String uri The element's Namespace URI. System.String localName The element's local name. Exceptions Type Condition SAXException If there is an error writing the empty tag, or if a handler further down the filter chain raises an exception. See Also EmptyElement(String, String, String, IAttributes) | Improve this Doc View Source EmptyElement(String, String, String, IAttributes) Write an empty element. This method writes an empty element tag rather than a start tag followed by an end tag. Both a StartElement(String, String, String, IAttributes) and an EndElement(String, String, String) event will be passed on down the filter chain. Declaration public virtual void EmptyElement(string uri, string localName, string qName, IAttributes atts) Parameters Type Name Description System.String uri The element's Namespace URI, or the empty string if the element has no Namespace or if Namespace processing is not being performed. System.String localName The element's local name (without prefix). This parameter must be provided. System.String qName The element's qualified name (with prefix), or the empty string if none is available. This parameter is strictly advisory: the writer may or may not use the prefix attached. IAttributes atts The element's attribute list. Exceptions Type Condition SAXException If there is an error writing the empty tag, or if a handler further down the filter chain raises an exception. See Also StartElement(String) StartElement(String, String) StartElement(String, String, String, IAttributes) EndElement(String) EndElement(String, String) EndElement(String, String, String) | Improve this Doc View Source EndCDATA() Declaration public virtual void EndCDATA() | Improve this Doc View Source EndDocument() Write a newline at the end of the document. Pass the event on down the filter chain for further processing. Declaration public override void EndDocument() Overrides XMLFilter.EndDocument() Exceptions Type Condition SAXException If there is an error writing the newline, or if a handler further down the filter chain raises an exception. See Also EndDocument () | Improve this Doc View Source EndDTD() Declaration public virtual void EndDTD() | Improve this Doc View Source EndElement(String) End an element without a Namespace URI or qname. This method will supply an empty string for the qName and an empty string for the Namespace URI. It invokes EndElement(String, String, String) directly. Declaration public virtual void EndElement(string localName) Parameters Type Name Description System.String localName The element's local name. Exceptions Type Condition SAXException If there is an error writing the end tag, or if a handler further down the filter chain raises an exception. See Also EndElement(String, String, String) | Improve this Doc View Source EndElement(String, String) End an element without a qname. This method will supply an empty string for the qName. It invokes EndElement(String, String, String) directly. Declaration public virtual void EndElement(string uri, string localName) Parameters Type Name Description System.String uri The element's Namespace URI. System.String localName The element's local name. Exceptions Type Condition SAXException If there is an error writing the end tag, or if a handler further down the filter chain raises an exception. See Also EndElement(String, String, String) | Improve this Doc View Source EndElement(String, String, String) Write an end tag. Pass the event on down the filter chain for further processing. Declaration public override void EndElement(string uri, string localName, string qName) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if none is available. System.String localName The element's local (unprefixed) name (required). System.String qName The element's qualified (prefixed) name, or the empty string is none is available. This method will use the qName as a template for generating a prefix if necessary, but it is not guaranteed to use the same qName. Overrides XMLFilter.EndElement(String, String, String) Exceptions Type Condition SAXException If there is an error writing the end tag, or if a handler further down the filter chain raises an exception. See Also EndElement ( System.String , System.String , System.String ) | Improve this Doc View Source EndEntity(String) Declaration public virtual void EndEntity(string name) Parameters Type Name Description System.String name | Improve this Doc View Source Flush() Flush the output. This method flushes the output stream. It is especially useful when you need to make certain that the entire document has been written to output but do not want to close the output stream. This method is invoked automatically by the EndDocument() method after writing a document. Declaration public virtual void Flush() See Also Reset() | Improve this Doc View Source ForceNSDecl(String) Force a Namespace to be declared on the root element. By default, the XMLWriter will declare only the Namespaces needed for an element; as a result, a Namespace may be declared many places in a document if it is not used on the root element. This method forces a Namespace to be declared on the root element even if it is not used there, and reduces the number of xmlns attributes in the document. Declaration public virtual void ForceNSDecl(string uri) Parameters Type Name Description System.String uri The Namespace URI to declare. See Also ForceNSDecl(String, String) SetPrefix(String, String) | Improve this Doc View Source ForceNSDecl(String, String) Force a Namespace declaration with a preferred prefix. This is a convenience method that invokes SetPrefix(String, String) then ForceNSDecl(String) . Declaration public virtual void ForceNSDecl(string uri, string prefix) Parameters Type Name Description System.String uri The Namespace URI to declare on the root element. System.String prefix The preferred prefix for the Namespace, or \"\" for the default Namespace. See Also SetPrefix(String, String) ForceNSDecl(String) | Improve this Doc View Source GetOutputProperty(String) Declaration public virtual string GetOutputProperty(string key) Parameters Type Name Description System.String key Returns Type Description System.String | Improve this Doc View Source GetPrefix(String) Get the current or preferred prefix for a Namespace URI. Declaration public virtual string GetPrefix(string uri) Parameters Type Name Description System.String uri The Namespace URI. Returns Type Description System.String The preferred prefix, or \"\" for the default Namespace. See Also SetPrefix(String, String) | Improve this Doc View Source IgnorableWhitespace(Char[], Int32, Int32) Write ignorable whitespace. Pass the event on down the filter chain for further processing. Declaration public override void IgnorableWhitespace(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch The array of characters to write. System.Int32 start The starting position in the array. System.Int32 length The number of characters to write. Overrides XMLFilter.IgnorableWhitespace(Char[], Int32, Int32) Exceptions Type Condition SAXException If there is an error writing the whitespace, or if a handler further down the filter chain raises an exception. See Also IgnorableWhitespace ( System.Char [], System.Int32 , System.Int32 ) | Improve this Doc View Source ProcessingInstruction(String, String) Write a processing instruction. Pass the event on down the filter chain for further processing. Declaration public override void ProcessingInstruction(string target, string data) Parameters Type Name Description System.String target The PI target. System.String data The PI data. Overrides XMLFilter.ProcessingInstruction(String, String) Exceptions Type Condition SAXException If there is an error writing the PI, or if a handler further down the filter chain raises an exception. See Also ProcessingInstruction ( System.String , System.String ) | Improve this Doc View Source Reset() Reset the writer. This method is especially useful if the writer throws an exception before it is finished, and you want to reuse the writer for a new document. It is usually a good idea to invoke Flush() before resetting the writer, to make sure that no output is lost. This method is invoked automatically by the StartDocument() method before writing a new document. Note: this method will not clear the prefix or URI information in the writer or the selected output writer. Declaration public virtual void Reset() See Also Flush() | Improve this Doc View Source SetOutput(TextWriter) Set a new output destination for the document. Declaration public virtual void SetOutput(TextWriter writer) Parameters Type Name Description TextWriter writer The output destination, or null to use standard output. See Also Flush() | Improve this Doc View Source SetOutputProperty(String, String) Declaration public virtual void SetOutputProperty(string key, string value) Parameters Type Name Description System.String key System.String value | Improve this Doc View Source SetPrefix(String, String) Specify a preferred prefix for a Namespace URI. Note that this method does not actually force the Namespace to be declared; to do that, use the ForceNSDecl(String) method as well. Declaration public virtual void SetPrefix(string uri, string prefix) Parameters Type Name Description System.String uri The Namespace URI. System.String prefix The preferred prefix, or \"\" to select the default Namespace. See Also GetPrefix(String) ForceNSDecl(String) ForceNSDecl(String, String) | Improve this Doc View Source StartCDATA() Declaration public virtual void StartCDATA() | Improve this Doc View Source StartDocument() Write the XML declaration at the beginning of the document. Pass the event on down the filter chain for further processing. Declaration public override void StartDocument() Overrides XMLFilter.StartDocument() Exceptions Type Condition SAXException If there is an error writing the XML declaration, or if a handler further down the filter chain raises an exception. See Also StartDocument () | Improve this Doc View Source StartDTD(String, String, String) Declaration public virtual void StartDTD(string name, string publicid, string systemid) Parameters Type Name Description System.String name System.String publicid System.String systemid | Improve this Doc View Source StartElement(String) Start a new element without a qname, attributes or a Namespace URI. This method will provide an empty string for the Namespace URI, and empty string for the qualified name, and a default empty attribute list. It invokes startElement(string, string, string, Attributes)} directly. Declaration public virtual void StartElement(string localName) Parameters Type Name Description System.String localName The element's local name. Exceptions Type Condition SAXException If there is an error writing the start tag, or if a handler further down the filter chain raises an exception. See Also StartElement(String, String, String, IAttributes) | Improve this Doc View Source StartElement(String, String) Start a new element without a qname or attributes. This method will provide a default empty attribute list and an empty string for the qualified name. It invokes StartElement(String, String, String, IAttributes) directly. Declaration public virtual void StartElement(string uri, string localName) Parameters Type Name Description System.String uri The element's Namespace URI. System.String localName The element's local name. Exceptions Type Condition SAXException If there is an error writing the start tag, or if a handler further down the filter chain raises an exception. See Also StartElement(String, String, String, IAttributes) | Improve this Doc View Source StartElement(String, String, String, IAttributes) Write a start tag. Pass the event on down the filter chain for further processing. Declaration public override void StartElement(string uri, string localName, string qName, IAttributes atts) Parameters Type Name Description System.String uri The Namespace URI, or the empty string if none is available. System.String localName The element's local (unprefixed) name (required). System.String qName The element's qualified (prefixed) name, or the empty string is none is available. This method will use the qName as a template for generating a prefix if necessary, but it is not guaranteed to use the same qName. IAttributes atts The element's attribute list (must not be null). Overrides XMLFilter.StartElement(String, String, String, IAttributes) Exceptions Type Condition SAXException If there is an error writing the start tag, or if a handler further down the filter chain raises an exception. See Also StartElement ( System.String , System.String , System.String , IAttributes ) | Improve this Doc View Source StartEntity(String) Declaration public virtual void StartEntity(string name) Parameters Type Name Description System.String name Implements IXMLFilter IXMLReader IEntityResolver IDTDHandler IContentHandler IErrorHandler ILexicalHandler See Also IXMLFilter IContentHandler"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.ClassificationResult-1.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.ClassificationResult-1.html",
    "title": "Class ClassificationResult<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClassificationResult<T> The result of a call to AssignClass(String) holding an assigned class of type and a score. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ClassificationResult<T> Namespace : Lucene.Net.Classification Assembly : Lucene.Net.Classification.dll Syntax public class ClassificationResult<T> : object Type Parameters Name Description T Constructors | Improve this Doc View Source ClassificationResult(T, Double) Constructor the class T assigned by a IClassifier<T> score the score for the assignedClass as a Declaration public ClassificationResult(T assignedClass, double score) Parameters Type Name Description T assignedClass System.Double score Properties | Improve this Doc View Source AssignedClass retrieve the result class @return a T representing an assigned class Declaration public virtual T AssignedClass { get; } Property Value Type Description T | Improve this Doc View Source Score Gets a representing a result score. Declaration public virtual double Score { get; } Property Value Type Description System.Double"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.html",
    "title": "Namespace Lucene.Net.Classification | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Classification <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Uses already seen data (the indexed documents) to classify new documents. Currently only contains a (simplistic) Lucene based Naive Bayes classifier and a k-Nearest Neighbor classifier Classes ClassificationResult<T> The result of a call to AssignClass(String) holding an assigned class of type and a score. This is a Lucene.NET EXPERIMENTAL API, use at your own risk KNearestNeighborClassifier A k-Nearest Neighbor classifier (see http://en.wikipedia.org/wiki/K-nearest_neighbors ) based on MoreLikeThis This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleNaiveBayesClassifier A simplistic Lucene based NaiveBayes classifier, see http://en.wikipedia.org/wiki/Naive_Bayes_classifier This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces IClassifier<T> A classifier, see http://en.wikipedia.org/wiki/Classifier_(mathematics) , which assign classes of type This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.IClassifier-1.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.IClassifier-1.html",
    "title": "Interface IClassifier<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IClassifier<T> A classifier, see http://en.wikipedia.org/wiki/Classifier_(mathematics) , which assign classes of type This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Classification Assembly : Lucene.Net.Classification.dll Syntax public interface IClassifier<T> Type Parameters Name Description T Methods | Improve this Doc View Source AssignClass(String) Assign a class (with score) to the given text string Declaration ClassificationResult<T> AssignClass(string text) Parameters Type Name Description System.String text a string containing text to be classified Returns Type Description ClassificationResult <T> a ClassificationResult<T> holding assigned class of type T and score | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer) Train the classifier using the underlying Lucene index Declaration void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training | Improve this Doc View Source Train(AtomicReader, String[], String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration void Train(AtomicReader atomicReader, string[] textFieldNames, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String [] textFieldNames the names of the fields to be used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.KNearestNeighborClassifier.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.KNearestNeighborClassifier.html",
    "title": "Class KNearestNeighborClassifier | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KNearestNeighborClassifier A k-Nearest Neighbor classifier (see http://en.wikipedia.org/wiki/K-nearest_neighbors ) based on MoreLikeThis This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object KNearestNeighborClassifier Implements IClassifier < BytesRef > Namespace : Lucene.Net.Classification Assembly : Lucene.Net.Classification.dll Syntax public class KNearestNeighborClassifier : object, IClassifier<BytesRef> Constructors | Improve this Doc View Source KNearestNeighborClassifier(Int32) Create a IClassifier<T> using kNN algorithm Declaration public KNearestNeighborClassifier(int k) Parameters Type Name Description System.Int32 k the number of neighbors to analyze as an | Improve this Doc View Source KNearestNeighborClassifier(Int32, Int32, Int32) Create a IClassifier<T> using kNN algorithm Declaration public KNearestNeighborClassifier(int k, int minDocsFreq, int minTermFreq) Parameters Type Name Description System.Int32 k the number of neighbors to analyze as an System.Int32 minDocsFreq the minimum number of docs frequency for MLT to be set with MinDocFreq System.Int32 minTermFreq the minimum number of term frequency for MLT to be set with MinTermFreq Methods | Improve this Doc View Source AssignClass(String) Assign a class (with score) to the given text string Declaration public virtual ClassificationResult<BytesRef> AssignClass(string text) Parameters Type Name Description System.String text a string containing text to be classified Returns Type Description ClassificationResult < BytesRef > a ClassificationResult<T> holding assigned class of type BytesRef and score | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training | Improve this Doc View Source Train(AtomicReader, String[], String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string[] textFieldNames, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String [] textFieldNames the names of the fields to be used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training Implements IClassifier<T>"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.SimpleNaiveBayesClassifier.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.SimpleNaiveBayesClassifier.html",
    "title": "Class SimpleNaiveBayesClassifier | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleNaiveBayesClassifier A simplistic Lucene based NaiveBayes classifier, see http://en.wikipedia.org/wiki/Naive_Bayes_classifier This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SimpleNaiveBayesClassifier Implements IClassifier < BytesRef > Namespace : Lucene.Net.Classification Assembly : Lucene.Net.Classification.dll Syntax public class SimpleNaiveBayesClassifier : object, IClassifier<BytesRef> Constructors | Improve this Doc View Source SimpleNaiveBayesClassifier() Creates a new NaiveBayes classifier. Note that you must call Train(AtomicReader, String, String, Analyzer) before you can classify any documents. Declaration public SimpleNaiveBayesClassifier() Methods | Improve this Doc View Source AssignClass(String) Assign a class (with score) to the given text string Declaration public virtual ClassificationResult<BytesRef> AssignClass(string inputDocument) Parameters Type Name Description System.String inputDocument a string containing text to be classified Returns Type Description ClassificationResult < BytesRef > a ClassificationResult<T> holding assigned class of type BytesRef and score | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training | Improve this Doc View Source Train(AtomicReader, String[], String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string[] textFieldNames, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String [] textFieldNames the names of the fields to be used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training Implements IClassifier<T>"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.Utils.DatasetSplitter.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.Utils.DatasetSplitter.html",
    "title": "Class DatasetSplitter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DatasetSplitter Utility class for creating training / test / cross validation indexes from the original index. Inheritance System.Object DatasetSplitter Namespace : Lucene.Net.Classification.Utils Assembly : Lucene.Net.Classification.dll Syntax public class DatasetSplitter : object Constructors | Improve this Doc View Source DatasetSplitter(Double, Double) Create a DatasetSplitter by giving test and cross validation IDXs sizes Declaration public DatasetSplitter(double testRatio, double crossValidationRatio) Parameters Type Name Description System.Double testRatio the ratio of the original index to be used for the test IDX as a between 0.0 and 1.0 System.Double crossValidationRatio the ratio of the original index to be used for the c.v. IDX as a between 0.0 and 1.0 Methods | Improve this Doc View Source Split(AtomicReader, Directory, Directory, Directory, Analyzer, String[]) Split a given index into 3 indexes for training, test and cross validation tasks respectively Declaration public virtual void Split(AtomicReader originalIndex, Directory trainingIndex, Directory testIndex, Directory crossValidationIndex, Analyzer analyzer, params string[] fieldNames) Parameters Type Name Description AtomicReader originalIndex an AtomicReader on the source index Directory trainingIndex a Directory used to write the training index Directory testIndex a Directory used to write the test index Directory crossValidationIndex a Directory used to write the cross validation index Analyzer analyzer Analyzer used to create the new docs System.String [] fieldNames names of fields that need to be put in the new indexes or null if all should be used"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.Utils.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.Utils.html",
    "title": "Namespace Lucene.Net.Classification.Utils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Classification.Utils <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Utilities for evaluation, data preparation, etc. Classes DatasetSplitter Utility class for creating training / test / cross validation indexes from the original index."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.AppendingCodec.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.AppendingCodec.html",
    "title": "Class AppendingCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AppendingCodec This codec uses an index format that is very similar to Lucene40Codec but works on append-only outputs, such as plain output streams and append-only filesystems. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Codec FilterCodec AppendingCodec Inherited Members FilterCodec.m_delegate FilterCodec.DocValuesFormat FilterCodec.FieldInfosFormat FilterCodec.LiveDocsFormat FilterCodec.NormsFormat FilterCodec.SegmentInfoFormat FilterCodec.StoredFieldsFormat FilterCodec.TermVectorsFormat Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() Namespace : Lucene.Net.Codecs.Appending Assembly : Lucene.Net.Codecs.dll Syntax public class AppendingCodec : FilterCodec Constructors | Improve this Doc View Source AppendingCodec() Declaration public AppendingCodec() Properties | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides FilterCodec.PostingsFormat"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.AppendingTermsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.AppendingTermsReader.html",
    "title": "Class AppendingTermsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AppendingTermsReader Reads append-only terms from AppendingTermsWriter. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer BlockTreeTermsReader AppendingTermsReader Implements IDisposable Inherited Members BlockTreeTermsReader.Dispose(Boolean) BlockTreeTermsReader.GetEnumerator() BlockTreeTermsReader.GetTerms(String) BlockTreeTermsReader.Count BlockTreeTermsReader.RamBytesUsed() BlockTreeTermsReader.CheckIntegrity() FieldsProducer.Dispose() Fields.UniqueTermCount Fields.EMPTY_ARRAY Namespace : Lucene.Net.Codecs.Appending Assembly : Lucene.Net.Codecs.dll Syntax public class AppendingTermsReader : BlockTreeTermsReader, IDisposable Constructors | Improve this Doc View Source AppendingTermsReader(Directory, FieldInfos, SegmentInfo, PostingsReaderBase, IOContext, String, Int32) Declaration public AppendingTermsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo info, PostingsReaderBase postingsReader, IOContext ioContext, string segmentSuffix, int indexDivisor) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo info PostingsReaderBase postingsReader IOContext ioContext System.String segmentSuffix System.Int32 indexDivisor Methods | Improve this Doc View Source ReadHeader(IndexInput) Declaration protected override int ReadHeader(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int32 Overrides BlockTreeTermsReader.ReadHeader(IndexInput) | Improve this Doc View Source ReadIndexHeader(IndexInput) Declaration protected override int ReadIndexHeader(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int32 Overrides BlockTreeTermsReader.ReadIndexHeader(IndexInput) | Improve this Doc View Source SeekDir(IndexInput, Int64) Declaration protected override void SeekDir(IndexInput input, long dirOffset) Parameters Type Name Description IndexInput input System.Int64 dirOffset Implements IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.html",
    "title": "Namespace Lucene.Net.Codecs.Appending | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Appending <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codec for on append-only outputs, such as plain output streams and append-only filesystems. Classes AppendingCodec This codec uses an index format that is very similar to Lucene40Codec but works on append-only outputs, such as plain output streams and append-only filesystems. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AppendingTermsReader Reads append-only terms from AppendingTermsWriter. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.BlockTermsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.BlockTermsReader.html",
    "title": "Class BlockTermsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockTermsReader Handles a terms dict, but decouples all details of doc/freqs/positions reading to an instance of PostingsReaderBase . This class is reusable for codecs that use a different format for docs/freqs/positions (though codecs are also free to make their own terms dict impl). This class also interacts with an instance of TermsIndexReaderBase , to abstract away the specific implementation of the terms dict index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer BlockTermsReader Implements IDisposable Inherited Members FieldsProducer.Dispose() Fields.UniqueTermCount Fields.EMPTY_ARRAY Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class BlockTermsReader : FieldsProducer, IDisposable Constructors | Improve this Doc View Source BlockTermsReader(TermsIndexReaderBase, Directory, FieldInfos, SegmentInfo, PostingsReaderBase, IOContext, String) Declaration public BlockTermsReader(TermsIndexReaderBase indexReader, Directory dir, FieldInfos fieldInfos, SegmentInfo info, PostingsReaderBase postingsReader, IOContext context, string segmentSuffix) Parameters Type Name Description TermsIndexReaderBase indexReader Directory dir FieldInfos fieldInfos SegmentInfo info PostingsReaderBase postingsReader IOContext context System.String segmentSuffix Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides FieldsProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides FieldsProducer.RamBytesUsed() Implements IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.BlockTermsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.BlockTermsWriter.html",
    "title": "Class BlockTermsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockTermsWriter Writes terms dict, block-encoding (column stride) each term's metadata for each set of terms between two index terms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldsConsumer BlockTermsWriter Inherited Members FieldsConsumer.Dispose() FieldsConsumer.Merge(MergeState, Fields) Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class BlockTermsWriter : FieldsConsumer Constructors | Improve this Doc View Source BlockTermsWriter(TermsIndexWriterBase, SegmentWriteState, PostingsWriterBase) Declaration public BlockTermsWriter(TermsIndexWriterBase termsIndexWriter, SegmentWriteState state, PostingsWriterBase postingsWriter) Parameters Type Name Description TermsIndexWriterBase termsIndexWriter SegmentWriteState state PostingsWriterBase postingsWriter Fields | Improve this Doc View Source m_output Declaration protected IndexOutput m_output Field Value Type Description IndexOutput | Improve this Doc View Source TERMS_EXTENSION Extension of terms file Declaration public static readonly string TERMS_EXTENSION Field Value Type Description System.String | Improve this Doc View Source VERSION_APPEND_ONLY Declaration public static readonly int VERSION_APPEND_ONLY Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CHECKSUM Declaration public static readonly int VERSION_CHECKSUM Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CURRENT Declaration public static readonly int VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_META_ARRAY Declaration public static readonly int VERSION_META_ARRAY Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Declaration public static readonly int VERSION_START Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddField(FieldInfo) Declaration public override TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer Overrides FieldsConsumer.AddField(FieldInfo) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexReader.html",
    "title": "Class FixedGapTermsIndexReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedGapTermsIndexReader TermsIndexReaderBase for simple every Nth terms indexes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexReaderBase FixedGapTermsIndexReader Inherited Members TermsIndexReaderBase.Dispose() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class FixedGapTermsIndexReader : TermsIndexReaderBase Constructors | Improve this Doc View Source FixedGapTermsIndexReader(Directory, FieldInfos, String, Int32, IComparer<BytesRef>, String, IOContext) Declaration public FixedGapTermsIndexReader(Directory dir, FieldInfos fieldInfos, string segment, int indexDivisor, IComparer<BytesRef> termComp, string segmentSuffix, IOContext context) Parameters Type Name Description Directory dir FieldInfos fieldInfos System.String segment System.Int32 indexDivisor IComparer < BytesRef > termComp System.String segmentSuffix IOContext context Properties | Improve this Doc View Source Divisor Declaration public override int Divisor { get; } Property Value Type Description System.Int32 Overrides TermsIndexReaderBase.Divisor | Improve this Doc View Source SupportsOrd Declaration public override bool SupportsOrd { get; } Property Value Type Description System.Boolean Overrides TermsIndexReaderBase.SupportsOrd Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermsIndexReaderBase.Dispose(Boolean) | Improve this Doc View Source GetFieldEnum(FieldInfo) Declaration public override TermsIndexReaderBase.FieldIndexEnum GetFieldEnum(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description TermsIndexReaderBase.FieldIndexEnum Overrides TermsIndexReaderBase.GetFieldEnum(FieldInfo) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermsIndexReaderBase.RamBytesUsed() See Also FixedGapTermsIndexWriter"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexWriter.html",
    "title": "Class FixedGapTermsIndexWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedGapTermsIndexWriter Selects every Nth term as and index term, and hold term bytes (mostly) fully expanded in memory. This terms index supports seeking by ord. See VariableGapTermsIndexWriter for a more memory efficient terms index that does not support seeking by ord. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexWriterBase FixedGapTermsIndexWriter Inherited Members TermsIndexWriterBase.Dispose() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class FixedGapTermsIndexWriter : TermsIndexWriterBase Constructors | Improve this Doc View Source FixedGapTermsIndexWriter(SegmentWriteState) Declaration public FixedGapTermsIndexWriter(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Fields | Improve this Doc View Source m_output Declaration protected IndexOutput m_output Field Value Type Description IndexOutput Methods | Improve this Doc View Source AddField(FieldInfo, Int64) Declaration public override TermsIndexWriterBase.FieldWriter AddField(FieldInfo field, long termsFilePointer) Parameters Type Name Description FieldInfo field System.Int64 termsFilePointer Returns Type Description TermsIndexWriterBase.FieldWriter Overrides TermsIndexWriterBase.AddField(FieldInfo, Int64) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermsIndexWriterBase.Dispose(Boolean) | Improve this Doc View Source IndexedTermPrefixLength(BytesRef, BytesRef) NOTE: if your codec does not sort in unicode code point order, you must override this method, to simply return indexedTerm.Length . Declaration protected virtual int IndexedTermPrefixLength(BytesRef priorTerm, BytesRef indexedTerm) Parameters Type Name Description BytesRef priorTerm BytesRef indexedTerm Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.html",
    "title": "Namespace Lucene.Net.Codecs.BlockTerms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.BlockTerms <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Pluggable term index / block terms dictionary implementations. Classes BlockTermsReader Handles a terms dict, but decouples all details of doc/freqs/positions reading to an instance of PostingsReaderBase . This class is reusable for codecs that use a different format for docs/freqs/positions (though codecs are also free to make their own terms dict impl). This class also interacts with an instance of TermsIndexReaderBase , to abstract away the specific implementation of the terms dict index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BlockTermsWriter Writes terms dict, block-encoding (column stride) each term's metadata for each set of terms between two index terms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FixedGapTermsIndexReader TermsIndexReaderBase for simple every Nth terms indexes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FixedGapTermsIndexWriter Selects every Nth term as and index term, and hold term bytes (mostly) fully expanded in memory. This terms index supports seeking by ord. See VariableGapTermsIndexWriter for a more memory efficient terms index that does not support seeking by ord. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsIndexReaderBase BlockTermsReader interacts with an instance of this class to manage its terms index. The writer must accept indexed terms (many pairs of BytesRef text + long fileOffset), and then this reader must be able to retrieve the nearest index term to a provided term text. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsIndexReaderBase.FieldIndexEnum Similar to TermsEnum , except, the only \"metadata\" it reports for a given indexed term is the long fileOffset into the main terms dictionary file. TermsIndexWriterBase Base class for terms index implementations to plug into BlockTermsWriter . @lucene.experimental TermsIndexWriterBase.FieldWriter Terms index API for a single field. VariableGapTermsIndexReader See VariableGapTermsIndexWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk VariableGapTermsIndexWriter Selects index terms according to provided pluggable VariableGapTermsIndexWriter.IndexTermSelector , and stores them in a prefix trie that's loaded entirely in RAM stored as an FST<T> . This terms index only supports unsigned byte term sort order (unicode codepoint order when the bytes are UTF8). This is a Lucene.NET EXPERIMENTAL API, use at your own risk VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector Sets an index term when docFreq >= docFreqThresh, or every interval terms. This should reduce seek time to high docFreq terms. VariableGapTermsIndexWriter.EveryNTermSelector VariableGapTermsIndexWriter.IndexTermSelector Hook for selecting which terms should be placed in the terms index. NewField(FieldInfo) is called at the start of each new field, and IsIndexTerm(BytesRef, TermStats) for each term in that field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.FieldIndexEnum.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.FieldIndexEnum.html",
    "title": "Class TermsIndexReaderBase.FieldIndexEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsIndexReaderBase.FieldIndexEnum Similar to TermsEnum , except, the only \"metadata\" it reports for a given indexed term is the long fileOffset into the main terms dictionary file. Inheritance System.Object TermsIndexReaderBase.FieldIndexEnum Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class FieldIndexEnum : object Properties | Improve this Doc View Source Ord Declaration public abstract long Ord { get; } Property Value Type Description System.Int64 Remarks Only implemented if SupportsOrd returns true | Improve this Doc View Source Term Declaration public abstract BytesRef Term { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Next() Returns -1 at end/ Declaration public abstract long Next() Returns Type Description System.Int64 | Improve this Doc View Source Seek(BytesRef) Seeks to \"largest\" indexed term that's less than or equal to term; returns file pointer index (into the main terms index file) for that term. Declaration public abstract long Seek(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Int64 | Improve this Doc View Source Seek(Int64) Declaration public abstract long Seek(long ord) Parameters Type Name Description System.Int64 ord Returns Type Description System.Int64 Remarks Only implemented if SupportsOrd returns true"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.html",
    "title": "Class TermsIndexReaderBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsIndexReaderBase BlockTermsReader interacts with an instance of this class to manage its terms index. The writer must accept indexed terms (many pairs of BytesRef text + long fileOffset), and then this reader must be able to retrieve the nearest index term to a provided term text. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexReaderBase FixedGapTermsIndexReader VariableGapTermsIndexReader Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class TermsIndexReaderBase : IDisposable Properties | Improve this Doc View Source Divisor Declaration public abstract int Divisor { get; } Property Value Type Description System.Int32 | Improve this Doc View Source SupportsOrd Declaration public abstract bool SupportsOrd { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetFieldEnum(FieldInfo) Declaration public abstract TermsIndexReaderBase.FieldIndexEnum GetFieldEnum(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description TermsIndexReaderBase.FieldIndexEnum | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.FieldWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.FieldWriter.html",
    "title": "Class TermsIndexWriterBase.FieldWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsIndexWriterBase.FieldWriter Terms index API for a single field. Inheritance System.Object TermsIndexWriterBase.FieldWriter Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class FieldWriter : object Methods | Improve this Doc View Source Add(BytesRef, TermStats, Int64) Declaration public abstract void Add(BytesRef text, TermStats stats, long termsFilePointer) Parameters Type Name Description BytesRef text TermStats stats System.Int64 termsFilePointer | Improve this Doc View Source CheckIndexTerm(BytesRef, TermStats) Declaration public abstract bool CheckIndexTerm(BytesRef text, TermStats stats) Parameters Type Name Description BytesRef text TermStats stats Returns Type Description System.Boolean | Improve this Doc View Source Finish(Int64) Declaration public abstract void Finish(long termsFilePointer) Parameters Type Name Description System.Int64 termsFilePointer"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.html",
    "title": "Class TermsIndexWriterBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsIndexWriterBase Base class for terms index implementations to plug into BlockTermsWriter . @lucene.experimental Inheritance System.Object TermsIndexWriterBase FixedGapTermsIndexWriter VariableGapTermsIndexWriter Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class TermsIndexWriterBase : IDisposable Methods | Improve this Doc View Source AddField(FieldInfo, Int64) Declaration public abstract TermsIndexWriterBase.FieldWriter AddField(FieldInfo fieldInfo, long termsFilePointer) Parameters Type Name Description FieldInfo fieldInfo System.Int64 termsFilePointer Returns Type Description TermsIndexWriterBase.FieldWriter | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing See Also TermsIndexReaderBase"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexReader.html",
    "title": "Class VariableGapTermsIndexReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VariableGapTermsIndexReader See VariableGapTermsIndexWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexReaderBase VariableGapTermsIndexReader Inherited Members TermsIndexReaderBase.Dispose() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class VariableGapTermsIndexReader : TermsIndexReaderBase Constructors | Improve this Doc View Source VariableGapTermsIndexReader(Directory, FieldInfos, String, Int32, String, IOContext) Declaration public VariableGapTermsIndexReader(Directory dir, FieldInfos fieldInfos, string segment, int indexDivisor, string segmentSuffix, IOContext context) Parameters Type Name Description Directory dir FieldInfos fieldInfos System.String segment System.Int32 indexDivisor System.String segmentSuffix IOContext context Properties | Improve this Doc View Source Divisor Declaration public override int Divisor { get; } Property Value Type Description System.Int32 Overrides TermsIndexReaderBase.Divisor | Improve this Doc View Source SupportsOrd Declaration public override bool SupportsOrd { get; } Property Value Type Description System.Boolean Overrides TermsIndexReaderBase.SupportsOrd Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermsIndexReaderBase.Dispose(Boolean) | Improve this Doc View Source GetFieldEnum(FieldInfo) Declaration public override TermsIndexReaderBase.FieldIndexEnum GetFieldEnum(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description TermsIndexReaderBase.FieldIndexEnum Overrides TermsIndexReaderBase.GetFieldEnum(FieldInfo) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermsIndexReaderBase.RamBytesUsed()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector.html",
    "title": "Class VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector Sets an index term when docFreq >= docFreqThresh, or every interval terms. This should reduce seek time to high docFreq terms. Inheritance System.Object VariableGapTermsIndexWriter.IndexTermSelector VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public sealed class EveryNOrDocFreqTermSelector : VariableGapTermsIndexWriter.IndexTermSelector Constructors | Improve this Doc View Source EveryNOrDocFreqTermSelector(Int32, Int32) Declaration public EveryNOrDocFreqTermSelector(int docFreqThresh, int interval) Parameters Type Name Description System.Int32 docFreqThresh System.Int32 interval Methods | Improve this Doc View Source IsIndexTerm(BytesRef, TermStats) Declaration public override bool IsIndexTerm(BytesRef term, TermStats stats) Parameters Type Name Description BytesRef term TermStats stats Returns Type Description System.Boolean Overrides VariableGapTermsIndexWriter.IndexTermSelector.IsIndexTerm(BytesRef, TermStats) | Improve this Doc View Source NewField(FieldInfo) Declaration public override void NewField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Overrides VariableGapTermsIndexWriter.IndexTermSelector.NewField(FieldInfo)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNTermSelector.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNTermSelector.html",
    "title": "Class VariableGapTermsIndexWriter.EveryNTermSelector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VariableGapTermsIndexWriter.EveryNTermSelector Inheritance System.Object VariableGapTermsIndexWriter.IndexTermSelector VariableGapTermsIndexWriter.EveryNTermSelector Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public sealed class EveryNTermSelector : VariableGapTermsIndexWriter.IndexTermSelector Remarks Same policy as FixedGapTermsIndexWriter Constructors | Improve this Doc View Source EveryNTermSelector(Int32) Declaration public EveryNTermSelector(int interval) Parameters Type Name Description System.Int32 interval Methods | Improve this Doc View Source IsIndexTerm(BytesRef, TermStats) Declaration public override bool IsIndexTerm(BytesRef term, TermStats stats) Parameters Type Name Description BytesRef term TermStats stats Returns Type Description System.Boolean Overrides VariableGapTermsIndexWriter.IndexTermSelector.IsIndexTerm(BytesRef, TermStats) | Improve this Doc View Source NewField(FieldInfo) Declaration public override void NewField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Overrides VariableGapTermsIndexWriter.IndexTermSelector.NewField(FieldInfo)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.html",
    "title": "Class VariableGapTermsIndexWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VariableGapTermsIndexWriter Selects index terms according to provided pluggable VariableGapTermsIndexWriter.IndexTermSelector , and stores them in a prefix trie that's loaded entirely in RAM stored as an FST<T> . This terms index only supports unsigned byte term sort order (unicode codepoint order when the bytes are UTF8). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexWriterBase VariableGapTermsIndexWriter Inherited Members TermsIndexWriterBase.Dispose() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class VariableGapTermsIndexWriter : TermsIndexWriterBase Constructors | Improve this Doc View Source VariableGapTermsIndexWriter(SegmentWriteState, VariableGapTermsIndexWriter.IndexTermSelector) Declaration public VariableGapTermsIndexWriter(SegmentWriteState state, VariableGapTermsIndexWriter.IndexTermSelector policy) Parameters Type Name Description SegmentWriteState state VariableGapTermsIndexWriter.IndexTermSelector policy Fields | Improve this Doc View Source m_output Declaration protected IndexOutput m_output Field Value Type Description IndexOutput Methods | Improve this Doc View Source AddField(FieldInfo, Int64) Declaration public override TermsIndexWriterBase.FieldWriter AddField(FieldInfo field, long termsFilePointer) Parameters Type Name Description FieldInfo field System.Int64 termsFilePointer Returns Type Description TermsIndexWriterBase.FieldWriter Overrides TermsIndexWriterBase.AddField(FieldInfo, Int64) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermsIndexWriterBase.Dispose(Boolean) | Improve this Doc View Source IndexedTermPrefixLength(BytesRef, BytesRef) Declaration protected virtual int IndexedTermPrefixLength(BytesRef priorTerm, BytesRef indexedTerm) Parameters Type Name Description BytesRef priorTerm BytesRef indexedTerm Returns Type Description System.Int32 Remarks NOTE: If your codec does not sort in unicode code point order, you must override this method to simply return indexedTerm.Length ."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.IndexTermSelector.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.IndexTermSelector.html",
    "title": "Class VariableGapTermsIndexWriter.IndexTermSelector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VariableGapTermsIndexWriter.IndexTermSelector Hook for selecting which terms should be placed in the terms index. NewField(FieldInfo) is called at the start of each new field, and IsIndexTerm(BytesRef, TermStats) for each term in that field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object VariableGapTermsIndexWriter.IndexTermSelector VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector VariableGapTermsIndexWriter.EveryNTermSelector Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class IndexTermSelector : object Methods | Improve this Doc View Source IsIndexTerm(BytesRef, TermStats) Called sequentially on every term being written, returning true if this term should be indexed. Declaration public abstract bool IsIndexTerm(BytesRef term, TermStats stats) Parameters Type Name Description BytesRef term TermStats stats Returns Type Description System.Boolean | Improve this Doc View Source NewField(FieldInfo) Called when a new field is started. Declaration public abstract void NewField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.BloomFilterFactory.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.BloomFilterFactory.html",
    "title": "Class BloomFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BloomFilterFactory Class used to create index-time FuzzySet appropriately configured for each field. Also called to right-size bitsets for serialization. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BloomFilterFactory DefaultBloomFilterFactory Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public abstract class BloomFilterFactory : object Methods | Improve this Doc View Source Downsize(FieldInfo, FuzzySet) Called when downsizing bitsets for serialization. Declaration public virtual FuzzySet Downsize(FieldInfo fieldInfo, FuzzySet initialSet) Parameters Type Name Description FieldInfo fieldInfo The field with sparse set bits. FuzzySet initialSet The bits accumulated. Returns Type Description FuzzySet null or a hopefully more densely packed, smaller bitset. | Improve this Doc View Source GetSetForField(SegmentWriteState, FieldInfo) Declaration public abstract FuzzySet GetSetForField(SegmentWriteState state, FieldInfo info) Parameters Type Name Description SegmentWriteState state The content to be indexed. FieldInfo info The field requiring a BloomFilter. Returns Type Description FuzzySet An appropriately sized set or null if no BloomFiltering required. | Improve this Doc View Source IsSaturated(FuzzySet, FieldInfo) Used to determine if the given filter has reached saturation and should be retired i.e. not saved any more. Declaration public abstract bool IsSaturated(FuzzySet bloomFilter, FieldInfo fieldInfo) Parameters Type Name Description FuzzySet bloomFilter The bloomFilter being tested. FieldInfo fieldInfo The field with which this filter is associated. Returns Type Description System.Boolean true if the set has reached saturation and should be retired."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.BloomFilteringPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.BloomFilteringPostingsFormat.html",
    "title": "Class BloomFilteringPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BloomFilteringPostingsFormat A PostingsFormat useful for low doc-frequency fields such as primary keys. Bloom filters are maintained in a \".blm\" file which offers \"fast-fail\" for reads in segments known to have no record of the key. A choice of delegate PostingsFormat is used to record all other Postings data. A choice of BloomFilterFactory can be passed to tailor Bloom Filter settings on a per-field basis. The default configuration is DefaultBloomFilterFactory which allocates a ~8mb bitset and hashes values using MurmurHash2 . This should be suitable for most purposes. The format of the blm file is as follows: BloomFilter (.blm) --> Header, DelegatePostingsFormatName, NumFilteredFields, Filter NumFilteredFields , Footer Filter --> FieldNumber, FuzzySet FuzzySet -->See Serialize(DataOutput) Header --> CodecHeader ( ) DelegatePostingsFormatName --> String ( ) The name of a ServiceProvider registered PostingsFormat NumFilteredFields --> Uint32 ( ) FieldNumber --> Uint32 ( ) The number of the field in this segment Footer --> CodecFooter ( WriteFooter(IndexOutput) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat BloomFilteringPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public sealed class BloomFilteringPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source BloomFilteringPostingsFormat() Used only by core Lucene at read-time via Service Provider instantiation - do not use at Write-time in application code. Declaration public BloomFilteringPostingsFormat() | Improve this Doc View Source BloomFilteringPostingsFormat(PostingsFormat) Creates Bloom filters for a selection of fields created in the index. This is recorded as a set of Bitsets held as a segment summary in an additional \"blm\" file. This PostingsFormat delegates to a choice of delegate PostingsFormat for encoding all other postings data. This choice of constructor defaults to the DefaultBloomFilterFactory for configuring per-field BloomFilters. Declaration public BloomFilteringPostingsFormat(PostingsFormat delegatePostingsFormat) Parameters Type Name Description PostingsFormat delegatePostingsFormat The PostingsFormat that records all the non-bloom filter data i.e. postings info. | Improve this Doc View Source BloomFilteringPostingsFormat(PostingsFormat, BloomFilterFactory) Creates Bloom filters for a selection of fields created in the index. This is recorded as a set of Bitsets held as a segment summary in an additional \"blm\" file. This PostingsFormat delegates to a choice of delegate PostingsFormat for encoding all other postings data. Declaration public BloomFilteringPostingsFormat(PostingsFormat delegatePostingsFormat, BloomFilterFactory bloomFilterFactory) Parameters Type Name Description PostingsFormat delegatePostingsFormat The PostingsFormat that records all the non-bloom filter data i.e. postings info. BloomFilterFactory bloomFilterFactory The BloomFilterFactory responsible for sizing BloomFilters appropriately. Fields | Improve this Doc View Source VERSION_CHECKSUM Declaration public static readonly int VERSION_CHECKSUM Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CURRENT Declaration public static readonly int VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Declaration public static readonly int VERSION_START Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.DefaultBloomFilterFactory.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.DefaultBloomFilterFactory.html",
    "title": "Class DefaultBloomFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultBloomFilterFactory Default policy is to allocate a bitset with 10% saturation given a unique term per document. Bits are set via MurmurHash2 hashing function. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BloomFilterFactory DefaultBloomFilterFactory Inherited Members BloomFilterFactory.Downsize(FieldInfo, FuzzySet) Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public class DefaultBloomFilterFactory : BloomFilterFactory Methods | Improve this Doc View Source GetSetForField(SegmentWriteState, FieldInfo) Declaration public override FuzzySet GetSetForField(SegmentWriteState state, FieldInfo info) Parameters Type Name Description SegmentWriteState state FieldInfo info Returns Type Description FuzzySet Overrides BloomFilterFactory.GetSetForField(SegmentWriteState, FieldInfo) | Improve this Doc View Source IsSaturated(FuzzySet, FieldInfo) Declaration public override bool IsSaturated(FuzzySet bloomFilter, FieldInfo fieldInfo) Parameters Type Name Description FuzzySet bloomFilter FieldInfo fieldInfo Returns Type Description System.Boolean Overrides BloomFilterFactory.IsSaturated(FuzzySet, FieldInfo)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.FuzzySet.ContainsResult.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.FuzzySet.ContainsResult.html",
    "title": "Enum FuzzySet.ContainsResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum FuzzySet.ContainsResult Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public enum ContainsResult : int Remarks Result from Contains(BytesRef) : can never return definitively YES (always MAYBE), but can sometimes definitely return NO. Fields Name Description MAYBE NO"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.FuzzySet.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.FuzzySet.html",
    "title": "Class FuzzySet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzySet A class used to represent a set of many, potentially large, values (e.g. many long strings such as URLs), using a significantly smaller amount of memory. The set is \"lossy\" in that it cannot definitively state that is does contain a value but it can definitively say if a value is not in the set. It can therefore be used as a Bloom Filter. Another application of the set is that it can be used to perform fuzzy counting because it can estimate reasonably accurately how many unique values are contained in the set. This class is NOT threadsafe. Internally a Bitset is used to record values and once a client has finished recording a stream of values the Downsize(Single) method can be used to create a suitably smaller set that is sized appropriately for the number of values recorded and desired saturation levels. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FuzzySet Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public class FuzzySet : object Fields | Improve this Doc View Source VERSION_CURRENT Declaration public static readonly int VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_SPI Declaration public static readonly int VERSION_SPI Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Declaration public static readonly int VERSION_START Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddValue(BytesRef) Records a value in the set. The referenced bytes are hashed and then modulo n'd where n is the chosen size of the internal bitset. Declaration public virtual void AddValue(BytesRef value) Parameters Type Name Description BytesRef value The Key value to be hashed. | Improve this Doc View Source Contains(BytesRef) The main method required for a Bloom filter which, given a value determines set membership. Unlike a conventional set, the fuzzy set returns NO or MAYBE rather than true or false . Declaration public virtual FuzzySet.ContainsResult Contains(BytesRef value) Parameters Type Name Description BytesRef value Returns Type Description FuzzySet.ContainsResult NO or MAYBE | Improve this Doc View Source CreateSetBasedOnMaxMemory(Int32) Declaration public static FuzzySet CreateSetBasedOnMaxMemory(int maxNumBytes) Parameters Type Name Description System.Int32 maxNumBytes Returns Type Description FuzzySet | Improve this Doc View Source CreateSetBasedOnQuality(Int32, Single) Declaration public static FuzzySet CreateSetBasedOnQuality(int maxNumUniqueValues, float desiredMaxSaturation) Parameters Type Name Description System.Int32 maxNumUniqueValues System.Single desiredMaxSaturation Returns Type Description FuzzySet | Improve this Doc View Source Deserialize(DataInput) Declaration public static FuzzySet Deserialize(DataInput input) Parameters Type Name Description DataInput input Returns Type Description FuzzySet | Improve this Doc View Source Downsize(Single) Declaration public virtual FuzzySet Downsize(float targetMaxSaturation) Parameters Type Name Description System.Single targetMaxSaturation A number between 0 and 1 describing the % of bits that would ideally be set in the result. Lower values have better accuracy but require more space. Returns Type Description FuzzySet | Improve this Doc View Source GetEstimatedNumberUniqueValuesAllowingForCollisions(Int32, Int32) Given a setSize and a the number of set bits, produces an estimate of the number of unique values recorded. Declaration public static int GetEstimatedNumberUniqueValuesAllowingForCollisions(int setSize, int numRecordedBits) Parameters Type Name Description System.Int32 setSize System.Int32 numRecordedBits Returns Type Description System.Int32 | Improve this Doc View Source GetEstimatedUniqueValues() Declaration public virtual int GetEstimatedUniqueValues() Returns Type Description System.Int32 | Improve this Doc View Source GetNearestSetSize(Int32) Rounds down required maxNumberOfBits to the nearest number that is made up of all ones as a binary number. Use this method where controlling memory use is paramount. Declaration public static int GetNearestSetSize(int maxNumberOfBits) Parameters Type Name Description System.Int32 maxNumberOfBits Returns Type Description System.Int32 | Improve this Doc View Source GetNearestSetSize(Int32, Single) Use this method to choose a set size where accuracy (low content saturation) is more important than deciding how much memory to throw at the problem. Declaration public static int GetNearestSetSize(int maxNumberOfValuesExpected, float desiredSaturation) Parameters Type Name Description System.Int32 maxNumberOfValuesExpected System.Single desiredSaturation A number between 0 and 1 expressing the % of bits set once all values have been recorded. Returns Type Description System.Int32 The size of the set nearest to the required size. | Improve this Doc View Source GetSaturation() Declaration public virtual float GetSaturation() Returns Type Description System.Single | Improve this Doc View Source HashFunctionForVersion(Int32) Declaration public static HashFunction HashFunctionForVersion(int version) Parameters Type Name Description System.Int32 version Returns Type Description HashFunction | Improve this Doc View Source RamBytesUsed() Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source Serialize(DataOutput) Serializes the data set to file using the following format: FuzzySet -->FuzzySetVersion,HashFunctionName,BloomSize, NumBitSetWords,BitSetWord NumBitSetWords HashFunctionName --> String ( ) The name of a ServiceProvider registered HashFunction FuzzySetVersion --> Uint32 ( ) The version number of the FuzzySet class BloomSize --> Uint32 ( ) The modulo value used to project hashes into the field's Bitset NumBitSetWords --> Uint32 ( ) The number of longs (as returned from GetBits() ) BitSetWord --> Long ( ) A long from the array returned by GetBits() Declaration public virtual void Serialize(DataOutput output) Parameters Type Name Description DataOutput output Data output stream."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.HashFunction.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.HashFunction.html",
    "title": "Class HashFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HashFunction Base class for hashing functions that can be referred to by name. Subclasses are expected to provide threadsafe implementations of the hash function on the range of bytes referenced in the provided BytesRef . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object HashFunction MurmurHash2 Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public abstract class HashFunction : object Methods | Improve this Doc View Source Hash(BytesRef) Hashes the contents of the referenced bytes. Declaration public abstract int Hash(BytesRef bytes) Parameters Type Name Description BytesRef bytes The data to be hashed. Returns Type Description System.Int32 The hash of the bytes referenced by bytes.offset and length bytes.Length."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.html",
    "title": "Namespace Lucene.Net.Codecs.Bloom | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Bloom <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codec PostingsFormat for fast access to low-frequency terms such as primary key fields. Classes BloomFilterFactory Class used to create index-time FuzzySet appropriately configured for each field. Also called to right-size bitsets for serialization. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BloomFilteringPostingsFormat A PostingsFormat useful for low doc-frequency fields such as primary keys. Bloom filters are maintained in a \".blm\" file which offers \"fast-fail\" for reads in segments known to have no record of the key. A choice of delegate PostingsFormat is used to record all other Postings data. A choice of BloomFilterFactory can be passed to tailor Bloom Filter settings on a per-field basis. The default configuration is DefaultBloomFilterFactory which allocates a ~8mb bitset and hashes values using MurmurHash2 . This should be suitable for most purposes. The format of the blm file is as follows: BloomFilter (.blm) --> Header, DelegatePostingsFormatName, NumFilteredFields, Filter NumFilteredFields , Footer Filter --> FieldNumber, FuzzySet FuzzySet -->See Serialize(DataOutput) Header --> CodecHeader ( ) DelegatePostingsFormatName --> String ( ) The name of a ServiceProvider registered PostingsFormat NumFilteredFields --> Uint32 ( ) FieldNumber --> Uint32 ( ) The number of the field in this segment Footer --> CodecFooter ( WriteFooter(IndexOutput) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk DefaultBloomFilterFactory Default policy is to allocate a bitset with 10% saturation given a unique term per document. Bits are set via MurmurHash2 hashing function. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FuzzySet A class used to represent a set of many, potentially large, values (e.g. many long strings such as URLs), using a significantly smaller amount of memory. The set is \"lossy\" in that it cannot definitively state that is does contain a value but it can definitively say if a value is not in the set. It can therefore be used as a Bloom Filter. Another application of the set is that it can be used to perform fuzzy counting because it can estimate reasonably accurately how many unique values are contained in the set. This class is NOT threadsafe. Internally a Bitset is used to record values and once a client has finished recording a stream of values the Downsize(Single) method can be used to create a suitably smaller set that is sized appropriately for the number of values recorded and desired saturation levels. This is a Lucene.NET EXPERIMENTAL API, use at your own risk HashFunction Base class for hashing functions that can be referred to by name. Subclasses are expected to provide threadsafe implementations of the hash function on the range of bytes referenced in the provided BytesRef . This is a Lucene.NET EXPERIMENTAL API, use at your own risk MurmurHash2 This is a very fast, non-cryptographic hash suitable for general hash-based lookup. See http://murmurhash.googlepages.com/ for more details. The C version of MurmurHash 2.0 found at that site was ported to Java by Andrzej Bialecki (ab at getopt org). The code from getopt.org was adapted by Mark Harwood in the form here as one of a pluggable choice of hashing functions as the core function had to be adapted to work with BytesRef s with offsets and lengths rather than raw byte arrays. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums FuzzySet.ContainsResult"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.MurmurHash2.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.MurmurHash2.html",
    "title": "Class MurmurHash2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MurmurHash2 This is a very fast, non-cryptographic hash suitable for general hash-based lookup. See http://murmurhash.googlepages.com/ for more details. The C version of MurmurHash 2.0 found at that site was ported to Java by Andrzej Bialecki (ab at getopt org). The code from getopt.org was adapted by Mark Harwood in the form here as one of a pluggable choice of hashing functions as the core function had to be adapted to work with BytesRef s with offsets and lengths rather than raw byte arrays. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object HashFunction MurmurHash2 Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public sealed class MurmurHash2 : HashFunction Fields | Improve this Doc View Source INSTANCE Declaration public static readonly MurmurHash2 INSTANCE Field Value Type Description MurmurHash2 Methods | Improve this Doc View Source Hash(BytesRef) Declaration public override int Hash(BytesRef br) Parameters Type Name Description BytesRef br Returns Type Description System.Int32 Overrides HashFunction.Hash(BytesRef) | Improve this Doc View Source Hash(Byte[], Int32, Int32, Int32) Declaration public static int Hash(byte[] data, int seed, int offset, int len) Parameters Type Name Description System.Byte [] data System.Int32 seed System.Int32 offset System.Int32 len Returns Type Description System.Int32 | Improve this Doc View Source Hash32(Byte[], Int32, Int32) Generates 32 bit hash from byte array with default seed value. Declaration public static int Hash32(byte[] data, int offset, int len) Parameters Type Name Description System.Byte [] data Byte array to hash. System.Int32 offset The start position in the array to hash. System.Int32 len Length of the array elements to hash. Returns Type Description System.Int32 32 bit hash of the given array."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.DiskDocValuesFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.DiskDocValuesFormat.html",
    "title": "Class DiskDocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DiskDocValuesFormat DocValues format that keeps most things on disk. Only things like disk offsets are loaded into ram. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesFormat DiskDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats Namespace : Lucene.Net.Codecs.DiskDV Assembly : Lucene.Net.Codecs.dll Syntax public sealed class DiskDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source DiskDocValuesFormat() Declaration public DiskDocValuesFormat() Fields | Improve this Doc View Source DATA_CODEC Declaration public static readonly string DATA_CODEC Field Value Type Description System.String | Improve this Doc View Source DATA_EXTENSION Declaration public static readonly string DATA_EXTENSION Field Value Type Description System.String | Improve this Doc View Source META_CODEC Declaration public static readonly string META_CODEC Field Value Type Description System.String | Improve this Doc View Source META_EXTENSION Declaration public static readonly string META_EXTENSION Field Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.DiskNormsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.DiskNormsFormat.html",
    "title": "Class DiskNormsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DiskNormsFormat Norms format that keeps all norms on disk. Inheritance System.Object NormsFormat DiskNormsFormat Namespace : Lucene.Net.Codecs.DiskDV Assembly : Lucene.Net.Codecs.dll Syntax public sealed class DiskNormsFormat : NormsFormat Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides NormsFormat.NormsConsumer(SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides NormsFormat.NormsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.html",
    "title": "Namespace Lucene.Net.Codecs.DiskDV | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.DiskDV <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> DocValuesFormat that accesses values directly from disk. Classes DiskDocValuesFormat DocValues format that keeps most things on disk. Only things like disk offsets are loaded into ram. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DiskNormsFormat Norms format that keeps all norms on disk."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.html",
    "title": "Class FixedInt32BlockIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedInt32BlockIndexInput Abstract base class that reads fixed-size blocks of ints from an IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Directory . Wrapping a generic IndexInput will likely cost performance. NOTE: This was FixedIntBlockIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexInput FixedInt32BlockIndexInput Inherited Members Int32IndexInput.Dispose() Namespace : Lucene.Net.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public abstract class FixedInt32BlockIndexInput : Int32IndexInput Remarks Naive int block API that writes vInts. This is expected to give poor performance; it's really only for testing the pluggability. One should typically use pfor instead. Constructors | Improve this Doc View Source FixedInt32BlockIndexInput(IndexInput) Declaration public FixedInt32BlockIndexInput(IndexInput in) Parameters Type Name Description IndexInput in Fields | Improve this Doc View Source m_blockSize Declaration protected readonly int m_blockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexInput.Dispose(Boolean) | Improve this Doc View Source GetBlockReader(IndexInput, Int32[]) Declaration protected abstract FixedInt32BlockIndexInput.IBlockReader GetBlockReader(IndexInput in, int[] buffer) Parameters Type Name Description IndexInput in System.Int32 [] buffer Returns Type Description FixedInt32BlockIndexInput.IBlockReader | Improve this Doc View Source GetIndex() Declaration public override Int32IndexInput.Index GetIndex() Returns Type Description Int32IndexInput.Index Overrides Int32IndexInput.GetIndex() | Improve this Doc View Source GetReader() Declaration public override Int32IndexInput.Reader GetReader() Returns Type Description Int32IndexInput.Reader Overrides Int32IndexInput.GetReader()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.IBlockReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.IBlockReader.html",
    "title": "Interface FixedInt32BlockIndexInput.IBlockReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FixedInt32BlockIndexInput.IBlockReader Interface for fixed-size block decoders. Implementations should decode into the buffer in ReadBlock() . Namespace : Lucene.Net.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public interface IBlockReader Methods | Improve this Doc View Source ReadBlock() Declaration void ReadBlock()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexOutput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexOutput.html",
    "title": "Class FixedInt32BlockIndexOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedInt32BlockIndexOutput Abstract base class that writes fixed-size blocks of ints to an IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Directory . Wrapping a generic IndexOutput will likely cost performance. NOTE: This was FixedIntBlockIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexOutput FixedInt32BlockIndexOutput Inherited Members Int32IndexOutput.Dispose() Namespace : Lucene.Net.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public abstract class FixedInt32BlockIndexOutput : Int32IndexOutput Remarks Naive int block API that writes vInts. This is expected to give poor performance; it's really only for testing the pluggability. One should typically use pfor instead. Constructors | Improve this Doc View Source FixedInt32BlockIndexOutput(IndexOutput, Int32) Declaration protected FixedInt32BlockIndexOutput(IndexOutput output, int fixedBlockSize) Parameters Type Name Description IndexOutput output System.Int32 fixedBlockSize Fields | Improve this Doc View Source m_buffer Declaration protected readonly int[] m_buffer Field Value Type Description System.Int32 [] | Improve this Doc View Source m_output Declaration protected readonly IndexOutput m_output Field Value Type Description IndexOutput Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexOutput.Dispose(Boolean) | Improve this Doc View Source FlushBlock() Declaration protected abstract void FlushBlock() | Improve this Doc View Source GetIndex() Declaration public override Int32IndexOutput.Index GetIndex() Returns Type Description Int32IndexOutput.Index Overrides Int32IndexOutput.GetIndex() | Improve this Doc View Source Write(Int32) Declaration public override void Write(int v) Parameters Type Name Description System.Int32 v Overrides Int32IndexOutput.Write(Int32)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.html",
    "title": "Namespace Lucene.Net.Codecs.IntBlock | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.IntBlock <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Intblock: base support for fixed or variable length block integer encoders Classes FixedInt32BlockIndexInput Abstract base class that reads fixed-size blocks of ints from an IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Directory . Wrapping a generic IndexInput will likely cost performance. NOTE: This was FixedIntBlockIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk FixedInt32BlockIndexOutput Abstract base class that writes fixed-size blocks of ints to an IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Directory . Wrapping a generic IndexOutput will likely cost performance. NOTE: This was FixedIntBlockIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk VariableInt32BlockIndexInput Abstract base class that reads variable-size blocks of ints from an IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Directory . Wrapping a generic IndexInput will likely cost performance. NOTE: This was VariableIntBlockIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk VariableInt32BlockIndexOutput Abstract base class that writes variable-size blocks of ints to an IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Directory . Wrapping a generic IndexOutput will likely cost performance. NOTE: This was VariableIntBlockIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces FixedInt32BlockIndexInput.IBlockReader Interface for fixed-size block decoders. Implementations should decode into the buffer in ReadBlock() . VariableInt32BlockIndexInput.IBlockReader Interface for variable-size block decoders. Implementations should decode into the buffer in ReadBlock() ."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.html",
    "title": "Class VariableInt32BlockIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VariableInt32BlockIndexInput Abstract base class that reads variable-size blocks of ints from an IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Directory . Wrapping a generic IndexInput will likely cost performance. NOTE: This was VariableIntBlockIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexInput VariableInt32BlockIndexInput Inherited Members Int32IndexInput.Dispose() Namespace : Lucene.Net.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public abstract class VariableInt32BlockIndexInput : Int32IndexInput Remarks Naive int block API that writes vInts. This is expected to give poor performance; it's really only for testing the pluggability. One should typically use pfor instead. Constructors | Improve this Doc View Source VariableInt32BlockIndexInput(IndexInput) Declaration protected VariableInt32BlockIndexInput(IndexInput input) Parameters Type Name Description IndexInput input Fields | Improve this Doc View Source m_maxBlockSize Declaration protected readonly int m_maxBlockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexInput.Dispose(Boolean) | Improve this Doc View Source GetBlockReader(IndexInput, Int32[]) Declaration protected abstract VariableInt32BlockIndexInput.IBlockReader GetBlockReader(IndexInput in, int[] buffer) Parameters Type Name Description IndexInput in System.Int32 [] buffer Returns Type Description VariableInt32BlockIndexInput.IBlockReader | Improve this Doc View Source GetIndex() Declaration public override Int32IndexInput.Index GetIndex() Returns Type Description Int32IndexInput.Index Overrides Int32IndexInput.GetIndex() | Improve this Doc View Source GetReader() Declaration public override Int32IndexInput.Reader GetReader() Returns Type Description Int32IndexInput.Reader Overrides Int32IndexInput.GetReader()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.IBlockReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.IBlockReader.html",
    "title": "Interface VariableInt32BlockIndexInput.IBlockReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface VariableInt32BlockIndexInput.IBlockReader Interface for variable-size block decoders. Implementations should decode into the buffer in ReadBlock() . Namespace : Lucene.Net.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public interface IBlockReader Methods | Improve this Doc View Source ReadBlock() Declaration int ReadBlock() Returns Type Description System.Int32 | Improve this Doc View Source Seek(Int64) Declaration void Seek(long pos) Parameters Type Name Description System.Int64 pos"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexOutput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexOutput.html",
    "title": "Class VariableInt32BlockIndexOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VariableInt32BlockIndexOutput Abstract base class that writes variable-size blocks of ints to an IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Directory . Wrapping a generic IndexOutput will likely cost performance. NOTE: This was VariableIntBlockIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexOutput VariableInt32BlockIndexOutput Inherited Members Int32IndexOutput.Dispose() Namespace : Lucene.Net.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public abstract class VariableInt32BlockIndexOutput : Int32IndexOutput Remarks Naive int block API that writes vInts. This is expected to give poor performance; it's really only for testing the pluggability. One should typically use pfor instead. Constructors | Improve this Doc View Source VariableInt32BlockIndexOutput(IndexOutput, Int32) NOTE: maxBlockSize must be the maximum block size plus the max non-causal lookahead of your codec. EG Simple9 requires lookahead=1 because on seeing the Nth value it knows it must now encode the N-1 values before it. Declaration protected VariableInt32BlockIndexOutput(IndexOutput output, int maxBlockSize) Parameters Type Name Description IndexOutput output System.Int32 maxBlockSize Fields | Improve this Doc View Source m_output Declaration protected readonly IndexOutput m_output Field Value Type Description IndexOutput Methods | Improve this Doc View Source Add(Int32) Called one value at a time. Return the number of buffered input values that have been written to out. Declaration protected abstract int Add(int value) Parameters Type Name Description System.Int32 value Returns Type Description System.Int32 | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexOutput.Dispose(Boolean) | Improve this Doc View Source GetIndex() Declaration public override Int32IndexOutput.Index GetIndex() Returns Type Description Int32IndexOutput.Index Overrides Int32IndexOutput.GetIndex() | Improve this Doc View Source Write(Int32) Declaration public override void Write(int v) Parameters Type Name Description System.Int32 v Overrides Int32IndexOutput.Write(Int32)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.DirectDocValuesFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.DirectDocValuesFormat.html",
    "title": "Class DirectDocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectDocValuesFormat In-memory docvalues format that does no (or very little) compression. Indexed values are stored on disk, but then at search time all values are loaded into memory as simple .NET arrays. For numeric values, it uses byte[], short[], int[], long[] as necessary to fit the range of the values. For binary values, there is an (4 bytes) overhead per value. Limitations: For binary and sorted fields the total space required for all binary values cannot exceed about 2.1 GB (see MAX_TOTAL_BYTES_LENGTH ). For sorted set fields, the sum of the size of each document's set of values cannot exceed about 2.1 B values (see MAX_SORTED_SET_ORDS ). For example, if every document has 10 values (10 instances of SortedSetDocValuesField ) added, then no more than ~210 M documents can be added to one segment. Inheritance System.Object DocValuesFormat DirectDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class DirectDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source DirectDocValuesFormat() Sole constructor. Declaration public DirectDocValuesFormat() Fields | Improve this Doc View Source MAX_SORTED_SET_ORDS The sum of the number of values across all documents in a sorted set field cannot exceed this. Declaration public static readonly int MAX_SORTED_SET_ORDS Field Value Type Description System.Int32 | Improve this Doc View Source MAX_TOTAL_BYTES_LENGTH The sum of all byte lengths for binary field, or for the unique values in sorted or sorted set fields, cannot exceed this. Declaration public static readonly int MAX_TOTAL_BYTES_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.DirectPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.DirectPostingsFormat.html",
    "title": "Class DirectPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectPostingsFormat Wraps Lucene41PostingsFormat format for on-disk storage, but then at read time loads and stores all terms & postings directly in RAM as byte[], int[]. WARNING : This is exceptionally RAM intensive: it makes no effort to compress the postings data, storing terms as separate byte[] and postings as separate int[], but as a result it gives substantial increase in search performance. This postings format supports Ord and . Because this holds all term bytes as a single byte[], you cannot have more than 2.1GB worth of term bytes in a single segment. @lucene.experimental Inheritance System.Object PostingsFormat DirectPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public sealed class DirectPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source DirectPostingsFormat() Declaration public DirectPostingsFormat() | Improve this Doc View Source DirectPostingsFormat(Int32, Int32) minSkipCount is how many terms in a row must have the same prefix before we put a skip pointer down. Terms with docFreq less than or equal lowFreqCutoff will use a single int[] to hold all docs, freqs, position and offsets; terms with higher docFreq will use separate arrays. Declaration public DirectPostingsFormat(int minSkipCount, int lowFreqCutoff) Parameters Type Name Description System.Int32 minSkipCount System.Int32 lowFreqCutoff Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdPostingsFormat.html",
    "title": "Class FSTOrdPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTOrdPostingsFormat FSTOrd term dict + Lucene41PBF Inheritance System.Object PostingsFormat FSTOrdPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public sealed class FSTOrdPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source FSTOrdPostingsFormat() Declaration public FSTOrdPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdPulsing41PostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdPulsing41PostingsFormat.html",
    "title": "Class FSTOrdPulsing41PostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTOrdPulsing41PostingsFormat FSTOrd + Pulsing41 @lucene.experimental Inheritance System.Object PostingsFormat FSTOrdPulsing41PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class FSTOrdPulsing41PostingsFormat : PostingsFormat Constructors | Improve this Doc View Source FSTOrdPulsing41PostingsFormat() Declaration public FSTOrdPulsing41PostingsFormat() | Improve this Doc View Source FSTOrdPulsing41PostingsFormat(Int32) Declaration public FSTOrdPulsing41PostingsFormat(int freqCutoff) Parameters Type Name Description System.Int32 freqCutoff Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdTermsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdTermsReader.html",
    "title": "Class FSTOrdTermsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTOrdTermsReader FST-based terms dictionary reader. The FST index maps each term and its ord, and during seek the ord is used fetch metadata from a single block. The term dictionary is fully memory resident. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer FSTOrdTermsReader Implements IDisposable Inherited Members FieldsProducer.Dispose() Fields.UniqueTermCount Fields.EMPTY_ARRAY Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class FSTOrdTermsReader : FieldsProducer, IDisposable Constructors | Improve this Doc View Source FSTOrdTermsReader(SegmentReadState, PostingsReaderBase) Declaration public FSTOrdTermsReader(SegmentReadState state, PostingsReaderBase postingsReader) Parameters Type Name Description SegmentReadState state PostingsReaderBase postingsReader Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides FieldsProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides FieldsProducer.RamBytesUsed() Implements IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdTermsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdTermsWriter.html",
    "title": "Class FSTOrdTermsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTOrdTermsWriter FST-based term dict, using ord as FST output. The FST holds the mapping between <term, ord>, and term's metadata is delta encoded into a single byte block. Typically the byte block consists of four parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information customized by postings base. single-level skip list to speed up metadata decoding by ord. Files: .tix : Term Index .tbk : Term Block Term Index The .tix contains a list of FSTs, one for each field. The FST maps a term to its corresponding order in current field. TermIndex(.tix) --> Header, TermFST NumFields , Footer TermFST --> FST<T> Header --> CodecHeader ( ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Since terms are already sorted before writing to Term Block , their ords can directly used to seek term metadata from term block. Term Block The .tbk contains all the statistics and metadata for terms, along with field summary (e.g. per-field data like number of documents in current field). For each field, there are four blocks: statistics bytes block: contains term statistics; metadata longs block: delta-encodes monotonic part of metadata; metadata bytes block: encodes other parts of metadata; skip block: contains skip data, to speed up metadata seeking and decoding File Format: TermBlock(.tbk) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, DataBlock > NumFields , Footer DataBlock --> StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, SkipBlock, StatsBlock, MetaLongsBlock, MetaBytesBlock SkipBlock --> < StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipDelta LongsSize > NumTerms StatsBlock --> < DocFreq[Same?], (TotalTermFreq-DocFreq) ? > NumTerms MetaLongsBlock --> < LongDelta LongsSize , BytesSize > NumTerms MetaBytesBlock --> Byte MetaBytesBlockLength Header --> CodecHeader ( ) DirOffset --> Uint64 ( ) NumFields, FieldNumber, DocCount, DocFreq, LongsSize, FieldNumber, DocCount --> VInt ( ) NumTerms, SumTotalTermFreq, SumDocFreq, StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipStart, TotalTermFreq, LongDelta,--> VLong ( ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: The format of PostingsHeader and MetaBytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). During initialization the reader will load all the blocks into memory. SkipBlock will be decoded, so that during seek term dict can lookup file pointers directly. StatsFPDelta, MetaLongsSkipFPDelta, etc. are file offset for every SkipInterval's term. MetaLongsSkipDelta is the difference from previous one, which indicates the value of preceding metadata longs for every SkipInterval's term. DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. Usually these two values are the same for long tail terms, therefore one bit is stole from DocFreq to check this case, so that encoding of TotalTermFreq may be omitted. @lucene.experimental Inheritance System.Object FieldsConsumer FSTOrdTermsWriter Inherited Members FieldsConsumer.Dispose() FieldsConsumer.Merge(MergeState, Fields) Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class FSTOrdTermsWriter : FieldsConsumer Constructors | Improve this Doc View Source FSTOrdTermsWriter(SegmentWriteState, PostingsWriterBase) Declaration public FSTOrdTermsWriter(SegmentWriteState state, PostingsWriterBase postingsWriter) Parameters Type Name Description SegmentWriteState state PostingsWriterBase postingsWriter Fields | Improve this Doc View Source SKIP_INTERVAL Declaration public const int SKIP_INTERVAL = null Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_CHECKSUM Declaration public const int TERMS_VERSION_CHECKSUM = null Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_CURRENT Declaration public const int TERMS_VERSION_CURRENT = null Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_START Declaration public const int TERMS_VERSION_START = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddField(FieldInfo) Declaration public override TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer Overrides FieldsConsumer.AddField(FieldInfo) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTPostingsFormat.html",
    "title": "Class FSTPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTPostingsFormat FST term dict + Lucene41PBF Inheritance System.Object PostingsFormat FSTPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public sealed class FSTPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source FSTPostingsFormat() Declaration public FSTPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTPulsing41PostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTPulsing41PostingsFormat.html",
    "title": "Class FSTPulsing41PostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTPulsing41PostingsFormat FST + Pulsing41, test only, since FST does no delta encoding here! @lucene.experimental Inheritance System.Object PostingsFormat FSTPulsing41PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class FSTPulsing41PostingsFormat : PostingsFormat Constructors | Improve this Doc View Source FSTPulsing41PostingsFormat() Declaration public FSTPulsing41PostingsFormat() | Improve this Doc View Source FSTPulsing41PostingsFormat(Int32) Declaration public FSTPulsing41PostingsFormat(int freqCutoff) Parameters Type Name Description System.Int32 freqCutoff Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTTermsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTTermsReader.html",
    "title": "Class FSTTermsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTTermsReader FST-based terms dictionary reader. The FST directly maps each term and its metadata, it is memory resident. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer FSTTermsReader Implements IDisposable Inherited Members FieldsProducer.Dispose() Fields.UniqueTermCount Fields.EMPTY_ARRAY Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class FSTTermsReader : FieldsProducer, IDisposable Constructors | Improve this Doc View Source FSTTermsReader(SegmentReadState, PostingsReaderBase) Declaration public FSTTermsReader(SegmentReadState state, PostingsReaderBase postingsReader) Parameters Type Name Description SegmentReadState state PostingsReaderBase postingsReader Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides FieldsProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides FieldsProducer.RamBytesUsed() Implements IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTTermsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTTermsWriter.html",
    "title": "Class FSTTermsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTTermsWriter FST-based term dict, using metadata as FST output. The FST directly holds the mapping between <term, metadata>. Term metadata consists of three parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information need by postings reader. File: .tst : Term Dictionary Term Dictionary The .tst contains a list of FSTs, one for each field. The FST maps a term to its corresponding statistics (e.g. docfreq) and metadata (e.g. information for postings list reader like file pointer to postings list). Typically the metadata is separated into two parts: Monotonical long array: Some metadata will always be ascending in order with the corresponding term. This part is used by FST to share outputs between arcs. Generic byte array: Used to store non-monotonic metadata. File format: TermsDict(.tst) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, TermFST > NumFields TermFST TermData TermData --> Flag, BytesSize?, LongDelta LongsSize ?, Byte BytesSize ?, < DocFreq[Same?], (TotalTermFreq-DocFreq) > ? Header --> CodecHeader ( ) DirOffset --> Uint64 ( ) DocFreq, LongsSize, BytesSize, NumFields, FieldNumber, DocCount --> VInt ( ) TotalTermFreq, NumTerms, SumTotalTermFreq, SumDocFreq, LongDelta --> VLong ( ) Notes: The format of PostingsHeader and generic meta bytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). The format of TermData is determined by FST, typically monotonic metadata will be dense around shallow arcs, while in deeper arcs only generic bytes and term statistics exist. The byte Flag is used to indicate which part of metadata exists on current arc. Specially the monotonic part is omitted when it is an array of 0s. Since LongsSize is per-field fixed, it is only written once in field summary. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldsConsumer FSTTermsWriter Inherited Members FieldsConsumer.Dispose() FieldsConsumer.Merge(MergeState, Fields) Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class FSTTermsWriter : FieldsConsumer Constructors | Improve this Doc View Source FSTTermsWriter(SegmentWriteState, PostingsWriterBase) Declaration public FSTTermsWriter(SegmentWriteState state, PostingsWriterBase postingsWriter) Parameters Type Name Description SegmentWriteState state PostingsWriterBase postingsWriter Fields | Improve this Doc View Source TERMS_VERSION_CHECKSUM Declaration public const int TERMS_VERSION_CHECKSUM = null Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_CURRENT Declaration public const int TERMS_VERSION_CURRENT = null Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_START Declaration public const int TERMS_VERSION_START = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddField(FieldInfo) Declaration public override TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer Overrides FieldsConsumer.AddField(FieldInfo) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.html",
    "title": "Namespace Lucene.Net.Codecs.Memory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Memory <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Term dictionary, DocValues or Postings formats that are read entirely into memory. Classes DirectDocValuesFormat In-memory docvalues format that does no (or very little) compression. Indexed values are stored on disk, but then at search time all values are loaded into memory as simple .NET arrays. For numeric values, it uses byte[], short[], int[], long[] as necessary to fit the range of the values. For binary values, there is an (4 bytes) overhead per value. Limitations: For binary and sorted fields the total space required for all binary values cannot exceed about 2.1 GB (see MAX_TOTAL_BYTES_LENGTH ). For sorted set fields, the sum of the size of each document's set of values cannot exceed about 2.1 B values (see MAX_SORTED_SET_ORDS ). For example, if every document has 10 values (10 instances of SortedSetDocValuesField ) added, then no more than ~210 M documents can be added to one segment. DirectPostingsFormat Wraps Lucene41PostingsFormat format for on-disk storage, but then at read time loads and stores all terms & postings directly in RAM as byte[], int[]. WARNING : This is exceptionally RAM intensive: it makes no effort to compress the postings data, storing terms as separate byte[] and postings as separate int[], but as a result it gives substantial increase in search performance. This postings format supports Ord and . Because this holds all term bytes as a single byte[], you cannot have more than 2.1GB worth of term bytes in a single segment. @lucene.experimental FSTOrdPostingsFormat FSTOrd term dict + Lucene41PBF FSTOrdPulsing41PostingsFormat FSTOrd + Pulsing41 @lucene.experimental FSTOrdTermsReader FST-based terms dictionary reader. The FST index maps each term and its ord, and during seek the ord is used fetch metadata from a single block. The term dictionary is fully memory resident. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTOrdTermsWriter FST-based term dict, using ord as FST output. The FST holds the mapping between <term, ord>, and term's metadata is delta encoded into a single byte block. Typically the byte block consists of four parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information customized by postings base. single-level skip list to speed up metadata decoding by ord. Files: .tix : Term Index .tbk : Term Block Term Index The .tix contains a list of FSTs, one for each field. The FST maps a term to its corresponding order in current field. TermIndex(.tix) --> Header, TermFST NumFields , Footer TermFST --> FST<T> Header --> CodecHeader ( ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Since terms are already sorted before writing to Term Block , their ords can directly used to seek term metadata from term block. Term Block The .tbk contains all the statistics and metadata for terms, along with field summary (e.g. per-field data like number of documents in current field). For each field, there are four blocks: statistics bytes block: contains term statistics; metadata longs block: delta-encodes monotonic part of metadata; metadata bytes block: encodes other parts of metadata; skip block: contains skip data, to speed up metadata seeking and decoding File Format: TermBlock(.tbk) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, DataBlock > NumFields , Footer DataBlock --> StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, SkipBlock, StatsBlock, MetaLongsBlock, MetaBytesBlock SkipBlock --> < StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipDelta LongsSize > NumTerms StatsBlock --> < DocFreq[Same?], (TotalTermFreq-DocFreq) ? > NumTerms MetaLongsBlock --> < LongDelta LongsSize , BytesSize > NumTerms MetaBytesBlock --> Byte MetaBytesBlockLength Header --> CodecHeader ( ) DirOffset --> Uint64 ( ) NumFields, FieldNumber, DocCount, DocFreq, LongsSize, FieldNumber, DocCount --> VInt ( ) NumTerms, SumTotalTermFreq, SumDocFreq, StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipStart, TotalTermFreq, LongDelta,--> VLong ( ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: The format of PostingsHeader and MetaBytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). During initialization the reader will load all the blocks into memory. SkipBlock will be decoded, so that during seek term dict can lookup file pointers directly. StatsFPDelta, MetaLongsSkipFPDelta, etc. are file offset for every SkipInterval's term. MetaLongsSkipDelta is the difference from previous one, which indicates the value of preceding metadata longs for every SkipInterval's term. DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. Usually these two values are the same for long tail terms, therefore one bit is stole from DocFreq to check this case, so that encoding of TotalTermFreq may be omitted. @lucene.experimental FSTPostingsFormat FST term dict + Lucene41PBF FSTPulsing41PostingsFormat FST + Pulsing41, test only, since FST does no delta encoding here! @lucene.experimental FSTTermsReader FST-based terms dictionary reader. The FST directly maps each term and its metadata, it is memory resident. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTTermsWriter FST-based term dict, using metadata as FST output. The FST directly holds the mapping between <term, metadata>. Term metadata consists of three parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information need by postings reader. File: .tst : Term Dictionary Term Dictionary The .tst contains a list of FSTs, one for each field. The FST maps a term to its corresponding statistics (e.g. docfreq) and metadata (e.g. information for postings list reader like file pointer to postings list). Typically the metadata is separated into two parts: Monotonical long array: Some metadata will always be ascending in order with the corresponding term. This part is used by FST to share outputs between arcs. Generic byte array: Used to store non-monotonic metadata. File format: TermsDict(.tst) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, TermFST > NumFields TermFST TermData TermData --> Flag, BytesSize?, LongDelta LongsSize ?, Byte BytesSize ?, < DocFreq[Same?], (TotalTermFreq-DocFreq) > ? Header --> CodecHeader ( ) DirOffset --> Uint64 ( ) DocFreq, LongsSize, BytesSize, NumFields, FieldNumber, DocCount --> VInt ( ) TotalTermFreq, NumTerms, SumTotalTermFreq, SumDocFreq, LongDelta --> VLong ( ) Notes: The format of PostingsHeader and generic meta bytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). The format of TermData is determined by FST, typically monotonic metadata will be dense around shallow arcs, while in deeper arcs only generic bytes and term statistics exist. The byte Flag is used to indicate which part of metadata exists on current arc. Specially the monotonic part is omitted when it is an array of 0s. Since LongsSize is per-field fixed, it is only written once in field summary. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MemoryDocValuesFormat In-memory docvalues format. MemoryPostingsFormat Stores terms & postings (docs, positions, payloads) in RAM, using an FST. Note that this codec implements advance as a linear scan! This means if you store large fields in here, queries that rely on advance will (AND BooleanQuery, PhraseQuery) will be relatively slow! @lucene.experimental"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.MemoryDocValuesFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.MemoryDocValuesFormat.html",
    "title": "Class MemoryDocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MemoryDocValuesFormat In-memory docvalues format. Inheritance System.Object DocValuesFormat MemoryDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class MemoryDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source MemoryDocValuesFormat() Calls MemoryDocValuesFormat(PackedInts.DEFAULT) ( MemoryDocValuesFormat(Single) ) Declaration public MemoryDocValuesFormat() | Improve this Doc View Source MemoryDocValuesFormat(Single) Creates a new MemoryDocValuesFormat with the specified acceptableOverheadRatio for NumericDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public MemoryDocValuesFormat(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Compression parameter for numerics. Currently this is only used when the number of unique values is small. Fields | Improve this Doc View Source MAX_BINARY_FIELD_LENGTH Maximum length for each binary doc values field. Declaration public static readonly int MAX_BINARY_FIELD_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.MemoryPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.MemoryPostingsFormat.html",
    "title": "Class MemoryPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MemoryPostingsFormat Stores terms & postings (docs, positions, payloads) in RAM, using an FST. Note that this codec implements advance as a linear scan! This means if you store large fields in here, queries that rely on advance will (AND BooleanQuery, PhraseQuery) will be relatively slow! @lucene.experimental Inheritance System.Object PostingsFormat MemoryPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public sealed class MemoryPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source MemoryPostingsFormat() Declaration public MemoryPostingsFormat() | Improve this Doc View Source MemoryPostingsFormat(Boolean, Single) Create MemoryPostingsFormat , specifying advanced FST options. Declaration public MemoryPostingsFormat(bool doPackFST, float acceptableOverheadRatio) Parameters Type Name Description System.Boolean doPackFST true if a packed FST should be built. NOTE: packed FSTs are limited to ~2.1 GB of postings. System.Single acceptableOverheadRatio Allowable overhead for packed s during FST construction. Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.html",
    "title": "Namespace Lucene.Net.Codecs.Pulsing | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Pulsing <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Pulsing Codec: inlines low frequency terms' postings into terms dictionary. Classes Pulsing41PostingsFormat Concrete pulsing implementation over Lucene41PostingsFormat . @lucene.experimental PulsingPostingsFormat This postings format \"inlines\" the postings for terms that have low docFreq. It wraps another postings format, which is used for writing the non-inlined terms. @lucene.experimental PulsingPostingsReader Concrete class that reads the current doc/freq/skip postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PulsingPostingsReader.PulsingEnumAttribute Implementation of PulsingPostingsReader.PulsingEnumAttribute for reuse of wrapped postings readers underneath pulsing. This is a Lucene.NET INTERNAL API, use at your own risk PulsingPostingsWriter Writer for the pulsing format. Wraps another postings implementation and decides (based on total number of occurrences), whether a terms postings should be inlined into the term dictionary, or passed through to the wrapped writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces PulsingPostingsReader.IPulsingEnumAttribute A per-docsenum attribute that stores additional reuse information so that pulsing enums can keep a reference to their wrapped enums, and vice versa. this way we can always reuse. @lucene.internal"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.Pulsing41PostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.Pulsing41PostingsFormat.html",
    "title": "Class Pulsing41PostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Pulsing41PostingsFormat Concrete pulsing implementation over Lucene41PostingsFormat . @lucene.experimental Inheritance System.Object PostingsFormat PulsingPostingsFormat Pulsing41PostingsFormat Inherited Members PulsingPostingsFormat.ToString() PulsingPostingsFormat.FieldsConsumer(SegmentWriteState) PulsingPostingsFormat.FieldsProducer(SegmentReadState) PulsingPostingsFormat.FreqCutoff PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats Namespace : Lucene.Net.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public class Pulsing41PostingsFormat : PulsingPostingsFormat Constructors | Improve this Doc View Source Pulsing41PostingsFormat() Inlines docFreq=1 terms, otherwise uses the normal \"Lucene41\" format. Declaration public Pulsing41PostingsFormat() | Improve this Doc View Source Pulsing41PostingsFormat(Int32) Inlines docFreq= freqCutoff terms, otherwise uses the normal \"Lucene41\" format. Declaration public Pulsing41PostingsFormat(int freqCutoff) Parameters Type Name Description System.Int32 freqCutoff | Improve this Doc View Source Pulsing41PostingsFormat(Int32, Int32, Int32) Inlines docFreq= freqCutoff terms, otherwise uses the normal \"Lucene41\" format. Declaration public Pulsing41PostingsFormat(int freqCutoff, int minBlockSize, int maxBlockSize) Parameters Type Name Description System.Int32 freqCutoff System.Int32 minBlockSize System.Int32 maxBlockSize"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsFormat.html",
    "title": "Class PulsingPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PulsingPostingsFormat This postings format \"inlines\" the postings for terms that have low docFreq. It wraps another postings format, which is used for writing the non-inlined terms. @lucene.experimental Inheritance System.Object PostingsFormat PulsingPostingsFormat Pulsing41PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats Namespace : Lucene.Net.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public abstract class PulsingPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source PulsingPostingsFormat(PostingsBaseFormat, Int32) Declaration public PulsingPostingsFormat(PostingsBaseFormat wrappedPostingsBaseFormat, int freqCutoff) Parameters Type Name Description PostingsBaseFormat wrappedPostingsBaseFormat System.Int32 freqCutoff | Improve this Doc View Source PulsingPostingsFormat(PostingsBaseFormat, Int32, Int32, Int32) Terms with freq less than or equal freqCutoff are inlined into terms dict. Declaration public PulsingPostingsFormat(PostingsBaseFormat wrappedPostingsBaseFormat, int freqCutoff, int minBlockSize, int maxBlockSize) Parameters Type Name Description PostingsBaseFormat wrappedPostingsBaseFormat System.Int32 freqCutoff System.Int32 minBlockSize System.Int32 maxBlockSize Properties | Improve this Doc View Source FreqCutoff Declaration public virtual int FreqCutoff { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.html",
    "title": "Class PulsingPostingsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PulsingPostingsReader Concrete class that reads the current doc/freq/skip postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsReaderBase PulsingPostingsReader Inherited Members PostingsReaderBase.Dispose() Namespace : Lucene.Net.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public class PulsingPostingsReader : PostingsReaderBase Constructors | Improve this Doc View Source PulsingPostingsReader(SegmentReadState, PostingsReaderBase) Declaration public PulsingPostingsReader(SegmentReadState state, PostingsReaderBase wrappedPostingsReader) Parameters Type Name Description SegmentReadState state PostingsReaderBase wrappedPostingsReader Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides PostingsReaderBase.CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Declaration public override void DecodeTerm(long[] empty, DataInput input, FieldInfo fieldInfo, BlockTermState termState, bool absolute) Parameters Type Name Description System.Int64 [] empty DataInput input FieldInfo fieldInfo BlockTermState termState System.Boolean absolute | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(FieldInfo field, BlockTermState termState, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo field BlockTermState termState IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides PostingsReaderBase.Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(FieldInfo field, BlockTermState termState, IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo field BlockTermState termState IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides PostingsReaderBase.DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Init(IndexInput) Declaration public override void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn Overrides PostingsReaderBase.Init(IndexInput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsReaderBase.NewTermState() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PostingsReaderBase.RamBytesUsed()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.IPulsingEnumAttribute.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.IPulsingEnumAttribute.html",
    "title": "Interface PulsingPostingsReader.IPulsingEnumAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface PulsingPostingsReader.IPulsingEnumAttribute A per-docsenum attribute that stores additional reuse information so that pulsing enums can keep a reference to their wrapped enums, and vice versa. this way we can always reuse. @lucene.internal Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public interface IPulsingEnumAttribute : IAttribute Properties | Improve this Doc View Source Enums Declaration IDictionary<PulsingPostingsReader, DocsEnum> Enums { get; } Property Value Type Description IDictionary < PulsingPostingsReader , DocsEnum >"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.PulsingEnumAttribute.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.PulsingEnumAttribute.html",
    "title": "Class PulsingPostingsReader.PulsingEnumAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PulsingPostingsReader.PulsingEnumAttribute Implementation of PulsingPostingsReader.PulsingEnumAttribute for reuse of wrapped postings readers underneath pulsing. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Attribute PulsingPostingsReader.PulsingEnumAttribute Implements PulsingPostingsReader.IPulsingEnumAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public sealed class PulsingEnumAttribute : Attribute, PulsingPostingsReader.IPulsingEnumAttribute, IAttribute Properties | Improve this Doc View Source Enums Declaration public IDictionary<PulsingPostingsReader, DocsEnum> Enums { get; } Property Value Type Description IDictionary < PulsingPostingsReader , DocsEnum > Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) Implements PulsingPostingsReader.IPulsingEnumAttribute IAttribute"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsWriter.html",
    "title": "Class PulsingPostingsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PulsingPostingsWriter Writer for the pulsing format. Wraps another postings implementation and decides (based on total number of occurrences), whether a terms postings should be inlined into the term dictionary, or passed through to the wrapped writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsConsumer PostingsWriterBase PulsingPostingsWriter Implements IDisposable Inherited Members PostingsWriterBase.Dispose() PostingsConsumer.Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) Namespace : Lucene.Net.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public sealed class PulsingPostingsWriter : PostingsWriterBase, IDisposable Constructors | Improve this Doc View Source PulsingPostingsWriter(SegmentWriteState, Int32, PostingsWriterBase) If the total number of positions (summed across all docs for this term) is less than or equal maxPositions , then the postings are inlined into terms dict. Declaration public PulsingPostingsWriter(SegmentWriteState state, int maxPositions, PostingsWriterBase wrappedPostingsWriter) Parameters Type Name Description SegmentWriteState state System.Int32 maxPositions PostingsWriterBase wrappedPostingsWriter Methods | Improve this Doc View Source AddPosition(Int32, BytesRef, Int32, Int32) Declaration public override void AddPosition(int position, BytesRef payload, int startOffset, int endOffset) Parameters Type Name Description System.Int32 position BytesRef payload System.Int32 startOffset System.Int32 endOffset | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) Declaration public override void EncodeTerm(long[] empty, DataOutput output, FieldInfo fieldInfo, BlockTermState state, bool abs) Parameters Type Name Description System.Int64 [] empty DataOutput output FieldInfo fieldInfo BlockTermState state System.Boolean abs | Improve this Doc View Source FinishDoc() Declaration public override void FinishDoc() Overrides PostingsConsumer.FinishDoc() | Improve this Doc View Source FinishTerm(BlockTermState) Called when we are done adding docs to this term. Declaration public override void FinishTerm(BlockTermState state) Parameters Type Name Description BlockTermState state Overrides PostingsWriterBase.FinishTerm(BlockTermState) | Improve this Doc View Source Init(IndexOutput) Declaration public override void Init(IndexOutput termsOut) Parameters Type Name Description IndexOutput termsOut Overrides PostingsWriterBase.Init(IndexOutput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsWriterBase.NewTermState() | Improve this Doc View Source SetField(FieldInfo) Currently, this instance is re-used across fields, so our parent calls setField whenever the field changes. Declaration public override int SetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description System.Int32 Overrides PostingsWriterBase.SetField(FieldInfo) | Improve this Doc View Source StartDoc(Int32, Int32) Declaration public override void StartDoc(int docId, int termDocFreq) Parameters Type Name Description System.Int32 docId System.Int32 termDocFreq | Improve this Doc View Source StartTerm() Declaration public override void StartTerm() Overrides PostingsWriterBase.StartTerm() Implements IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.html",
    "title": "Namespace Lucene.Net.Codecs.Sep | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Sep <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Sep: base support for separate files (doc,frq,pos,skp,pyl) Classes Int32IndexInput Defines basic API for writing ints to an IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: This was IntIndexInput in Lucene @lucene.experimental Int32IndexInput.Index Records a single skip-point in the GetReader() . Int32IndexInput.Reader Reads values. Int32IndexOutput Defines basic API for writing ints to an IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: block sizes could be variable NOTE: This was IntIndexOutput in Lucene @lucene.experimental Int32IndexOutput.Index Records a single skip-point in the IndexOutput . Int32StreamFactory Provides reader and writer to specified files. NOTE: This was IntStreamFactory in Lucene @lucene.experimental SepPostingsReader Concrete class that reads the current doc/freq/skip postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SepPostingsWriter Writes frq to .frq, docs to .doc, pos to .pos, payloads to .pyl, skip data to .skp @lucene.experimental"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.html",
    "title": "Class Int32IndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32IndexInput Defines basic API for writing ints to an IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: This was IntIndexInput in Lucene @lucene.experimental Inheritance System.Object Int32IndexInput FixedInt32BlockIndexInput VariableInt32BlockIndexInput Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Int32IndexInput : IDisposable Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetIndex() Declaration public abstract Int32IndexInput.Index GetIndex() Returns Type Description Int32IndexInput.Index | Improve this Doc View Source GetReader() Declaration public abstract Int32IndexInput.Reader GetReader() Returns Type Description Int32IndexInput.Reader"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.Index.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.Index.html",
    "title": "Class Int32IndexInput.Index | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32IndexInput.Index Records a single skip-point in the GetReader() . Inheritance System.Object Int32IndexInput.Index Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Index : object Methods | Improve this Doc View Source Clone() Declaration public abstract object Clone() Returns Type Description System.Object | Improve this Doc View Source CopyFrom(Int32IndexInput.Index) Declaration public abstract void CopyFrom(Int32IndexInput.Index other) Parameters Type Name Description Int32IndexInput.Index other | Improve this Doc View Source Read(DataInput, Boolean) Declaration public abstract void Read(DataInput indexIn, bool absolute) Parameters Type Name Description DataInput indexIn System.Boolean absolute | Improve this Doc View Source Seek(Int32IndexInput.Reader) Seeks primary stream to the last read offset. Declaration public abstract void Seek(Int32IndexInput.Reader stream) Parameters Type Name Description Int32IndexInput.Reader stream"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.Reader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.Reader.html",
    "title": "Class Int32IndexInput.Reader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32IndexInput.Reader Reads values. Inheritance System.Object Int32IndexInput.Reader Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Reader : object Methods | Improve this Doc View Source Next() Reads next single . Declaration public abstract int Next() Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexOutput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexOutput.html",
    "title": "Class Int32IndexOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32IndexOutput Defines basic API for writing ints to an IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: block sizes could be variable NOTE: This was IntIndexOutput in Lucene @lucene.experimental Inheritance System.Object Int32IndexOutput FixedInt32BlockIndexOutput VariableInt32BlockIndexOutput Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Int32IndexOutput : IDisposable Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetIndex() If you are indexing the primary output file, call this and interact with the returned IndexWriter. Declaration public abstract Int32IndexOutput.Index GetIndex() Returns Type Description Int32IndexOutput.Index | Improve this Doc View Source Write(Int32) Write an to the primary file. The value must be = 0. Declaration public abstract void Write(int v) Parameters Type Name Description System.Int32 v"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexOutput.Index.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexOutput.Index.html",
    "title": "Class Int32IndexOutput.Index | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32IndexOutput.Index Records a single skip-point in the IndexOutput . Inheritance System.Object Int32IndexOutput.Index Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Index : object Methods | Improve this Doc View Source CopyFrom(Int32IndexOutput.Index, Boolean) Copies index from other . Declaration public abstract void CopyFrom(Int32IndexOutput.Index other, bool copyLast) Parameters Type Name Description Int32IndexOutput.Index other System.Boolean copyLast | Improve this Doc View Source Mark() Internally records the current location. Declaration public abstract void Mark() | Improve this Doc View Source Write(DataOutput, Boolean) Writes \"location\" of current output pointer of primary output to different output (out). Declaration public abstract void Write(DataOutput indexOut, bool absolute) Parameters Type Name Description DataOutput indexOut System.Boolean absolute"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32StreamFactory.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32StreamFactory.html",
    "title": "Class Int32StreamFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32StreamFactory Provides reader and writer to specified files. NOTE: This was IntStreamFactory in Lucene @lucene.experimental Inheritance System.Object Int32StreamFactory Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Int32StreamFactory : object Methods | Improve this Doc View Source CreateOutput(Directory, String, IOContext) Create an Int32IndexOutput on the provided fileName. Declaration public abstract Int32IndexOutput CreateOutput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexOutput | Improve this Doc View Source OpenInput(Directory, String, IOContext) Create an Int32IndexInput on the provided fileName. Declaration public abstract Int32IndexInput OpenInput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexInput"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.SepPostingsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.SepPostingsReader.html",
    "title": "Class SepPostingsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SepPostingsReader Concrete class that reads the current doc/freq/skip postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsReaderBase SepPostingsReader Inherited Members PostingsReaderBase.Dispose() Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public class SepPostingsReader : PostingsReaderBase Constructors | Improve this Doc View Source SepPostingsReader(Directory, FieldInfos, SegmentInfo, IOContext, Int32StreamFactory, String) Declaration public SepPostingsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo segmentInfo, IOContext context, Int32StreamFactory intFactory, string segmentSuffix) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo segmentInfo IOContext context Int32StreamFactory intFactory System.String segmentSuffix Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides PostingsReaderBase.CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Declaration public override void DecodeTerm(long[] empty, DataInput input, FieldInfo fieldInfo, BlockTermState termState, bool absolute) Parameters Type Name Description System.Int64 [] empty DataInput input FieldInfo fieldInfo BlockTermState termState System.Boolean absolute | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides PostingsReaderBase.Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides PostingsReaderBase.DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Init(IndexInput) Declaration public override void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn Overrides PostingsReaderBase.Init(IndexInput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsReaderBase.NewTermState() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PostingsReaderBase.RamBytesUsed()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.SepPostingsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.SepPostingsWriter.html",
    "title": "Class SepPostingsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SepPostingsWriter Writes frq to .frq, docs to .doc, pos to .pos, payloads to .pyl, skip data to .skp @lucene.experimental Inheritance System.Object PostingsConsumer PostingsWriterBase SepPostingsWriter Implements IDisposable Inherited Members PostingsWriterBase.Dispose() PostingsConsumer.Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public sealed class SepPostingsWriter : PostingsWriterBase, IDisposable Constructors | Improve this Doc View Source SepPostingsWriter(SegmentWriteState, Int32StreamFactory) Declaration public SepPostingsWriter(SegmentWriteState state, Int32StreamFactory factory) Parameters Type Name Description SegmentWriteState state Int32StreamFactory factory | Improve this Doc View Source SepPostingsWriter(SegmentWriteState, Int32StreamFactory, Int32) Declaration public SepPostingsWriter(SegmentWriteState state, Int32StreamFactory factory, int skipInterval) Parameters Type Name Description SegmentWriteState state Int32StreamFactory factory System.Int32 skipInterval Methods | Improve this Doc View Source AddPosition(Int32, BytesRef, Int32, Int32) Add a new position & payload. Declaration public override void AddPosition(int position, BytesRef payload, int startOffset, int endOffset) Parameters Type Name Description System.Int32 position BytesRef payload System.Int32 startOffset System.Int32 endOffset | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) Declaration public override void EncodeTerm(long[] longs, DataOutput output, FieldInfo fi, BlockTermState state, bool absolute) Parameters Type Name Description System.Int64 [] longs DataOutput output FieldInfo fi BlockTermState state System.Boolean absolute | Improve this Doc View Source FinishDoc() Called when we are done adding positions & payloads. Declaration public override void FinishDoc() Overrides PostingsConsumer.FinishDoc() | Improve this Doc View Source FinishTerm(BlockTermState) Called when we are done adding docs to this term. Declaration public override void FinishTerm(BlockTermState state) Parameters Type Name Description BlockTermState state Overrides PostingsWriterBase.FinishTerm(BlockTermState) | Improve this Doc View Source Init(IndexOutput) Declaration public override void Init(IndexOutput termsOut) Parameters Type Name Description IndexOutput termsOut Overrides PostingsWriterBase.Init(IndexOutput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsWriterBase.NewTermState() | Improve this Doc View Source SetField(FieldInfo) Declaration public override int SetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description System.Int32 Overrides PostingsWriterBase.SetField(FieldInfo) | Improve this Doc View Source StartDoc(Int32, Int32) Adds a new doc in this term. If this returns null then we just skip consuming positions/payloads. Declaration public override void StartDoc(int docID, int termDocFreq) Parameters Type Name Description System.Int32 docID System.Int32 termDocFreq | Improve this Doc View Source StartTerm() Declaration public override void StartTerm() Overrides PostingsWriterBase.StartTerm() Implements IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.html",
    "title": "Namespace Lucene.Net.Codecs.SimpleText | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.SimpleText <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Simpletext Codec: writes human readable postings. Classes SimpleTextCodec Plain text index format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextDocValuesFormat Plain text doc values format. FOR RECREATIONAL USE ONLY The .dat file contains the data. For numbers this is a \"fixed-width\" file, for example a single byte range: field myField type NUMERIC minvalue 0 pattern 000 005 T 234 T 123 T ... So a document's value (delta encoded from minvalue) can be retrieved by seeking to startOffset + (1+pattern.length()+2)*docid. The extra 1 is the newline. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. for bytes this is also a \"fixed-width\" file, for example: field myField type BINARY maxlength 6 pattern 0 length 6 foobar[space][space] T length 3 baz[space][space][space][space][space] T ... So a doc's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength+2)*doc the extra 9 is 2 newlines, plus \"length \" itself. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. For sorted bytes this is a fixed-width file, for example: field myField type SORTED numvalues 10 maxLength 8 pattern 0 ordpattern 00 length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 03 06 01 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid an ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord For sorted set this is a fixed-width file very similar to the SORTED case, for example: field myField type SORTED_SET numvalues 10 maxLength 8 pattern 0 ordpattern XXXXX length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 0,3,5 1,2 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord list can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid this is a comma-separated list, and its padded with spaces to be fixed width. so trim() and split() it. and beware the empty string! An ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord The reader can just scan this file when it opens, skipping over the data blocks and saving the offset/etc for each field. @lucene.experimental SimpleTextDocValuesReader SimpleTextDocValuesWriter SimpleTextFieldInfosFormat Plain text field infos format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextFieldInfosReader Reads plain text field infos files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextFieldInfosWriter Writes plain text field infos files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextLiveDocsFormat Reads/writes plain text live docs. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextNormsFormat Plain-text norms format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextNormsFormat.SimpleTextNormsConsumer Writes plain-text norms. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextNormsFormat.SimpleTextNormsProducer Reads plain-text norms. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextPostingsFormat For debugging, curiosity, transparency only!! Do not use this codec in production. This codec stores all postings data in a single human-readable text file (_N.pst). You can view this in any text editor, and even edit it to alter your index. @lucene.experimental SimpleTextSegmentInfoFormat Plain text segments file format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextSegmentInfoReader Reads plaintext segments files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextSegmentInfoWriter Writes plain text segments files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextStoredFieldsFormat Plain text stored fields format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextStoredFieldsReader Reads plain text stored fields. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextStoredFieldsWriter Writes plain-text stored fields. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextTermVectorsFormat Plain text term vectors format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextTermVectorsReader Reads plain-text term vectors. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextTermVectorsWriter Writes plain-text term vectors. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextCodec.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextCodec.html",
    "title": "Class SimpleTextCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextCodec Plain text index format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Codec SimpleTextCodec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public sealed class SimpleTextCodec : Codec Constructors | Improve this Doc View Source SimpleTextCodec() Declaration public SimpleTextCodec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesFormat.html",
    "title": "Class SimpleTextDocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextDocValuesFormat Plain text doc values format. FOR RECREATIONAL USE ONLY The .dat file contains the data. For numbers this is a \"fixed-width\" file, for example a single byte range: field myField type NUMERIC minvalue 0 pattern 000 005 T 234 T 123 T ... So a document's value (delta encoded from minvalue) can be retrieved by seeking to startOffset + (1+pattern.length()+2)*docid. The extra 1 is the newline. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. for bytes this is also a \"fixed-width\" file, for example: field myField type BINARY maxlength 6 pattern 0 length 6 foobar[space][space] T length 3 baz[space][space][space][space][space] T ... So a doc's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength+2)*doc the extra 9 is 2 newlines, plus \"length \" itself. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. For sorted bytes this is a fixed-width file, for example: field myField type SORTED numvalues 10 maxLength 8 pattern 0 ordpattern 00 length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 03 06 01 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid an ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord For sorted set this is a fixed-width file very similar to the SORTED case, for example: field myField type SORTED_SET numvalues 10 maxLength 8 pattern 0 ordpattern XXXXX length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 0,3,5 1,2 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord list can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid this is a comma-separated list, and its padded with spaces to be fixed width. so trim() and split() it. and beware the empty string! An ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord The reader can just scan this file when it opens, skipping over the data blocks and saving the offset/etc for each field. @lucene.experimental Inheritance System.Object DocValuesFormat SimpleTextDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source SimpleTextDocValuesFormat() Declaration public SimpleTextDocValuesFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesReader.html",
    "title": "Class SimpleTextDocValuesReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextDocValuesReader Inheritance System.Object DocValuesProducer SimpleTextDocValuesReader SimpleTextNormsFormat.SimpleTextNormsProducer Inherited Members DocValuesProducer.Dispose() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextDocValuesReader : DocValuesProducer Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides DocValuesProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetBinary(FieldInfo) Declaration public override BinaryDocValues GetBinary(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description BinaryDocValues Overrides DocValuesProducer.GetBinary(FieldInfo) | Improve this Doc View Source GetDocsWithField(FieldInfo) Declaration public override IBits GetDocsWithField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description IBits Overrides DocValuesProducer.GetDocsWithField(FieldInfo) | Improve this Doc View Source GetNumeric(FieldInfo) Declaration public override NumericDocValues GetNumeric(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description NumericDocValues Overrides DocValuesProducer.GetNumeric(FieldInfo) | Improve this Doc View Source GetSorted(FieldInfo) Declaration public override SortedDocValues GetSorted(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description SortedDocValues Overrides DocValuesProducer.GetSorted(FieldInfo) | Improve this Doc View Source GetSortedSet(FieldInfo) Declaration public override SortedSetDocValues GetSortedSet(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description SortedSetDocValues Overrides DocValuesProducer.GetSortedSet(FieldInfo) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides DocValuesProducer.RamBytesUsed()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesWriter.html",
    "title": "Class SimpleTextDocValuesWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextDocValuesWriter Inheritance System.Object DocValuesConsumer SimpleTextDocValuesWriter SimpleTextNormsFormat.SimpleTextNormsConsumer Inherited Members Lucene.Net.Codecs.DocValuesConsumer.AddNumericField(Lucene.Net.Index.FieldInfo, IEnumerable<>) Lucene.Net.Codecs.DocValuesConsumer.AddBinaryField(Lucene.Net.Index.FieldInfo, IEnumerable<>) Lucene.Net.Codecs.DocValuesConsumer.AddSortedField(Lucene.Net.Index.FieldInfo, IEnumerable<>, IEnumerable<>) Lucene.Net.Codecs.DocValuesConsumer.AddSortedSetField(Lucene.Net.Index.FieldInfo, IEnumerable<>, IEnumerable<>, IEnumerable<>) Lucene.Net.Codecs.DocValuesConsumer.MergeNumericField(Lucene.Net.Index.FieldInfo, Lucene.Net.Index.MergeState, IList<>, IList<>) Lucene.Net.Codecs.DocValuesConsumer.MergeBinaryField(Lucene.Net.Index.FieldInfo, Lucene.Net.Index.MergeState, IList<>, IList<>) Lucene.Net.Codecs.DocValuesConsumer.MergeSortedField(Lucene.Net.Index.FieldInfo, Lucene.Net.Index.MergeState, IList<>) Lucene.Net.Codecs.DocValuesConsumer.MergeSortedSetField(Lucene.Net.Index.FieldInfo, Lucene.Net.Index.MergeState, IList<>) DocValuesConsumer.Dispose() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextDocValuesWriter : DocValuesConsumer Methods | Improve this Doc View Source AddBinaryField(FieldInfo, IEnumerable<BytesRef>) Declaration public override void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values) Parameters Type Name Description FieldInfo field IEnumerable < BytesRef > values | Improve this Doc View Source AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) Declaration public override void AddNumericField(FieldInfo field, IEnumerable<long?> values) Parameters Type Name Description FieldInfo field IEnumerable < System.Nullable < System.Int64 >> values | Improve this Doc View Source AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) Declaration public override void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd) Parameters Type Name Description FieldInfo field IEnumerable < BytesRef > values IEnumerable < System.Nullable < System.Int64 >> docToOrd | Improve this Doc View Source AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) Declaration public override void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords) Parameters Type Name Description FieldInfo field IEnumerable < BytesRef > values IEnumerable < System.Nullable < System.Int64 >> docToOrdCount IEnumerable < System.Nullable < System.Int64 >> ords | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosFormat.html",
    "title": "Class SimpleTextFieldInfosFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextFieldInfosFormat Plain text field infos format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosFormat SimpleTextFieldInfosFormat Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextFieldInfosFormat : FieldInfosFormat Properties | Improve this Doc View Source FieldInfosReader Declaration public override FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader Overrides FieldInfosFormat.FieldInfosReader | Improve this Doc View Source FieldInfosWriter Declaration public override FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter Overrides FieldInfosFormat.FieldInfosWriter"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosReader.html",
    "title": "Class SimpleTextFieldInfosReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextFieldInfosReader Reads plain text field infos files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosReader SimpleTextFieldInfosReader Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextFieldInfosReader : FieldInfosReader Methods | Improve this Doc View Source DocValuesType(String) Declaration public virtual DocValuesType DocValuesType(string dvType) Parameters Type Name Description System.String dvType Returns Type Description DocValuesType | Improve this Doc View Source Read(Directory, String, String, IOContext) Declaration public override FieldInfos Read(Directory directory, string segmentName, string segmentSuffix, IOContext iocontext) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix IOContext iocontext Returns Type Description FieldInfos"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosWriter.html",
    "title": "Class SimpleTextFieldInfosWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextFieldInfosWriter Writes plain text field infos files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosWriter SimpleTextFieldInfosWriter Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextFieldInfosWriter : FieldInfosWriter Methods | Improve this Doc View Source Write(Directory, String, String, FieldInfos, IOContext) Declaration public override void Write(Directory directory, string segmentName, string segmentSuffix, FieldInfos infos, IOContext context) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix FieldInfos infos IOContext context"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextLiveDocsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextLiveDocsFormat.html",
    "title": "Class SimpleTextLiveDocsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextLiveDocsFormat Reads/writes plain text live docs. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LiveDocsFormat SimpleTextLiveDocsFormat Inherited Members Lucene.Net.Codecs.LiveDocsFormat.Files(Lucene.Net.Index.SegmentCommitInfo, ICollection<>) Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextLiveDocsFormat : LiveDocsFormat Methods | Improve this Doc View Source Files(SegmentCommitInfo, ICollection<String>) Declaration public override void Files(SegmentCommitInfo info, ICollection<string> files) Parameters Type Name Description SegmentCommitInfo info ICollection < System.String > files | Improve this Doc View Source NewLiveDocs(IBits) Declaration public override IMutableBits NewLiveDocs(IBits existing) Parameters Type Name Description IBits existing Returns Type Description IMutableBits Overrides LiveDocsFormat.NewLiveDocs(IBits) | Improve this Doc View Source NewLiveDocs(Int32) Declaration public override IMutableBits NewLiveDocs(int size) Parameters Type Name Description System.Int32 size Returns Type Description IMutableBits | Improve this Doc View Source ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) Declaration public override IBits ReadLiveDocs(Directory dir, SegmentCommitInfo info, IOContext context) Parameters Type Name Description Directory dir SegmentCommitInfo info IOContext context Returns Type Description IBits Overrides LiveDocsFormat.ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) | Improve this Doc View Source WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext) Declaration public override void WriteLiveDocs(IMutableBits bits, Directory dir, SegmentCommitInfo info, int newDelCount, IOContext context) Parameters Type Name Description IMutableBits bits Directory dir SegmentCommitInfo info System.Int32 newDelCount IOContext context"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.html",
    "title": "Class SimpleTextNormsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextNormsFormat Plain-text norms format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NormsFormat SimpleTextNormsFormat Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextNormsFormat : NormsFormat Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides NormsFormat.NormsConsumer(SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides NormsFormat.NormsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsConsumer.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsConsumer.html",
    "title": "Class SimpleTextNormsFormat.SimpleTextNormsConsumer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextNormsFormat.SimpleTextNormsConsumer Writes plain-text norms. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesConsumer SimpleTextDocValuesWriter SimpleTextNormsFormat.SimpleTextNormsConsumer Inherited Members SimpleTextDocValuesWriter.AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) SimpleTextDocValuesWriter.AddBinaryField(FieldInfo, IEnumerable<BytesRef>) SimpleTextDocValuesWriter.AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) SimpleTextDocValuesWriter.AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) SimpleTextDocValuesWriter.Dispose(Boolean) Lucene.Net.Codecs.DocValuesConsumer.AddNumericField(Lucene.Net.Index.FieldInfo, IEnumerable<>) Lucene.Net.Codecs.DocValuesConsumer.AddBinaryField(Lucene.Net.Index.FieldInfo, IEnumerable<>) Lucene.Net.Codecs.DocValuesConsumer.AddSortedField(Lucene.Net.Index.FieldInfo, IEnumerable<>, IEnumerable<>) Lucene.Net.Codecs.DocValuesConsumer.AddSortedSetField(Lucene.Net.Index.FieldInfo, IEnumerable<>, IEnumerable<>, IEnumerable<>) Lucene.Net.Codecs.DocValuesConsumer.MergeNumericField(Lucene.Net.Index.FieldInfo, Lucene.Net.Index.MergeState, IList<>, IList<>) Lucene.Net.Codecs.DocValuesConsumer.MergeBinaryField(Lucene.Net.Index.FieldInfo, Lucene.Net.Index.MergeState, IList<>, IList<>) Lucene.Net.Codecs.DocValuesConsumer.MergeSortedField(Lucene.Net.Index.FieldInfo, Lucene.Net.Index.MergeState, IList<>) Lucene.Net.Codecs.DocValuesConsumer.MergeSortedSetField(Lucene.Net.Index.FieldInfo, Lucene.Net.Index.MergeState, IList<>) DocValuesConsumer.Dispose() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextNormsConsumer : SimpleTextDocValuesWriter Constructors | Improve this Doc View Source SimpleTextNormsConsumer(SegmentWriteState) Declaration public SimpleTextNormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsProducer.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsProducer.html",
    "title": "Class SimpleTextNormsFormat.SimpleTextNormsProducer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextNormsFormat.SimpleTextNormsProducer Reads plain-text norms. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesProducer SimpleTextDocValuesReader SimpleTextNormsFormat.SimpleTextNormsProducer Inherited Members SimpleTextDocValuesReader.GetNumeric(FieldInfo) SimpleTextDocValuesReader.GetBinary(FieldInfo) SimpleTextDocValuesReader.GetSorted(FieldInfo) SimpleTextDocValuesReader.GetSortedSet(FieldInfo) SimpleTextDocValuesReader.GetDocsWithField(FieldInfo) SimpleTextDocValuesReader.Dispose(Boolean) SimpleTextDocValuesReader.RamBytesUsed() SimpleTextDocValuesReader.CheckIntegrity() DocValuesProducer.Dispose() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextNormsProducer : SimpleTextDocValuesReader Constructors | Improve this Doc View Source SimpleTextNormsProducer(SegmentReadState) Declaration public SimpleTextNormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextPostingsFormat.html",
    "title": "Class SimpleTextPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextPostingsFormat For debugging, curiosity, transparency only!! Do not use this codec in production. This codec stores all postings data in a single human-readable text file (_N.pst). You can view this in any text editor, and even edit it to alter your index. @lucene.experimental Inheritance System.Object PostingsFormat SimpleTextPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public sealed class SimpleTextPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source SimpleTextPostingsFormat() Declaration public SimpleTextPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoFormat.html",
    "title": "Class SimpleTextSegmentInfoFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextSegmentInfoFormat Plain text segments file format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoFormat SimpleTextSegmentInfoFormat Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextSegmentInfoFormat : SegmentInfoFormat Fields | Improve this Doc View Source SI_EXTENSION Declaration public const string SI_EXTENSION = null Field Value Type Description System.String Properties | Improve this Doc View Source SegmentInfoReader Declaration public override SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader Overrides SegmentInfoFormat.SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Declaration public override SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter Overrides SegmentInfoFormat.SegmentInfoWriter"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoReader.html",
    "title": "Class SimpleTextSegmentInfoReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextSegmentInfoReader Reads plaintext segments files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoReader SimpleTextSegmentInfoReader Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextSegmentInfoReader : SegmentInfoReader Methods | Improve this Doc View Source Read(Directory, String, IOContext) Declaration public override SegmentInfo Read(Directory directory, string segmentName, IOContext context) Parameters Type Name Description Directory directory System.String segmentName IOContext context Returns Type Description SegmentInfo"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoWriter.html",
    "title": "Class SimpleTextSegmentInfoWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextSegmentInfoWriter Writes plain text segments files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoWriter SimpleTextSegmentInfoWriter Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextSegmentInfoWriter : SegmentInfoWriter Methods | Improve this Doc View Source Write(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override void Write(Directory dir, SegmentInfo si, FieldInfos fis, IOContext ioContext) Parameters Type Name Description Directory dir SegmentInfo si FieldInfos fis IOContext ioContext Overrides SegmentInfoWriter.Write(Directory, SegmentInfo, FieldInfos, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsFormat.html",
    "title": "Class SimpleTextStoredFieldsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextStoredFieldsFormat Plain text stored fields format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsFormat SimpleTextStoredFieldsFormat Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextStoredFieldsFormat : StoredFieldsFormat Methods | Improve this Doc View Source FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Returns Type Description StoredFieldsReader Overrides StoredFieldsFormat.FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source FieldsWriter(Directory, SegmentInfo, IOContext) Declaration public override StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Returns Type Description StoredFieldsWriter Overrides StoredFieldsFormat.FieldsWriter(Directory, SegmentInfo, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsReader.html",
    "title": "Class SimpleTextStoredFieldsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextStoredFieldsReader Reads plain text stored fields. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsReader SimpleTextStoredFieldsReader Inherited Members StoredFieldsReader.Dispose() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextStoredFieldsReader : StoredFieldsReader Constructors | Improve this Doc View Source SimpleTextStoredFieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public SimpleTextStoredFieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides StoredFieldsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides StoredFieldsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides StoredFieldsReader.RamBytesUsed() | Improve this Doc View Source VisitDocument(Int32, StoredFieldVisitor) Declaration public override void VisitDocument(int n, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 n StoredFieldVisitor visitor"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsWriter.html",
    "title": "Class SimpleTextStoredFieldsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextStoredFieldsWriter Writes plain-text stored fields. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsWriter SimpleTextStoredFieldsWriter Inherited Members StoredFieldsWriter.FinishDocument() StoredFieldsWriter.Merge(MergeState) Lucene.Net.Codecs.StoredFieldsWriter.AddDocument<T1>(IEnumerable<>, Lucene.Net.Index.FieldInfos) StoredFieldsWriter.Dispose() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextStoredFieldsWriter : StoredFieldsWriter Constructors | Improve this Doc View Source SimpleTextStoredFieldsWriter(Directory, String, IOContext) Declaration public SimpleTextStoredFieldsWriter(Directory directory, string segment, IOContext context) Parameters Type Name Description Directory directory System.String segment IOContext context Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides StoredFieldsWriter.Abort() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numStoredFields) Parameters Type Name Description System.Int32 numStoredFields | Improve this Doc View Source WriteField(FieldInfo, IIndexableField) Declaration public override void WriteField(FieldInfo info, IIndexableField field) Parameters Type Name Description FieldInfo info IIndexableField field Overrides StoredFieldsWriter.WriteField(FieldInfo, IIndexableField)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsFormat.html",
    "title": "Class SimpleTextTermVectorsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextTermVectorsFormat Plain text term vectors format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsFormat SimpleTextTermVectorsFormat Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextTermVectorsFormat : TermVectorsFormat Methods | Improve this Doc View Source VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos IOContext context Returns Type Description TermVectorsReader Overrides TermVectorsFormat.VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source VectorsWriter(Directory, SegmentInfo, IOContext) Declaration public override TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo IOContext context Returns Type Description TermVectorsWriter Overrides TermVectorsFormat.VectorsWriter(Directory, SegmentInfo, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsReader.html",
    "title": "Class SimpleTextTermVectorsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextTermVectorsReader Reads plain-text term vectors. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsReader SimpleTextTermVectorsReader Inherited Members TermVectorsReader.Dispose() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextTermVectorsReader : TermVectorsReader Constructors | Improve this Doc View Source SimpleTextTermVectorsReader(Directory, SegmentInfo, IOContext) Declaration public SimpleTextTermVectorsReader(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides TermVectorsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides TermVectorsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Get(Int32) Declaration public override Fields Get(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description Fields | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermVectorsReader.RamBytesUsed()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsWriter.html",
    "title": "Class SimpleTextTermVectorsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextTermVectorsWriter Writes plain-text term vectors. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsWriter SimpleTextTermVectorsWriter Inherited Members TermVectorsWriter.FinishDocument() TermVectorsWriter.FinishField() TermVectorsWriter.FinishTerm() TermVectorsWriter.AddProx(Int32, DataInput, DataInput) TermVectorsWriter.Merge(MergeState) TermVectorsWriter.AddAllDocVectors(Fields, MergeState) TermVectorsWriter.Dispose() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextTermVectorsWriter : TermVectorsWriter Constructors | Improve this Doc View Source SimpleTextTermVectorsWriter(Directory, String, IOContext) Declaration public SimpleTextTermVectorsWriter(Directory directory, string segment, IOContext context) Parameters Type Name Description Directory directory System.String segment IOContext context Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Overrides TermVectorsWriter.Comparer Methods | Improve this Doc View Source Abort() Declaration public override sealed void Abort() Overrides TermVectorsWriter.Abort() | Improve this Doc View Source AddPosition(Int32, Int32, Int32, BytesRef) Declaration public override void AddPosition(int position, int startOffset, int endOffset, BytesRef payload) Parameters Type Name Description System.Int32 position System.Int32 startOffset System.Int32 endOffset BytesRef payload | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numVectorFields) Parameters Type Name Description System.Int32 numVectorFields | Improve this Doc View Source StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) Declaration public override void StartField(FieldInfo info, int numTerms, bool positions, bool offsets, bool payloads) Parameters Type Name Description FieldInfo info System.Int32 numTerms System.Boolean positions System.Boolean offsets System.Boolean payloads | Improve this Doc View Source StartTerm(BytesRef, Int32) Declaration public override void StartTerm(BytesRef term, int freq) Parameters Type Name Description BytesRef term System.Int32 freq"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.AssociationsFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.AssociationsFacetsExample.html",
    "title": "Class AssociationsFacetsExample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssociationsFacetsExample Shows example usage of category associations. Inheritance System.Object AssociationsFacetsExample Namespace : Lucene.Net.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class AssociationsFacetsExample : object Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Facet.Taxonomy.Directory; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; using System.Collections.Generic; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows example usage of category associations. /// </summary> public class AssociationsFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly Directory taxoDir = new RAMDirectory(); private readonly FacetsConfig config; /// <summary>Empty constructor</summary> public AssociationsFacetsExample() { config = new FacetsConfig(); config.SetMultiValued(\"tags\", true); config.SetIndexFieldName(\"tags\", \"$tags\"); config.SetMultiValued(\"genre\", true); config.SetIndexFieldName(\"genre\", \"$genre\"); } /// <summary>Build the example index.</summary> private void Index() { IndexWriterConfig iwc = new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)); using (IndexWriter indexWriter = new IndexWriter(indexDir, iwc)) // Writes facet ords to a separate directory from the main index using (DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir)) { Document doc = new Document(); // 3 occurrences for tag 'lucene' doc.AddInt32AssociationFacetField(3, \"tags\", \"lucene\"); // 87% confidence level of genre 'computing' doc.AddSingleAssociationFacetField(0.87f, \"genre\", \"computing\"); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); // 1 occurrence for tag 'lucene' doc.AddInt32AssociationFacetField(1, \"tags\", \"lucene\"); // 2 occurrence for tag 'solr' doc.AddInt32AssociationFacetField(2, \"tags\", \"solr\"); // 75% confidence level of genre 'computing' doc.AddSingleAssociationFacetField(0.75f, \"genre\", \"computing\"); // 34% confidence level of genre 'software' doc.AddSingleAssociationFacetField(0.34f, \"genre\", \"software\"); indexWriter.AddDocument(config.Build(taxoWriter, doc)); } // Disposes indexWriter and taxoWriter } /// <summary>User runs a query and aggregates facets by summing their association values.</summary> private IList<FacetResult> SumAssociations() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); Facets tags = new TaxonomyFacetSumInt32Associations(\"$tags\", taxoReader, config, fc); Facets genre = new TaxonomyFacetSumSingleAssociations(\"$genre\", taxoReader, config, fc); // Retrieve results IList<FacetResult> results = new List<FacetResult>(); results.Add(tags.GetTopChildren(10, \"tags\")); results.Add(genre.GetTopChildren(10, \"genre\")); return results; } // Disposes indexReader and taxoReader } /// <summary>User drills down on 'tags/solr'.</summary> private FacetResult DrillDown() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(config); // Now user drills down on Publish Date/2010: q.Add(\"tags\", \"solr\"); FacetsCollector fc = new FacetsCollector(); FacetsCollector.Search(searcher, q, 10, fc); // Retrieve results Facets facets = new TaxonomyFacetSumSingleAssociations(\"$genre\", taxoReader, config, fc); FacetResult result = facets.GetTopChildren(10, \"genre\"); return result; } // Disposes indexReader and taxoReader } /// <summary>Runs summing association example.</summary> public IList<FacetResult> RunSumAssociations() { Index(); return SumAssociations(); } /// <summary>Runs the drill-down example.</summary> public FacetResult RunDrillDown() { Index(); return DrillDown(); } /// <summary>Runs the sum int/float associations examples and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Sum associations example:\"); Console.WriteLine(\"-------------------------\"); IList<FacetResult> results = new AssociationsFacetsExample().RunSumAssociations(); Console.WriteLine(\"tags: \" + results[0]); Console.WriteLine(\"genre: \" + results[1]); } } } Constructors | Improve this Doc View Source AssociationsFacetsExample() Empty constructor Declaration public AssociationsFacetsExample() Methods | Improve this Doc View Source Main(String[]) Runs the sum int/float associations examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunDrillDown() Runs the drill-down example. Declaration public FacetResult RunDrillDown() Returns Type Description FacetResult | Improve this Doc View Source RunSumAssociations() Runs summing association example. Declaration public IList<FacetResult> RunSumAssociations() Returns Type Description IList < FacetResult >"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.DistanceFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.DistanceFacetsExample.html",
    "title": "Class DistanceFacetsExample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DistanceFacetsExample Shows simple usage of dynamic range faceting, using the expressions module to calculate distance. Inheritance System.Object DistanceFacetsExample Namespace : Lucene.Net.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class DistanceFacetsExample : IDisposable Examples using J2N; using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Expressions; using Lucene.Net.Expressions.JS; using Lucene.Net.Facet; using Lucene.Net.Facet.Range; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Index; using Lucene.Net.Queries; using Lucene.Net.Queries.Function; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; using System.Diagnostics; using System.Globalization; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows simple usage of dynamic range faceting, using the /// expressions module to calculate distance. /// </summary> public class DistanceFacetsExample : IDisposable { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; internal static readonly DoubleRange ONE_KM = new DoubleRange(\"< 1 km\", 0.0, true, 1.0, false); internal static readonly DoubleRange TWO_KM = new DoubleRange(\"< 2 km\", 0.0, true, 2.0, false); internal static readonly DoubleRange FIVE_KM = new DoubleRange(\"< 5 km\", 0.0, true, 5.0, false); internal static readonly DoubleRange TEN_KM = new DoubleRange(\"< 10 km\", 0.0, true, 10.0, false); private readonly Directory indexDir = new RAMDirectory(); private IndexSearcher searcher; private readonly FacetsConfig config = new FacetsConfig(); /// <summary>The \"home\" latitude.</summary> public readonly static double ORIGIN_LATITUDE = 40.7143528; /// <summary>The \"home\" longitude.</summary> public readonly static double ORIGIN_LONGITUDE = -74.0059731; /// <summary> /// Radius of the Earth in KM /// <para/> /// NOTE: this is approximate, because the earth is a bit /// wider at the equator than the poles. See /// http://en.wikipedia.org/wiki/Earth_radius /// </summary> public readonly static double EARTH_RADIUS_KM = 6371.01; /// <summary>Build the example index.</summary> public void Index() { using (IndexWriter writer = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) { // TODO: we could index in radians instead ... saves all the conversions in GetBoundingBoxFilter // Add documents with latitude/longitude location: Document doc = new Document(); doc.Add(new DoubleField(\"latitude\", 40.759011, Field.Store.NO)); doc.Add(new DoubleField(\"longitude\", -73.9844722, Field.Store.NO)); writer.AddDocument(doc); doc = new Document(); doc.Add(new DoubleField(\"latitude\", 40.718266, Field.Store.NO)); doc.Add(new DoubleField(\"longitude\", -74.007819, Field.Store.NO)); writer.AddDocument(doc); doc = new Document(); doc.Add(new DoubleField(\"latitude\", 40.7051157, Field.Store.NO)); doc.Add(new DoubleField(\"longitude\", -74.0088305, Field.Store.NO)); writer.AddDocument(doc); // Open near-real-time searcher searcher = new IndexSearcher(DirectoryReader.Open(writer, true)); } // Disposes writer } private ValueSource GetDistanceValueSource() { Expression distance = JavascriptCompiler.Compile( string.Format(CultureInfo.InvariantCulture, \"haversin({0:R},{1:R},latitude,longitude)\", ORIGIN_LATITUDE, ORIGIN_LONGITUDE)); SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"latitude\", SortFieldType.DOUBLE)); bindings.Add(new SortField(\"longitude\", SortFieldType.DOUBLE)); return distance.GetValueSource(bindings); } /// <summary> /// Given a latitude and longitude (in degrees) and the /// maximum great circle (surface of the earth) distance, /// returns a simple Filter bounding box to \"fast match\" /// candidates. /// </summary> public static Filter GetBoundingBoxFilter(double originLat, double originLng, double maxDistanceKM) { // Basic bounding box geo math from // http://JanMatuschek.de/LatitudeLongitudeBoundingCoordinates, // licensed under creative commons 3.0: // http://creativecommons.org/licenses/by/3.0 // TODO: maybe switch to recursive prefix tree instead // (in lucene/spatial)? It should be more efficient // since it's a 2D trie... // Degrees -> Radians: double originLatRadians = originLat.ToRadians(); double originLngRadians = originLng.ToRadians(); double angle = maxDistanceKM / (SloppyMath.EarthDiameter(originLat) / 2.0); double minLat = originLatRadians - angle; double maxLat = originLatRadians + angle; double minLng; double maxLng; if (minLat > -90.ToRadians() && maxLat < 90.ToRadians()) { double delta = Math.Asin(Math.Sin(angle) / Math.Cos(originLatRadians)); minLng = originLngRadians - delta; if (minLng < -180.ToRadians()) { minLng += 2 * Math.PI; } maxLng = originLngRadians + delta; if (maxLng > 180.ToRadians()) { maxLng -= 2 * Math.PI; } } else { // The query includes a pole! minLat = Math.Max(minLat, -90.ToRadians()); maxLat = Math.Min(maxLat, 90.ToRadians()); minLng = -180.ToRadians(); maxLng = 180.ToRadians(); } BooleanFilter f = new BooleanFilter(); // Add latitude range filter: f.Add(NumericRangeFilter.NewDoubleRange(\"latitude\", minLat.ToDegrees(), maxLat.ToDegrees(), true, true), Occur.MUST); // Add longitude range filter: if (minLng > maxLng) { // The bounding box crosses the international date // line: BooleanFilter lonF = new BooleanFilter(); lonF.Add(NumericRangeFilter.NewDoubleRange(\"longitude\", minLng.ToDegrees(), null, true, true), Occur.SHOULD); lonF.Add(NumericRangeFilter.NewDoubleRange(\"longitude\", null, maxLng.ToDegrees(), true, true), Occur.SHOULD); f.Add(lonF, Occur.MUST); } else { f.Add(NumericRangeFilter.NewDoubleRange(\"longitude\", minLng.ToDegrees(), maxLng.ToDegrees(), true, true), Occur.MUST); } return f; } /// <summary>User runs a query and counts facets.</summary> public FacetResult Search() { FacetsCollector fc = new FacetsCollector(); searcher.Search(new MatchAllDocsQuery(), fc); Facets facets = new DoubleRangeFacetCounts(\"field\", GetDistanceValueSource(), fc, GetBoundingBoxFilter(ORIGIN_LATITUDE, ORIGIN_LONGITUDE, 10.0), ONE_KM, TWO_KM, FIVE_KM, TEN_KM); return facets.GetTopChildren(10, \"field\"); } /// <summary>User drills down on the specified range.</summary> public TopDocs DrillDown(DoubleRange range) { // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(null); ValueSource vs = GetDistanceValueSource(); q.Add(\"field\", range.GetFilter(GetBoundingBoxFilter(ORIGIN_LATITUDE, ORIGIN_LONGITUDE, range.Max), vs)); DrillSideways ds = new SearchDrillSideways(searcher, config, vs); return ds.Search(q, 10).Hits; } private class SearchDrillSideways : DrillSideways { private readonly ValueSource vs; public SearchDrillSideways(IndexSearcher indexSearcher, FacetsConfig facetsConfig, ValueSource valueSource) : base(indexSearcher, facetsConfig, (TaxonomyReader)null) { this.vs = valueSource; } protected override Facets BuildFacetsResult(FacetsCollector drillDowns, FacetsCollector[] drillSideways, string[] drillSidewaysDims) { Debug.Assert(drillSideways.Length == 1); return new DoubleRangeFacetCounts(\"field\", vs, drillSideways[0], ONE_KM, TWO_KM, FIVE_KM, TEN_KM); } } public void Dispose() { searcher?.IndexReader?.Dispose(); indexDir?.Dispose(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { using (DistanceFacetsExample example = new DistanceFacetsExample()) { example.Index(); Console.WriteLine(\"Distance facet counting example:\"); Console.WriteLine(\"-----------------------\"); Console.WriteLine(example.Search()); Console.WriteLine(\"\\n\"); Console.WriteLine(\"Distance facet drill-down example (field/< 2 km):\"); Console.WriteLine(\"---------------------------------------------\"); TopDocs hits = example.DrillDown(TWO_KM); Console.WriteLine(hits.TotalHits + \" totalHits\"); } // Disposes example } } } Fields | Improve this Doc View Source EARTH_RADIUS_KM Radius of the Earth in KM NOTE: this is approximate, because the earth is a bit wider at the equator than the poles. See http://en.wikipedia.org/wiki/Earth_radius Declaration public static readonly double EARTH_RADIUS_KM Field Value Type Description System.Double | Improve this Doc View Source ORIGIN_LATITUDE The \"home\" latitude. Declaration public static readonly double ORIGIN_LATITUDE Field Value Type Description System.Double | Improve this Doc View Source ORIGIN_LONGITUDE The \"home\" longitude. Declaration public static readonly double ORIGIN_LONGITUDE Field Value Type Description System.Double Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source DrillDown(DoubleRange) User drills down on the specified range. Declaration public TopDocs DrillDown(DoubleRange range) Parameters Type Name Description DoubleRange range Returns Type Description TopDocs | Improve this Doc View Source GetBoundingBoxFilter(Double, Double, Double) Given a latitude and longitude (in degrees) and the maximum great circle (surface of the earth) distance, returns a simple Filter bounding box to \"fast match\" candidates. Declaration public static Filter GetBoundingBoxFilter(double originLat, double originLng, double maxDistanceKM) Parameters Type Name Description System.Double originLat System.Double originLng System.Double maxDistanceKM Returns Type Description Filter | Improve this Doc View Source Index() Build the example index. Declaration public void Index() | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source Search() User runs a query and counts facets. Declaration public FacetResult Search() Returns Type Description FacetResult"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.ExpressionAggregationFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.ExpressionAggregationFacetsExample.html",
    "title": "Class ExpressionAggregationFacetsExample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExpressionAggregationFacetsExample Shows facets aggregation by an expression. Inheritance System.Object ExpressionAggregationFacetsExample Namespace : Lucene.Net.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class ExpressionAggregationFacetsExample : object Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Expressions; using Lucene.Net.Expressions.JS; using Lucene.Net.Facet; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Facet.Taxonomy.Directory; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows facets aggregation by an expression. /// </summary> public class ExpressionAggregationFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly Directory taxoDir = new RAMDirectory(); private readonly FacetsConfig config = new FacetsConfig(); /// <summary>Build the example index.</summary> private void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) // Writes facet ords to a separate directory from the main index using (DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir)) { Document doc = new Document(); doc.Add(new TextField(\"c\", \"foo bar\", Field.Store.NO)); doc.Add(new NumericDocValuesField(\"popularity\", 5L)); doc.Add(new FacetField(\"A\", \"B\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new TextField(\"c\", \"foo foo bar\", Field.Store.NO)); doc.Add(new NumericDocValuesField(\"popularity\", 3L)); doc.Add(new FacetField(\"A\", \"C\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); } // Disposes indexWriter and taxoWriter } /// <summary>User runs a query and aggregates facets.</summary> private FacetResult Search() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); // Aggregate categories by an expression that combines the document's score // and its popularity field Expression expr = JavascriptCompiler.Compile(\"_score * sqrt(popularity)\"); SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"_score\", SortFieldType.SCORE)); // the score of the document bindings.Add(new SortField(\"popularity\", SortFieldType.INT64)); // the value of the 'popularity' field // Aggregates the facet values FacetsCollector fc = new FacetsCollector(true); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); // Retrieve results Facets facets = new TaxonomyFacetSumValueSource(taxoReader, config, fc, expr.GetValueSource(bindings)); FacetResult result = facets.GetTopChildren(10, \"A\"); return result; } // Disposes indexReader and taxoReader } /// <summary>Runs the search example.</summary> public FacetResult RunSearch() { Index(); return Search(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Facet counting example:\"); Console.WriteLine(\"-----------------------\"); FacetResult result = new ExpressionAggregationFacetsExample().RunSearch(); Console.WriteLine(result); } } } Methods | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunSearch() Runs the search example. Declaration public FacetResult RunSearch() Returns Type Description FacetResult"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.html",
    "title": "Namespace Lucene.Net.Demo.Facet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Demo.Facet <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Facets example code. Classes AssociationsFacetsExample Shows example usage of category associations. DistanceFacetsExample Shows simple usage of dynamic range faceting, using the expressions module to calculate distance. ExpressionAggregationFacetsExample Shows facets aggregation by an expression. MultiCategoryListsFacetsExample Demonstrates indexing categories into different indexed fields. RangeFacetsExample Shows simple usage of dynamic range faceting. SimpleFacetsExample Shows simple usage of faceted indexing and search. SimpleSortedSetFacetsExample Shows simple usage of faceted indexing and search using SortedSetDocValuesFacetField and SortedSetDocValuesFacetCounts ."
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.html",
    "title": "Class MultiCategoryListsFacetsExample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiCategoryListsFacetsExample Demonstrates indexing categories into different indexed fields. Inheritance System.Object MultiCategoryListsFacetsExample Namespace : Lucene.Net.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class MultiCategoryListsFacetsExample : object Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Facet.Taxonomy.Directory; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; using System.Collections.Generic; namespace Lucene.Net.Demo.Facet { /// <summary> /// Demonstrates indexing categories into different indexed fields. /// </summary> public class MultiCategoryListsFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly Directory taxoDir = new RAMDirectory(); private readonly FacetsConfig config = new FacetsConfig(); /// <summary>Creates a new instance and populates the catetory list params mapping.</summary> public MultiCategoryListsFacetsExample() { config.SetIndexFieldName(\"Author\", \"author\"); config.SetIndexFieldName(\"Publish Date\", \"pubdate\"); config.SetHierarchical(\"Publish Date\", true); } /// <summary>Build the example index.</summary> private void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) // Writes facet ords to a separate directory from the main index using (DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir)) { Document doc = new Document(); doc.Add(new FacetField(\"Author\", \"Bob\")); doc.Add(new FacetField(\"Publish Date\", \"2010\", \"10\", \"15\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Lisa\")); doc.Add(new FacetField(\"Publish Date\", \"2010\", \"10\", \"20\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Lisa\")); doc.Add(new FacetField(\"Publish Date\", \"2012\", \"1\", \"1\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Susan\")); doc.Add(new FacetField(\"Publish Date\", \"2012\", \"1\", \"7\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Frank\")); doc.Add(new FacetField(\"Publish Date\", \"1999\", \"5\", \"5\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); } // Disposes indexWriter and taxoWriter } /// <summary>User runs a query and counts facets.</summary> private IList<FacetResult> Search() { IList<FacetResult> results = new List<FacetResult>(); using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); // Retrieve results // Count both \"Publish Date\" and \"Author\" dimensions Facets author = new FastTaxonomyFacetCounts(\"author\", taxoReader, config, fc); results.Add(author.GetTopChildren(10, \"Author\")); Facets pubDate = new FastTaxonomyFacetCounts(\"pubdate\", taxoReader, config, fc); results.Add(pubDate.GetTopChildren(10, \"Publish Date\")); } // Disposes indexReader and taxoReader return results; } /// <summary>Runs the search example.</summary> public IList<FacetResult> RunSearch() { Index(); return Search(); } /// <summary>Runs the search example and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Facet counting over multiple category lists example:\"); Console.WriteLine(\"-----------------------\"); IList<FacetResult> results = new MultiCategoryListsFacetsExample().RunSearch(); Console.WriteLine(\"Author: \" + results[0]); Console.WriteLine(\"Publish Date: \" + results[1]); } } } Constructors | Improve this Doc View Source MultiCategoryListsFacetsExample() Creates a new instance and populates the catetory list params mapping. Declaration public MultiCategoryListsFacetsExample() Methods | Improve this Doc View Source Main(String[]) Runs the search example and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunSearch() Runs the search example. Declaration public IList<FacetResult> RunSearch() Returns Type Description IList < FacetResult >"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.RangeFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.RangeFacetsExample.html",
    "title": "Class RangeFacetsExample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RangeFacetsExample Shows simple usage of dynamic range faceting. Inheritance System.Object RangeFacetsExample Namespace : Lucene.Net.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class RangeFacetsExample : IDisposable Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.Range; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows simple usage of dynamic range faceting. /// </summary> public class RangeFacetsExample : IDisposable { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private IndexSearcher searcher; private readonly long nowSec = DateTime.Now.Ticks; internal readonly Int64Range PAST_HOUR; internal readonly Int64Range PAST_SIX_HOURS; internal readonly Int64Range PAST_DAY; /// <summary>Constructor</summary> public RangeFacetsExample() { PAST_HOUR = new Int64Range(\"Past hour\", nowSec - 3600, true, nowSec, true); PAST_SIX_HOURS = new Int64Range(\"Past six hours\", nowSec - 6 * 3600, true, nowSec, true); PAST_DAY = new Int64Range(\"Past day\", nowSec - 24 * 3600, true, nowSec, true); } /// <summary>Build the example index.</summary> public void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) { // Add documents with a fake timestamp, 1000 sec before // \"now\", 2000 sec before \"now\", ...: for (int i = 0; i < 100; i++) { Document doc = new Document(); long then = nowSec - i * 1000; // Add as doc values field, so we can compute range facets: doc.Add(new NumericDocValuesField(\"timestamp\", then)); // Add as numeric field so we can drill-down: doc.Add(new Int64Field(\"timestamp\", then, Field.Store.NO)); indexWriter.AddDocument(doc); } // Open near-real-time searcher searcher = new IndexSearcher(DirectoryReader.Open(indexWriter, true)); } // Disposes indexWriter } private FacetsConfig GetConfig() { return new FacetsConfig(); } /// <summary>User runs a query and counts facets.</summary> public FacetResult Search() { // Aggregates the facet counts FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); Facets facets = new Int64RangeFacetCounts(\"timestamp\", fc, PAST_HOUR, PAST_SIX_HOURS, PAST_DAY); return facets.GetTopChildren(10, \"timestamp\"); } /// <summary>User drills down on the specified range.</summary> public TopDocs DrillDown(Int64Range range) { // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(GetConfig()); q.Add(\"timestamp\", NumericRangeQuery.NewInt64Range(\"timestamp\", range.Min, range.Max, range.MinInclusive, range.MaxInclusive)); return searcher.Search(q, 10); } public void Dispose() { searcher?.IndexReader?.Dispose(); indexDir?.Dispose(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { using (RangeFacetsExample example = new RangeFacetsExample()) { example.Index(); Console.WriteLine(\"Facet counting example:\"); Console.WriteLine(\"-----------------------\"); Console.WriteLine(example.Search()); Console.WriteLine(\"\\n\"); Console.WriteLine(\"Facet drill-down example (timestamp/Past six hours):\"); Console.WriteLine(\"---------------------------------------------\"); TopDocs hits = example.DrillDown(example.PAST_SIX_HOURS); Console.WriteLine(hits.TotalHits + \" TotalHits\"); } // Disposes example } } } Constructors | Improve this Doc View Source RangeFacetsExample() Constructor Declaration public RangeFacetsExample() Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source DrillDown(Int64Range) User drills down on the specified range. Declaration public TopDocs DrillDown(Int64Range range) Parameters Type Name Description Int64Range range Returns Type Description TopDocs | Improve this Doc View Source Index() Build the example index. Declaration public void Index() | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source Search() User runs a query and counts facets. Declaration public FacetResult Search() Returns Type Description FacetResult"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.SimpleFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.SimpleFacetsExample.html",
    "title": "Class SimpleFacetsExample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFacetsExample Shows simple usage of faceted indexing and search. Inheritance System.Object SimpleFacetsExample Namespace : Lucene.Net.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class SimpleFacetsExample : object Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Facet.Taxonomy.Directory; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; using System.Collections.Generic; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows simple usage of faceted indexing and search. /// </summary> public class SimpleFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly Directory taxoDir = new RAMDirectory(); private readonly FacetsConfig config = new FacetsConfig(); /// <summary>Constructor</summary> public SimpleFacetsExample() { config.SetHierarchical(\"Publish Date\", true); } /// <summary>Build the example index.</summary> private void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) // Writes facet ords to a separate directory from the main index using (DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir)) { Document doc = new Document(); doc.Add(new FacetField(\"Author\", \"Bob\")); doc.Add(new FacetField(\"Publish Date\", \"2010\", \"10\", \"15\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Lisa\")); doc.Add(new FacetField(\"Publish Date\", \"2010\", \"10\", \"20\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Lisa\")); doc.Add(new FacetField(\"Publish Date\", \"2012\", \"1\", \"1\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Susan\")); doc.Add(new FacetField(\"Publish Date\", \"2012\", \"1\", \"7\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Frank\")); doc.Add(new FacetField(\"Publish Date\", \"1999\", \"5\", \"5\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); } // Disposes indexWriter and taxoWriter } /// <summary>User runs a query and counts facets.</summary> private IList<FacetResult> FacetsWithSearch() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); // Retrieve results IList<FacetResult> results = new List<FacetResult>(); // Count both \"Publish Date\" and \"Author\" dimensions Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc); results.Add(facets.GetTopChildren(10, \"Author\")); results.Add(facets.GetTopChildren(10, \"Publish Date\")); return results; } // Disposes indexReader and taxoReader } /// <summary>User runs a query and counts facets only without collecting the matching documents.</summary> private IList<FacetResult> FacetsOnly() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: searcher.Search(new MatchAllDocsQuery(), null /*Filter */, fc); // Retrieve results IList<FacetResult> results = new List<FacetResult>(); // Count both \"Publish Date\" and \"Author\" dimensions Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc); results.Add(facets.GetTopChildren(10, \"Author\")); results.Add(facets.GetTopChildren(10, \"Publish Date\")); return results; } // Disposes indexReader and taxoReader } /// <summary> /// User drills down on 'Publish Date/2010', and we /// return facets for 'Author' /// </summary> private FacetResult DrillDown() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(config); // Now user drills down on Publish Date/2010: q.Add(\"Publish Date\", \"2010\"); FacetsCollector fc = new FacetsCollector(); FacetsCollector.Search(searcher, q, 10, fc); // Retrieve results Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc); FacetResult result = facets.GetTopChildren(10, \"Author\"); return result; } // Disposes indexReader and taxoReader } /// <summary> /// User drills down on 'Publish Date/2010', and we /// return facets for both 'Publish Date' and 'Author', /// using DrillSideways. /// </summary> private IList<FacetResult> DrillSideways() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(config); // Now user drills down on Publish Date/2010: q.Add(\"Publish Date\", \"2010\"); DrillSideways ds = new DrillSideways(searcher, config, taxoReader); DrillSidewaysResult result = ds.Search(q, 10); // Retrieve results IList<FacetResult> facets = result.Facets.GetAllDims(10); return facets; } // Disposes indexReader and taxoReader } /// <summary>Runs the search example.</summary> public IList<FacetResult> RunFacetOnly() { Index(); return FacetsOnly(); } /// <summary>Runs the search example.</summary> public IList<FacetResult> RunSearch() { Index(); return FacetsWithSearch(); } /// <summary>Runs the drill-down example.</summary> public FacetResult RunDrillDown() { Index(); return DrillDown(); } /// <summary>Runs the drill-sideways example.</summary> public IList<FacetResult> RunDrillSideways() { Index(); return DrillSideways(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Facet counting example:\"); Console.WriteLine(\"-----------------------\"); SimpleFacetsExample example1 = new SimpleFacetsExample(); IList<FacetResult> results1 = example1.RunFacetOnly(); Console.WriteLine(\"Author: \" + results1[0]); Console.WriteLine(\"Publish Date: \" + results1[1]); Console.WriteLine(\"Facet counting example (combined facets and search):\"); Console.WriteLine(\"-----------------------\"); SimpleFacetsExample example = new SimpleFacetsExample(); IList<FacetResult> results = example.RunSearch(); Console.WriteLine(\"Author: \" + results[0]); Console.WriteLine(\"Publish Date: \" + results[1]); Console.WriteLine(); Console.WriteLine(\"Facet drill-down example (Publish Date/2010):\"); Console.WriteLine(\"---------------------------------------------\"); Console.WriteLine(\"Author: \" + example.RunDrillDown()); Console.WriteLine(); Console.WriteLine(\"Facet drill-sideways example (Publish Date/2010):\"); Console.WriteLine(\"---------------------------------------------\"); foreach (FacetResult result in example.RunDrillSideways()) { Console.WriteLine(result); } } } } Constructors | Improve this Doc View Source SimpleFacetsExample() Constructor Declaration public SimpleFacetsExample() Methods | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunDrillDown() Runs the drill-down example. Declaration public FacetResult RunDrillDown() Returns Type Description FacetResult | Improve this Doc View Source RunDrillSideways() Runs the drill-sideways example. Declaration public IList<FacetResult> RunDrillSideways() Returns Type Description IList < FacetResult > | Improve this Doc View Source RunFacetOnly() Runs the search example. Declaration public IList<FacetResult> RunFacetOnly() Returns Type Description IList < FacetResult > | Improve this Doc View Source RunSearch() Runs the search example. Declaration public IList<FacetResult> RunSearch() Returns Type Description IList < FacetResult >"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.SimpleSortedSetFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.SimpleSortedSetFacetsExample.html",
    "title": "Class SimpleSortedSetFacetsExample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleSortedSetFacetsExample Shows simple usage of faceted indexing and search using SortedSetDocValuesFacetField and SortedSetDocValuesFacetCounts . Inheritance System.Object SimpleSortedSetFacetsExample Namespace : Lucene.Net.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class SimpleSortedSetFacetsExample : object Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.SortedSet; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; using System.Collections.Generic; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows simple usage of faceted indexing and search /// using <see cref=\"SortedSetDocValuesFacetField\"/> and /// <see cref=\"SortedSetDocValuesFacetCounts\"/>. /// </summary> public class SimpleSortedSetFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly FacetsConfig config = new FacetsConfig(); /// <summary>Build the example index.</summary> private void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) { Document doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Bob\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"2010\")); indexWriter.AddDocument(config.Build(doc)); doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Lisa\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"2010\")); indexWriter.AddDocument(config.Build(doc)); doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Lisa\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"2012\")); indexWriter.AddDocument(config.Build(doc)); doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Susan\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"2012\")); indexWriter.AddDocument(config.Build(doc)); doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Frank\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"1999\")); indexWriter.AddDocument(config.Build(doc)); } // Disposes indexWriter } /// <summary>User runs a query and counts facets.</summary> private IList<FacetResult> Search() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); SortedSetDocValuesReaderState state = new DefaultSortedSetDocValuesReaderState(indexReader); // Aggregatses the facet counts FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); // Retrieve results Facets facets = new SortedSetDocValuesFacetCounts(state, fc); IList<FacetResult> results = new List<FacetResult>(); results.Add(facets.GetTopChildren(10, \"Author\")); results.Add(facets.GetTopChildren(10, \"Publish Year\")); return results; } // Disposes indexWriter } /// <summary>User drills down on 'Publish Year/2010'.</summary> private FacetResult DrillDown() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); SortedSetDocValuesReaderState state = new DefaultSortedSetDocValuesReaderState(indexReader); // Now user drills down on Publish Year/2010: DrillDownQuery q = new DrillDownQuery(config); q.Add(\"Publish Year\", \"2010\"); FacetsCollector fc = new FacetsCollector(); FacetsCollector.Search(searcher, q, 10, fc); // Retrieve results Facets facets = new SortedSetDocValuesFacetCounts(state, fc); FacetResult result = facets.GetTopChildren(10, \"Author\"); return result; } // Disposes indexReader } /// <summary>Runs the search example.</summary> public IList<FacetResult> RunSearch() { Index(); return Search(); } /// <summary>Runs the drill-down example.</summary> public FacetResult RunDrillDown() { Index(); return DrillDown(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Facet counting example:\"); Console.WriteLine(\"-----------------------\"); SimpleSortedSetFacetsExample example = new SimpleSortedSetFacetsExample(); IList<FacetResult> results = example.RunSearch(); Console.WriteLine(\"Author: \" + results[0]); Console.WriteLine(\"Publish Year: \" + results[0]); Console.WriteLine(); Console.WriteLine(\"Facet drill-down example (Publish Year/2010):\"); Console.WriteLine(\"---------------------------------------------\"); Console.WriteLine(\"Author: \" + example.RunDrillDown()); } } } Methods | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunDrillDown() Runs the drill-down example. Declaration public FacetResult RunDrillDown() Returns Type Description FacetResult | Improve this Doc View Source RunSearch() Runs the search example. Declaration public IList<FacetResult> RunSearch() Returns Type Description IList < FacetResult >"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.html",
    "title": "Namespace Lucene.Net.Demo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Demo <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The demo module offers simple example code to show the features of Lucene. Apache Lucene - Building and Installing the Basic Demo About this Document About the Demo Indexing Files About the code Location of the source IndexFiles Searching Files About this Document This document is intended as a \"getting started\" guide to using and running the Lucene demos. It walks you through some basic installation and configuration. About the Demo The Lucene command-line demo code consists of an application that demonstrates various functionalities of Lucene and how you can add Lucene to your applications. Indexing Files Once you've gotten this far you're probably itching to go. Let's build an index! Assuming you've set your CLASSPATH correctly, just type: java org.apache.lucene.demo.IndexFiles -docs {path-to-lucene}/src This will produce a subdirectory called index which will contain an index of all of the Lucene source code. To search the index type: java org.apache.lucene.demo.SearchFiles You'll be prompted for a query. Type in a gibberish or made up word (for example: \"supercalifragilisticexpialidocious\"). You'll see that there are no maching results in the lucene source code. Now try entering the word \"string\". That should return a whole bunch of documents. The results will page at every tenth result and ask you whether you want more results. About the code In this section we walk through the sources behind the command-line Lucene demo: where to find them, their parts and their function. This section is intended for Java developers wishing to understand how to use Lucene in their applications. Location of the source The files discussed here are linked into this documentation directly: * IndexFiles : code to create a Lucene index. * SearchFiles : code to search a Lucene index. IndexFiles As we discussed in the previous walk-through, the IndexFiles class creates a Lucene Index. Let's take a look at how it does this. The main() method parses the command-line parameters, then in preparation for instantiating IndexWriter , opens a Directory , and instantiates StandardAnalyzer and IndexWriterConfig . The value of the -index command-line parameter is the name of the filesystem directory where all index information should be stored. If IndexFiles is invoked with a relative path given in the -index command-line parameter, or if the -index command-line parameter is not given, causing the default relative index path \" index \" to be used, the index path will be created as a subdirectory of the current working directory (if it does not already exist). On some platforms, the index path may be created in a different directory (such as the user's home directory). The -docs command-line parameter value is the location of the directory containing files to be indexed. The -update command-line parameter tells IndexFiles not to delete the index if it already exists. When -update is not given, IndexFiles will first wipe the slate clean before indexing any documents. Lucene Directory s are used by the IndexWriter to store information in the index. In addition to the FSDirectory implementation we are using, there are several other Directory subclasses that can write to RAM, to databases, etc. Lucene Analyzer s are processing pipelines that break up text into indexed tokens, a.k.a. terms, and optionally perform other operations on these tokens, e.g. downcasing, synonym insertion, filtering out unwanted tokens, etc. The Analyzer we are using is StandardAnalyzer , which creates tokens using the Word Break rules from the Unicode Text Segmentation algorithm specified in Unicode Standard Annex #29 ; converts tokens to lowercase; and then filters out stopwords. Stopwords are common language words such as articles (a, an, the, etc.) and other tokens that may have less value for searching. It should be noted that there are different rules for every language, and you should use the proper analyzer for each. Lucene currently provides Analyzers for a number of different languages (see the javadocs under lucene/analysis/common/src/java/org/apache/lucene/analysis ). The IndexWriterConfig instance holds all configuration for IndexWriter . For example, we set the OpenMode to use here based on the value of the -update command-line parameter. Looking further down in the file, after IndexWriter is instantiated, you should see the indexDocs() code. This recursive function crawls the directories and creates Document objects. The Document is simply a data object to represent the text content from the file as well as its creation time and location. These instances are added to the IndexWriter . If the -update command-line parameter is given, the IndexWriterConfig OpenMode will be set to OpenMode.CREATE_OR_APPEND , and rather than adding documents to the index, the IndexWriter will update them in the index by attempting to find an already-indexed document with the same identifier (in our case, the file path serves as the identifier); deleting it from the index if it exists; and then adding the new document to the index. Searching Files The SearchFiles class is quite simple. It primarily collaborates with an IndexSearcher , StandardAnalyzer , (which is used in the IndexFiles class as well) and a QueryParser . The query parser is constructed with an analyzer used to interpret your query text in the same way the documents are interpreted: finding word boundaries, downcasing, and removing useless words like 'a', 'an' and 'the'. The Query object contains the results from the QueryParser which is passed to the searcher. Note that it's also possible to programmatically construct a rich Query object without using the query parser. The query parser just enables decoding the Lucene query syntax into the corresponding Query object. SearchFiles uses the IndexSearcher.search method that returns TopDocs with max n hits. The results are printed in pages, sorted by score (i.e. relevance). Classes IndexFiles Index all text files under a directory. This is a command-line application demonstrating simple Lucene indexing. Run it with no command-line arguments for usage information. SearchFiles Simple command-line based search demo."
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.IndexFiles.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.IndexFiles.html",
    "title": "Class IndexFiles | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexFiles Index all text files under a directory. This is a command-line application demonstrating simple Lucene indexing. Run it with no command-line arguments for usage information. Inheritance System.Object IndexFiles Namespace : Lucene.Net.Demo Assembly : Lucene.Net.Demo.dll Syntax public class IndexFiles : object Methods | Improve this Doc View Source Main(String[]) Index all text files under a directory. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.SearchFiles.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.SearchFiles.html",
    "title": "Class SearchFiles | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchFiles Simple command-line based search demo. Inheritance System.Object SearchFiles Namespace : Lucene.Net.Demo Assembly : Lucene.Net.Demo.dll Syntax public class SearchFiles : object Methods | Improve this Doc View Source DoPagingSearch(IndexSearcher, Query, Int32, Boolean, Boolean) This demonstrates a typical paging search scenario, where the search engine presents pages of size n to the user. The user can then go to the next page if interested in the next hits. When the query is executed for the first time, then only enough results are collected to fill 5 result pages. If the user wants to page beyond this limit, then the query is executed another time and all hits are collected. Declaration public static void DoPagingSearch(IndexSearcher searcher, Query query, int hitsPerPage, bool raw, bool interactive) Parameters Type Name Description IndexSearcher searcher Query query System.Int32 hitsPerPage System.Boolean raw System.Boolean interactive | Improve this Doc View Source Main(String[]) Simple command-line based search demo. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.Bindings.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.Bindings.html",
    "title": "Class Bindings | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Bindings Binds variable names in expressions to actual data. Inheritance System.Object Bindings SimpleBindings Namespace : Lucene.Net.Expressions Assembly : Lucene.Net.Expressions.dll Syntax public abstract class Bindings : object Remarks Binds variable names in expressions to actual data. These are typically DocValues fields/FieldCache, the document's relevance score, or other ValueSource s. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source Bindings() Sole constructor. Declaration public Bindings() Remarks Sole constructor. (For invocation by subclass constructors, typically implicit.) Methods | Improve this Doc View Source GetScoreValueSource() Returns a ValueSource over relevance scores Declaration protected ValueSource GetScoreValueSource() Returns Type Description ValueSource | Improve this Doc View Source GetValueSource(String) Returns a ValueSource bound to the variable name. Declaration public abstract ValueSource GetValueSource(string name) Parameters Type Name Description System.String name Returns Type Description ValueSource"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.Expression.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.Expression.html",
    "title": "Class Expression | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Expression Base class that computes the value of an expression for a document. Inheritance System.Object Expression Namespace : Lucene.Net.Expressions Assembly : Lucene.Net.Expressions.dll Syntax public abstract class Expression : object Remarks Base class that computes the value of an expression for a document. Example usage: // compile an expression: Expression expr = JavascriptCompiler.Compile(\"sqrt(_score) + ln(popularity)\"); // SimpleBindings just maps variables to SortField instances SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"_score\", SortFieldType.SCORE)); bindings.Add(new SortField(\"popularity\", SortFieldType.INT)); // create a sort field and sort by it (reverse order) Sort sort = new Sort(expr.GetSortField(bindings, true)); Query query = new TermQuery(new Term(\"body\", \"contents\")); searcher.Search(query, null, 10, sort); This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source Expression(String, String[]) Creates a new Expression . Declaration public Expression(string sourceText, string[] variables) Parameters Type Name Description System.String sourceText Source text for the expression: e.g. ln(popularity) System.String [] variables Names of external variables referred to by the expression Properties | Improve this Doc View Source SourceText The original source text Declaration public string SourceText { get; } Property Value Type Description System.String | Improve this Doc View Source Variables Named variables referred to by this expression Declaration public string[] Variables { get; } Property Value Type Description System.String [] Methods | Improve this Doc View Source Evaluate(Int32, FunctionValues[]) Evaluates the expression for the given document. Declaration public abstract double Evaluate(int document, FunctionValues[] functionValues) Parameters Type Name Description System.Int32 document docId of the document to compute a value for FunctionValues [] functionValues FunctionValues for each element of Variables . Returns Type Description System.Double The computed value of the expression for the given document. Remarks Evaluates the expression for the given document. | Improve this Doc View Source GetRescorer(Bindings) Get a , to rescore first-pass hits using this expression. Declaration public virtual Rescorer GetRescorer(Bindings bindings) Parameters Type Name Description Bindings bindings Returns Type Description Rescorer | Improve this Doc View Source GetSortField(Bindings, Boolean) Get a sort field which can be used to rank documents by this expression. Declaration public virtual SortField GetSortField(Bindings bindings, bool reverse) Parameters Type Name Description Bindings bindings System.Boolean reverse Returns Type Description SortField Remarks Get a sort field which can be used to rank documents by this expression. | Improve this Doc View Source GetValueSource(Bindings) Get a value source which can compute the value of this expression in the context of the given bindings. Declaration public virtual ValueSource GetValueSource(Bindings bindings) Parameters Type Name Description Bindings bindings Bindings to use for external values in this expression Returns Type Description ValueSource A value source which will evaluate this expression when used Remarks Get a value source which can compute the value of this expression in the context of the given bindings. See Also Compile(String)"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.html",
    "title": "Namespace Lucene.Net.Expressions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Expressions <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The Expressions Module for Apache Lucene The expressions module is new to Lucene 4.6. It provides an API for dynamically computing per-document values based on string expressions. The module is organized in two sections: 1. Lucene.Net.Expressions - The abstractions and simple utilities for common operations like sorting on an expression 2. <xref:Lucene.Net.Expressions.Js> - A compiler for a subset of JavaScript expressions For sample code showing how to use the API, see Expression . Classes Bindings Binds variable names in expressions to actual data. Expression Base class that computes the value of an expression for a document. SimpleBindings Simple class that binds expression variable names to s or other Expression s. Example usage: SimpleBindings bindings = new SimpleBindings(); // document's text relevance score bindings.Add(new SortField(\"_score\", SortFieldType.SCORE)); // integer NumericDocValues field (or from FieldCache) bindings.Add(new SortField(\"popularity\", SortFieldType.INT)); // another expression bindings.Add(\"recency\", myRecencyExpression); // create a sort field in reverse order Sort sort = new Sort(expr.GetSortField(bindings, true)); This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.html",
    "title": "Namespace Lucene.Net.Expressions.JS | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Expressions.JS <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Javascript expressions A Javascript expression is a numeric expression specified using an expression syntax that's based on JavaScript expressions. You can construct expressions using: Integer, floating point, hex and octal literals Arithmetic operators: + - * / % Bitwise operators: | & ^ ~ << >> >>> Boolean operators (including the ternary operator): && || ! ?: Comparison operators: < <= == >= > Common mathematic functions: abs ceil exp floor ln log2 log10 logn max min sqrt pow Trigonometric library functions: acosh acos asinh asin atanh atan atan2 cosh cos sinh sin tanh tan Distance functions: haversin Miscellaneous functions: min, max Arbitrary external variables - see Bindings JavaScript order of precedence rules apply for operators. Shortcut evaluation is used for logical operators—the second argument is only evaluated if the value of the expression cannot be determined after evaluating the first argument. For example, in the expression a || b , b is only evaluated if a is not true. To compile an expression, use <xref:Lucene.Net.Expressions.Js.JavascriptCompiler>. Classes JavascriptCompiler An expression compiler for javascript expressions. ParseException"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.JavascriptCompiler.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.JavascriptCompiler.html",
    "title": "Class JavascriptCompiler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JavascriptCompiler An expression compiler for javascript expressions. Inheritance System.Object JavascriptCompiler Namespace : Lucene.Net.Expressions.JS Assembly : Lucene.Net.Expressions.dll Syntax public class JavascriptCompiler : object Remarks An expression compiler for javascript expressions. Example: Expression foo = JavascriptCompiler.Compile(\"((0.3*popularity)/10.0)+(0.7*score)\"); See the Lucene.Net.Expressions.JS for the supported syntax and default functions. You can compile with an alternate set of functions via Compile(String, IDictionary<String, MethodInfo>) . For example: IDictionary<string, MethodInfo> functions = new Dictionary<string, MethodInfo>(); // add all the default functions functions.PutAll(JavascriptCompiler.DEFAULT_FUNCTIONS); // add sqrt() functions.Put(\"sqrt\", (typeof(Math)).GetMethod(\"Sqrt\", new Type[] { typeof(double) })); // call compile with customized function map Expression foo = JavascriptCompiler.Compile(\"sqrt(score)+ln(popularity)\", functions); This is a Lucene.NET EXPERIMENTAL API, use at your own risk Fields | Improve this Doc View Source DEFAULT_FUNCTIONS The default set of functions available to expressions. Declaration public static readonly IDictionary<string, MethodInfo> DEFAULT_FUNCTIONS Field Value Type Description IDictionary < System.String , MethodInfo > Remarks The default set of functions available to expressions. See the Lucene.Net.Expressions.JS for a list. Methods | Improve this Doc View Source Compile(String) Compiles the given expression. Declaration public static Expression Compile(string sourceText) Parameters Type Name Description System.String sourceText The expression to compile Returns Type Description Expression A new compiled expression Exceptions Type Condition ParseException on failure to compile | Improve this Doc View Source Compile(String, IDictionary<String, MethodInfo>) Compiles the given expression with the supplied custom functions. Declaration public static Expression Compile(string sourceText, IDictionary<string, MethodInfo> functions) Parameters Type Name Description System.String sourceText The expression to compile IDictionary < System.String , MethodInfo > functions map of names to functions Returns Type Description Expression A new compiled expression Remarks Compiles the given expression with the supplied custom functions. Functions must be public static , return and can take from zero to 256 parameters. Exceptions Type Condition ParseException on failure to compile"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.ParseException.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.ParseException.html",
    "title": "Class ParseException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParseException Inheritance System.Object ParseException Namespace : Lucene.Net.Expressions.JS Assembly : Lucene.Net.Expressions.dll Syntax public class ParseException : Exception Constructors | Improve this Doc View Source ParseException(String, Int32) Declaration public ParseException(string message, int charPositionInLine) Parameters Type Name Description System.String message System.Int32 charPositionInLine"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.SimpleBindings.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.SimpleBindings.html",
    "title": "Class SimpleBindings | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleBindings Simple class that binds expression variable names to s or other Expression s. Example usage: SimpleBindings bindings = new SimpleBindings(); // document's text relevance score bindings.Add(new SortField(\"_score\", SortFieldType.SCORE)); // integer NumericDocValues field (or from FieldCache) bindings.Add(new SortField(\"popularity\", SortFieldType.INT)); // another expression bindings.Add(\"recency\", myRecencyExpression); // create a sort field in reverse order Sort sort = new Sort(expr.GetSortField(bindings, true)); This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Bindings SimpleBindings Inherited Members Bindings.GetScoreValueSource() Namespace : Lucene.Net.Expressions Assembly : Lucene.Net.Expressions.dll Syntax public sealed class SimpleBindings : Bindings Constructors | Improve this Doc View Source SimpleBindings() Creates a new empty Bindings Declaration public SimpleBindings() Methods | Improve this Doc View Source Add(SortField) Adds a to the bindings. Declaration public void Add(SortField sortField) Parameters Type Name Description SortField sortField Remarks Adds a to the bindings. This can be used to reference a DocValuesField, a field from FieldCache, the document's score, etc. | Improve this Doc View Source Add(String, Expression) Adds an Expression to the bindings. Declaration public void Add(string name, Expression expression) Parameters Type Name Description System.String name Expression expression Remarks Adds an Expression to the bindings. This can be used to reference expressions from other expressions. | Improve this Doc View Source GetValueSource(String) Declaration public override ValueSource GetValueSource(string name) Parameters Type Name Description System.String name Returns Type Description ValueSource Overrides Bindings.GetValueSource(String) | Improve this Doc View Source Validate() Traverses the graph of bindings, checking there are no cycles or missing references Declaration public void Validate()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Documents.DocumentExtensions.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Documents.DocumentExtensions.html",
    "title": "Class DocumentExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocumentExtensions LUCENENET specific extensions to the class. Inheritance System.Object DocumentExtensions Namespace : Lucene.Net.Documents Assembly : Lucene.Net.Facet.dll Syntax public static class DocumentExtensions : object Methods | Improve this Doc View Source AddAssociationFacetField(Document, BytesRef, String, String[]) Adds a new AssociationFacetField using dim and path and an association. Declaration public static AssociationFacetField AddAssociationFacetField(this Document document, BytesRef assoc, string dim, params string[] path) Parameters Type Name Description Document document This . BytesRef assoc Associated value. System.String dim Dimension for this field. System.String [] path Facet path for this field. Returns Type Description AssociationFacetField The field that was added to this . | Improve this Doc View Source AddFacetField(Document, String, String[]) Adds a new FacetField with the specified dim and path . Declaration public static FacetField AddFacetField(this Document document, string dim, params string[] path) Parameters Type Name Description Document document This . System.String dim Dimension for this field. System.String [] path Facet path for this field. Returns Type Description FacetField The field that was added to this . | Improve this Doc View Source AddInt32AssociationFacetField(Document, Int32, String, String[]) Adds a new Int32AssociationFacetField using dim and path and an association. Declaration public static Int32AssociationFacetField AddInt32AssociationFacetField(this Document document, int assoc, string dim, params string[] path) Parameters Type Name Description Document document This . System.Int32 assoc Associated value. System.String dim Dimension for this field. System.String [] path Facet path for this field. Returns Type Description Int32AssociationFacetField The field that was added to this . | Improve this Doc View Source AddSingleAssociationFacetField(Document, Single, String, String[]) Adds a new SingleAssociationFacetField using dim and path and a association. Declaration public static SingleAssociationFacetField AddSingleAssociationFacetField(this Document document, float assoc, string dim, params string[] path) Parameters Type Name Description Document document This . System.Single assoc Associated value. System.String dim Dimension for this field. System.String [] path Facet path for this field. Returns Type Description SingleAssociationFacetField The field that was added to this . | Improve this Doc View Source AddSortedSetDocValuesFacetField(Document, String, String) Adds a new SortedSetDocValuesFacetField . Declaration public static SortedSetDocValuesFacetField AddSortedSetDocValuesFacetField(this Document document, string dim, string label) Parameters Type Name Description Document document This . System.String dim Dimension for this field. System.String label Label for this field. Returns Type Description SortedSetDocValuesFacetField The field that was added to this . Remarks Add a SortedSetDocValuesFacetField to your for every facet label to be indexed via ."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Documents.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Documents.html",
    "title": "Namespace Lucene.Net.Documents | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Documents <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Misc extensions of the Document/Field API. Classes DocumentExtensions LUCENENET specific extensions to the class."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillDownQuery.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillDownQuery.html",
    "title": "Class DrillDownQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DrillDownQuery A for drill-down over facet categories. You should call Add(String, String[]) for every group of categories you want to drill-down over. NOTE: if you choose to create your own by calling Term(String, String, String[]) , it is recommended to wrap it with and set the boost to 0.0f , so that it does not affect the scores of the documents. @lucene.experimental Inheritance System.Object DrillDownQuery Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class DrillDownQuery : Search.Query Constructors | Improve this Doc View Source DrillDownQuery(FacetsConfig) Creates a new DrillDownQuery without a base query, to perform a pure browsing query (equivalent to using as base). Declaration public DrillDownQuery(FacetsConfig config) Parameters Type Name Description FacetsConfig config | Improve this Doc View Source DrillDownQuery(FacetsConfig, Search.Query) Creates a new DrillDownQuery over the given base query. Can be null , in which case the result from Rewrite(Index.IndexReader) will be a pure browsing query, filtering on the added categories only. Declaration public DrillDownQuery(FacetsConfig config, Search.Query baseQuery) Parameters Type Name Description FacetsConfig config Search.Query baseQuery Methods | Improve this Doc View Source Add(String, Search.Filter) Expert: add a custom drill-down Filter, e.g. when drilling down after range faceting. Declaration public void Add(string dim, Search.Filter subFilter) Parameters Type Name Description System.String dim Search.Filter subFilter | Improve this Doc View Source Add(String, Search.Query) Expert: add a custom drill-down subQuery. Use this when you have a separate way to drill-down on the dimension than the indexed facet ordinals. Declaration public void Add(string dim, Search.Query subQuery) Parameters Type Name Description System.String dim Search.Query subQuery | Improve this Doc View Source Add(String, String[]) Adds one dimension of drill downs; if you pass the same dimension more than once it is OR'd with the previous cofnstraints on that dimension, and all dimensions are AND'd against each other and the base query. Declaration public void Add(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Rewrite(Index.IndexReader) Declaration public override Search.Query Rewrite(Index.IndexReader r) Parameters Type Name Description Index.IndexReader r Returns Type Description Search.Query | Improve this Doc View Source Term(String, String, String[]) Creates a drill-down term. Declaration public static Index.Term Term(string field, string dim, params string[] path) Parameters Type Name Description System.String field System.String dim System.String [] path Returns Type Description Index.Term | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillSideways.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillSideways.html",
    "title": "Class DrillSideways | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DrillSideways Computes drill down and sideways counts for the provided DrillDownQuery . Drill sideways counts include alternative values/aggregates for the drill-down dimensions so that a dimension does not disappear after the user drills down into it. Use one of the static search methods to do the search, and then get the hits and facet results from the returned DrillSidewaysResult . NOTE : this allocates one FacetsCollector for each drill-down, plus one. If your index has high number of facet labels then this will multiply your memory usage. @lucene.experimental Inheritance System.Object DrillSideways Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class DrillSideways : object Constructors | Improve this Doc View Source DrillSideways(IndexSearcher, FacetsConfig, SortedSetDocValuesReaderState) Create a new DrillSideways instance, assuming the categories were indexed with SortedSetDocValuesFacetField . Declaration public DrillSideways(IndexSearcher searcher, FacetsConfig config, SortedSetDocValuesReaderState state) Parameters Type Name Description IndexSearcher searcher FacetsConfig config SortedSetDocValuesReaderState state | Improve this Doc View Source DrillSideways(IndexSearcher, FacetsConfig, TaxonomyReader) Create a new DrillSideways instance. Declaration public DrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader) Parameters Type Name Description IndexSearcher searcher FacetsConfig config TaxonomyReader taxoReader | Improve this Doc View Source DrillSideways(IndexSearcher, FacetsConfig, TaxonomyReader, SortedSetDocValuesReaderState) Create a new DrillSideways instance, where some dimensions were indexed with SortedSetDocValuesFacetField and others were indexed with FacetField . Declaration public DrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader, SortedSetDocValuesReaderState state) Parameters Type Name Description IndexSearcher searcher FacetsConfig config TaxonomyReader taxoReader SortedSetDocValuesReaderState state Fields | Improve this Doc View Source m_config FacetsConfig passed to constructor. Declaration protected readonly FacetsConfig m_config Field Value Type Description FacetsConfig | Improve this Doc View Source m_searcher passed to constructor. Declaration protected readonly IndexSearcher m_searcher Field Value Type Description IndexSearcher | Improve this Doc View Source m_state SortedSetDocValuesReaderState passed to constructor; can be null . Declaration protected readonly SortedSetDocValuesReaderState m_state Field Value Type Description SortedSetDocValuesReaderState | Improve this Doc View Source m_taxoReader TaxonomyReader passed to constructor. Declaration protected readonly TaxonomyReader m_taxoReader Field Value Type Description TaxonomyReader Methods | Improve this Doc View Source BuildFacetsResult(FacetsCollector, FacetsCollector[], String[]) Subclass can override to customize per-dim Facets impl. Declaration protected virtual Facets BuildFacetsResult(FacetsCollector drillDowns, FacetsCollector[] drillSideways, string[] drillSidewaysDims) Parameters Type Name Description FacetsCollector drillDowns FacetsCollector [] drillSideways System.String [] drillSidewaysDims Returns Type Description Facets | Improve this Doc View Source ScoreSubDocsAtOnce() Override this and return true if your collector (e.g., ToParentBlockJoinCollector ) expects all sub-scorers to be positioned on the document being collected. This will cause some performance loss; default is false . Note that if you return true from this method (in a subclass) be sure your collector also returns false from : this will trick into also scoring all subDocs at once. Declaration protected virtual bool ScoreSubDocsAtOnce() Returns Type Description System.Boolean | Improve this Doc View Source Search(DrillDownQuery, Filter, FieldDoc, Int32, Sort, Boolean, Boolean) Search, sorting by , and computing drill down and sideways counts. Declaration public virtual DrillSidewaysResult Search(DrillDownQuery query, Filter filter, FieldDoc after, int topN, Sort sort, bool doDocScores, bool doMaxScore) Parameters Type Name Description DrillDownQuery query Filter filter FieldDoc after System.Int32 topN Sort sort System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description DrillSidewaysResult | Improve this Doc View Source Search(DrillDownQuery, ICollector) Search, collecting hits with a , and computing drill down and sideways counts. Declaration public virtual DrillSidewaysResult Search(DrillDownQuery query, ICollector hitCollector) Parameters Type Name Description DrillDownQuery query ICollector hitCollector Returns Type Description DrillSidewaysResult | Improve this Doc View Source Search(DrillDownQuery, Int32) Search, sorting by score, and computing drill down and sideways counts. Declaration public virtual DrillSidewaysResult Search(DrillDownQuery query, int topN) Parameters Type Name Description DrillDownQuery query System.Int32 topN Returns Type Description DrillSidewaysResult | Improve this Doc View Source Search(ScoreDoc, DrillDownQuery, Int32) Search, sorting by score, and computing drill down and sideways counts. Declaration public virtual DrillSidewaysResult Search(ScoreDoc after, DrillDownQuery query, int topN) Parameters Type Name Description ScoreDoc after DrillDownQuery query System.Int32 topN Returns Type Description DrillSidewaysResult"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillSidewaysResult.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillSidewaysResult.html",
    "title": "Class DrillSidewaysResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DrillSidewaysResult Result of a drill sideways search, including the Facets and . Inheritance System.Object DrillSidewaysResult Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class DrillSidewaysResult : object Constructors | Improve this Doc View Source DrillSidewaysResult(Facets, TopDocs) Sole constructor. Declaration public DrillSidewaysResult(Facets facets, TopDocs hits) Parameters Type Name Description Facets facets TopDocs hits Properties | Improve this Doc View Source Facets Combined drill down & sideways results. Declaration public Facets Facets { get; } Property Value Type Description Facets | Improve this Doc View Source Hits Hits. Declaration public TopDocs Hits { get; } Property Value Type Description TopDocs"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetField.html",
    "title": "Class FacetField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetField Add an instance of this to your for every facet label. NOTE: you must call Build(Document) before you add the document to . Inheritance System.Object FacetField Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class FacetField : Field Constructors | Improve this Doc View Source FacetField(String, String[]) Creates the this from dim and path . Declaration public FacetField(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Properties | Improve this Doc View Source Dim Dimension for this field. Declaration public string Dim { get; } Property Value Type Description System.String | Improve this Doc View Source Path Path for this field. Declaration public string[] Path { get; } Property Value Type Description System.String [] Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source VerifyLabel(String) Verifies the label is not null or empty string. @lucene.internal Declaration public static void VerifyLabel(string label) Parameters Type Name Description System.String label"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetResult.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetResult.html",
    "title": "Class FacetResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetResult Counts or aggregates for a single dimension. Inheritance System.Object FacetResult Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class FacetResult : object Constructors | Improve this Doc View Source FacetResult(String, String[], Int32, LabelAndValue[], Int32) Constructor for value . Makes the ToString() method print the value as an with no decimal. Declaration public FacetResult(string dim, string[] path, int value, LabelAndValue[] labelValues, int childCount) Parameters Type Name Description System.String dim System.String [] path System.Int32 value LabelAndValue [] labelValues System.Int32 childCount | Improve this Doc View Source FacetResult(String, String[], Single, LabelAndValue[], Int32) Constructor for value . Makes the ToString() method print the value as a with at least 1 number after the decimal. Declaration public FacetResult(string dim, string[] path, float value, LabelAndValue[] labelValues, int childCount) Parameters Type Name Description System.String dim System.String [] path System.Single value LabelAndValue [] labelValues System.Int32 childCount Properties | Improve this Doc View Source ChildCount How many child labels were encountered. Declaration public int ChildCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Dim Dimension that was requested. Declaration public string Dim { get; } Property Value Type Description System.String | Improve this Doc View Source LabelValues Child counts. Declaration public LabelAndValue[] LabelValues { get; } Property Value Type Description LabelAndValue [] | Improve this Doc View Source Path Path whose children were requested. Declaration public string[] Path { get; } Property Value Type Description System.String [] | Improve this Doc View Source TypeOfValue The original data type of Value that was passed through the constructor. Declaration public Type TypeOfValue { get; } Property Value Type Description Type | Improve this Doc View Source Value Total value for this path (sum of all child counts, or sum of all child values), even those not included in the topN. Declaration public float Value { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Facets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Facets.html",
    "title": "Class Facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Facets Common base class for all facets implementations. @lucene.experimental Inheritance System.Object Facets MultiFacets RangeFacetCounts SortedSetDocValuesFacetCounts TaxonomyFacets Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public abstract class Facets : object Constructors | Improve this Doc View Source Facets() Default constructor. Declaration public Facets() Methods | Improve this Doc View Source GetAllDims(Int32) Returns topN labels for any dimension that had hits, sorted by the number of hits that dimension matched; this is used for \"sparse\" faceting, where many different dimensions were indexed, for example depending on the type of document. Declaration public abstract IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description IList < FacetResult > | Improve this Doc View Source GetSpecificValue(String, String[]) Return the count or value for a specific path. Returns -1 if this path doesn't exist, else the count. Declaration public abstract float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Returns the topN child labels under the specified path. Returns null if the specified path doesn't exist or if this dimension was never seen. Declaration public abstract FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.Docs.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.Docs.html",
    "title": "Class FacetsCollector.Docs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetsCollector.Docs Used during collection to record matching docs and then return a DocIdSet that contains them. Inheritance System.Object FacetsCollector.Docs Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax protected abstract class Docs : object Constructors | Improve this Doc View Source Docs() Sole constructor. Declaration public Docs() Properties | Improve this Doc View Source DocIdSet Return the DocIdSet which contains all the recorded docs. Declaration public abstract DocIdSet DocIdSet { get; } Property Value Type Description DocIdSet Methods | Improve this Doc View Source AddDoc(Int32) Record the given document. Declaration public abstract void AddDoc(int docId) Parameters Type Name Description System.Int32 docId"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.html",
    "title": "Class FacetsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetsCollector Collects hits for subsequent faceting. Once you've run a search and collect hits into this, instantiate one of the subclasses to do the facet counting. Use the Search utility methods (such as Search(IndexSearcher, Query, Int32, ICollector) ) to perform an \"ordinary\" search but also collect into a Facets . Inheritance System.Object FacetsCollector RandomSamplingFacetsCollector Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class FacetsCollector : ICollector Constructors | Improve this Doc View Source FacetsCollector() Default constructor Declaration public FacetsCollector() | Improve this Doc View Source FacetsCollector(Boolean) Create this; if keepScores is true then a float[] is allocated to hold score of all hits. Declaration public FacetsCollector(bool keepScores) Parameters Type Name Description System.Boolean keepScores Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source KeepScores True if scores were saved. Declaration public bool KeepScores { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source CreateDocs(Int32) Creates a FacetsCollector.Docs to record hits. The default uses to record hits and you can override to e.g. record the docs in your own . Declaration protected virtual FacetsCollector.Docs CreateDocs(int maxDoc) Parameters Type Name Description System.Int32 maxDoc Returns Type Description FacetsCollector.Docs | Improve this Doc View Source GetMatchingDocs() Returns the documents matched by the query, one FacetsCollector.MatchingDocs per visited segment. Declaration public virtual IList<FacetsCollector.MatchingDocs> GetMatchingDocs() Returns Type Description IList < FacetsCollector.MatchingDocs > | Improve this Doc View Source Search(IndexSearcher, Query, Filter, Int32, ICollector) Utility method, to search and also collect all hits into the provided . Declaration public static TopDocs Search(IndexSearcher searcher, Query q, Filter filter, int n, ICollector fc) Parameters Type Name Description IndexSearcher searcher Query q Filter filter System.Int32 n ICollector fc Returns Type Description TopDocs | Improve this Doc View Source Search(IndexSearcher, Query, Filter, Int32, Sort, ICollector) Utility method, to search and also collect all hits into the provided . Declaration public static TopFieldDocs Search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, ICollector fc) Parameters Type Name Description IndexSearcher searcher Query q Filter filter System.Int32 n Sort sort ICollector fc Returns Type Description TopFieldDocs | Improve this Doc View Source Search(IndexSearcher, Query, Filter, Int32, Sort, Boolean, Boolean, ICollector) Utility method, to search and also collect all hits into the provided . Declaration public static TopFieldDocs Search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, bool doDocScores, bool doMaxScore, ICollector fc) Parameters Type Name Description IndexSearcher searcher Query q Filter filter System.Int32 n Sort sort System.Boolean doDocScores System.Boolean doMaxScore ICollector fc Returns Type Description TopFieldDocs | Improve this Doc View Source Search(IndexSearcher, Query, Int32, ICollector) Utility method, to search and also collect all hits into the provided . Declaration public static TopDocs Search(IndexSearcher searcher, Query q, int n, ICollector fc) Parameters Type Name Description IndexSearcher searcher Query q System.Int32 n ICollector fc Returns Type Description TopDocs | Improve this Doc View Source SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, ICollector) Utility method, to search and also collect all hits into the provided . Declaration public static TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, Filter filter, int n, ICollector fc) Parameters Type Name Description IndexSearcher searcher ScoreDoc after Query q Filter filter System.Int32 n ICollector fc Returns Type Description TopDocs | Improve this Doc View Source SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, Sort, ICollector) Utility method, to search and also collect all hits into the provided . Declaration public static TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, Filter filter, int n, Sort sort, ICollector fc) Parameters Type Name Description IndexSearcher searcher ScoreDoc after Query q Filter filter System.Int32 n Sort sort ICollector fc Returns Type Description TopDocs | Improve this Doc View Source SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, Sort, Boolean, Boolean, ICollector) Utility method, to search and also collect all hits into the provided . Declaration public static TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, Filter filter, int n, Sort sort, bool doDocScores, bool doMaxScore, ICollector fc) Parameters Type Name Description IndexSearcher searcher ScoreDoc after Query q Filter filter System.Int32 n Sort sort System.Boolean doDocScores System.Boolean doMaxScore ICollector fc Returns Type Description TopDocs | Improve this Doc View Source SearchAfter(IndexSearcher, ScoreDoc, Query, Int32, ICollector) Utility method, to search and also collect all hits into the provided . Declaration public virtual TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, int n, ICollector fc) Parameters Type Name Description IndexSearcher searcher ScoreDoc after Query q System.Int32 n ICollector fc Returns Type Description TopDocs | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.MatchingDocs.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.MatchingDocs.html",
    "title": "Class FacetsCollector.MatchingDocs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetsCollector.MatchingDocs Holds the documents that were matched in the . If scores were required, then Scores is not null . Inheritance System.Object FacetsCollector.MatchingDocs Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class MatchingDocs : object Constructors | Improve this Doc View Source MatchingDocs(AtomicReaderContext, DocIdSet, Int32, Single[]) Sole constructor. Declaration public MatchingDocs(AtomicReaderContext context, DocIdSet bits, int totalHits, float[] scores) Parameters Type Name Description AtomicReaderContext context DocIdSet bits System.Int32 totalHits System.Single [] scores Properties | Improve this Doc View Source Bits Which documents were seen. Declaration public DocIdSet Bits { get; } Property Value Type Description DocIdSet | Improve this Doc View Source Context Context for this segment. Declaration public AtomicReaderContext Context { get; } Property Value Type Description AtomicReaderContext | Improve this Doc View Source Scores Non-sparse scores array. Declaration public float[] Scores { get; } Property Value Type Description System.Single [] | Improve this Doc View Source TotalHits Total number of hits Declaration public int TotalHits { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsConfig.DimConfig.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsConfig.DimConfig.html",
    "title": "Class FacetsConfig.DimConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetsConfig.DimConfig Holds the configuration for one dimension @lucene.experimental Inheritance System.Object FacetsConfig.DimConfig Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class DimConfig : object Constructors | Improve this Doc View Source DimConfig() Default constructor. Declaration public DimConfig() Properties | Improve this Doc View Source IndexFieldName Actual field where this dimension's facet labels should be indexed Declaration public string IndexFieldName { get; set; } Property Value Type Description System.String | Improve this Doc View Source IsHierarchical True if this dimension is hierarchical. Declaration public bool IsHierarchical { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsMultiValued True if this dimension is multi-valued. Declaration public bool IsMultiValued { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source RequireDimCount True if the count/aggregate for the entire dimension is required, which is unusual (default is false). Declaration public bool RequireDimCount { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsConfig.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsConfig.html",
    "title": "Class FacetsConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetsConfig Records per-dimension configuration. By default a dimension is flat, single valued and does not require count for the dimension; use the setters in this class to change these settings for each dim. NOTE : this configuration is not saved into the index, but it's vital, and up to the application to ensure, that at search time the provided FacetsConfig matches what was used during indexing. @lucene.experimental Inheritance System.Object FacetsConfig Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class FacetsConfig : object Constructors | Improve this Doc View Source FacetsConfig() Default constructor. Declaration public FacetsConfig() Fields | Improve this Doc View Source DEFAULT_DIM_CONFIG Default per-dimension configuration. Declaration public static readonly FacetsConfig.DimConfig DEFAULT_DIM_CONFIG Field Value Type Description FacetsConfig.DimConfig | Improve this Doc View Source DEFAULT_INDEX_FIELD_NAME Which Lucene field holds the drill-downs and ords (as doc values). Declaration public const string DEFAULT_INDEX_FIELD_NAME = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultDimConfig Get the default configuration for new dimensions. Useful when the dimension is not known beforehand and may need different global default settings, like multivalue = true . Declaration protected virtual FacetsConfig.DimConfig DefaultDimConfig { get; } Property Value Type Description FacetsConfig.DimConfig The default configuration to be used for dimensions that are not yet set in the FacetsConfig | Improve this Doc View Source DimConfigs Returns map of field name to FacetsConfig.DimConfig . Declaration public virtual IDictionary<string, FacetsConfig.DimConfig> DimConfigs { get; } Property Value Type Description IDictionary < System.String , FacetsConfig.DimConfig > Methods | Improve this Doc View Source Build(Document) Translates any added FacetField s into normal fields for indexing; only use this version if you did not add any taxonomy-based fields ( FacetField or AssociationFacetField ). NOTE: you should add the returned document to , not the input one! Declaration public virtual Document Build(Document doc) Parameters Type Name Description Document doc Returns Type Description Document | Improve this Doc View Source Build(ITaxonomyWriter, Document) Translates any added FacetField s into normal fields for indexing. NOTE: you should add the returned document to , not the input one! Declaration public virtual Document Build(ITaxonomyWriter taxoWriter, Document doc) Parameters Type Name Description ITaxonomyWriter taxoWriter Document doc Returns Type Description Document | Improve this Doc View Source DedupAndEncode(Util.Int32sRef) Encodes ordinals into a ; expert: subclass can override this to change encoding. Declaration protected virtual Util.BytesRef DedupAndEncode(Util.Int32sRef ordinals) Parameters Type Name Description Util.Int32sRef ordinals Returns Type Description Util.BytesRef | Improve this Doc View Source GetDimConfig(String) Get the current configuration for a dimension. Declaration public virtual FacetsConfig.DimConfig GetDimConfig(string dimName) Parameters Type Name Description System.String dimName Returns Type Description FacetsConfig.DimConfig | Improve this Doc View Source PathToString(String, String[]) Turns a dim + path into an encoded string. Declaration public static string PathToString(string dim, string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.String | Improve this Doc View Source PathToString(String[]) Turns a dim + path into an encoded string. Declaration public static string PathToString(string[] path) Parameters Type Name Description System.String [] path Returns Type Description System.String | Improve this Doc View Source PathToString(String[], Int32) Turns the first length elements of path into an encoded string. Declaration public static string PathToString(string[] path, int length) Parameters Type Name Description System.String [] path System.Int32 length Returns Type Description System.String | Improve this Doc View Source ProcessSSDVFacetFields(IDictionary<String, IList<SortedSetDocValuesFacetField>>, Document) Declaration public void ProcessSSDVFacetFields(IDictionary<string, IList<SortedSetDocValuesFacetField>> byField, Document doc) Parameters Type Name Description IDictionary < System.String , IList < SortedSetDocValuesFacetField >> byField Document doc | Improve this Doc View Source SetHierarchical(String, Boolean) Pass true if this dimension is hierarchical (has depth > 1 paths). Declaration public virtual void SetHierarchical(string dimName, bool v) Parameters Type Name Description System.String dimName System.Boolean v | Improve this Doc View Source SetIndexFieldName(String, String) Specify which index field name should hold the ordinals for this dimension; this is only used by the taxonomy based facet methods. Declaration public virtual void SetIndexFieldName(string dimName, string indexFieldName) Parameters Type Name Description System.String dimName System.String indexFieldName | Improve this Doc View Source SetMultiValued(String, Boolean) Pass true if this dimension may have more than one value per document. Declaration public virtual void SetMultiValued(string dimName, bool v) Parameters Type Name Description System.String dimName System.Boolean v | Improve this Doc View Source SetRequireDimCount(String, Boolean) Pass true if at search time you require accurate counts of the dimension, i.e. how many hits have this dimension. Declaration public virtual void SetRequireDimCount(string dimName, bool v) Parameters Type Name Description System.String dimName System.Boolean v | Improve this Doc View Source StringToPath(String) Turns an encoded string (from a previous call to PathToString(String[]) ) back into the original string[] . Declaration public static string[] StringToPath(string s) Parameters Type Name Description System.String s Returns Type Description System.String []"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.html",
    "title": "Namespace Lucene.Net.Facet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Facet <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Provides faceted indexing and search capabilities. Checkout this and this blog posts for some overview on the facets module as well as source code examples here . Classes DrillDownQuery A for drill-down over facet categories. You should call Add(String, String[]) for every group of categories you want to drill-down over. NOTE: if you choose to create your own by calling Term(String, String, String[]) , it is recommended to wrap it with and set the boost to 0.0f , so that it does not affect the scores of the documents. @lucene.experimental DrillSideways Computes drill down and sideways counts for the provided DrillDownQuery . Drill sideways counts include alternative values/aggregates for the drill-down dimensions so that a dimension does not disappear after the user drills down into it. Use one of the static search methods to do the search, and then get the hits and facet results from the returned DrillSidewaysResult . NOTE : this allocates one FacetsCollector for each drill-down, plus one. If your index has high number of facet labels then this will multiply your memory usage. @lucene.experimental DrillSidewaysResult Result of a drill sideways search, including the Facets and . FacetField Add an instance of this to your for every facet label. NOTE: you must call Build(Document) before you add the document to . FacetResult Counts or aggregates for a single dimension. Facets Common base class for all facets implementations. @lucene.experimental FacetsCollector Collects hits for subsequent faceting. Once you've run a search and collect hits into this, instantiate one of the subclasses to do the facet counting. Use the Search utility methods (such as Search(IndexSearcher, Query, Int32, ICollector) ) to perform an \"ordinary\" search but also collect into a Facets . FacetsCollector.Docs Used during collection to record matching docs and then return a DocIdSet that contains them. FacetsCollector.MatchingDocs Holds the documents that were matched in the . If scores were required, then Scores is not null . FacetsConfig Records per-dimension configuration. By default a dimension is flat, single valued and does not require count for the dimension; use the setters in this class to change these settings for each dim. NOTE : this configuration is not saved into the index, but it's vital, and up to the application to ensure, that at search time the provided FacetsConfig matches what was used during indexing. @lucene.experimental FacetsConfig.DimConfig Holds the configuration for one dimension @lucene.experimental LabelAndValue Single label and its value, usually contained in a FacetResult . MultiFacets Maps specified dims to provided Facets impls; else, uses the default Facets impl. RandomSamplingFacetsCollector Collects hits for subsequent faceting, using sampling if needed. Once you've run a search and collect hits into this, instantiate one of the Facets subclasses to do the facet counting. Note that this collector does not collect the scores of matching docs (i.e. Scores ) is null . If you require the original set of hits, you can call GetOriginalMatchingDocs() . Also, since the counts of the top-facets is based on the sampled set, you can amortize the counts by calling AmortizeFacetCounts(FacetResult, FacetsConfig, Search.IndexSearcher) . TopOrdAndInt32Queue Keeps highest results, first by largest value, then tie break by smallest ord. NOTE: This was TopOrdAndIntQueue in Lucene TopOrdAndInt32Queue.OrdAndValue Holds a single entry. TopOrdAndSingleQueue Keeps highest results, first by largest value, then tie break by smallest ord. NOTE: This was TopOrdAndFloatQueue in Lucene TopOrdAndSingleQueue.OrdAndValue Holds a single entry."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.LabelAndValue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.LabelAndValue.html",
    "title": "Class LabelAndValue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LabelAndValue Single label and its value, usually contained in a FacetResult . Inheritance System.Object LabelAndValue Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class LabelAndValue : object Constructors | Improve this Doc View Source LabelAndValue(String, Int32) Constructor for value . Makes the ToString() method print the value as an with no decimal. Declaration public LabelAndValue(string label, int value) Parameters Type Name Description System.String label System.Int32 value | Improve this Doc View Source LabelAndValue(String, Single) Constructor for value . Makes the ToString() method print the value as a with at least 1 number after the decimal. Declaration public LabelAndValue(string label, float value) Parameters Type Name Description System.String label System.Single value Properties | Improve this Doc View Source Label Facet's label. Declaration public string Label { get; } Property Value Type Description System.String | Improve this Doc View Source TypeOfValue The original data type of Value that was passed through the constructor. Declaration public Type TypeOfValue { get; } Property Value Type Description Type | Improve this Doc View Source Value Value associated with this label. Declaration public float Value { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.MultiFacets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.MultiFacets.html",
    "title": "Class MultiFacets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiFacets Maps specified dims to provided Facets impls; else, uses the default Facets impl. Inheritance System.Object Facets MultiFacets Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class MultiFacets : Facets Constructors | Improve this Doc View Source MultiFacets(IDictionary<String, Facets>, Facets) Create this, with the specified default Facets for fields not included in dimToFacets . Declaration public MultiFacets(IDictionary<string, Facets> dimToFacets, Facets defaultFacets = null) Parameters Type Name Description IDictionary < System.String , Facets > dimToFacets Facets defaultFacets Methods | Improve this Doc View Source GetAllDims(Int32) Declaration public override IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description IList < FacetResult > Overrides Facets.GetAllDims(Int32) | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[])"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.RandomSamplingFacetsCollector.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.RandomSamplingFacetsCollector.html",
    "title": "Class RandomSamplingFacetsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RandomSamplingFacetsCollector Collects hits for subsequent faceting, using sampling if needed. Once you've run a search and collect hits into this, instantiate one of the Facets subclasses to do the facet counting. Note that this collector does not collect the scores of matching docs (i.e. Scores ) is null . If you require the original set of hits, you can call GetOriginalMatchingDocs() . Also, since the counts of the top-facets is based on the sampled set, you can amortize the counts by calling AmortizeFacetCounts(FacetResult, FacetsConfig, Search.IndexSearcher) . Inheritance System.Object FacetsCollector RandomSamplingFacetsCollector Inherited Members FacetsCollector.CreateDocs(Int32) FacetsCollector.KeepScores FacetsCollector.AcceptsDocsOutOfOrder FacetsCollector.Collect(Int32) FacetsCollector.SetScorer(Scorer) FacetsCollector.SetNextReader(AtomicReaderContext) FacetsCollector.Search(IndexSearcher, Query, Int32, ICollector) FacetsCollector.Search(IndexSearcher, Query, Filter, Int32, ICollector) FacetsCollector.Search(IndexSearcher, Query, Filter, Int32, Sort, ICollector) FacetsCollector.Search(IndexSearcher, Query, Filter, Int32, Sort, Boolean, Boolean, ICollector) FacetsCollector.SearchAfter(IndexSearcher, ScoreDoc, Query, Int32, ICollector) FacetsCollector.SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, ICollector) FacetsCollector.SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, Sort, ICollector) FacetsCollector.SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, Sort, Boolean, Boolean, ICollector) Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class RandomSamplingFacetsCollector : FacetsCollector Constructors | Improve this Doc View Source RandomSamplingFacetsCollector(Int32) Constructor with the given sample size and default seed. Declaration public RandomSamplingFacetsCollector(int sampleSize) Parameters Type Name Description System.Int32 sampleSize See Also RandomSamplingFacetsCollector(Int32, Int64) | Improve this Doc View Source RandomSamplingFacetsCollector(Int32, Int64) Constructor with the given sample size and seed. Declaration public RandomSamplingFacetsCollector(int sampleSize, long seed) Parameters Type Name Description System.Int32 sampleSize The preferred sample size. If the number of hits is greater than the size, sampling will be done using a sample ratio of sampling size / totalN. For example: 1000 hits, sample size = 10 results in samplingRatio of 0.01. If the number of hits is lower, no sampling is done at all System.Int64 seed The random seed. If 0 then a seed will be chosen for you. Properties | Improve this Doc View Source SamplingRate Returns the sampling rate that was used. Declaration public virtual double SamplingRate { get; } Property Value Type Description System.Double Methods | Improve this Doc View Source AmortizeFacetCounts(FacetResult, FacetsConfig, Search.IndexSearcher) Note: if you use a counting Facets implementation, you can amortize the sampled counts by calling this method. Uses the FacetsConfig and the to determine the upper bound for each facet value. Declaration public virtual FacetResult AmortizeFacetCounts(FacetResult res, FacetsConfig config, Search.IndexSearcher searcher) Parameters Type Name Description FacetResult res FacetsConfig config Search.IndexSearcher searcher Returns Type Description FacetResult | Improve this Doc View Source GetMatchingDocs() Returns the sampled list of the matching documents. Note that a FacetsCollector.MatchingDocs instance is returned per segment, even if no hits from that segment are included in the sampled set. Note: One or more of the FacetsCollector.MatchingDocs might be empty (not containing any hits) as result of sampling. Note: TotalHits is copied from the original FacetsCollector.MatchingDocs , scores is set to null Declaration public override IList<FacetsCollector.MatchingDocs> GetMatchingDocs() Returns Type Description IList < FacetsCollector.MatchingDocs > Overrides FacetsCollector.GetMatchingDocs() | Improve this Doc View Source GetOriginalMatchingDocs() Returns the original matching documents. Declaration public virtual IList<FacetsCollector.MatchingDocs> GetOriginalMatchingDocs() Returns Type Description IList < FacetsCollector.MatchingDocs >"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.DoubleRange.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.DoubleRange.html",
    "title": "Class DoubleRange | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleRange Represents a range over double values. @lucene.experimental Inheritance System.Object Range DoubleRange Inherited Members Range.Label Range.GetFilter(ValueSource) Range.FailNoMatch() Namespace : Lucene.Net.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public sealed class DoubleRange : Range Constructors | Improve this Doc View Source DoubleRange(String, Double, Boolean, Double, Boolean) Create a DoubleRange. Declaration public DoubleRange(string label, double minIn, bool minInclusive, double maxIn, bool maxInclusive) Parameters Type Name Description System.String label System.Double minIn System.Boolean minInclusive System.Double maxIn System.Boolean maxInclusive Properties | Improve this Doc View Source Max Maximum. Declaration public double Max { get; } Property Value Type Description System.Double | Improve this Doc View Source MaxInclusive True if the maximum value is inclusive. Declaration public bool MaxInclusive { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Min Minimum. Declaration public double Min { get; } Property Value Type Description System.Double | Improve this Doc View Source MinInclusive True if the minimum value is inclusive. Declaration public bool MinInclusive { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Accept(Double) True if this range accepts the provided value. Declaration public bool Accept(double value) Parameters Type Name Description System.Double value Returns Type Description System.Boolean | Improve this Doc View Source GetFilter(Search.Filter, ValueSource) Declaration public override Search.Filter GetFilter(Search.Filter fastMatchFilter, ValueSource valueSource) Parameters Type Name Description Search.Filter fastMatchFilter ValueSource valueSource Returns Type Description Search.Filter Overrides Range.GetFilter(Search.Filter, ValueSource) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.DoubleRangeFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.DoubleRangeFacetCounts.html",
    "title": "Class DoubleRangeFacetCounts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleRangeFacetCounts Facets implementation that computes counts for dynamic double ranges from a provided ValueSource , using DoubleVal(Int32) or DoubleVal(Int32, Double[]) . Use this for dimensions that change in real-time (e.g. a relative time based dimension like \"Past day\", \"Past 2 days\", etc.) or that change for each request (e.g. distance from the user's location, \"< 1 km\", \"< 2 km\", etc.). If you had indexed your field using then pass SingleFieldSource as the ValueSource ; if you used then pass DoubleFieldSource (this is the default used when you pass just a the field name). @lucene.experimental Inheritance System.Object Facets RangeFacetCounts DoubleRangeFacetCounts Inherited Members RangeFacetCounts.m_ranges RangeFacetCounts.m_counts RangeFacetCounts.m_fastMatchFilter RangeFacetCounts.m_field RangeFacetCounts.m_totCount RangeFacetCounts.GetTopChildren(Int32, String, String[]) RangeFacetCounts.GetSpecificValue(String, String[]) RangeFacetCounts.GetAllDims(Int32) Namespace : Lucene.Net.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public class DoubleRangeFacetCounts : RangeFacetCounts Constructors | Improve this Doc View Source DoubleRangeFacetCounts(String, FacetsCollector, DoubleRange[]) Create RangeFacetCounts , using DoubleFieldSource from the specified field. Declaration public DoubleRangeFacetCounts(string field, FacetsCollector hits, params DoubleRange[] ranges) Parameters Type Name Description System.String field FacetsCollector hits DoubleRange [] ranges | Improve this Doc View Source DoubleRangeFacetCounts(String, ValueSource, FacetsCollector, DoubleRange[]) Create RangeFacetCounts , using the provided ValueSource . Declaration public DoubleRangeFacetCounts(string field, ValueSource valueSource, FacetsCollector hits, params DoubleRange[] ranges) Parameters Type Name Description System.String field ValueSource valueSource FacetsCollector hits DoubleRange [] ranges | Improve this Doc View Source DoubleRangeFacetCounts(String, ValueSource, FacetsCollector, Search.Filter, DoubleRange[]) Create RangeFacetCounts , using the provided ValueSource , and using the provided Filter as a fastmatch: only documents passing the filter are checked for the matching ranges. The filter must be random access (implement ). Declaration public DoubleRangeFacetCounts(string field, ValueSource valueSource, FacetsCollector hits, Search.Filter fastMatchFilter, params DoubleRange[] ranges) Parameters Type Name Description System.String field ValueSource valueSource FacetsCollector hits Search.Filter fastMatchFilter DoubleRange [] ranges"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.html",
    "title": "Namespace Lucene.Net.Facet.Range | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.Range <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Provides range faceting capabilities. Classes DoubleRange Represents a range over double values. @lucene.experimental DoubleRangeFacetCounts Facets implementation that computes counts for dynamic double ranges from a provided ValueSource , using DoubleVal(Int32) or DoubleVal(Int32, Double[]) . Use this for dimensions that change in real-time (e.g. a relative time based dimension like \"Past day\", \"Past 2 days\", etc.) or that change for each request (e.g. distance from the user's location, \"< 1 km\", \"< 2 km\", etc.). If you had indexed your field using then pass SingleFieldSource as the ValueSource ; if you used then pass DoubleFieldSource (this is the default used when you pass just a the field name). @lucene.experimental Int64Range Represents a range over values. NOTE: This was LongRange in Lucene @lucene.experimental Int64RangeFacetCounts Facets implementation that computes counts for dynamic long ranges from a provided ValueSource , using Int64Val(Int32) or Int64Val(Int32, Int64[]) . Use this for dimensions that change in real-time (e.g. a relative time based dimension like \"Past day\", \"Past 2 days\", etc.) or that change for each request (e.g. distance from the user's location, \"< 1 km\", \"< 2 km\", etc.). NOTE: This was LongRangeFacetCounts in Lucene @lucene.experimental Range Base class for a single labeled range. @lucene.experimental RangeFacetCounts Base class for range faceting. @lucene.experimental"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Int64Range.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Int64Range.html",
    "title": "Class Int64Range | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64Range Represents a range over values. NOTE: This was LongRange in Lucene @lucene.experimental Inheritance System.Object Range Int64Range Inherited Members Range.Label Range.GetFilter(ValueSource) Range.FailNoMatch() Namespace : Lucene.Net.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public sealed class Int64Range : Range Constructors | Improve this Doc View Source Int64Range(String, Int64, Boolean, Int64, Boolean) Create a Int64Range . Declaration public Int64Range(string label, long minIn, bool minInclusive, long maxIn, bool maxInclusive) Parameters Type Name Description System.String label System.Int64 minIn System.Boolean minInclusive System.Int64 maxIn System.Boolean maxInclusive Properties | Improve this Doc View Source Max Maximum. Declaration public long Max { get; } Property Value Type Description System.Int64 | Improve this Doc View Source MaxInclusive True if the maximum value is inclusive. Declaration public bool MaxInclusive { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Min Minimum. Declaration public long Min { get; } Property Value Type Description System.Int64 | Improve this Doc View Source MinInclusive True if the minimum value is inclusive. Declaration public bool MinInclusive { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Accept(Int64) True if this range accepts the provided value. Declaration public bool Accept(long value) Parameters Type Name Description System.Int64 value Returns Type Description System.Boolean | Improve this Doc View Source GetFilter(Search.Filter, ValueSource) Declaration public override Search.Filter GetFilter(Search.Filter fastMatchFilter, ValueSource valueSource) Parameters Type Name Description Search.Filter fastMatchFilter ValueSource valueSource Returns Type Description Search.Filter Overrides Range.GetFilter(Search.Filter, ValueSource) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Int64RangeFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Int64RangeFacetCounts.html",
    "title": "Class Int64RangeFacetCounts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64RangeFacetCounts Facets implementation that computes counts for dynamic long ranges from a provided ValueSource , using Int64Val(Int32) or Int64Val(Int32, Int64[]) . Use this for dimensions that change in real-time (e.g. a relative time based dimension like \"Past day\", \"Past 2 days\", etc.) or that change for each request (e.g. distance from the user's location, \"< 1 km\", \"< 2 km\", etc.). NOTE: This was LongRangeFacetCounts in Lucene @lucene.experimental Inheritance System.Object Facets RangeFacetCounts Int64RangeFacetCounts Inherited Members RangeFacetCounts.m_ranges RangeFacetCounts.m_counts RangeFacetCounts.m_fastMatchFilter RangeFacetCounts.m_field RangeFacetCounts.m_totCount RangeFacetCounts.GetTopChildren(Int32, String, String[]) RangeFacetCounts.GetSpecificValue(String, String[]) RangeFacetCounts.GetAllDims(Int32) Namespace : Lucene.Net.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public class Int64RangeFacetCounts : RangeFacetCounts Constructors | Improve this Doc View Source Int64RangeFacetCounts(String, FacetsCollector, Int64Range[]) Create Int64RangeFacetCounts , using Int64FieldSource from the specified field. Declaration public Int64RangeFacetCounts(string field, FacetsCollector hits, params Int64Range[] ranges) Parameters Type Name Description System.String field FacetsCollector hits Int64Range [] ranges | Improve this Doc View Source Int64RangeFacetCounts(String, ValueSource, FacetsCollector, Int64Range[]) Create Int64RangeFacetCounts , using the provided ValueSource . Declaration public Int64RangeFacetCounts(string field, ValueSource valueSource, FacetsCollector hits, params Int64Range[] ranges) Parameters Type Name Description System.String field ValueSource valueSource FacetsCollector hits Int64Range [] ranges | Improve this Doc View Source Int64RangeFacetCounts(String, ValueSource, FacetsCollector, Search.Filter, Int64Range[]) Create Int64RangeFacetCounts , using the provided ValueSource , and using the provided Filter as a fastmatch: only documents passing the filter are checked for the matching ranges. The filter must be random access (implement ). Declaration public Int64RangeFacetCounts(string field, ValueSource valueSource, FacetsCollector hits, Search.Filter fastMatchFilter, params Int64Range[] ranges) Parameters Type Name Description System.String field ValueSource valueSource FacetsCollector hits Search.Filter fastMatchFilter Int64Range [] ranges"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Range.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Range.html",
    "title": "Class Range | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Range Base class for a single labeled range. @lucene.experimental Inheritance System.Object Range DoubleRange Int64Range Namespace : Lucene.Net.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public abstract class Range : object Constructors | Improve this Doc View Source Range(String) Sole constructor. Declaration protected Range(string label) Parameters Type Name Description System.String label Properties | Improve this Doc View Source Label Label that identifies this range. Declaration public string Label { get; } Property Value Type Description System.String Methods | Improve this Doc View Source FailNoMatch() Invoke this for a useless range. Declaration protected virtual void FailNoMatch() | Improve this Doc View Source GetFilter(ValueSource) Returns a new accepting only documents in this range. This filter is not general-purpose; you should either use it with DrillSideways by adding it to Add(String, Search.Filter) , or pass it to using its . If the ValueSource is static, e.g. an indexed numeric field, then it may be more efficient to use . Declaration public virtual Search.Filter GetFilter(ValueSource valueSource) Parameters Type Name Description ValueSource valueSource Returns Type Description Search.Filter | Improve this Doc View Source GetFilter(Search.Filter, ValueSource) Returns a new accepting only documents in this range. This filter is not general-purpose; you should either use it with DrillSideways by adding it to Add(String, Search.Filter) , or pass it to using its . If the ValueSource is static, e.g. an indexed numeric field, then it may be more efficient to use . The provided fastMatchFilter , if non-null, will first be consulted, and only if that is set for each document will the range then be checked. Declaration public abstract Search.Filter GetFilter(Search.Filter fastMatchFilter, ValueSource valueSource) Parameters Type Name Description Search.Filter fastMatchFilter ValueSource valueSource Returns Type Description Search.Filter"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.RangeFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.RangeFacetCounts.html",
    "title": "Class RangeFacetCounts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RangeFacetCounts Base class for range faceting. @lucene.experimental Inheritance System.Object Facets RangeFacetCounts DoubleRangeFacetCounts Int64RangeFacetCounts Namespace : Lucene.Net.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public abstract class RangeFacetCounts : Facets Constructors | Improve this Doc View Source RangeFacetCounts(String, Range[], Search.Filter) Create RangeFacetCounts Declaration protected RangeFacetCounts(string field, Range[] ranges, Search.Filter fastMatchFilter) Parameters Type Name Description System.String field Range [] ranges Search.Filter fastMatchFilter Fields | Improve this Doc View Source m_counts Counts, initialized in by subclass. Declaration protected readonly int[] m_counts Field Value Type Description System.Int32 [] | Improve this Doc View Source m_fastMatchFilter Optional: if specified, we first test this Filter to see whether the document should be checked for matching ranges. If this is null, all documents are checked. Declaration protected readonly Search.Filter m_fastMatchFilter Field Value Type Description Search.Filter | Improve this Doc View Source m_field Our field name. Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_ranges Ranges passed to constructor. Declaration protected readonly Range[] m_ranges Field Value Type Description Range [] | Improve this Doc View Source m_totCount Total number of hits. Declaration protected int m_totCount Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetAllDims(Int32) Declaration public override IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description IList < FacetResult > Overrides Facets.GetAllDims(Int32) | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[])"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.DefaultSortedSetDocValuesReaderState.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.DefaultSortedSetDocValuesReaderState.html",
    "title": "Class DefaultSortedSetDocValuesReaderState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultSortedSetDocValuesReaderState Default implementation of SortedSetDocValuesFacetCounts Inheritance System.Object SortedSetDocValuesReaderState DefaultSortedSetDocValuesReaderState Namespace : Lucene.Net.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public class DefaultSortedSetDocValuesReaderState : SortedSetDocValuesReaderState Constructors | Improve this Doc View Source DefaultSortedSetDocValuesReaderState(IndexReader, String) Creates this, pulling doc values from the specified field. Declaration public DefaultSortedSetDocValuesReaderState(IndexReader reader, string field = null) Parameters Type Name Description IndexReader reader System.String field Properties | Improve this Doc View Source Count Number of unique labels. Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides SortedSetDocValuesReaderState.Count | Improve this Doc View Source Field Indexed field we are reading. Declaration public override string Field { get; } Property Value Type Description System.String Overrides SortedSetDocValuesReaderState.Field | Improve this Doc View Source OrigReader Declaration public override IndexReader OrigReader { get; } Property Value Type Description IndexReader Overrides SortedSetDocValuesReaderState.OrigReader | Improve this Doc View Source PrefixToOrdRange Returns mapping from prefix to SortedSetDocValuesReaderState.OrdRange . Declaration public override IDictionary<string, SortedSetDocValuesReaderState.OrdRange> PrefixToOrdRange { get; } Property Value Type Description IDictionary < System.String , SortedSetDocValuesReaderState.OrdRange > Overrides SortedSetDocValuesReaderState.PrefixToOrdRange Methods | Improve this Doc View Source GetDocValues() Return top-level doc values. Declaration public override SortedSetDocValues GetDocValues() Returns Type Description SortedSetDocValues Overrides SortedSetDocValuesReaderState.GetDocValues() | Improve this Doc View Source GetOrdRange(String) Returns the SortedSetDocValuesReaderState.OrdRange for this dimension. Declaration public override SortedSetDocValuesReaderState.OrdRange GetOrdRange(string dim) Parameters Type Name Description System.String dim Returns Type Description SortedSetDocValuesReaderState.OrdRange Overrides SortedSetDocValuesReaderState.GetOrdRange(String)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.html",
    "title": "Namespace Lucene.Net.Facet.SortedSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.SortedSet <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Provides faceting capabilities over facets that were indexed with <xref:Lucene.Net.Facet.Sortedset.SortedSetDocValuesFacetField>. Classes DefaultSortedSetDocValuesReaderState Default implementation of SortedSetDocValuesFacetCounts SortedSetDocValuesFacetCounts Compute facets counts from previously indexed SortedSetDocValuesFacetField , without require a separate taxonomy index. Faceting is a bit slower (~25%), and there is added cost on every open to create a new SortedSetDocValuesReaderState . Furthermore, this does not support hierarchical facets; only flat (dimension + label) facets, but it uses quite a bit less RAM to do so. NOTE : this class should be instantiated and then used from a single thread, because it holds a thread-private instance of . NOTE: : tie-break is by unicode sort order @lucene.experimental SortedSetDocValuesFacetField Add an instance of this to your for every facet label to be indexed via . SortedSetDocValuesReaderState Wraps a and resolves ords using existing APIs without a separate taxonomy index. This only supports flat facets (dimension + label), and it makes faceting a bit slower, adds some cost at reopen time, but avoids managing the separate taxonomy index. It also requires less RAM than the taxonomy index, as it manages the flat (2-level) hierarchy more efficiently. In addition, the tie-break during faceting is now meaningful (in label sorted order). NOTE : creating an instance of this class is somewhat costly, as it computes per-segment ordinal maps, so you should create it once and re-use that one instance for a given . SortedSetDocValuesReaderState.OrdRange Holds start/end range of ords, which maps to one dimension (someday we may generalize it to map to hierarchies within one dimension)."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetCounts.html",
    "title": "Class SortedSetDocValuesFacetCounts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedSetDocValuesFacetCounts Compute facets counts from previously indexed SortedSetDocValuesFacetField , without require a separate taxonomy index. Faceting is a bit slower (~25%), and there is added cost on every open to create a new SortedSetDocValuesReaderState . Furthermore, this does not support hierarchical facets; only flat (dimension + label) facets, but it uses quite a bit less RAM to do so. NOTE : this class should be instantiated and then used from a single thread, because it holds a thread-private instance of . NOTE: : tie-break is by unicode sort order @lucene.experimental Inheritance System.Object Facets SortedSetDocValuesFacetCounts Namespace : Lucene.Net.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public class SortedSetDocValuesFacetCounts : Facets Constructors | Improve this Doc View Source SortedSetDocValuesFacetCounts(SortedSetDocValuesReaderState, FacetsCollector) Sparse faceting: returns any dimension that had any hits, topCount labels per dimension. Declaration public SortedSetDocValuesFacetCounts(SortedSetDocValuesReaderState state, FacetsCollector hits) Parameters Type Name Description SortedSetDocValuesReaderState state FacetsCollector hits Methods | Improve this Doc View Source GetAllDims(Int32) Declaration public override IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description IList < FacetResult > Overrides Facets.GetAllDims(Int32) | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[])"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetField.html",
    "title": "Class SortedSetDocValuesFacetField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedSetDocValuesFacetField Add an instance of this to your for every facet label to be indexed via . Inheritance System.Object SortedSetDocValuesFacetField Namespace : Lucene.Net.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public class SortedSetDocValuesFacetField : Field Constructors | Improve this Doc View Source SortedSetDocValuesFacetField(String, String) Sole constructor. Declaration public SortedSetDocValuesFacetField(string dim, string label) Parameters Type Name Description System.String dim System.String label Fields | Improve this Doc View Source TYPE Indexed . Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Properties | Improve this Doc View Source Dim Dimension. Declaration public string Dim { get; } Property Value Type Description System.String | Improve this Doc View Source Label Label. Declaration public string Label { get; } Property Value Type Description System.String Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.html",
    "title": "Class SortedSetDocValuesReaderState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedSetDocValuesReaderState Wraps a and resolves ords using existing APIs without a separate taxonomy index. This only supports flat facets (dimension + label), and it makes faceting a bit slower, adds some cost at reopen time, but avoids managing the separate taxonomy index. It also requires less RAM than the taxonomy index, as it manages the flat (2-level) hierarchy more efficiently. In addition, the tie-break during faceting is now meaningful (in label sorted order). NOTE : creating an instance of this class is somewhat costly, as it computes per-segment ordinal maps, so you should create it once and re-use that one instance for a given . Inheritance System.Object SortedSetDocValuesReaderState DefaultSortedSetDocValuesReaderState Namespace : Lucene.Net.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public abstract class SortedSetDocValuesReaderState : object Constructors | Improve this Doc View Source SortedSetDocValuesReaderState() Sole constructor. Declaration protected SortedSetDocValuesReaderState() Properties | Improve this Doc View Source Count Number of unique labels. Declaration public abstract int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Field Indexed field we are reading. Declaration public abstract string Field { get; } Property Value Type Description System.String | Improve this Doc View Source OrigReader Returns top-level index reader. Declaration public abstract Index.IndexReader OrigReader { get; } Property Value Type Description Index.IndexReader | Improve this Doc View Source PrefixToOrdRange Returns mapping from prefix to SortedSetDocValuesReaderState.OrdRange . Declaration public abstract IDictionary<string, SortedSetDocValuesReaderState.OrdRange> PrefixToOrdRange { get; } Property Value Type Description IDictionary < System.String , SortedSetDocValuesReaderState.OrdRange > Methods | Improve this Doc View Source GetDocValues() Return top-level doc values. Declaration public abstract Index.SortedSetDocValues GetDocValues() Returns Type Description Index.SortedSetDocValues | Improve this Doc View Source GetOrdRange(String) Returns the SortedSetDocValuesReaderState.OrdRange for this dimension. Declaration public abstract SortedSetDocValuesReaderState.OrdRange GetOrdRange(string dim) Parameters Type Name Description System.String dim Returns Type Description SortedSetDocValuesReaderState.OrdRange"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.OrdRange.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.OrdRange.html",
    "title": "Class SortedSetDocValuesReaderState.OrdRange | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedSetDocValuesReaderState.OrdRange Holds start/end range of ords, which maps to one dimension (someday we may generalize it to map to hierarchies within one dimension). Inheritance System.Object SortedSetDocValuesReaderState.OrdRange Namespace : Lucene.Net.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public sealed class OrdRange : object Constructors | Improve this Doc View Source OrdRange(Int32, Int32) Start and end are inclusive. Declaration public OrdRange(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Properties | Improve this Doc View Source End End of range, inclusive: Declaration public int End { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Start Start of range, inclusive: Declaration public int Start { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.AssociationFacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.AssociationFacetField.html",
    "title": "Class AssociationFacetField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssociationFacetField Add an instance of this to your to add a facet label associated with an arbitrary byte[] . This will require a custom Facets implementation at search time; see Int32AssociationFacetField and SingleAssociationFacetField to use existing Facets implementations. @lucene.experimental Inheritance System.Object AssociationFacetField Int32AssociationFacetField SingleAssociationFacetField Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class AssociationFacetField : Field Constructors | Improve this Doc View Source AssociationFacetField(Util.BytesRef, String, String[]) Creates this from dim and path and an association Declaration public AssociationFacetField(Util.BytesRef assoc, string dim, params string[] path) Parameters Type Name Description Util.BytesRef assoc System.String dim System.String [] path Fields | Improve this Doc View Source TYPE Indexed . Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Properties | Improve this Doc View Source Assoc Associated value. Declaration public Util.BytesRef Assoc { get; } Property Value Type Description Util.BytesRef | Improve this Doc View Source Dim Dimension for this field. Declaration public string Dim { get; } Property Value Type Description System.String | Improve this Doc View Source Path Facet path for this field. Declaration public string[] Path { get; } Property Value Type Description System.String [] Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.CachedOrds.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.CachedOrds.html",
    "title": "Class CachedOrdinalsReader.CachedOrds | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CachedOrdinalsReader.CachedOrds Holds the cached ordinals in two parallel int[] arrays. Inheritance System.Object CachedOrdinalsReader.CachedOrds Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public sealed class CachedOrds : Util.IAccountable Constructors | Improve this Doc View Source CachedOrds(OrdinalsReader.OrdinalsSegmentReader, Int32) Creates a new CachedOrdinalsReader.CachedOrds from the . Assumes that the is not null . Declaration public CachedOrds(OrdinalsReader.OrdinalsSegmentReader source, int maxDoc) Parameters Type Name Description OrdinalsReader.OrdinalsSegmentReader source System.Int32 maxDoc Properties | Improve this Doc View Source Offsets Index into Ordinals for each document. Declaration public int[] Offsets { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Ordinals Holds ords for all docs. Declaration public int[] Ordinals { get; } Property Value Type Description System.Int32 [] Methods | Improve this Doc View Source RamBytesUsed() Declaration public long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.html",
    "title": "Class CachedOrdinalsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CachedOrdinalsReader A per-segment cache of documents' facet ordinals. Every CachedOrdinalsReader.CachedOrds holds the ordinals in a raw int[] , and therefore consumes as much RAM as the total number of ordinals found in the segment, but saves the CPU cost of decoding ordinals during facet counting. NOTE: every CachedOrdinalsReader.CachedOrds is limited to 2.1B total ordinals. If that is a limitation for you then consider limiting the segment size to fewer documents, or use an alternative cache which pages through the category ordinals. NOTE: when using this cache, it is advised to use a that does not cache the data in memory, at least for the category lists fields, or otherwise you'll be doing double-caching. NOTE: create one instance of this and re-use it for all facet implementations (the cache is per-instance, not static). Inheritance System.Object OrdinalsReader CachedOrdinalsReader Implements Util.IAccountable Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class CachedOrdinalsReader : OrdinalsReader, Util.IAccountable Constructors | Improve this Doc View Source CachedOrdinalsReader(OrdinalsReader) Sole constructor. Declaration public CachedOrdinalsReader(OrdinalsReader source) Parameters Type Name Description OrdinalsReader source Properties | Improve this Doc View Source IndexFieldName Declaration public override string IndexFieldName { get; } Property Value Type Description System.String Overrides OrdinalsReader.IndexFieldName Methods | Improve this Doc View Source GetReader(Index.AtomicReaderContext) Declaration public override OrdinalsReader.OrdinalsSegmentReader GetReader(Index.AtomicReaderContext context) Parameters Type Name Description Index.AtomicReaderContext context Returns Type Description OrdinalsReader.OrdinalsSegmentReader Overrides OrdinalsReader.GetReader(Index.AtomicReaderContext) | Improve this Doc View Source RamBytesUsed() Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64 Implements IAccountable"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CategoryPath.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CategoryPath.html",
    "title": "Class CategoryPath | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CategoryPath Holds a sequence of string components, specifying the hierarchical name of a category. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CategoryPath Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class CategoryPath : IComparable<CategoryPath> Constructors | Improve this Doc View Source CategoryPath(String, Char) Construct from a given path, separating path components with delimiter . Declaration public CategoryPath(string pathString, char delimiter) Parameters Type Name Description System.String pathString System.Char delimiter | Improve this Doc View Source CategoryPath(String[]) Construct from the given path components . Declaration public CategoryPath(params string[] components) Parameters Type Name Description System.String [] components Fields | Improve this Doc View Source EMPTY An empty CategoryPath Declaration public static readonly CategoryPath EMPTY Field Value Type Description CategoryPath Properties | Improve this Doc View Source Components The components of this CategoryPath . Note that this array may be shared with other CategoryPath instances, e.g. as a result of Subpath(Int32) , therefore you should traverse the array up to Length for this path's components. Declaration public string[] Components { get; } Property Value Type Description System.String [] | Improve this Doc View Source Length The number of components of this CategoryPath . Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CompareTo(CategoryPath) Compares this path with another CategoryPath for lexicographic order. Declaration public virtual int CompareTo(CategoryPath other) Parameters Type Name Description CategoryPath other Returns Type Description System.Int32 | Improve this Doc View Source CopyFullPath(Char[], Int32, Char) Copies the path components to the given char[] , starting at index start . delimiter is copied between the path components. Returns the number of chars copied. NOTE: this method relies on the array being large enough to hold the components and separators - the amount of needed space can be calculated with FullPathLength() . Declaration public virtual int CopyFullPath(char[] buf, int start, char delimiter) Parameters Type Name Description System.Char [] buf System.Int32 start System.Char delimiter Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source FullPathLength() Returns the number of characters needed to represent the path, including delimiter characters, for using with CopyFullPath(Char[], Int32, Char) . Declaration public virtual int FullPathLength() Returns Type Description System.Int32 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Int64HashCode() Calculate a 64-bit hash function for this path. NOTE: This was longHashCode() in Lucene Declaration public virtual long Int64HashCode() Returns Type Description System.Int64 | Improve this Doc View Source Subpath(Int32) Returns a sub-path of this path up to length components. Declaration public virtual CategoryPath Subpath(int length) Parameters Type Name Description System.Int32 length Returns Type Description CategoryPath | Improve this Doc View Source ToString() Returns a string representation of the path, separating components with '/'. Declaration public override string ToString() Returns Type Description System.String See Also ToString(Char) | Improve this Doc View Source ToString(Char) Returns a string representation of the path, separating components with the given delimiter. Declaration public virtual string ToString(char delimiter) Parameters Type Name Description System.Char delimiter Returns Type Description System.String"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyReader.html",
    "title": "Class DirectoryTaxonomyReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectoryTaxonomyReader A TaxonomyReader which retrieves stored taxonomy information from a . Reading from the on-disk index on every method call is too slow, so this implementation employs caching: Some methods cache recent requests and their results, while other methods prefetch all the data into memory and then provide answers directly from in-memory tables. See the documentation of individual methods for comments on their performance. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TaxonomyReader DirectoryTaxonomyReader Inherited Members TaxonomyReader.ROOT_ORDINAL TaxonomyReader.INVALID_ORDINAL TaxonomyReader.OpenIfChanged<T>(T) TaxonomyReader.EnsureOpen() TaxonomyReader.Dispose() TaxonomyReader.Dispose(Boolean) TaxonomyReader.DecRef() TaxonomyReader.GetChildren(Int32) TaxonomyReader.GetOrdinal(String, String[]) TaxonomyReader.RefCount TaxonomyReader.IncRef() TaxonomyReader.TryIncRef() Namespace : Lucene.Net.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public class DirectoryTaxonomyReader : TaxonomyReader Constructors | Improve this Doc View Source DirectoryTaxonomyReader(DirectoryTaxonomyWriter) Opens a DirectoryTaxonomyReader over the given DirectoryTaxonomyWriter (for NRT). Declaration public DirectoryTaxonomyReader(DirectoryTaxonomyWriter taxoWriter) Parameters Type Name Description DirectoryTaxonomyWriter taxoWriter The DirectoryTaxonomyWriter from which to obtain newly added categories, in real-time. | Improve this Doc View Source DirectoryTaxonomyReader(Store.Directory) Open for reading a taxonomy stored in a given . Declaration public DirectoryTaxonomyReader(Store.Directory directory) Parameters Type Name Description Store.Directory directory The in which the taxonomy resides. Properties | Improve this Doc View Source CommitUserData Declaration public override IDictionary<string, string> CommitUserData { get; } Property Value Type Description IDictionary < System.String , System.String > Overrides TaxonomyReader.CommitUserData | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides TaxonomyReader.Count | Improve this Doc View Source ParallelTaxonomyArrays Declaration public override ParallelTaxonomyArrays ParallelTaxonomyArrays { get; } Property Value Type Description ParallelTaxonomyArrays Overrides TaxonomyReader.ParallelTaxonomyArrays Methods | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides TaxonomyReader.DoClose() | Improve this Doc View Source DoOpenIfChanged() Implements the opening of a new DirectoryTaxonomyReader instance if the taxonomy has changed. NOTE: the returned DirectoryTaxonomyReader shares the ordinal and category caches with this reader. This is not expected to cause any issues, unless the two instances continue to live. The reader guarantees that the two instances cannot affect each other in terms of correctness of the caches, however if the size of the cache is changed through SetCacheSize(Int32) , it will affect both reader instances. Declaration protected override TaxonomyReader DoOpenIfChanged() Returns Type Description TaxonomyReader Overrides TaxonomyReader.DoOpenIfChanged() | Improve this Doc View Source GetOrdinal(FacetLabel) Declaration public override int GetOrdinal(FacetLabel cp) Parameters Type Name Description FacetLabel cp Returns Type Description System.Int32 Overrides TaxonomyReader.GetOrdinal(FacetLabel) | Improve this Doc View Source GetPath(Int32) Declaration public override FacetLabel GetPath(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description FacetLabel Overrides TaxonomyReader.GetPath(Int32) | Improve this Doc View Source OpenIndexReader(Index.IndexWriter) Open the from this . Declaration protected virtual Index.DirectoryReader OpenIndexReader(Index.IndexWriter writer) Parameters Type Name Description Index.IndexWriter writer Returns Type Description Index.DirectoryReader | Improve this Doc View Source OpenIndexReader(Store.Directory) Open the from this . Declaration protected virtual Index.DirectoryReader OpenIndexReader(Store.Directory directory) Parameters Type Name Description Store.Directory directory Returns Type Description Index.DirectoryReader | Improve this Doc View Source SetCacheSize(Int32) SetCacheSize(Int32) controls the maximum allowed size of each of the caches used by GetPath(Int32) and GetOrdinal(FacetLabel) . Currently, if the given size is smaller than the current size of a cache, it will not shrink, and rather we be limited to its current size. Declaration public virtual void SetCacheSize(int size) Parameters Type Name Description System.Int32 size the new maximum cache size, in number of entries. | Improve this Doc View Source ToString(Int32) Returns ordinal -> label mapping, up to the provided max ordinal or number of ordinals, whichever is smaller. Declaration public virtual string ToString(int max) Parameters Type Name Description System.Int32 max Returns Type Description System.String"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.DiskOrdinalMap.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.DiskOrdinalMap.html",
    "title": "Class DirectoryTaxonomyWriter.DiskOrdinalMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectoryTaxonomyWriter.DiskOrdinalMap DirectoryTaxonomyWriter.IOrdinalMap maintained on file system Inheritance System.Object DirectoryTaxonomyWriter.DiskOrdinalMap Implements DirectoryTaxonomyWriter.IOrdinalMap Namespace : Lucene.Net.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public sealed class DiskOrdinalMap : object, DirectoryTaxonomyWriter.IOrdinalMap Constructors | Improve this Doc View Source DiskOrdinalMap(String) Sole constructor. Declaration public DiskOrdinalMap(string tmpfile) Parameters Type Name Description System.String tmpfile Methods | Improve this Doc View Source AddDone() Declaration public void AddDone() | Improve this Doc View Source AddMapping(Int32, Int32) Declaration public void AddMapping(int origOrdinal, int newOrdinal) Parameters Type Name Description System.Int32 origOrdinal System.Int32 newOrdinal | Improve this Doc View Source GetMap() Declaration public int[] GetMap() Returns Type Description System.Int32 [] | Improve this Doc View Source SetSize(Int32) Declaration public void SetSize(int taxonomySize) Parameters Type Name Description System.Int32 taxonomySize Implements DirectoryTaxonomyWriter.IOrdinalMap"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.html",
    "title": "Class DirectoryTaxonomyWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectoryTaxonomyWriter ITaxonomyWriter which uses a to store the taxonomy information on disk, and keeps an additional in-memory cache of some or all categories. In addition to the permanently-stored information in the , efficiency dictates that we also keep an in-memory cache of recently seen or all categories, so that we do not need to go back to disk for every category addition to see which ordinal this category already has, if any. A ITaxonomyWriterCache object determines the specific caching algorithm used. This class offers some hooks for extending classes to control the instance that is used. See OpenIndexWriter(Store.Directory, Index.IndexWriterConfig) . @lucene.experimental Inheritance System.Object DirectoryTaxonomyWriter Implements ITaxonomyWriter IDisposable Index.ITwoPhaseCommit Namespace : Lucene.Net.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public class DirectoryTaxonomyWriter : object, ITaxonomyWriter, IDisposable, Index.ITwoPhaseCommit Constructors | Improve this Doc View Source DirectoryTaxonomyWriter(Store.Directory, Index.OpenMode) Creates a new instance with a default cache as defined by DefaultTaxonomyWriterCache() . Declaration public DirectoryTaxonomyWriter(Store.Directory directory, Index.OpenMode openMode = null) Parameters Type Name Description Store.Directory directory Index.OpenMode openMode | Improve this Doc View Source DirectoryTaxonomyWriter(Store.Directory, Index.OpenMode, ITaxonomyWriterCache) Construct a Taxonomy writer. Declaration public DirectoryTaxonomyWriter(Store.Directory directory, Index.OpenMode openMode, ITaxonomyWriterCache cache) Parameters Type Name Description Store.Directory directory The in which to store the taxonomy. Note that the taxonomy is written directly to that directory (not to a subdirectory of it). Index.OpenMode openMode Specifies how to open a taxonomy for writing: means open an existing index for append (failing if the index does not yet exist). means create a new index (first deleting the old one if it already existed). appends to an existing index if there is one, otherwise it creates a new index. ITaxonomyWriterCache cache A ITaxonomyWriterCache implementation which determines the in-memory caching policy. See for example LruTaxonomyWriterCache and Cl2oTaxonomyWriterCache . If null or missing, DefaultTaxonomyWriterCache() is used. Fields | Improve this Doc View Source INDEX_EPOCH Property name of user commit data that contains the index epoch. The epoch changes whenever the taxonomy is recreated (i.e. opened with . Applications should not use this property in their commit data because it will be overridden by this taxonomy writer. Declaration public const string INDEX_EPOCH = null Field Value Type Description System.String Properties | Improve this Doc View Source CommitData Declaration public virtual IDictionary<string, string> CommitData { get; } Property Value Type Description IDictionary < System.String , System.String > | Improve this Doc View Source Count Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Directory Returns the of this taxonomy writer. Declaration public virtual Store.Directory Directory { get; } Property Value Type Description Store.Directory | Improve this Doc View Source TaxonomyEpoch Expert: returns current index epoch, if this is a near-real-time reader. Used by DirectoryTaxonomyReader to support NRT. @lucene.internal Declaration public long TaxonomyEpoch { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source AddCategory(FacetLabel) Declaration public virtual int AddCategory(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source AddTaxonomy(Store.Directory, DirectoryTaxonomyWriter.IOrdinalMap) Takes the categories from the given taxonomy directory, and adds the missing ones to this taxonomy. Additionally, it fills the given DirectoryTaxonomyWriter.IOrdinalMap with a mapping from the original ordinal to the new ordinal. Declaration public virtual void AddTaxonomy(Store.Directory taxoDir, DirectoryTaxonomyWriter.IOrdinalMap map) Parameters Type Name Description Store.Directory taxoDir DirectoryTaxonomyWriter.IOrdinalMap map | Improve this Doc View Source CloseResources() A hook for extending classes to close additional resources that were used. The default implementation closes the as well as the ITaxonomyWriterCache instances that were used. NOTE: if you override this method, you should include a base.CloseResources() call in your implementation. Declaration protected virtual void CloseResources() | Improve this Doc View Source Commit() Declaration public virtual void Commit() | Improve this Doc View Source CreateIndexWriterConfig(Index.OpenMode) Create the that would be used for opening the internal index writer. Extensions can configure the as they see fit, including setting a , or , different RAM size etc. NOTE: internal docids of the configured index must not be altered. For that, categories are never deleted from the taxonomy index. In addition, merge policy in effect must not merge none adjacent segments. Declaration protected virtual Index.IndexWriterConfig CreateIndexWriterConfig(Index.OpenMode openMode) Parameters Type Name Description Index.OpenMode openMode see Returns Type Description Index.IndexWriterConfig See Also OpenIndexWriter(Store.Directory, Index.IndexWriterConfig) | Improve this Doc View Source DefaultTaxonomyWriterCache() Defines the default ITaxonomyWriterCache to use in constructors which do not specify one. The current default is Cl2oTaxonomyWriterCache constructed with the parameters (1024, 0.15f, 3), i.e., the entire taxonomy is cached in memory while building it. Declaration public static ITaxonomyWriterCache DefaultTaxonomyWriterCache() Returns Type Description ITaxonomyWriterCache | Improve this Doc View Source Dispose() Frees used resources as well as closes the underlying , which commits whatever changes made to it to the underlying . Declaration public void Dispose() | Improve this Doc View Source EnsureOpen() Verifies that this instance wasn't closed, or throws if it is. Declaration protected void EnsureOpen() | Improve this Doc View Source FindCategory(FacetLabel) Look up the given category in the cache and/or the on-disk storage, returning the category's ordinal, or a negative number in case the category does not yet exist in the taxonomy. Declaration protected virtual int FindCategory(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source GetParent(Int32) Declaration public virtual int GetParent(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description System.Int32 | Improve this Doc View Source OpenIndexWriter(Store.Directory, Index.IndexWriterConfig) Open internal index writer, which contains the taxonomy data. Extensions may provide their own implementation or instance. NOTE: the instance this method returns will be disposed upon calling to Dispose() . NOTE: the merge policy in effect must not merge none adjacent segments. See comment in CreateIndexWriterConfig(Index.OpenMode) for the logic behind this. Declaration protected virtual Index.IndexWriter OpenIndexWriter(Store.Directory directory, Index.IndexWriterConfig config) Parameters Type Name Description Store.Directory directory the on top of which an should be opened. Index.IndexWriterConfig config configuration for the internal index writer. Returns Type Description Index.IndexWriter See Also CreateIndexWriterConfig(Index.OpenMode) | Improve this Doc View Source PrepareCommit() prepare most of the work needed for a two-phase commit. See . Declaration public virtual void PrepareCommit() | Improve this Doc View Source ReplaceTaxonomy(Store.Directory) Replaces the current taxonomy with the given one. This method should generally be called in conjunction with to replace both the taxonomy as well as the search index content. Declaration public virtual void ReplaceTaxonomy(Store.Directory taxoDir) Parameters Type Name Description Store.Directory taxoDir | Improve this Doc View Source Rollback() Rollback changes to the taxonomy writer and closes the instance. Following this method the instance becomes unusable (calling any of its API methods will yield an ). Declaration public virtual void Rollback() | Improve this Doc View Source SetCacheMissesUntilFill(Int32) Set the number of cache misses before an attempt is made to read the entire taxonomy into the in-memory cache. This taxonomy writer holds an in-memory cache of recently seen categories to speed up operation. On each cache-miss, the on-disk index needs to be consulted. When an existing taxonomy is opened, a lot of slow disk reads like that are needed until the cache is filled, so it is more efficient to read the entire taxonomy into memory at once. We do this complete read after a certain number (defined by this method) of cache misses. If the number is set to 0 , the entire taxonomy is read into the cache on first use, without fetching individual categories first. NOTE: it is assumed that this method is called immediately after the taxonomy writer has been created. Declaration public virtual void SetCacheMissesUntilFill(int i) Parameters Type Name Description System.Int32 i | Improve this Doc View Source SetCommitData(IDictionary<String, String>) Declaration public virtual void SetCommitData(IDictionary<string, string> commitUserData) Parameters Type Name Description IDictionary < System.String , System.String > commitUserData | Improve this Doc View Source Unlock(Store.Directory) Forcibly unlocks the taxonomy in the named directory. Caution: this should only be used by failure recovery code, when it is known that no other process nor thread is in fact currently accessing this taxonomy. This method is unnecessary if your uses a instead of the default . When the \"native\" lock is used, a lock does not stay behind forever when the process using it dies. Declaration public static void Unlock(Store.Directory directory) Parameters Type Name Description Store.Directory directory Implements ITaxonomyWriter IDisposable ITwoPhaseCommit"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.IOrdinalMap.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.IOrdinalMap.html",
    "title": "Interface DirectoryTaxonomyWriter.IOrdinalMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface DirectoryTaxonomyWriter.IOrdinalMap Mapping from old ordinal to new ordinals, used when merging indexes wit separate taxonomies. AddMapping(Int32, Int32) merges one or more taxonomies into the given taxonomy (this). An DirectoryTaxonomyWriter.IOrdinalMap is filled for each of the added taxonomies, containing the new ordinal (in the merged taxonomy) of each of the categories in the old taxonomy. There exist two implementations of DirectoryTaxonomyWriter.IOrdinalMap : DirectoryTaxonomyWriter.MemoryOrdinalMap and DirectoryTaxonomyWriter.DiskOrdinalMap . As their names suggest, the former keeps the map in memory and the latter in a temporary disk file. Because these maps will later be needed one by one (to remap the counting lists), not all at the same time, it is recommended to put the first taxonomy's map in memory, and all the rest on disk (later to be automatically read into memory one by one, when needed). Namespace : Lucene.Net.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public interface IOrdinalMap Methods | Improve this Doc View Source AddDone() Call AddDone() to say that all AddMapping(Int32, Int32) have been done. In some implementations this might free some resources. Declaration void AddDone() | Improve this Doc View Source AddMapping(Int32, Int32) Record a mapping. Declaration void AddMapping(int origOrdinal, int newOrdinal) Parameters Type Name Description System.Int32 origOrdinal System.Int32 newOrdinal | Improve this Doc View Source GetMap() Return the map from the taxonomy's original (consecutive) ordinals to the new taxonomy's ordinals. If the map has to be read from disk and ordered appropriately, it is done when getMap() is called. getMap() should only be called once, and only when the map is actually needed. Calling it will also free all resources that the map might be holding (such as temporary disk space), other than the returned int[]. Declaration int[] GetMap() Returns Type Description System.Int32 [] | Improve this Doc View Source SetSize(Int32) Set the size of the map. This MUST be called before AddMapping(Int32, Int32) . It is assumed (but not verified) that AddMapping(Int32, Int32) will then be called exactly 'size' times, with different origOrdinals between 0 and size - 1. Declaration void SetSize(int taxonomySize) Parameters Type Name Description System.Int32 taxonomySize"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.MemoryOrdinalMap.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.MemoryOrdinalMap.html",
    "title": "Class DirectoryTaxonomyWriter.MemoryOrdinalMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectoryTaxonomyWriter.MemoryOrdinalMap DirectoryTaxonomyWriter.IOrdinalMap maintained in memory Inheritance System.Object DirectoryTaxonomyWriter.MemoryOrdinalMap Implements DirectoryTaxonomyWriter.IOrdinalMap Namespace : Lucene.Net.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public sealed class MemoryOrdinalMap : object, DirectoryTaxonomyWriter.IOrdinalMap Constructors | Improve this Doc View Source MemoryOrdinalMap() Sole constructor. Declaration public MemoryOrdinalMap() Methods | Improve this Doc View Source AddDone() Declaration public void AddDone() | Improve this Doc View Source AddMapping(Int32, Int32) Declaration public void AddMapping(int origOrdinal, int newOrdinal) Parameters Type Name Description System.Int32 origOrdinal System.Int32 newOrdinal | Improve this Doc View Source GetMap() Declaration public int[] GetMap() Returns Type Description System.Int32 [] | Improve this Doc View Source SetSize(Int32) Declaration public void SetSize(int taxonomySize) Parameters Type Name Description System.Int32 taxonomySize Implements DirectoryTaxonomyWriter.IOrdinalMap"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.html",
    "title": "Namespace Lucene.Net.Facet.Taxonomy.Directory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.Taxonomy.Directory <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Taxonomy index implementation using on top of a Directory. Classes DirectoryTaxonomyReader A TaxonomyReader which retrieves stored taxonomy information from a . Reading from the on-disk index on every method call is too slow, so this implementation employs caching: Some methods cache recent requests and their results, while other methods prefetch all the data into memory and then provide answers directly from in-memory tables. See the documentation of individual methods for comments on their performance. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DirectoryTaxonomyWriter ITaxonomyWriter which uses a to store the taxonomy information on disk, and keeps an additional in-memory cache of some or all categories. In addition to the permanently-stored information in the , efficiency dictates that we also keep an in-memory cache of recently seen or all categories, so that we do not need to go back to disk for every category addition to see which ordinal this category already has, if any. A ITaxonomyWriterCache object determines the specific caching algorithm used. This class offers some hooks for extending classes to control the instance that is used. See OpenIndexWriter(Store.Directory, Index.IndexWriterConfig) . @lucene.experimental DirectoryTaxonomyWriter.DiskOrdinalMap DirectoryTaxonomyWriter.IOrdinalMap maintained on file system DirectoryTaxonomyWriter.MemoryOrdinalMap DirectoryTaxonomyWriter.IOrdinalMap maintained in memory Interfaces DirectoryTaxonomyWriter.IOrdinalMap Mapping from old ordinal to new ordinals, used when merging indexes wit separate taxonomies. AddMapping(Int32, Int32) merges one or more taxonomies into the given taxonomy (this). An DirectoryTaxonomyWriter.IOrdinalMap is filled for each of the added taxonomies, containing the new ordinal (in the merged taxonomy) of each of the categories in the old taxonomy. There exist two implementations of DirectoryTaxonomyWriter.IOrdinalMap : DirectoryTaxonomyWriter.MemoryOrdinalMap and DirectoryTaxonomyWriter.DiskOrdinalMap . As their names suggest, the former keeps the map in memory and the latter in a temporary disk file. Because these maps will later be needed one by one (to remap the counting lists), not all at the same time, it is recommended to put the first taxonomy's map in memory, and all the rest on disk (later to be automatically read into memory one by one, when needed)."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.DocValuesOrdinalsReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.DocValuesOrdinalsReader.html",
    "title": "Class DocValuesOrdinalsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesOrdinalsReader Decodes ordinals previously indexed into a field Inheritance System.Object OrdinalsReader DocValuesOrdinalsReader Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class DocValuesOrdinalsReader : OrdinalsReader Constructors | Improve this Doc View Source DocValuesOrdinalsReader() Default constructor. Declaration public DocValuesOrdinalsReader() | Improve this Doc View Source DocValuesOrdinalsReader(String) Create this, with the specified indexed field name. Declaration public DocValuesOrdinalsReader(string field) Parameters Type Name Description System.String field Properties | Improve this Doc View Source IndexFieldName Declaration public override string IndexFieldName { get; } Property Value Type Description System.String Overrides OrdinalsReader.IndexFieldName Methods | Improve this Doc View Source Decode(Util.BytesRef, Util.Int32sRef) Subclass & override if you change the encoding. Declaration protected virtual void Decode(Util.BytesRef buf, Util.Int32sRef ordinals) Parameters Type Name Description Util.BytesRef buf Util.Int32sRef ordinals | Improve this Doc View Source GetReader(Index.AtomicReaderContext) Declaration public override OrdinalsReader.OrdinalsSegmentReader GetReader(Index.AtomicReaderContext context) Parameters Type Name Description Index.AtomicReaderContext context Returns Type Description OrdinalsReader.OrdinalsSegmentReader Overrides OrdinalsReader.GetReader(Index.AtomicReaderContext)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.FacetLabel.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.FacetLabel.html",
    "title": "Class FacetLabel | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetLabel Holds a sequence of string components, specifying the hierarchical name of a category. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object FacetLabel Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class FacetLabel : IComparable<FacetLabel> Constructors | Improve this Doc View Source FacetLabel(String, String[]) Construct from the dimension plus the given path components. Declaration public FacetLabel(string dim, string[] path) Parameters Type Name Description System.String dim System.String [] path | Improve this Doc View Source FacetLabel(String[]) Construct from the given path components. Declaration public FacetLabel(params string[] components) Parameters Type Name Description System.String [] components Fields | Improve this Doc View Source MAX_CATEGORY_PATH_LENGTH The maximum number of characters a FacetLabel can have. Declaration public static readonly int MAX_CATEGORY_PATH_LENGTH Field Value Type Description System.Int32 Properties | Improve this Doc View Source Components The components of this FacetLabel . Note that this array may be shared with other FacetLabel instances, e.g. as a result of Subpath(Int32) , therefore you should traverse the array up to Length for this path's components. Declaration public string[] Components { get; } Property Value Type Description System.String [] | Improve this Doc View Source Length The number of components of this FacetLabel . Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CompareTo(FacetLabel) Compares this path with another FacetLabel for lexicographic order. Declaration public virtual int CompareTo(FacetLabel other) Parameters Type Name Description FacetLabel other Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Int64HashCode() Calculate a 64-bit hash function for this path. This is necessary for NameHashInt32CacheLRU (the default cache impl for LruTaxonomyWriterCache ) to reduce the chance of \"silent but deadly\" collisions. NOTE: This was longHashCode() in Lucene Declaration public virtual long Int64HashCode() Returns Type Description System.Int64 | Improve this Doc View Source Subpath(Int32) Returns a sub-path of this path up to length components. Declaration public virtual FacetLabel Subpath(int length) Parameters Type Name Description System.Int32 length Returns Type Description FacetLabel | Improve this Doc View Source ToString() Returns a string representation of the path. Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.FastTaxonomyFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.FastTaxonomyFacetCounts.html",
    "title": "Class FastTaxonomyFacetCounts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FastTaxonomyFacetCounts Computes facets counts, assuming the default encoding into DocValues was used. @lucene.experimental Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets FastTaxonomyFacetCounts Inherited Members Int32TaxonomyFacets.m_values Int32TaxonomyFacets.Rollup() Int32TaxonomyFacets.GetSpecificValue(String, String[]) Int32TaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(Int32) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class FastTaxonomyFacetCounts : Int32TaxonomyFacets Constructors | Improve this Doc View Source FastTaxonomyFacetCounts(TaxonomyReader, FacetsConfig, FacetsCollector) Create FastTaxonomyFacetCounts , which also counts all facet labels. Declaration public FastTaxonomyFacetCounts(TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc | Improve this Doc View Source FastTaxonomyFacetCounts(String, TaxonomyReader, FacetsConfig, FacetsCollector) Create FastTaxonomyFacetCounts , using the specified indexFieldName for ordinals. Use this if you had set SetIndexFieldName(String, String) to change the index field name for certain dimensions. Declaration public FastTaxonomyFacetCounts(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.html",
    "title": "Namespace Lucene.Net.Facet.Taxonomy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.Taxonomy <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Taxonomy of Categories Facets are defined using a hierarchy of categories, known as a _Taxonomy_. For example, the taxonomy of a book store application might have the following structure: Author Mark Twain J. K. Rowling Date 2010 March April 2009 The Taxonomy translates category-paths into interger identifiers (often termed ordinals ) and vice versa. The category Author/Mark Twain adds two nodes to the taxonomy: Author and Author/Mark Twain , each is assigned a different ordinal. The taxonomy maintains the invariant that a node always has an ordinal that is < all its children. Classes AssociationFacetField Add an instance of this to your to add a facet label associated with an arbitrary byte[] . This will require a custom Facets implementation at search time; see Int32AssociationFacetField and SingleAssociationFacetField to use existing Facets implementations. @lucene.experimental CachedOrdinalsReader A per-segment cache of documents' facet ordinals. Every CachedOrdinalsReader.CachedOrds holds the ordinals in a raw int[] , and therefore consumes as much RAM as the total number of ordinals found in the segment, but saves the CPU cost of decoding ordinals during facet counting. NOTE: every CachedOrdinalsReader.CachedOrds is limited to 2.1B total ordinals. If that is a limitation for you then consider limiting the segment size to fewer documents, or use an alternative cache which pages through the category ordinals. NOTE: when using this cache, it is advised to use a that does not cache the data in memory, at least for the category lists fields, or otherwise you'll be doing double-caching. NOTE: create one instance of this and re-use it for all facet implementations (the cache is per-instance, not static). CachedOrdinalsReader.CachedOrds Holds the cached ordinals in two parallel int[] arrays. CategoryPath Holds a sequence of string components, specifying the hierarchical name of a category. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocValuesOrdinalsReader Decodes ordinals previously indexed into a field FacetLabel Holds a sequence of string components, specifying the hierarchical name of a category. This is a Lucene.NET INTERNAL API, use at your own risk FastTaxonomyFacetCounts Computes facets counts, assuming the default encoding into DocValues was used. @lucene.experimental Int32AssociationFacetField Add an instance of this to your to add a facet label associated with an . Use TaxonomyFacetSumInt32Associations to aggregate int values per facet label at search time. NOTE: This was IntAssociationFacetField in Lucene @lucene.experimental Int32TaxonomyFacets Base class for all taxonomy-based facets that aggregate to a per-ords int[] . NOTE: This was IntTaxonomyFacets in Lucene LRUHashMap<TKey, TValue> LRUHashMap<TKey, TValue> is similar to of Java's HashMap, which has a bounded Limit ; When it reaches that Limit , each time a new element is added, the least recently used (LRU) entry is removed. Unlike the Java Lucene implementation, this one is thread safe because it is backed by the . Do note that every time an element is read from LRUHashMap<TKey, TValue> , a write operation also takes place to update the element's last access time. This is because the LRU order needs to be remembered to determine which element to evict when the Limit is exceeded. @lucene.experimental OrdinalsReader Provides per-document ordinals. OrdinalsReader.OrdinalsSegmentReader Returns ordinals for documents in one segment. ParallelTaxonomyArrays Returns 3 arrays for traversing the taxonomy: Parents : Parents[i] denotes the parent of category ordinal i . Children : Children[i] denotes a child of category ordinal i . Siblings : Siblings[i] denotes the sibling of category ordinal i . To traverse the taxonomy tree, you typically start with Children[0] (ordinal 0 is reserved for ROOT), and then depends if you want to do DFS or BFS, you call Children[Children[0]] or Siblings[Children[0]] and so forth, respectively. NOTE: you are not expected to modify the values of the arrays, since the arrays are shared with other threads. @lucene.experimental PrintTaxonomyStats Prints how many ords are under each dimension. SearcherTaxonomyManager Manages near-real-time reopen of both an and a TaxonomyReader . NOTE : If you call ReplaceTaxonomy(Store.Directory) then you must open a new SearcherTaxonomyManager afterwards. SearcherTaxonomyManager.SearcherAndTaxonomy Holds a matched pair of and TaxonomyReader SingleAssociationFacetField Add an instance of this to your to add a facet label associated with a . Use TaxonomyFacetSumSingleAssociations to aggregate values per facet label at search time. NOTE: This was FloatAssociationFacetField in Lucene @lucene.experimental SingleTaxonomyFacets Base class for all taxonomy-based facets that aggregate to a per-ords float[] . NOTE: This was FloatTaxonomyFacets in Lucene TaxonomyFacetCounts Reads from any OrdinalsReader ; use FastTaxonomyFacetCounts if you are using the default encoding from . @lucene.experimental TaxonomyFacets Base class for all taxonomy-based facets impls. TaxonomyFacetSumInt32Associations Aggregates sum of values previously indexed with Int32AssociationFacetField , assuming the default encoding. NOTE: This was TaxonomyFacetSumIntAssociations in Lucene @lucene.experimental TaxonomyFacetSumSingleAssociations Aggregates sum of values previously indexed with SingleAssociationFacetField , assuming the default encoding. NOTE: This was TaxonomyFacetSumFloatAssociations in Lucene @lucene.experimental TaxonomyFacetSumValueSource Aggregates sum of values from DoubleVal(Int32) and DoubleVal(Int32, Double[]) , for each facet label. @lucene.experimental TaxonomyFacetSumValueSource.ScoreValueSource ValueSource that returns the score for each hit; use this to aggregate the sum of all hit scores for each facet label. TaxonomyReader TaxonomyReader is the read-only interface with which the faceted-search library uses the taxonomy during search time. A TaxonomyReader holds a list of categories. Each category has a serial number which we call an \"ordinal\", and a hierarchical \"path\" name: The ordinal is an integer that starts at 0 for the first category (which is always the root category), and grows contiguously as more categories are added; Note that once a category is added, it can never be deleted. The path is a CategoryPath object specifying the category's position in the hierarchy. Notes about concurrent access to the taxonomy: An implementation must allow multiple readers to be active concurrently with a single writer. Readers follow so-called \"point in time\" semantics, i.e., a TaxonomyReader object will only see taxonomy entries which were available at the time it was created. What the writer writes is only available to (new) readers after the writer's is called. In faceted search, two separate indices are used: the main Lucene index, and the taxonomy. Because the main index refers to the categories listed in the taxonomy, it is important to open the taxonomy after opening the main index, and it is also necessary to Reopen() the taxonomy after Reopen()ing the main index. This order is important, otherwise it would be possible for the main index to refer to a category which is not yet visible in the old snapshot of the taxonomy. Note that it is indeed fine for the the taxonomy to be opened after the main index - even a long time after. The reason is that once a category is added to the taxonomy, it can never be changed or deleted, so there is no danger that a \"too new\" taxonomy not being consistent with an older index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TaxonomyReader.ChildrenIterator An iterator over a category's children. Interfaces ITaxonomyWriter ITaxonomyWriter is the interface which the faceted-search library uses to dynamically build the taxonomy at indexing time. Notes about concurrent access to the taxonomy: An implementation must allow multiple readers and a single writer to be active concurrently. Readers follow so-called \"point in time\" semantics, i.e., a reader object will only see taxonomy entries which were available at the time it was created. What the writer writes is only available to (new) readers after the writer's is called. Faceted search keeps two indices - namely Lucene's main index, and this taxonomy index. When one or more readers are active concurrently with the writer, care must be taken to avoid an inconsistency between the state of these two indices: When writing to the indices, the taxonomy must always be committed to disk before the main index, because the main index refers to categories listed in the taxonomy. Such control can best be achieved by turning off the main index's \"autocommit\" feature, and explicitly calling for both indices (first for the taxonomy, then for the main index). In old versions of Lucene (2.2 or earlier), when autocommit could not be turned off, a more complicated solution needs to be used. E.g., use some sort of (possibly inter-process) locking to ensure that a reader is being opened only right after both indices have been flushed (and before anything else is written to them). This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Int32AssociationFacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Int32AssociationFacetField.html",
    "title": "Class Int32AssociationFacetField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32AssociationFacetField Add an instance of this to your to add a facet label associated with an . Use TaxonomyFacetSumInt32Associations to aggregate int values per facet label at search time. NOTE: This was IntAssociationFacetField in Lucene @lucene.experimental Inheritance System.Object AssociationFacetField Int32AssociationFacetField Inherited Members AssociationFacetField.TYPE AssociationFacetField.Dim AssociationFacetField.Path AssociationFacetField.Assoc Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class Int32AssociationFacetField : AssociationFacetField Constructors | Improve this Doc View Source Int32AssociationFacetField(Int32, String, String[]) Creates this from dim and path and an int association Declaration public Int32AssociationFacetField(int assoc, string dim, params string[] path) Parameters Type Name Description System.Int32 assoc System.String dim System.String [] path Methods | Improve this Doc View Source BytesRefToInt32(Util.BytesRef) Decodes a previously encoded . NOTE: This was bytesRefToInt() in Lucene Declaration public static int BytesRefToInt32(Util.BytesRef b) Parameters Type Name Description Util.BytesRef b Returns Type Description System.Int32 | Improve this Doc View Source Int32ToBytesRef(Int32) Encodes an as a 4-byte , big-endian. NOTE: This was intToBytesRef() in Lucene Declaration public static Util.BytesRef Int32ToBytesRef(int v) Parameters Type Name Description System.Int32 v Returns Type Description Util.BytesRef | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AssociationFacetField.ToString()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Int32TaxonomyFacets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Int32TaxonomyFacets.html",
    "title": "Class Int32TaxonomyFacets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32TaxonomyFacets Base class for all taxonomy-based facets that aggregate to a per-ords int[] . NOTE: This was IntTaxonomyFacets in Lucene Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets FastTaxonomyFacetCounts TaxonomyFacetCounts TaxonomyFacetSumInt32Associations Inherited Members TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(Int32) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class Int32TaxonomyFacets : TaxonomyFacets Constructors | Improve this Doc View Source Int32TaxonomyFacets(String, TaxonomyReader, FacetsConfig) Sole constructor. Declaration protected Int32TaxonomyFacets(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config Fields | Improve this Doc View Source m_values Per-ordinal value. Declaration protected readonly int[] m_values Field Value Type Description System.Int32 [] Methods | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[]) | Improve this Doc View Source Rollup() Rolls up any single-valued hierarchical dimensions. Declaration protected virtual void Rollup()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.ITaxonomyWriter.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.ITaxonomyWriter.html",
    "title": "Interface ITaxonomyWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITaxonomyWriter ITaxonomyWriter is the interface which the faceted-search library uses to dynamically build the taxonomy at indexing time. Notes about concurrent access to the taxonomy: An implementation must allow multiple readers and a single writer to be active concurrently. Readers follow so-called \"point in time\" semantics, i.e., a reader object will only see taxonomy entries which were available at the time it was created. What the writer writes is only available to (new) readers after the writer's is called. Faceted search keeps two indices - namely Lucene's main index, and this taxonomy index. When one or more readers are active concurrently with the writer, care must be taken to avoid an inconsistency between the state of these two indices: When writing to the indices, the taxonomy must always be committed to disk before the main index, because the main index refers to categories listed in the taxonomy. Such control can best be achieved by turning off the main index's \"autocommit\" feature, and explicitly calling for both indices (first for the taxonomy, then for the main index). In old versions of Lucene (2.2 or earlier), when autocommit could not be turned off, a more complicated solution needs to be used. E.g., use some sort of (possibly inter-process) locking to ensure that a reader is being opened only right after both indices have been flushed (and before anything else is written to them). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public interface ITaxonomyWriter : IDisposable, Index.ITwoPhaseCommit Properties | Improve this Doc View Source CommitData Returns the commit user data map that was set on SetCommitData(IDictionary<String, String>) . Declaration IDictionary<string, string> CommitData { get; } Property Value Type Description IDictionary < System.String , System.String > | Improve this Doc View Source Count Count returns the number of categories in the taxonomy. Because categories are numbered consecutively starting with 0, it means the taxonomy contains ordinals 0 through Count -1. Note that the number returned by Count is often slightly higher than the number of categories inserted into the taxonomy; This is because when a category is added to the taxonomy, its ancestors are also added automatically (including the root, which always get ordinal 0). Declaration int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddCategory(FacetLabel) AddCategory(FacetLabel) adds a category with a given path name to the taxonomy, and returns its ordinal. If the category was already present in the taxonomy, its existing ordinal is returned. Before adding a category, AddCategory(FacetLabel) makes sure that all its ancestor categories exist in the taxonomy as well. As result, the ordinal of a category is guaranteed to be smaller then the ordinal of any of its descendants. Declaration int AddCategory(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source GetParent(Int32) GetParent(Int32) returns the ordinal of the parent category of the category with the given ordinal. When a category is specified as a path name, finding the path of its parent is as trivial as dropping the last component of the path. GetParent(Int32) is functionally equivalent to calling GetPath(Int32) on the given ordinal, dropping the last component of the path, and then calling GetOrdinal(FacetLabel) to get an ordinal back. If the given ordinal is the ROOT_ORDINAL , an INVALID_ORDINAL is returned. If the given ordinal is a top-level category, the ROOT_ORDINAL is returned. If an invalid ordinal is given (negative or beyond the last available ordinal), an is thrown. However, it is expected that GetParent(Int32) will only be called for ordinals which are already known to be in the taxonomy. TODO (Facet): instead of a GetParent(Int32) method, consider having a GetCategory(categorypath, prefixlen) which is similar to AddCategory(FacetLabel) except it doesn't add new categories; This method can be used to get the ordinals of all prefixes of the given category, and it can use exactly the same code and cache used by AddCategory(FacetLabel) so it means less code. Declaration int GetParent(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description System.Int32 | Improve this Doc View Source SetCommitData(IDictionary<String, String>) Sets the commit user data map. That method is considered a transaction and will be committed ( ) even if no other changes were made to the writer instance. NOTE: the map is cloned internally, therefore altering the map's contents after calling this method has no effect. Declaration void SetCommitData(IDictionary<string, string> commitUserData) Parameters Type Name Description IDictionary < System.String , System.String > commitUserData"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.LRUHashMap-2.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.LRUHashMap-2.html",
    "title": "Class LRUHashMap<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LRUHashMap<TKey, TValue> LRUHashMap<TKey, TValue> is similar to of Java's HashMap, which has a bounded Limit ; When it reaches that Limit , each time a new element is added, the least recently used (LRU) entry is removed. Unlike the Java Lucene implementation, this one is thread safe because it is backed by the . Do note that every time an element is read from LRUHashMap<TKey, TValue> , a write operation also takes place to update the element's last access time. This is because the LRU order needs to be remembered to determine which element to evict when the Limit is exceeded. @lucene.experimental Inheritance System.Object LRUHashMap<TKey, TValue> Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class LRUHashMap<TKey, TValue> : IDictionary<TKey, TValue> Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source LRUHashMap(Int32) Create a new hash map with a bounded size and with least recently used entries removed. Declaration public LRUHashMap(int limit) Parameters Type Name Description System.Int32 limit The maximum size (in number of entries) to which the map can grow before the least recently used entries start being removed. Setting limit to a very large value, like is allowed, but is less efficient than using or because our class needs to keep track of the use order (via an additional doubly-linked list) which is not used when the map's size is always below the maximum size. | Improve this Doc View Source LRUHashMap(Int32, IEqualityComparer<TKey>) Create a new hash map with a bounded size and with least recently used entries removed. LUCENENET specific overload to allow passing in custom . See LUCENENET-602. Declaration public LRUHashMap(int limit, IEqualityComparer<TKey> comparer) Parameters Type Name Description System.Int32 limit The maximum size (in number of entries) to which the map can grow before the least recently used entries start being removed. Setting limit to a very large value, like is allowed, but is less efficient than using or because our class needs to keep track of the use order (via an additional doubly-linked list) which is not used when the map's size is always below the maximum size. IEqualityComparer <TKey> comparer The implementation to use when comparing keys, or null to use the default for the type of the key. Properties | Improve this Doc View Source Count Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[TKey] Declaration public TValue this[TKey key] { get; set; } Parameters Type Name Description TKey key Property Value Type Description TValue | Improve this Doc View Source Keys Declaration public ICollection<TKey> Keys { get; } Property Value Type Description ICollection <TKey> | Improve this Doc View Source Limit allows changing the map's maximal number of elements which was defined at construction time. Note that if the map is already larger than Limit , the current implementation does not shrink it (by removing the oldest elements); Rather, the map remains in its current size as new elements are added, and will only start shrinking (until settling again on the given Limit ) if existing elements are explicitly deleted. Declaration public virtual int Limit { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Values Declaration public ICollection<TValue> Values { get; } Property Value Type Description ICollection <TValue> Methods | Improve this Doc View Source Add(TKey, TValue) Declaration public void Add(TKey key, TValue value) Parameters Type Name Description TKey key TValue value | Improve this Doc View Source Add(KeyValuePair<TKey, TValue>) Declaration public void Add(KeyValuePair<TKey, TValue> item) Parameters Type Name Description KeyValuePair <TKey, TValue> item | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Contains(KeyValuePair<TKey, TValue>) Declaration public bool Contains(KeyValuePair<TKey, TValue> item) Parameters Type Name Description KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(TKey) Declaration public bool ContainsKey(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(KeyValuePair<TKey, TValue>[], Int32) Declaration public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex) Parameters Type Name Description KeyValuePair <TKey, TValue>[] array System.Int32 arrayIndex | Improve this Doc View Source Get(TKey) Declaration public TValue Get(TKey key) Parameters Type Name Description TKey key Returns Type Description TValue | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() Returns Type Description IEnumerator < KeyValuePair <TKey, TValue>> | Improve this Doc View Source Put(TKey, TValue) Declaration public TValue Put(TKey key, TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description TValue | Improve this Doc View Source Remove(TKey) Declaration public bool Remove(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source Remove(KeyValuePair<TKey, TValue>) Declaration public bool Remove(KeyValuePair<TKey, TValue> item) Parameters Type Name Description KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source TryGetValue(TKey, out TValue) Declaration public bool TryGetValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.OrdinalsReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.OrdinalsReader.html",
    "title": "Class OrdinalsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OrdinalsReader Provides per-document ordinals. Inheritance System.Object OrdinalsReader CachedOrdinalsReader DocValuesOrdinalsReader Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class OrdinalsReader : object Constructors | Improve this Doc View Source OrdinalsReader() Default constructor. Declaration public OrdinalsReader() Properties | Improve this Doc View Source IndexFieldName Returns the indexed field name this OrdinalsReader is reading from. Declaration public abstract string IndexFieldName { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetReader(Index.AtomicReaderContext) Set current atomic reader. Declaration public abstract OrdinalsReader.OrdinalsSegmentReader GetReader(Index.AtomicReaderContext context) Parameters Type Name Description Index.AtomicReaderContext context Returns Type Description OrdinalsReader.OrdinalsSegmentReader"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.OrdinalsReader.OrdinalsSegmentReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.OrdinalsReader.OrdinalsSegmentReader.html",
    "title": "Class OrdinalsReader.OrdinalsSegmentReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OrdinalsReader.OrdinalsSegmentReader Returns ordinals for documents in one segment. Inheritance System.Object OrdinalsReader.OrdinalsSegmentReader Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class OrdinalsSegmentReader : object Constructors | Improve this Doc View Source OrdinalsSegmentReader() Default constructor. Declaration public OrdinalsSegmentReader() Methods | Improve this Doc View Source Get(Int32, Util.Int32sRef) Get the ordinals for this document. The ordinals . must always be 0! Declaration public abstract void Get(int doc, Util.Int32sRef ordinals) Parameters Type Name Description System.Int32 doc Util.Int32sRef ordinals"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.ParallelTaxonomyArrays.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.ParallelTaxonomyArrays.html",
    "title": "Class ParallelTaxonomyArrays | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParallelTaxonomyArrays Returns 3 arrays for traversing the taxonomy: Parents : Parents[i] denotes the parent of category ordinal i . Children : Children[i] denotes a child of category ordinal i . Siblings : Siblings[i] denotes the sibling of category ordinal i . To traverse the taxonomy tree, you typically start with Children[0] (ordinal 0 is reserved for ROOT), and then depends if you want to do DFS or BFS, you call Children[Children[0]] or Siblings[Children[0]] and so forth, respectively. NOTE: you are not expected to modify the values of the arrays, since the arrays are shared with other threads. @lucene.experimental Inheritance System.Object ParallelTaxonomyArrays Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class ParallelTaxonomyArrays : object Constructors | Improve this Doc View Source ParallelTaxonomyArrays() Sole constructor. Declaration public ParallelTaxonomyArrays() Properties | Improve this Doc View Source Children Returns the children array, where Children[i] denotes a child of category ordinal i . Declaration public abstract int[] Children { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Parents Returns the parents array, where Parents[i] denotes the parent of category ordinal i . Declaration public abstract int[] Parents { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Siblings Returns the siblings array, where Siblings[i] denotes the sibling of category ordinal i . Declaration public abstract int[] Siblings { get; } Property Value Type Description System.Int32 []"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.PrintTaxonomyStats.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.PrintTaxonomyStats.html",
    "title": "Class PrintTaxonomyStats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrintTaxonomyStats Prints how many ords are under each dimension. Inheritance System.Object PrintTaxonomyStats Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class PrintTaxonomyStats : object Constructors | Improve this Doc View Source PrintTaxonomyStats() Sole constructor. Declaration public PrintTaxonomyStats() Methods | Improve this Doc View Source Main(String[]) Command-line tool. Declaration public static int Main(string[] args) Parameters Type Name Description System.String [] args Returns Type Description System.Int32 | Improve this Doc View Source PrintStats(TaxonomyReader, TextWriter, Boolean) Recursively prints stats for all ordinals. Declaration public static void PrintStats(TaxonomyReader r, TextWriter out, bool printTree) Parameters Type Name Description TaxonomyReader r TextWriter out System.Boolean printTree"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.html",
    "title": "Class SearcherTaxonomyManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearcherTaxonomyManager Manages near-real-time reopen of both an and a TaxonomyReader . NOTE : If you call ReplaceTaxonomy(Store.Directory) then you must open a new SearcherTaxonomyManager afterwards. Inheritance System.Object SearcherTaxonomyManager Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class SearcherTaxonomyManager : ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy> Constructors | Improve this Doc View Source SearcherTaxonomyManager(Index.IndexWriter, Boolean, Search.SearcherFactory, DirectoryTaxonomyWriter) Creates near-real-time searcher and taxonomy reader from the corresponding writers. Declaration public SearcherTaxonomyManager(Index.IndexWriter writer, bool applyAllDeletes, Search.SearcherFactory searcherFactory, DirectoryTaxonomyWriter taxoWriter) Parameters Type Name Description Index.IndexWriter writer System.Boolean applyAllDeletes Search.SearcherFactory searcherFactory DirectoryTaxonomyWriter taxoWriter | Improve this Doc View Source SearcherTaxonomyManager(Store.Directory, Store.Directory, Search.SearcherFactory) Creates search and taxonomy readers over the corresponding directories. NOTE: you should only use this constructor if you commit and call (on the ) in the same thread. Otherwise it could lead to an unsync'd and TaxonomyReader pair. Declaration public SearcherTaxonomyManager(Store.Directory indexDir, Store.Directory taxoDir, Search.SearcherFactory searcherFactory) Parameters Type Name Description Store.Directory indexDir Store.Directory taxoDir Search.SearcherFactory searcherFactory Methods | Improve this Doc View Source DecRef(SearcherTaxonomyManager.SearcherAndTaxonomy) Declaration protected override void DecRef(SearcherTaxonomyManager.SearcherAndTaxonomy ref) Parameters Type Name Description SearcherTaxonomyManager.SearcherAndTaxonomy ref | Improve this Doc View Source GetRefCount(SearcherTaxonomyManager.SearcherAndTaxonomy) Declaration protected override int GetRefCount(SearcherTaxonomyManager.SearcherAndTaxonomy reference) Parameters Type Name Description SearcherTaxonomyManager.SearcherAndTaxonomy reference Returns Type Description System.Int32 | Improve this Doc View Source RefreshIfNeeded(SearcherTaxonomyManager.SearcherAndTaxonomy) Declaration protected override SearcherTaxonomyManager.SearcherAndTaxonomy RefreshIfNeeded(SearcherTaxonomyManager.SearcherAndTaxonomy ref) Parameters Type Name Description SearcherTaxonomyManager.SearcherAndTaxonomy ref Returns Type Description SearcherTaxonomyManager.SearcherAndTaxonomy | Improve this Doc View Source TryIncRef(SearcherTaxonomyManager.SearcherAndTaxonomy) Declaration protected override bool TryIncRef(SearcherTaxonomyManager.SearcherAndTaxonomy ref) Parameters Type Name Description SearcherTaxonomyManager.SearcherAndTaxonomy ref Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy.html",
    "title": "Class SearcherTaxonomyManager.SearcherAndTaxonomy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearcherTaxonomyManager.SearcherAndTaxonomy Holds a matched pair of and TaxonomyReader Inheritance System.Object SearcherTaxonomyManager.SearcherAndTaxonomy Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class SearcherAndTaxonomy : object Constructors | Improve this Doc View Source SearcherAndTaxonomy(Search.IndexSearcher, DirectoryTaxonomyReader) Create a SearcherTaxonomyManager.SearcherAndTaxonomy Declaration public SearcherAndTaxonomy(Search.IndexSearcher searcher, DirectoryTaxonomyReader taxonomyReader) Parameters Type Name Description Search.IndexSearcher searcher DirectoryTaxonomyReader taxonomyReader Properties | Improve this Doc View Source Searcher Point-in-time . Declaration public Search.IndexSearcher Searcher { get; } Property Value Type Description Search.IndexSearcher | Improve this Doc View Source TaxonomyReader Matching point-in-time DirectoryTaxonomyReader . Declaration public DirectoryTaxonomyReader TaxonomyReader { get; } Property Value Type Description DirectoryTaxonomyReader"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SingleAssociationFacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SingleAssociationFacetField.html",
    "title": "Class SingleAssociationFacetField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleAssociationFacetField Add an instance of this to your to add a facet label associated with a . Use TaxonomyFacetSumSingleAssociations to aggregate values per facet label at search time. NOTE: This was FloatAssociationFacetField in Lucene @lucene.experimental Inheritance System.Object AssociationFacetField SingleAssociationFacetField Inherited Members AssociationFacetField.TYPE AssociationFacetField.Dim AssociationFacetField.Path AssociationFacetField.Assoc Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class SingleAssociationFacetField : AssociationFacetField Constructors | Improve this Doc View Source SingleAssociationFacetField(Single, String, String[]) Creates this from dim and path and a association Declaration public SingleAssociationFacetField(float assoc, string dim, params string[] path) Parameters Type Name Description System.Single assoc System.String dim System.String [] path Methods | Improve this Doc View Source BytesRefToSingle(Util.BytesRef) Decodes a previously encoded . NOTE: This was bytesRefToFloat() in Lucene Declaration public static float BytesRefToSingle(Util.BytesRef b) Parameters Type Name Description Util.BytesRef b Returns Type Description System.Single | Improve this Doc View Source SingleToBytesRef(Single) Encodes a as a 4-byte . NOTE: This was floatToBytesRef() in Lucene Declaration public static Util.BytesRef SingleToBytesRef(float v) Parameters Type Name Description System.Single v Returns Type Description Util.BytesRef | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AssociationFacetField.ToString()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SingleTaxonomyFacets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SingleTaxonomyFacets.html",
    "title": "Class SingleTaxonomyFacets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleTaxonomyFacets Base class for all taxonomy-based facets that aggregate to a per-ords float[] . NOTE: This was FloatTaxonomyFacets in Lucene Inheritance System.Object Facets TaxonomyFacets SingleTaxonomyFacets TaxonomyFacetSumSingleAssociations TaxonomyFacetSumValueSource Inherited Members TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(Int32) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class SingleTaxonomyFacets : TaxonomyFacets Constructors | Improve this Doc View Source SingleTaxonomyFacets(String, TaxonomyReader, FacetsConfig) Sole constructor. Declaration protected SingleTaxonomyFacets(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config Fields | Improve this Doc View Source m_values Per-ordinal value. Declaration protected readonly float[] m_values Field Value Type Description System.Single [] Methods | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[]) | Improve this Doc View Source Rollup() Rolls up any single-valued hierarchical dimensions. Declaration protected virtual void Rollup()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetCounts.html",
    "title": "Class TaxonomyFacetCounts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyFacetCounts Reads from any OrdinalsReader ; use FastTaxonomyFacetCounts if you are using the default encoding from . @lucene.experimental Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets TaxonomyFacetCounts Inherited Members Int32TaxonomyFacets.m_values Int32TaxonomyFacets.Rollup() Int32TaxonomyFacets.GetSpecificValue(String, String[]) Int32TaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(Int32) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class TaxonomyFacetCounts : Int32TaxonomyFacets Constructors | Improve this Doc View Source TaxonomyFacetCounts(OrdinalsReader, TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetCounts , which also counts all facet labels. Use this for a non-default OrdinalsReader ; otherwise use FastTaxonomyFacetCounts . Declaration public TaxonomyFacetCounts(OrdinalsReader ordinalsReader, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description OrdinalsReader ordinalsReader TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacets.html",
    "title": "Class TaxonomyFacets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyFacets Base class for all taxonomy-based facets impls. Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets SingleTaxonomyFacets Inherited Members Facets.GetTopChildren(Int32, String, String[]) Facets.GetSpecificValue(String, String[]) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class TaxonomyFacets : Facets Constructors | Improve this Doc View Source TaxonomyFacets(String, TaxonomyReader, FacetsConfig) Sole constructor. Declaration protected TaxonomyFacets(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config Fields | Improve this Doc View Source m_children Maps parent ordinal to its child, or -1 if the parent is childless. Declaration protected readonly int[] m_children Field Value Type Description System.Int32 [] | Improve this Doc View Source m_config FacetsConfig provided to the constructor. Declaration protected readonly FacetsConfig m_config Field Value Type Description FacetsConfig | Improve this Doc View Source m_indexFieldName Index field name provided to the constructor. Declaration protected readonly string m_indexFieldName Field Value Type Description System.String | Improve this Doc View Source m_siblings Maps an ordinal to its sibling, or -1 if there is no sibling. Declaration protected readonly int[] m_siblings Field Value Type Description System.Int32 [] | Improve this Doc View Source m_taxoReader TaxonomyReader provided to the constructor. Declaration protected readonly TaxonomyReader m_taxoReader Field Value Type Description TaxonomyReader Methods | Improve this Doc View Source GetAllDims(Int32) Declaration public override IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description IList < FacetResult > Overrides Facets.GetAllDims(Int32) | Improve this Doc View Source VerifyDim(String) Throws if the dimension is not recognized. Otherwise, returns the FacetsConfig.DimConfig for this dimension. Declaration protected virtual FacetsConfig.DimConfig VerifyDim(string dim) Parameters Type Name Description System.String dim Returns Type Description FacetsConfig.DimConfig"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumInt32Associations.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumInt32Associations.html",
    "title": "Class TaxonomyFacetSumInt32Associations | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyFacetSumInt32Associations Aggregates sum of values previously indexed with Int32AssociationFacetField , assuming the default encoding. NOTE: This was TaxonomyFacetSumIntAssociations in Lucene @lucene.experimental Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets TaxonomyFacetSumInt32Associations Inherited Members Int32TaxonomyFacets.m_values Int32TaxonomyFacets.Rollup() Int32TaxonomyFacets.GetSpecificValue(String, String[]) Int32TaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(Int32) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class TaxonomyFacetSumInt32Associations : Int32TaxonomyFacets Constructors | Improve this Doc View Source TaxonomyFacetSumInt32Associations(TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetSumInt32Associations against the default index field. Declaration public TaxonomyFacetSumInt32Associations(TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc | Improve this Doc View Source TaxonomyFacetSumInt32Associations(String, TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetSumInt32Associations against the specified index field. Declaration public TaxonomyFacetSumInt32Associations(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumSingleAssociations.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumSingleAssociations.html",
    "title": "Class TaxonomyFacetSumSingleAssociations | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyFacetSumSingleAssociations Aggregates sum of values previously indexed with SingleAssociationFacetField , assuming the default encoding. NOTE: This was TaxonomyFacetSumFloatAssociations in Lucene @lucene.experimental Inheritance System.Object Facets TaxonomyFacets SingleTaxonomyFacets TaxonomyFacetSumSingleAssociations Inherited Members SingleTaxonomyFacets.m_values SingleTaxonomyFacets.Rollup() SingleTaxonomyFacets.GetSpecificValue(String, String[]) SingleTaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(Int32) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class TaxonomyFacetSumSingleAssociations : SingleTaxonomyFacets Constructors | Improve this Doc View Source TaxonomyFacetSumSingleAssociations(TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetSumSingleAssociations against the default index field. Declaration public TaxonomyFacetSumSingleAssociations(TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc | Improve this Doc View Source TaxonomyFacetSumSingleAssociations(String, TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetSumSingleAssociations against the specified index field. Declaration public TaxonomyFacetSumSingleAssociations(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.html",
    "title": "Class TaxonomyFacetSumValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyFacetSumValueSource Aggregates sum of values from DoubleVal(Int32) and DoubleVal(Int32, Double[]) , for each facet label. @lucene.experimental Inheritance System.Object Facets TaxonomyFacets SingleTaxonomyFacets TaxonomyFacetSumValueSource Inherited Members SingleTaxonomyFacets.m_values SingleTaxonomyFacets.Rollup() SingleTaxonomyFacets.GetSpecificValue(String, String[]) SingleTaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(Int32) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class TaxonomyFacetSumValueSource : SingleTaxonomyFacets Constructors | Improve this Doc View Source TaxonomyFacetSumValueSource(OrdinalsReader, TaxonomyReader, FacetsConfig, FacetsCollector, ValueSource) Aggreggates float facet values from the provided ValueSource , and pulls ordinals from the provided OrdinalsReader . Declaration public TaxonomyFacetSumValueSource(OrdinalsReader ordinalsReader, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc, ValueSource valueSource) Parameters Type Name Description OrdinalsReader ordinalsReader TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc ValueSource valueSource | Improve this Doc View Source TaxonomyFacetSumValueSource(TaxonomyReader, FacetsConfig, FacetsCollector, ValueSource) Aggreggates float facet values from the provided ValueSource , pulling ordinals using DocValuesOrdinalsReader against the default indexed facet field DEFAULT_INDEX_FIELD_NAME . Declaration public TaxonomyFacetSumValueSource(TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc, ValueSource valueSource) Parameters Type Name Description TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc ValueSource valueSource"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.ScoreValueSource.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.ScoreValueSource.html",
    "title": "Class TaxonomyFacetSumValueSource.ScoreValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyFacetSumValueSource.ScoreValueSource ValueSource that returns the score for each hit; use this to aggregate the sum of all hit scores for each facet label. Inheritance System.Object ValueSource TaxonomyFacetSumValueSource.ScoreValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class ScoreValueSource : ValueSource Constructors | Improve this Doc View Source ScoreValueSource() Sole constructor. Declaration public ScoreValueSource() Methods | Improve this Doc View Source Equals(TaxonomyFacetSumValueSource.ScoreValueSource) Declaration protected bool Equals(TaxonomyFacetSumValueSource.ScoreValueSource other) Parameters Type Name Description TaxonomyFacetSumValueSource.ScoreValueSource other Returns Type Description System.Boolean | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, Index.AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, Index.AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context Index.AtomicReaderContext readerContext Returns Type Description FunctionValues"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyReader.ChildrenIterator.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyReader.ChildrenIterator.html",
    "title": "Class TaxonomyReader.ChildrenIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyReader.ChildrenIterator An iterator over a category's children. Inheritance System.Object TaxonomyReader.ChildrenIterator Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class ChildrenIterator : object Methods | Improve this Doc View Source Next() Return the next child ordinal, or INVALID_ORDINAL if no more children. Declaration public virtual int Next() Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyReader.html",
    "title": "Class TaxonomyReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyReader TaxonomyReader is the read-only interface with which the faceted-search library uses the taxonomy during search time. A TaxonomyReader holds a list of categories. Each category has a serial number which we call an \"ordinal\", and a hierarchical \"path\" name: The ordinal is an integer that starts at 0 for the first category (which is always the root category), and grows contiguously as more categories are added; Note that once a category is added, it can never be deleted. The path is a CategoryPath object specifying the category's position in the hierarchy. Notes about concurrent access to the taxonomy: An implementation must allow multiple readers to be active concurrently with a single writer. Readers follow so-called \"point in time\" semantics, i.e., a TaxonomyReader object will only see taxonomy entries which were available at the time it was created. What the writer writes is only available to (new) readers after the writer's is called. In faceted search, two separate indices are used: the main Lucene index, and the taxonomy. Because the main index refers to the categories listed in the taxonomy, it is important to open the taxonomy after opening the main index, and it is also necessary to Reopen() the taxonomy after Reopen()ing the main index. This order is important, otherwise it would be possible for the main index to refer to a category which is not yet visible in the old snapshot of the taxonomy. Note that it is indeed fine for the the taxonomy to be opened after the main index - even a long time after. The reason is that once a category is added to the taxonomy, it can never be changed or deleted, so there is no danger that a \"too new\" taxonomy not being consistent with an older index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TaxonomyReader DirectoryTaxonomyReader Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class TaxonomyReader : IDisposable Constructors | Improve this Doc View Source TaxonomyReader() Sole constructor. Declaration public TaxonomyReader() Fields | Improve this Doc View Source INVALID_ORDINAL Ordinals are always non-negative, so a negative ordinal can be used to signify an error. Methods here return INVALID_ORDINAL (-1) in this case. Declaration public const int INVALID_ORDINAL = null Field Value Type Description System.Int32 | Improve this Doc View Source ROOT_ORDINAL The root category (the category with the empty path) always has the ordinal 0, to which we give a name ROOT_ORDINAL. GetOrdinal(FacetLabel) of an empty path will always return ROOT_ORDINAL , and GetPath(Int32) with ROOT_ORDINAL will return the empty path. Declaration public const int ROOT_ORDINAL = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source CommitUserData Retrieve user committed data. Declaration public abstract IDictionary<string, string> CommitUserData { get; } Property Value Type Description IDictionary < System.String , System.String > See Also CommitData | Improve this Doc View Source Count Returns the number of categories in the taxonomy. Note that the number of categories returned is often slightly higher than the number of categories inserted into the taxonomy; This is because when a category is added to the taxonomy, its ancestors are also added automatically (including the root, which always get ordinal 0). Declaration public abstract int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ParallelTaxonomyArrays Returns a ParallelTaxonomyArrays object which can be used to efficiently traverse the taxonomy tree. Declaration public abstract ParallelTaxonomyArrays ParallelTaxonomyArrays { get; } Property Value Type Description ParallelTaxonomyArrays | Improve this Doc View Source RefCount Returns the current refCount for this taxonomy reader. Declaration public int RefCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source DecRef() Expert: decreases the refCount of this TaxonomyReader instance. If the refCount drops to 0 this taxonomy reader is closed. Declaration public void DecRef() | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source DoClose() performs the actual task of closing the resources that are used by the taxonomy reader. Declaration protected abstract void DoClose() | Improve this Doc View Source DoOpenIfChanged() Implements the actual opening of a new TaxonomyReader instance if the taxonomy has changed. Declaration protected abstract TaxonomyReader DoOpenIfChanged() Returns Type Description TaxonomyReader See Also OpenIfChanged<T>(T) | Improve this Doc View Source EnsureOpen() Throws if this is disposed Declaration protected void EnsureOpen() | Improve this Doc View Source GetChildren(Int32) Returns an iterator over the children of the given ordinal. Declaration public virtual TaxonomyReader.ChildrenIterator GetChildren(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description TaxonomyReader.ChildrenIterator | Improve this Doc View Source GetOrdinal(FacetLabel) Returns the ordinal of the category given as a path. The ordinal is the category's serial number, an integer which starts with 0 and grows as more categories are added (note that once a category is added, it can never be deleted). Declaration public abstract int GetOrdinal(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 the category's ordinal or INVALID_ORDINAL if the category wasn't found. | Improve this Doc View Source GetOrdinal(String, String[]) Returns ordinal for the dim + path. Declaration public virtual int GetOrdinal(string dim, string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Int32 | Improve this Doc View Source GetPath(Int32) Returns the path name of the category with the given ordinal. Declaration public abstract FacetLabel GetPath(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description FacetLabel | Improve this Doc View Source IncRef() Expert: increments the refCount of this TaxonomyReader instance. RefCounts can be used to determine when a taxonomy reader can be closed safely, i.e. as soon as there are no more references. Be sure to always call a corresponding DecRef() , in a finally clause; otherwise the reader may never be disposed. Declaration public void IncRef() | Improve this Doc View Source OpenIfChanged<T>(T) If the taxonomy has changed since the provided reader was opened, open and return a new TaxonomyReader ; else, return null . The new reader, if not null , will be the same type of reader as the one given to this method. This method is typically far less costly than opening a fully new TaxonomyReader as it shares resources with the provided TaxonomyReader , when possible. Declaration public static T OpenIfChanged<T>(T oldTaxoReader) where T : TaxonomyReader Parameters Type Name Description T oldTaxoReader Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source TryIncRef() Expert: increments the refCount of this TaxonomyReader instance only if it has not been closed yet. Returns true on success. Declaration public bool TryIncRef() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.Cl2oTaxonomyWriterCache.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.Cl2oTaxonomyWriterCache.html",
    "title": "Class Cl2oTaxonomyWriterCache | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Cl2oTaxonomyWriterCache ITaxonomyWriterCache using CompactLabelToOrdinal . Although called cache, it maintains in memory all the mappings from category to ordinal, relying on that CompactLabelToOrdinal is an efficient mapping for this purpose. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Cl2oTaxonomyWriterCache Implements ITaxonomyWriterCache IDisposable Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class Cl2oTaxonomyWriterCache : object, ITaxonomyWriterCache, IDisposable Constructors | Improve this Doc View Source Cl2oTaxonomyWriterCache(Int32, Single, Int32) Sole constructor. Declaration public Cl2oTaxonomyWriterCache(int initialCapcity, float loadFactor, int numHashArrays) Parameters Type Name Description System.Int32 initialCapcity System.Single loadFactor System.Int32 numHashArrays Properties | Improve this Doc View Source IsFull Declaration public virtual bool IsFull { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source Dispose() Declaration public virtual void Dispose() | Improve this Doc View Source Get(FacetLabel) Declaration public virtual int Get(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source GetMemoryUsage() Returns the number of bytes in memory used by this object. Declaration public virtual int GetMemoryUsage() Returns Type Description System.Int32 | Improve this Doc View Source Put(FacetLabel, Int32) Declaration public virtual bool Put(FacetLabel categoryPath, int ordinal) Parameters Type Name Description FacetLabel categoryPath System.Int32 ordinal Returns Type Description System.Boolean Implements ITaxonomyWriterCache IDisposable"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.CollisionMap.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.CollisionMap.html",
    "title": "Class CollisionMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollisionMap HashMap to store colliding labels. See CompactLabelToOrdinal for details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CollisionMap Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class CollisionMap : object Properties | Improve this Doc View Source Capacity How many slots are allocated. Declaration public virtual int Capacity { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Count How many mappings. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddLabel(FacetLabel, Int32, Int32) Add another mapping. Declaration public virtual int AddLabel(FacetLabel label, int hash, int cid) Parameters Type Name Description FacetLabel label System.Int32 hash System.Int32 cid Returns Type Description System.Int32 | Improve this Doc View Source AddLabelOffset(Int32, Int32, Int32) This method does not check if the same value is already in the map because we pass in an char-array offset, so so we now that we're in resize-mode here. Declaration public virtual void AddLabelOffset(int hash, int offset, int cid) Parameters Type Name Description System.Int32 hash System.Int32 offset System.Int32 cid | Improve this Doc View Source Get(FacetLabel, Int32) Return the mapping, or INVALID_ORDINAL if the label isn't recognized. Declaration public virtual int Get(FacetLabel label, int hash) Parameters Type Name Description FacetLabel label System.Int32 hash Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.html",
    "title": "Class CompactLabelToOrdinal | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompactLabelToOrdinal This is a very efficient LabelToOrdinal implementation that uses a Lucene.Net.Facet.Taxonomy.WriterCache.CharBlockArray to store all labels and a configurable number of Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s to reference the labels. Since the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s don't handle collisions, a CollisionMap is used to store the colliding labels. This data structure grows by adding a new HashArray whenever the number of collisions in the CollisionMap exceeds Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.loadFactor GetMaxOrdinal(). Growing also includes reinserting all colliding labels into the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s to possibly reduce the number of collisions. For setting the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.loadFactor see CompactLabelToOrdinal(Int32, Single, Int32) . This data structure has a much lower memory footprint (~30%) compared to a Java HashMap<String, Integer>. It also only uses a small fraction of objects a HashMap would use, thus limiting the GC overhead. Ingestion speed was also ~50% faster compared to a HashMap for 3M unique labels. @lucene.experimental Inheritance System.Object LabelToOrdinal CompactLabelToOrdinal Inherited Members LabelToOrdinal.m_counter LabelToOrdinal.INVALID_ORDINAL LabelToOrdinal.MaxOrdinal LabelToOrdinal.GetNextOrdinal() Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class CompactLabelToOrdinal : LabelToOrdinal Constructors | Improve this Doc View Source CompactLabelToOrdinal(Int32, Single, Int32) Sole constructor. Declaration public CompactLabelToOrdinal(int initialCapacity, float loadFactor, int numHashArrays) Parameters Type Name Description System.Int32 initialCapacity System.Single loadFactor System.Int32 numHashArrays Fields | Improve this Doc View Source DefaultLoadFactor Default maximum load factor. Declaration public const float DefaultLoadFactor = null Field Value Type Description System.Single | Improve this Doc View Source TERMINATOR_CHAR Declaration public const char TERMINATOR_CHAR = null Field Value Type Description System.Char Properties | Improve this Doc View Source SizeOfMap How many labels. Declaration public virtual int SizeOfMap { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddLabel(FacetLabel, Int32) Declaration public override void AddLabel(FacetLabel label, int ordinal) Parameters Type Name Description FacetLabel label System.Int32 ordinal Overrides LabelToOrdinal.AddLabel(FacetLabel, Int32) | Improve this Doc View Source GetOrdinal(FacetLabel) Declaration public override int GetOrdinal(FacetLabel label) Parameters Type Name Description FacetLabel label Returns Type Description System.Int32 Overrides LabelToOrdinal.GetOrdinal(FacetLabel)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.html",
    "title": "Namespace Lucene.Net.Facet.Taxonomy.WriterCache | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.Taxonomy.WriterCache <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Improves indexing time by caching a map of CategoryPath to their Ordinal. Classes Cl2oTaxonomyWriterCache ITaxonomyWriterCache using CompactLabelToOrdinal . Although called cache, it maintains in memory all the mappings from category to ordinal, relying on that CompactLabelToOrdinal is an efficient mapping for this purpose. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CollisionMap HashMap to store colliding labels. See CompactLabelToOrdinal for details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompactLabelToOrdinal This is a very efficient LabelToOrdinal implementation that uses a Lucene.Net.Facet.Taxonomy.WriterCache.CharBlockArray to store all labels and a configurable number of Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s to reference the labels. Since the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s don't handle collisions, a CollisionMap is used to store the colliding labels. This data structure grows by adding a new HashArray whenever the number of collisions in the CollisionMap exceeds Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.loadFactor GetMaxOrdinal(). Growing also includes reinserting all colliding labels into the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s to possibly reduce the number of collisions. For setting the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.loadFactor see CompactLabelToOrdinal(Int32, Single, Int32) . This data structure has a much lower memory footprint (~30%) compared to a Java HashMap<String, Integer>. It also only uses a small fraction of objects a HashMap would use, thus limiting the GC overhead. Ingestion speed was also ~50% faster compared to a HashMap for 3M unique labels. @lucene.experimental LabelToOrdinal Abstract class for storing Label->Ordinal mappings in a taxonomy. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LruTaxonomyWriterCache LRU ITaxonomyWriterCache - good choice for huge taxonomies. This is a Lucene.NET EXPERIMENTAL API, use at your own risk NameHashInt32CacheLRU An an LRU cache of mapping from name to int. Used to cache Ordinals of category paths. It uses as key, hash of the path instead of the path. This way the cache takes less RAM, but correctness depends on assuming no collisions. NOTE: this was NameHashIntCacheLRU in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk NameInt32CacheLRU An an LRU cache of mapping from name to int. Used to cache Ordinals of category paths. NOTE: This was NameIntCacheLRU in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces ITaxonomyWriterCache ITaxonomyWriterCache is a relatively simple interface for a cache of category->ordinal mappings, used in ITaxonomyWriter implementations (such as DirectoryTaxonomyWriter ). It basically has Put(FacetLabel, Int32) methods for adding a mapping, and Get(FacetLabel) for looking a mapping up the cache. The cache does not guarantee to hold everything that has been put into it, and might in fact selectively delete some of the mappings (e.g., the ones least recently used). This means that if Get(FacetLabel) returns a negative response, it does not necessarily mean that the category doesn't exist - just that it is not in the cache. The caller can only infer that the category doesn't exist if it knows the cache to be complete (because all the categories were loaded into the cache, and since then no Put(FacetLabel, Int32) returned true). However, if it does so, it should clear out large parts of the cache at once, because the user will typically need to work hard to recover from every cache cleanup (see Put(FacetLabel, Int32) 's return value). NOTE: the cache may be accessed concurrently by multiple threads, therefore cache implementations should take this into consideration. @lucene.experimental Enums LruTaxonomyWriterCache.LRUType Determines cache type. For guaranteed correctness - not relying on no-collisions in the hash function, LRU_STRING should be used."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.ITaxonomyWriterCache.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.ITaxonomyWriterCache.html",
    "title": "Interface ITaxonomyWriterCache | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITaxonomyWriterCache ITaxonomyWriterCache is a relatively simple interface for a cache of category->ordinal mappings, used in ITaxonomyWriter implementations (such as DirectoryTaxonomyWriter ). It basically has Put(FacetLabel, Int32) methods for adding a mapping, and Get(FacetLabel) for looking a mapping up the cache. The cache does not guarantee to hold everything that has been put into it, and might in fact selectively delete some of the mappings (e.g., the ones least recently used). This means that if Get(FacetLabel) returns a negative response, it does not necessarily mean that the category doesn't exist - just that it is not in the cache. The caller can only infer that the category doesn't exist if it knows the cache to be complete (because all the categories were loaded into the cache, and since then no Put(FacetLabel, Int32) returned true). However, if it does so, it should clear out large parts of the cache at once, because the user will typically need to work hard to recover from every cache cleanup (see Put(FacetLabel, Int32) 's return value). NOTE: the cache may be accessed concurrently by multiple threads, therefore cache implementations should take this into consideration. @lucene.experimental Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public interface ITaxonomyWriterCache : IDisposable Properties | Improve this Doc View Source IsFull Returns true if the cache is full, such that the next Put(FacetLabel, Int32) will evict entries from it, false otherwise. Declaration bool IsFull { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Clear() Clears the content of the cache. Unlike , the caller can assume that the cache is still operable after this method returns. Declaration void Clear() | Improve this Doc View Source Get(FacetLabel) Lookup a category in the cache, returning its ordinal, or a negative number if the category is not in the cache. It is up to the caller to remember what a negative response means: If the caller knows the cache is complete (it was initially fed with all the categories, and since then Put(FacetLabel, Int32) never returned true) it means the category does not exist. Otherwise, the category might still exist, but just be missing from the cache. Declaration int Get(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source Put(FacetLabel, Int32) Add a category to the cache, with the given ordinal as the value. If the implementation keeps only a partial cache (e.g., an LRU cache) and finds that its cache is full, it should clear up part of the cache and return true . Otherwise, it should return false . The reason why the caller needs to know if part of the cache was cleared is that in that case it will have to commit its on-disk index (so that all the latest category additions can be searched on disk, if we can't rely on the cache to contain them). Ordinals should be non-negative. Currently there is no defined way to specify that a cache should remember a category does NOT exist. It doesn't really matter, because normally the next thing we do after finding that a category does not exist is to add it. Declaration bool Put(FacetLabel categoryPath, int ordinal) Parameters Type Name Description FacetLabel categoryPath System.Int32 ordinal Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LabelToOrdinal.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LabelToOrdinal.html",
    "title": "Class LabelToOrdinal | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LabelToOrdinal Abstract class for storing Label->Ordinal mappings in a taxonomy. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LabelToOrdinal CompactLabelToOrdinal Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public abstract class LabelToOrdinal : object Constructors | Improve this Doc View Source LabelToOrdinal() Default constructor. Declaration public LabelToOrdinal() Fields | Improve this Doc View Source INVALID_ORDINAL Returned by GetOrdinal(FacetLabel) when the label isn't recognized. Declaration public const int INVALID_ORDINAL = null Field Value Type Description System.Int32 | Improve this Doc View Source m_counter How many ordinals we've seen. Declaration protected int m_counter Field Value Type Description System.Int32 Properties | Improve this Doc View Source MaxOrdinal return the maximal Ordinal assigned so far Declaration public virtual int MaxOrdinal { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddLabel(FacetLabel, Int32) Adds a new label if its not yet in the table. Throws an if the same label with a different ordinal was previoulsy added to this table. Declaration public abstract void AddLabel(FacetLabel label, int ordinal) Parameters Type Name Description FacetLabel label System.Int32 ordinal | Improve this Doc View Source GetNextOrdinal() Returns the next unassigned ordinal. The default behavior of this method is to simply increment a counter. Declaration public virtual int GetNextOrdinal() Returns Type Description System.Int32 | Improve this Doc View Source GetOrdinal(FacetLabel) Returns the ordinal assigned to the given label, or INVALID_ORDINAL if the label cannot be found in this table. Declaration public abstract int GetOrdinal(FacetLabel label) Parameters Type Name Description FacetLabel label Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.html",
    "title": "Class LruTaxonomyWriterCache | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LruTaxonomyWriterCache LRU ITaxonomyWriterCache - good choice for huge taxonomies. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LruTaxonomyWriterCache Implements ITaxonomyWriterCache IDisposable Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class LruTaxonomyWriterCache : object, ITaxonomyWriterCache, IDisposable Constructors | Improve this Doc View Source LruTaxonomyWriterCache(Int32) Creates this with LRU_HASHED method. Declaration public LruTaxonomyWriterCache(int cacheSize) Parameters Type Name Description System.Int32 cacheSize | Improve this Doc View Source LruTaxonomyWriterCache(Int32, LruTaxonomyWriterCache.LRUType) Creates this with the specified method. Declaration public LruTaxonomyWriterCache(int cacheSize, LruTaxonomyWriterCache.LRUType lruType) Parameters Type Name Description System.Int32 cacheSize LruTaxonomyWriterCache.LRUType lruType Properties | Improve this Doc View Source IsFull Declaration public virtual bool IsFull { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source Dispose() Declaration public virtual void Dispose() | Improve this Doc View Source Get(FacetLabel) Declaration public virtual int Get(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source Put(FacetLabel, Int32) Declaration public virtual bool Put(FacetLabel categoryPath, int ordinal) Parameters Type Name Description FacetLabel categoryPath System.Int32 ordinal Returns Type Description System.Boolean Implements ITaxonomyWriterCache IDisposable"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.LRUType.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.LRUType.html",
    "title": "Enum LruTaxonomyWriterCache.LRUType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum LruTaxonomyWriterCache.LRUType Determines cache type. For guaranteed correctness - not relying on no-collisions in the hash function, LRU_STRING should be used. Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public enum LRUType : int Fields Name Description LRU_HASHED Use the label's hash as the key; this can lead to silent conflicts! LRU_STRING Use the label as the hash key; this is always correct but will usually use more RAM."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.NameHashInt32CacheLRU.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.NameHashInt32CacheLRU.html",
    "title": "Class NameHashInt32CacheLRU | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NameHashInt32CacheLRU An an LRU cache of mapping from name to int. Used to cache Ordinals of category paths. It uses as key, hash of the path instead of the path. This way the cache takes less RAM, but correctness depends on assuming no collisions. NOTE: this was NameHashIntCacheLRU in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NameInt32CacheLRU NameHashInt32CacheLRU Inherited Members NameInt32CacheLRU.Limit NameInt32CacheLRU.Count Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class NameHashInt32CacheLRU : NameInt32CacheLRU"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.NameInt32CacheLRU.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.NameInt32CacheLRU.html",
    "title": "Class NameInt32CacheLRU | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NameInt32CacheLRU An an LRU cache of mapping from name to int. Used to cache Ordinals of category paths. NOTE: This was NameIntCacheLRU in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NameInt32CacheLRU NameHashInt32CacheLRU Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class NameInt32CacheLRU : object Remarks Note: Nothing in this class is synchronized. The caller is assumed to be synchronized so that no two methods of this class are called concurrently. Properties | Improve this Doc View Source Count Number of entries currently in the cache. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Limit Maximum number of cache entries before eviction. Declaration public virtual int Limit { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndInt32Queue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndInt32Queue.html",
    "title": "Class TopOrdAndInt32Queue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopOrdAndInt32Queue Keeps highest results, first by largest value, then tie break by smallest ord. NOTE: This was TopOrdAndIntQueue in Lucene Inheritance System.Object TopOrdAndInt32Queue Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class TopOrdAndInt32Queue : PriorityQueue<TopOrdAndInt32Queue.OrdAndValue> Constructors | Improve this Doc View Source TopOrdAndInt32Queue(Int32) Sole constructor. Declaration public TopOrdAndInt32Queue(int topN) Parameters Type Name Description System.Int32 topN Methods | Improve this Doc View Source LessThan(TopOrdAndInt32Queue.OrdAndValue, TopOrdAndInt32Queue.OrdAndValue) Declaration protected override bool LessThan(TopOrdAndInt32Queue.OrdAndValue a, TopOrdAndInt32Queue.OrdAndValue b) Parameters Type Name Description TopOrdAndInt32Queue.OrdAndValue a TopOrdAndInt32Queue.OrdAndValue b Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndInt32Queue.OrdAndValue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndInt32Queue.OrdAndValue.html",
    "title": "Class TopOrdAndInt32Queue.OrdAndValue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopOrdAndInt32Queue.OrdAndValue Holds a single entry. Inheritance System.Object TopOrdAndInt32Queue.OrdAndValue Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class OrdAndValue : object Constructors | Improve this Doc View Source OrdAndValue() Default constructor. Declaration public OrdAndValue() Properties | Improve this Doc View Source Ord Ordinal of the entry. Declaration public int Ord { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Value Value associated with the ordinal. Declaration public int Value { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndSingleQueue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndSingleQueue.html",
    "title": "Class TopOrdAndSingleQueue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopOrdAndSingleQueue Keeps highest results, first by largest value, then tie break by smallest ord. NOTE: This was TopOrdAndFloatQueue in Lucene Inheritance System.Object TopOrdAndSingleQueue Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class TopOrdAndSingleQueue : PriorityQueue<TopOrdAndSingleQueue.OrdAndValue> Constructors | Improve this Doc View Source TopOrdAndSingleQueue(Int32) Sole constructor. Declaration public TopOrdAndSingleQueue(int topN) Parameters Type Name Description System.Int32 topN Methods | Improve this Doc View Source LessThan(TopOrdAndSingleQueue.OrdAndValue, TopOrdAndSingleQueue.OrdAndValue) Declaration protected override bool LessThan(TopOrdAndSingleQueue.OrdAndValue a, TopOrdAndSingleQueue.OrdAndValue b) Parameters Type Name Description TopOrdAndSingleQueue.OrdAndValue a TopOrdAndSingleQueue.OrdAndValue b Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndSingleQueue.OrdAndValue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndSingleQueue.OrdAndValue.html",
    "title": "Class TopOrdAndSingleQueue.OrdAndValue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopOrdAndSingleQueue.OrdAndValue Holds a single entry. Inheritance System.Object TopOrdAndSingleQueue.OrdAndValue Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class OrdAndValue : object Constructors | Improve this Doc View Source OrdAndValue() Default constructor. Declaration public OrdAndValue() Properties | Improve this Doc View Source Ord Ordinal of the entry. Declaration public int Ord { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Value Value associated with the ordinal. Declaration public float Value { get; set; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector.html",
    "title": "Class AbstractAllGroupHeadsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector LUCENENET specific class used to reference an AbstractAllGroupHeadsCollector<GH> subclass without refering to its generic closing type. Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector <GH> Implements ICollector Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupHeadsCollector : object, ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Return true if this collector does not require the matching docIDs to be delivered in int sort order (smallest to largest) to Collect(Int32) . Most Lucene Query implementations will visit matching docIDs in order. However, some queries (currently limited to certain cases of BooleanQuery ) can achieve faster searching if the ICollector allows them to deliver the docIDs out of order. Many collectors don't mind getting docIDs out of order, so it's important to return true here. Declaration public abstract bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source GroupHeadsCount The number of group heads found for a query. LUCENENET NOTE: This was groupHeadsSize() in Lucene Declaration public abstract int GroupHeadsCount { get; } Property Value Type Description System.Int32 the number of group heads found for a query. Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call or on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source RetrieveGroupHeadAndAddIfNotExist(Int32) Returns the group head and puts it into AbstractAllGroupHeadsCollector<GH>.TemporalResult . If the group head wasn't encountered before then it will be added to the collected group heads. The Stop property will be true if the group head wasn't encountered before otherwise false . Declaration protected abstract void RetrieveGroupHeadAndAddIfNotExist(int doc) Parameters Type Name Description System.Int32 doc The document to retrieve the group head for. | Improve this Doc View Source RetrieveGroupHeads() Declaration public abstract int[] RetrieveGroupHeads() Returns Type Description System.Int32 [] an int array containing all group heads. The size of the array is equal to number of collected unique groups. | Improve this Doc View Source RetrieveGroupHeads(Int32) Declaration public abstract FixedBitSet RetrieveGroupHeads(int maxDoc) Parameters Type Name Description System.Int32 maxDoc The maxDoc of the top level IndexReader Returns Type Description FixedBitSet a FixedBitSet containing all group heads. | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Called before successive calls to Collect(Int32) . Implementations that need the score of the current document (passed-in to ), should save the passed-in Scorer and call scorer.Score() when needed. Declaration public abstract void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector_GroupHead.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector_GroupHead.html",
    "title": "Class AbstractAllGroupHeadsCollector_GroupHead | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector_GroupHead Represents a group head. A group head is the most relevant document for a particular group. The relevancy is based is usually based on the sort. The group head contains a group value with its associated most relevant document id. Inheritance System.Object AbstractAllGroupHeadsCollector_GroupHead FunctionAllGroupHeadsCollector.GroupHead Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupHeadsCollector_GroupHead : object Remarks LUCENENET: moved this class from being a nested class of AbstractAllGroupHeadsCollector<GH> , made it non-generic so the generic closing type doesn't need to be specified in classes that use AbstractAllGroupHeadsCollector_GroupHead as a generic closing type, and renamed it from GroupHead to AbstractAllGroupHeadsCollector_GroupHead to avoid naming conflicts with nested classes named GroupHead in derived classes of AbstractAllGroupHeadsCollector . Constructors | Improve this Doc View Source AbstractAllGroupHeadsCollector_GroupHead(Int32) Declaration protected AbstractAllGroupHeadsCollector_GroupHead(int doc) Parameters Type Name Description System.Int32 doc Properties | Improve this Doc View Source Doc Declaration public int Doc { get; protected set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Compare(Int32, Int32) Compares the specified document for a specified comparer against the current most relevant document. Declaration public abstract int Compare(int compIDX, int doc) Parameters Type Name Description System.Int32 compIDX The comparer index of the specified comparer. System.Int32 doc The specified document. Returns Type Description System.Int32 -1 if the specified document wasn't competitive against the current most relevant document, 1 if the specified document was competitive against the current most relevant document. Otherwise 0. | Improve this Doc View Source UpdateDocHead(Int32) Updates the current most relevant document with the specified document. Declaration public abstract void UpdateDocHead(int doc) Parameters Type Name Description System.Int32 doc The specified document"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.html",
    "title": "Class AbstractAllGroupHeadsCollector<GH> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector<GH> This collector specializes in collecting the most relevant document (group head) for each group that match the query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector<GH> FunctionAllGroupHeadsCollector TermAllGroupHeadsCollector<GH> Implements ICollector Inherited Members AbstractAllGroupHeadsCollector.SetScorer(Scorer) AbstractAllGroupHeadsCollector.SetNextReader(AtomicReaderContext) Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupHeadsCollector<GH> : AbstractAllGroupHeadsCollector, ICollector where GH : AbstractAllGroupHeadsCollector_GroupHead Type Parameters Name Description GH Constructors | Improve this Doc View Source AbstractAllGroupHeadsCollector(Int32) Declaration protected AbstractAllGroupHeadsCollector(int numberOfSorts) Parameters Type Name Description System.Int32 numberOfSorts Fields | Improve this Doc View Source m_compIDXEnd Declaration protected readonly int m_compIDXEnd Field Value Type Description System.Int32 | Improve this Doc View Source m_reversed Declaration protected readonly int[] m_reversed Field Value Type Description System.Int32 [] | Improve this Doc View Source m_temporalResult Declaration protected readonly AbstractAllGroupHeadsCollector<GH>.TemporalResult m_temporalResult Field Value Type Description AbstractAllGroupHeadsCollector.TemporalResult <> Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public override bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Overrides AbstractAllGroupHeadsCollector.AcceptsDocsOutOfOrder | Improve this Doc View Source CollectedGroupHeads Returns the collected group heads. Subsequent calls should return the same group heads. Declaration protected abstract ICollection<GH> CollectedGroupHeads { get; } Property Value Type Description ICollection <GH> the collected group heads | Improve this Doc View Source GroupHeadsCount The number of group heads found for a query. LUCENENET NOTE: This was groupHeadsSize() in Lucene Declaration public override int GroupHeadsCount { get; } Property Value Type Description System.Int32 the number of group heads found for a query. Overrides AbstractAllGroupHeadsCollector.GroupHeadsCount Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides AbstractAllGroupHeadsCollector.Collect(Int32) | Improve this Doc View Source RetrieveGroupHeadAndAddIfNotExist(Int32) Returns the group head and puts it into AbstractAllGroupHeadsCollector<GH>.TemporalResult . If the group head wasn't encountered before then it will be added to the collected group heads. The Stop property will be true if the group head wasn't encountered before otherwise false . Declaration protected abstract override void RetrieveGroupHeadAndAddIfNotExist(int doc) Parameters Type Name Description System.Int32 doc The document to retrieve the group head for. Overrides AbstractAllGroupHeadsCollector.RetrieveGroupHeadAndAddIfNotExist(Int32) | Improve this Doc View Source RetrieveGroupHeads() Declaration public override int[] RetrieveGroupHeads() Returns Type Description System.Int32 [] an int array containing all group heads. The size of the array is equal to number of collected unique groups. Overrides AbstractAllGroupHeadsCollector.RetrieveGroupHeads() | Improve this Doc View Source RetrieveGroupHeads(Int32) Declaration public override FixedBitSet RetrieveGroupHeads(int maxDoc) Parameters Type Name Description System.Int32 maxDoc The maxDoc of the top level IndexReader Returns Type Description FixedBitSet a FixedBitSet containing all group heads. Overrides AbstractAllGroupHeadsCollector.RetrieveGroupHeads(Int32) Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.TemporalResult.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.TemporalResult.html",
    "title": "Class AbstractAllGroupHeadsCollector<GH>.TemporalResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector<GH>.TemporalResult Contains the result of group head retrieval. To prevent new object creations of this class for every collect. Inheritance System.Object AbstractAllGroupHeadsCollector<GH>.TemporalResult Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax protected class TemporalResult : object Properties | Improve this Doc View Source GroupHead Declaration public GH GroupHead { get; set; } Property Value Type Description GH | Improve this Doc View Source Stop Declaration public bool Stop { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupsCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupsCollector-1.html",
    "title": "Class AbstractAllGroupsCollector<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAllGroupsCollector<TGroupValue> A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. This is an abstract version. Concrete implementations define what a group actually is and how it is internally collected. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupsCollector<TGroupValue> FunctionAllGroupsCollector TermAllGroupsCollector Implements IAbstractAllGroupsCollector <TGroupValue> ICollector Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupsCollector<TGroupValue> : object, IAbstractAllGroupsCollector<TGroupValue>, ICollector Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source GroupCount Returns the total number of groups for the executed search. This is a convenience method. The following code snippet has the same effect: GetGroups().Count Declaration public virtual int GroupCount { get; } Property Value Type Description System.Int32 The total number of groups for the executed search | Improve this Doc View Source Groups Returns the group values This is an unordered collections of group values. For each group that matched the query there is a BytesRef representing a group value. Declaration public abstract IEnumerable<TGroupValue> Groups { get; } Property Value Type Description IEnumerable <TGroupValue> the group values Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call or on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements IAbstractAllGroupsCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.GroupCount-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.GroupCount-1.html",
    "title": "Class AbstractDistinctValuesCollector.GroupCount<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractDistinctValuesCollector.GroupCount<TGroupValue> Returned by Groups , representing the value and set of distinct values for the group. Inheritance System.Object AbstractDistinctValuesCollector.GroupCount<TGroupValue> FunctionDistinctValuesCollector.GroupCount TermDistinctValuesCollector.GroupCount Implements AbstractDistinctValuesCollector.IGroupCount <TGroupValue> Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class GroupCount<TGroupValue> : object, AbstractDistinctValuesCollector.IGroupCount<TGroupValue> Type Parameters Name Description TGroupValue Remarks LUCENENET - removed this class from being a nested class of AbstractDistinctValuesCollector<GC> and renamed from GroupCount to AbstractGroupCount Constructors | Improve this Doc View Source GroupCount(TGroupValue) Declaration public GroupCount(TGroupValue groupValue) Parameters Type Name Description TGroupValue groupValue Properties | Improve this Doc View Source GroupValue Declaration public TGroupValue GroupValue { get; protected set; } Property Value Type Description TGroupValue | Improve this Doc View Source UniqueValues Declaration public IEnumerable<TGroupValue> UniqueValues { get; protected set; } Property Value Type Description IEnumerable <TGroupValue> Implements AbstractDistinctValuesCollector.IGroupCount<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.html",
    "title": "Class AbstractDistinctValuesCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractDistinctValuesCollector LUCENENET specific class used to nest the AbstractDistinctValuesCollector.GroupCount<TGroupValue> class so it has similar syntax to that in Java Lucene (AbstractDistinctValuesCollector.GroupCount{TGroupValue} rather than AbstractDistinctValuesCollector{GC}.GroupCount{TGroupValue}). Inheritance System.Object AbstractDistinctValuesCollector Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class AbstractDistinctValuesCollector : object"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.IGroupCount-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.IGroupCount-1.html",
    "title": "Interface AbstractDistinctValuesCollector.IGroupCount<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface AbstractDistinctValuesCollector.IGroupCount<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IGroupCount<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupValue Declaration TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source UniqueValues Declaration IEnumerable<TGroupValue> UniqueValues { get; } Property Value Type Description IEnumerable <TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector-1.html",
    "title": "Class AbstractDistinctValuesCollector<GC> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractDistinctValuesCollector<GC> A second pass grouping collector that keeps track of distinct values for a specified field for the top N group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector<GC> FunctionDistinctValuesCollector TermDistinctValuesCollector Implements IAbstractDistinctValuesCollector <GC> ICollector Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractDistinctValuesCollector<GC> : object, IAbstractDistinctValuesCollector<GC>, ICollector where GC : AbstractDistinctValuesCollector.IGroupCount<object> Type Parameters Name Description GC Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Groups Returns all unique values for each top N group. Declaration public abstract IEnumerable<GC> Groups { get; } Property Value Type Description IEnumerable <GC> all unique values for each top N group Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call or on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements IAbstractDistinctValuesCollector<GC> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector-1.html",
    "title": "Class AbstractFirstPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractFirstPassGroupingCollector<TGroupValue> FirstPassGroupingCollector is the first of two passes necessary to collect grouped hits. This pass gathers the top N sorted groups. Concrete subclasses define what a group is and how it is internally collected. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractFirstPassGroupingCollector<TGroupValue> FunctionFirstPassGroupingCollector TermFirstPassGroupingCollector Implements IAbstractFirstPassGroupingCollector <TGroupValue> ICollector Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractFirstPassGroupingCollector<TGroupValue> : object, IAbstractFirstPassGroupingCollector<TGroupValue>, ICollector Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source AbstractFirstPassGroupingCollector(Sort, Int32) Create the first pass collector. Declaration public AbstractFirstPassGroupingCollector(Sort groupSort, int topNGroups) Parameters Type Name Description Sort groupSort The Sort used to sort the groups. The top sorted document within each group according to groupSort, determines how that group sorts against other groups. This must be non-null, ie, if you want to groupSort by relevance use Sort.RELEVANCE. System.Int32 topNGroups How many top groups to keep. Fields | Improve this Doc View Source m_orderedGroups Declaration protected SortedSet<CollectedSearchGroup<TGroupValue>> m_orderedGroups Field Value Type Description SortedSet < CollectedSearchGroup <TGroupValue>> Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source CopyDocGroupValue(TGroupValue, TGroupValue) Returns a copy of the specified group value by creating a new instance and copying the value from the specified groupValue in the new instance. Or optionally the reuse argument can be used to copy the group value in. Declaration protected abstract TGroupValue CopyDocGroupValue(TGroupValue groupValue, TGroupValue reuse) Parameters Type Name Description TGroupValue groupValue The group value to copy TGroupValue reuse Optionally a reuse instance to prevent a new instance creation Returns Type Description TGroupValue a copy of the specified group value | Improve this Doc View Source GetDocGroupValue(Int32) Returns the group value for the specified doc. Declaration protected abstract TGroupValue GetDocGroupValue(int doc) Parameters Type Name Description System.Int32 doc The specified doc Returns Type Description TGroupValue the group value for the specified doc | Improve this Doc View Source GetTopGroups(Int32, Boolean) Returns top groups, starting from offset. This may return null, if no groups were collected, or if the number of unique groups collected is <= offset. Declaration public virtual IEnumerable<ISearchGroup<TGroupValue>> GetTopGroups(int groupOffset, bool fillFields) Parameters Type Name Description System.Int32 groupOffset The offset in the collected groups System.Boolean fillFields Whether to fill to SortValues Returns Type Description IEnumerable < ISearchGroup <TGroupValue>> top groups, starting from offset | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements IAbstractFirstPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.AbstractSegmentResult.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.AbstractSegmentResult.html",
    "title": "Class AbstractGroupFacetCollector.AbstractSegmentResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractGroupFacetCollector.AbstractSegmentResult Contains the local grouped segment counts for a particular segment. Each AbstractGroupFacetCollector.AbstractSegmentResult must be added together. Inheritance System.Object AbstractGroupFacetCollector.AbstractSegmentResult Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax protected abstract class AbstractSegmentResult : object Remarks LUCENENET NOTE: Renamed from SegmentResult to AbstractSegmentResult to avoid naming conflicts with subclasses. Constructors | Improve this Doc View Source AbstractSegmentResult(Int32[], Int32, Int32, Int32) Declaration protected AbstractSegmentResult(int[] counts, int total, int missing, int maxTermPos) Parameters Type Name Description System.Int32 [] counts System.Int32 total System.Int32 missing System.Int32 maxTermPos Fields | Improve this Doc View Source m_counts Declaration protected readonly int[] m_counts Field Value Type Description System.Int32 [] | Improve this Doc View Source m_maxTermPos Declaration protected readonly int m_maxTermPos Field Value Type Description System.Int32 | Improve this Doc View Source m_mergePos Declaration protected int m_mergePos Field Value Type Description System.Int32 | Improve this Doc View Source m_mergeTerm Declaration protected BytesRef m_mergeTerm Field Value Type Description BytesRef | Improve this Doc View Source m_missing Declaration protected readonly int m_missing Field Value Type Description System.Int32 | Improve this Doc View Source m_total Declaration protected readonly int m_total Field Value Type Description System.Int32 Methods | Improve this Doc View Source NextTerm() Go to next term in this AbstractGroupFacetCollector.AbstractSegmentResult in order to retrieve the grouped facet counts. Declaration protected abstract void NextTerm()"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.FacetEntry.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.FacetEntry.html",
    "title": "Class AbstractGroupFacetCollector.FacetEntry | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractGroupFacetCollector.FacetEntry Represents a facet entry with a value and a count. Inheritance System.Object AbstractGroupFacetCollector.FacetEntry Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class FacetEntry : object Constructors | Improve this Doc View Source FacetEntry(BytesRef, Int32) Declaration public FacetEntry(BytesRef value, int count) Parameters Type Name Description BytesRef value System.Int32 count Properties | Improve this Doc View Source Count Gets the count (number of groups) of this facet entry. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Value Gets the value of this facet entry Declaration public virtual BytesRef Value { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.GroupedFacetResult.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.GroupedFacetResult.html",
    "title": "Class AbstractGroupFacetCollector.GroupedFacetResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractGroupFacetCollector.GroupedFacetResult The grouped facet result. Containing grouped facet entries, total count and total missing count. Inheritance System.Object AbstractGroupFacetCollector.GroupedFacetResult Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class GroupedFacetResult : object Constructors | Improve this Doc View Source GroupedFacetResult(Int32, Int32, Boolean, Int32, Int32) Declaration public GroupedFacetResult(int size, int minCount, bool orderByCount, int totalCount, int totalMissingCount) Parameters Type Name Description System.Int32 size System.Int32 minCount System.Boolean orderByCount System.Int32 totalCount System.Int32 totalMissingCount Properties | Improve this Doc View Source TotalCount Gets the sum of all facet entries counts. Declaration public virtual int TotalCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalMissingCount Gets the number of groups that didn't have a facet value. Declaration public virtual int TotalMissingCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddFacetCount(BytesRef, Int32) Declaration public virtual void AddFacetCount(BytesRef facetValue, int count) Parameters Type Name Description BytesRef facetValue System.Int32 count | Improve this Doc View Source GetFacetEntries(Int32, Int32) Returns a list of facet entries to be rendered based on the specified offset and limit. The facet entries are retrieved from the facet entries collected during merging. Declaration public virtual IList<AbstractGroupFacetCollector.FacetEntry> GetFacetEntries(int offset, int limit) Parameters Type Name Description System.Int32 offset The offset in the collected facet entries during merging System.Int32 limit The number of facets to return starting from the offset. Returns Type Description IList < AbstractGroupFacetCollector.FacetEntry > a list of facet entries to be rendered based on the specified offset and limit"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.html",
    "title": "Class AbstractGroupFacetCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractGroupFacetCollector Base class for computing grouped facets. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractGroupFacetCollector TermGroupFacetCollector Implements ICollector Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractGroupFacetCollector : object, ICollector Constructors | Improve this Doc View Source AbstractGroupFacetCollector(String, String, BytesRef) Declaration protected AbstractGroupFacetCollector(string groupField, string facetField, BytesRef facetPrefix) Parameters Type Name Description System.String groupField System.String facetField BytesRef facetPrefix Fields | Improve this Doc View Source m_endFacetOrd Declaration protected int m_endFacetOrd Field Value Type Description System.Int32 | Improve this Doc View Source m_facetField Declaration protected readonly string m_facetField Field Value Type Description System.String | Improve this Doc View Source m_facetPrefix Declaration protected readonly BytesRef m_facetPrefix Field Value Type Description BytesRef | Improve this Doc View Source m_groupField Declaration protected readonly string m_groupField Field Value Type Description System.String | Improve this Doc View Source m_segmentFacetCounts Declaration protected int[] m_segmentFacetCounts Field Value Type Description System.Int32 [] | Improve this Doc View Source m_segmentResults Declaration protected readonly IList<AbstractGroupFacetCollector.AbstractSegmentResult> m_segmentResults Field Value Type Description IList < AbstractGroupFacetCollector.AbstractSegmentResult > | Improve this Doc View Source m_segmentTotalCount Declaration protected int m_segmentTotalCount Field Value Type Description System.Int32 | Improve this Doc View Source m_startFacetOrd Declaration protected int m_startFacetOrd Field Value Type Description System.Int32 Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source CreateSegmentResult() Declaration protected abstract AbstractGroupFacetCollector.AbstractSegmentResult CreateSegmentResult() Returns Type Description AbstractGroupFacetCollector.AbstractSegmentResult | Improve this Doc View Source MergeSegmentResults(Int32, Int32, Boolean) Returns grouped facet results that were computed over zero or more segments. Grouped facet counts are merged from zero or more segment results. Declaration public virtual AbstractGroupFacetCollector.GroupedFacetResult MergeSegmentResults(int size, int minCount, bool orderByCount) Parameters Type Name Description System.Int32 size The total number of facets to include. This is typically offset + limit System.Int32 minCount The minimum count a facet entry should have to be included in the grouped facet result System.Boolean orderByCount Whether to sort the facet entries by facet entry count. If false then the facets are sorted lexicographically in ascending order. Returns Type Description AbstractGroupFacetCollector.GroupedFacetResult grouped facet results | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.html",
    "title": "Class AbstractSecondPassGroupingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractSecondPassGroupingCollector LUCENENET specific class used to simulate the syntax used to access nested classes of AbstractAllGroupHeadsCollector<GH> without referencing the generic closing type. Inheritance System.Object AbstractSecondPassGroupingCollector Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class AbstractSecondPassGroupingCollector : object"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.SearchGroupDocs-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.SearchGroupDocs-1.html",
    "title": "Class AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> Inheritance System.Object AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class SearchGroupDocs<TGroupValue> : object Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source SearchGroupDocs(TGroupValue, ITopDocsCollector) Declaration public SearchGroupDocs(TGroupValue groupValue, ITopDocsCollector collector) Parameters Type Name Description TGroupValue groupValue ITopDocsCollector collector Properties | Improve this Doc View Source Collector Declaration public ITopDocsCollector Collector { get; } Property Value Type Description ITopDocsCollector | Improve this Doc View Source GroupValue Declaration public TGroupValue GroupValue { get; } Property Value Type Description TGroupValue"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector-1.html",
    "title": "Class AbstractSecondPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractSecondPassGroupingCollector<TGroupValue> SecondPassGroupingCollector is the second of two passes necessary to collect grouped docs. This pass gathers the top N documents per top group computed from the first pass. Concrete subclasses define what a group is and how it is internally collected. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractSecondPassGroupingCollector<TGroupValue> FunctionSecondPassGroupingCollector TermSecondPassGroupingCollector Implements IAbstractSecondPassGroupingCollector <TGroupValue> ICollector Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractSecondPassGroupingCollector<TGroupValue> : object, IAbstractSecondPassGroupingCollector<TGroupValue>, ICollector Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source AbstractSecondPassGroupingCollector(IEnumerable<ISearchGroup<TGroupValue>>, Sort, Sort, Int32, Boolean, Boolean, Boolean) Declaration public AbstractSecondPassGroupingCollector(IEnumerable<ISearchGroup<TGroupValue>> groups, Sort groupSort, Sort withinGroupSort, int maxDocsPerGroup, bool getScores, bool getMaxScores, bool fillSortFields) Parameters Type Name Description IEnumerable < ISearchGroup <TGroupValue>> groups Sort groupSort Sort withinGroupSort System.Int32 maxDocsPerGroup System.Boolean getScores System.Boolean getMaxScores System.Boolean fillSortFields Fields | Improve this Doc View Source m_groupDocs Declaration protected AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue>[] m_groupDocs Field Value Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs <TGroupValue>[] | Improve this Doc View Source m_groupMap Declaration protected readonly IDictionary<TGroupValue, AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue>> m_groupMap Field Value Type Description IDictionary <TGroupValue, AbstractSecondPassGroupingCollector.SearchGroupDocs <TGroupValue>> Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source GetTopGroups(Int32) Declaration public virtual ITopGroups<TGroupValue> GetTopGroups(int withinGroupOffset) Parameters Type Name Description System.Int32 withinGroupOffset Returns Type Description ITopGroups <TGroupValue> | Improve this Doc View Source RetrieveGroup(Int32) Returns the group the specified doc belongs to or null if no group could be retrieved. Declaration protected abstract AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> RetrieveGroup(int doc) Parameters Type Name Description System.Int32 doc The specified doc Returns Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs <TGroupValue> the group the specified doc belongs to or null if no group could be retrieved | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements IAbstractSecondPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.BlockGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.BlockGroupingCollector.html",
    "title": "Class BlockGroupingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockGroupingCollector BlockGroupingCollector performs grouping with a single pass collector, as long as you are grouping by a doc block field, ie all documents sharing a given group value were indexed as a doc block using the atomic or API. This results in faster performance (~25% faster QPS) than the two-pass grouping collectors, with the tradeoff being that the documents in each group must always be indexed as a block. This collector also fills in TopGroups.totalGroupCount without requiring the separate TermAllGroupsCollector . However, this collector does not fill in the groupValue of each group; this field will always be null. NOTE : this collector makes no effort to verify the docs were in fact indexed as a block, so it's up to you to ensure this was the case. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BlockGroupingCollector Implements ICollector Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class BlockGroupingCollector : object, ICollector Constructors | Improve this Doc View Source BlockGroupingCollector(Sort, Int32, Boolean, Filter) Create the single pass collector. Declaration public BlockGroupingCollector(Sort groupSort, int topNGroups, bool needsScores, Filter lastDocPerGroup) Parameters Type Name Description Sort groupSort The Sort used to sort the groups. The top sorted document within each group according to groupSort, determines how that group sorts against other groups. This must be non-null, ie, if you want to groupSort by relevance use RELEVANCE . System.Int32 topNGroups How many top groups to keep. System.Boolean needsScores true if the collected documents require scores, either because relevance is included in the withinGroupSort or because you plan to pass true for either GetScores or GetMaxScores to GetTopGroups(Sort, Int32, Int32, Int32, Boolean) Filter lastDocPerGroup a Filter that marks the last document in each group. Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source GetTopGroups(Sort, Int32, Int32, Int32, Boolean) Returns the grouped results. Returns null if the number of groups collected is <= groupOffset. NOTE : This collector is unable to compute the groupValue per group so it will always be null. This is normally not a problem, as you can obtain the value just like you obtain other values for each matching document (eg, via stored fields, via FieldCache, etc.) Declaration public virtual ITopGroups<object> GetTopGroups(Sort withinGroupSort, int groupOffset, int withinGroupOffset, int maxDocsPerGroup, bool fillSortFields) Parameters Type Name Description Sort withinGroupSort The Sort used to sort documents within each group. Passing null is allowed, to sort by relevance. System.Int32 groupOffset Which group to start from System.Int32 withinGroupOffset Which document to start from within each group System.Int32 maxDocsPerGroup How many top documents to keep within each group. System.Boolean fillSortFields If true then the Comparable values for the sort fields will be set Returns Type Description ITopGroups < System.Object > | Improve this Doc View Source GetTopGroups<TGroupValue>(Sort, Int32, Int32, Int32, Boolean) Returns the grouped results. Returns null if the number of groups collected is <= groupOffset. NOTE : This collector is unable to compute the groupValue per group so it will always be null. This is normally not a problem, as you can obtain the value just like you obtain other values for each matching document (eg, via stored fields, via FieldCache, etc.) Declaration public virtual ITopGroups<TGroupValue> GetTopGroups<TGroupValue>(Sort withinGroupSort, int groupOffset, int withinGroupOffset, int maxDocsPerGroup, bool fillSortFields) Parameters Type Name Description Sort withinGroupSort The Sort used to sort documents within each group. Passing null is allowed, to sort by relevance. System.Int32 groupOffset Which group to start from System.Int32 withinGroupOffset Which document to start from within each group System.Int32 maxDocsPerGroup How many top documents to keep within each group. System.Boolean fillSortFields If true then the Comparable values for the sort fields will be set Returns Type Description ITopGroups <TGroupValue> Type Parameters Name Description TGroupValue The expected return type for group value | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.CollectedSearchGroup-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.CollectedSearchGroup-1.html",
    "title": "Class CollectedSearchGroup<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectedSearchGroup<TGroupValue> Expert: representation of a group in AbstractFirstPassGroupingCollector<TGroupValue> , tracking the top doc and FieldComparer slot. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SearchGroup <TGroupValue> CollectedSearchGroup<TGroupValue> Implements ISearchGroup <TGroupValue> ICollectedSearchGroup Inherited Members SearchGroup<TGroupValue>.GroupValue SearchGroup<TGroupValue>.SortValues SearchGroup<TGroupValue>.ToString() SearchGroup<TGroupValue>.Equals(Object) SearchGroup<TGroupValue>.GetHashCode() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class CollectedSearchGroup<TGroupValue> : SearchGroup<TGroupValue>, ISearchGroup<TGroupValue>, ICollectedSearchGroup Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source ComparerSlot Declaration public int ComparerSlot { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TopDoc Declaration public int TopDoc { get; } Property Value Type Description System.Int32 Implements ISearchGroup<TGroupValue> ICollectedSearchGroup"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead.html",
    "title": "Class FunctionAllGroupHeadsCollector.GroupHead | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionAllGroupHeadsCollector.GroupHead Holds current head document for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector_GroupHead FunctionAllGroupHeadsCollector.GroupHead Inherited Members AbstractAllGroupHeadsCollector_GroupHead.Doc Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class GroupHead : AbstractAllGroupHeadsCollector_GroupHead Properties | Improve this Doc View Source GroupValue Declaration public MutableValue GroupValue { get; } Property Value Type Description MutableValue Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int compIDX, int doc) Parameters Type Name Description System.Int32 compIDX System.Int32 doc Returns Type Description System.Int32 Overrides AbstractAllGroupHeadsCollector_GroupHead.Compare(Int32, Int32) | Improve this Doc View Source UpdateDocHead(Int32) Declaration public override void UpdateDocHead(int doc) Parameters Type Name Description System.Int32 doc Overrides AbstractAllGroupHeadsCollector_GroupHead.UpdateDocHead(Int32)"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.html",
    "title": "Class FunctionAllGroupHeadsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionAllGroupHeadsCollector An implementation of AbstractAllGroupHeadsCollector for retrieving the most relevant groups when grouping by ValueSource . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector < FunctionAllGroupHeadsCollector.GroupHead > FunctionAllGroupHeadsCollector Implements ICollector Inherited Members AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.m_reversed AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.m_compIDXEnd AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.m_temporalResult AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.RetrieveGroupHeads(Int32) AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.RetrieveGroupHeads() AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.GroupHeadsCount AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.Collect(Int32) AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionAllGroupHeadsCollector : AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>, ICollector Constructors | Improve this Doc View Source FunctionAllGroupHeadsCollector(ValueSource, IDictionary, Sort) Constructs a FunctionAllGroupHeadsCollector instance. Declaration public FunctionAllGroupHeadsCollector(ValueSource groupBy, IDictionary vsContext, Sort sortWithinGroup) Parameters Type Name Description ValueSource groupBy The ValueSource to group by IDictionary vsContext The ValueSource context Sort sortWithinGroup The sort within a group Properties | Improve this Doc View Source CollectedGroupHeads Declaration protected override ICollection<FunctionAllGroupHeadsCollector.GroupHead> CollectedGroupHeads { get; } Property Value Type Description ICollection < FunctionAllGroupHeadsCollector.GroupHead > Overrides Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector<Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead>.CollectedGroupHeads Methods | Improve this Doc View Source RetrieveGroupHeadAndAddIfNotExist(Int32) Declaration protected override void RetrieveGroupHeadAndAddIfNotExist(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector<Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead>.RetrieveGroupHeadAndAddIfNotExist(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides AbstractAllGroupHeadsCollector.SetNextReader(AtomicReaderContext) | Improve this Doc View Source SetScorer(Scorer) Declaration public override void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Overrides AbstractAllGroupHeadsCollector.SetScorer(Scorer) Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupsCollector.html",
    "title": "Class FunctionAllGroupsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: Uses ValueSource and FunctionValues to retrieve the field values to group by. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupsCollector < MutableValue > FunctionAllGroupsCollector Implements IAbstractAllGroupsCollector < MutableValue > ICollector Inherited Members AbstractAllGroupsCollector<MutableValue>.GroupCount AbstractAllGroupsCollector<MutableValue>.SetScorer(Scorer) AbstractAllGroupsCollector<MutableValue>.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionAllGroupsCollector : AbstractAllGroupsCollector<MutableValue>, IAbstractAllGroupsCollector<MutableValue>, ICollector Constructors | Improve this Doc View Source FunctionAllGroupsCollector(ValueSource, IDictionary) Constructs a FunctionAllGroupsCollector instance. Declaration public FunctionAllGroupsCollector(ValueSource groupBy, IDictionary vsContext) Parameters Type Name Description ValueSource groupBy The ValueSource to group by IDictionary vsContext The ValueSource context Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<MutableValue> Groups { get; } Property Value Type Description IEnumerable < MutableValue > Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.Mutable.MutableValue>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.Mutable.MutableValue>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.Mutable.MutableValue>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractAllGroupsCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount.html",
    "title": "Class FunctionDistinctValuesCollector.GroupCount | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector.GroupCount < MutableValue > FunctionDistinctValuesCollector.GroupCount Implements AbstractDistinctValuesCollector.IGroupCount < MutableValue > Inherited Members AbstractDistinctValuesCollector.GroupCount<MutableValue>.GroupValue AbstractDistinctValuesCollector.GroupCount<MutableValue>.UniqueValues Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class GroupCount : AbstractDistinctValuesCollector.GroupCount<MutableValue>, AbstractDistinctValuesCollector.IGroupCount<MutableValue> Implements AbstractDistinctValuesCollector.IGroupCount<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.html",
    "title": "Class FunctionDistinctValuesCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionDistinctValuesCollector Function based implementation of AbstractDistinctValuesCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector < FunctionDistinctValuesCollector.GroupCount > FunctionDistinctValuesCollector Implements IAbstractDistinctValuesCollector < FunctionDistinctValuesCollector.GroupCount > ICollector Inherited Members AbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>.AcceptsDocsOutOfOrder AbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>.SetScorer(Scorer) Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionDistinctValuesCollector : AbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>, IAbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>, ICollector Constructors | Improve this Doc View Source FunctionDistinctValuesCollector(IDictionary, ValueSource, ValueSource, IEnumerable<ISearchGroup<MutableValue>>) Declaration public FunctionDistinctValuesCollector(IDictionary vsContext, ValueSource groupSource, ValueSource countSource, IEnumerable<ISearchGroup<MutableValue>> groups) Parameters Type Name Description IDictionary vsContext ValueSource groupSource ValueSource countSource IEnumerable < ISearchGroup < MutableValue >> groups Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<FunctionDistinctValuesCollector.GroupCount> Groups { get; } Property Value Type Description IEnumerable < FunctionDistinctValuesCollector.GroupCount > Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractDistinctValuesCollector<GC> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionFirstPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionFirstPassGroupingCollector.html",
    "title": "Class FunctionFirstPassGroupingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractFirstPassGroupingCollector < MutableValue > FunctionFirstPassGroupingCollector Implements IAbstractFirstPassGroupingCollector < MutableValue > ICollector Inherited Members AbstractFirstPassGroupingCollector<MutableValue>.m_orderedGroups AbstractFirstPassGroupingCollector<MutableValue>.GetTopGroups(Int32, Boolean) AbstractFirstPassGroupingCollector<MutableValue>.SetScorer(Scorer) AbstractFirstPassGroupingCollector<MutableValue>.Collect(Int32) AbstractFirstPassGroupingCollector<MutableValue>.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionFirstPassGroupingCollector : AbstractFirstPassGroupingCollector<MutableValue>, IAbstractFirstPassGroupingCollector<MutableValue>, ICollector Constructors | Improve this Doc View Source FunctionFirstPassGroupingCollector(ValueSource, IDictionary, Sort, Int32) Creates a first pass collector. Declaration public FunctionFirstPassGroupingCollector(ValueSource groupByVS, IDictionary vsContext, Sort groupSort, int topNGroups) Parameters Type Name Description ValueSource groupByVS The ValueSource instance to group by IDictionary vsContext The ValueSource context Sort groupSort The Sort used to sort the groups. The top sorted document within each group according to groupSort, determines how that group sorts against other groups. This must be non-null, ie, if you want to groupSort by relevance use RELEVANCE . System.Int32 topNGroups How many top groups to keep. Methods | Improve this Doc View Source CopyDocGroupValue(MutableValue, MutableValue) Declaration protected override MutableValue CopyDocGroupValue(MutableValue groupValue, MutableValue reuse) Parameters Type Name Description MutableValue groupValue MutableValue reuse Returns Type Description MutableValue Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.CopyDocGroupValue(Lucene.Net.Util.Mutable.MutableValue, Lucene.Net.Util.Mutable.MutableValue) | Improve this Doc View Source GetDocGroupValue(Int32) Declaration protected override MutableValue GetDocGroupValue(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description MutableValue Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.GetDocGroupValue(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractFirstPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionSecondPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionSecondPassGroupingCollector.html",
    "title": "Class FunctionSecondPassGroupingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractSecondPassGroupingCollector < MutableValue > FunctionSecondPassGroupingCollector Implements IAbstractSecondPassGroupingCollector < MutableValue > ICollector Inherited Members AbstractSecondPassGroupingCollector<MutableValue>.m_groupMap AbstractSecondPassGroupingCollector<MutableValue>.m_groupDocs AbstractSecondPassGroupingCollector<MutableValue>.SetScorer(Scorer) AbstractSecondPassGroupingCollector<MutableValue>.Collect(Int32) AbstractSecondPassGroupingCollector<MutableValue>.AcceptsDocsOutOfOrder AbstractSecondPassGroupingCollector<MutableValue>.GetTopGroups(Int32) Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionSecondPassGroupingCollector : AbstractSecondPassGroupingCollector<MutableValue>, IAbstractSecondPassGroupingCollector<MutableValue>, ICollector Constructors | Improve this Doc View Source FunctionSecondPassGroupingCollector(IEnumerable<ISearchGroup<MutableValue>>, Sort, Sort, Int32, Boolean, Boolean, Boolean, ValueSource, IDictionary) Constructs a FunctionSecondPassGroupingCollector instance. Declaration public FunctionSecondPassGroupingCollector(IEnumerable<ISearchGroup<MutableValue>> searchGroups, Sort groupSort, Sort withinGroupSort, int maxDocsPerGroup, bool getScores, bool getMaxScores, bool fillSortFields, ValueSource groupByVS, IDictionary vsContext) Parameters Type Name Description IEnumerable < ISearchGroup < MutableValue >> searchGroups The SearchGroup<TGroupValue> instances collected during the first phase. Sort groupSort The group sort Sort withinGroupSort The sort inside a group System.Int32 maxDocsPerGroup The maximum number of documents to collect inside a group System.Boolean getScores Whether to include the scores System.Boolean getMaxScores Whether to include the maximum score System.Boolean fillSortFields Whether to fill the sort values in WithinGroupSort ValueSource groupByVS The ValueSource to group by IDictionary vsContext The value source context Methods | Improve this Doc View Source RetrieveGroup(Int32) Declaration protected override AbstractSecondPassGroupingCollector.SearchGroupDocs<MutableValue> RetrieveGroup(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs < MutableValue > Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.RetrieveGroup(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractSecondPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.html",
    "title": "Namespace Lucene.Net.Search.Grouping.Function | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Grouping.Function <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for grouping by ValueSource . Classes FunctionAllGroupHeadsCollector An implementation of AbstractAllGroupHeadsCollector for retrieving the most relevant groups when grouping by ValueSource . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionAllGroupHeadsCollector.GroupHead Holds current head document for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: Uses ValueSource and FunctionValues to retrieve the field values to group by. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionDistinctValuesCollector Function based implementation of AbstractDistinctValuesCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.GroupDocs-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.GroupDocs-1.html",
    "title": "Class GroupDocs<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GroupDocs<TGroupValue> Represents one group in the results. @lucene.experimental Inheritance System.Object GroupDocs<TGroupValue> Implements IGroupDocs <TGroupValue> Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class GroupDocs<TGroupValue> : object, IGroupDocs<TGroupValue> Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source GroupDocs(Single, Single, Int32, ScoreDoc[], TGroupValue, Object[]) Declaration public GroupDocs(float score, float maxScore, int totalHits, ScoreDoc[] scoreDocs, TGroupValue groupValue, object[] groupSortValues) Parameters Type Name Description System.Single score System.Single maxScore System.Int32 totalHits ScoreDoc [] scoreDocs TGroupValue groupValue System.Object [] groupSortValues Properties | Improve this Doc View Source GroupSortValues Matches the groupSort passed to AbstractFirstPassGroupingCollector<TGroupValue> . Declaration public object[] GroupSortValues { get; } Property Value Type Description System.Object [] | Improve this Doc View Source GroupValue The groupField value for all docs in this group; this may be null if hits did not have the groupField. Declaration public TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source MaxScore Max score in this group Declaration public float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source Score Overall aggregated score of this group (currently only set by join queries). Declaration public float Score { get; } Property Value Type Description System.Single | Improve this Doc View Source ScoreDocs Hits; this may be FieldDoc instances if the withinGroupSort sorted by fields. Declaration public ScoreDoc[] ScoreDocs { get; } Property Value Type Description ScoreDoc [] | Improve this Doc View Source TotalHits Total hits within this group Declaration public int TotalHits { get; } Property Value Type Description System.Int32 Implements IGroupDocs<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.GroupingSearch.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.GroupingSearch.html",
    "title": "Class GroupingSearch | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GroupingSearch Convenience class to perform grouping in a non distributed environment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object GroupingSearch Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class GroupingSearch : object Constructors | Improve this Doc View Source GroupingSearch(ValueSource, IDictionary) Constructs a GroupingSearch instance that groups documents by function using a ValueSource instance. Declaration public GroupingSearch(ValueSource groupFunction, IDictionary valueSourceContext) Parameters Type Name Description ValueSource groupFunction The function to group by specified as ValueSource IDictionary valueSourceContext The context of the specified groupFunction | Improve this Doc View Source GroupingSearch(Filter) Constructor for grouping documents by doc block. This constructor can only be used when documents belonging in a group are indexed in one block. Declaration public GroupingSearch(Filter groupEndDocs) Parameters Type Name Description Filter groupEndDocs The filter that marks the last document in all doc blocks | Improve this Doc View Source GroupingSearch(String) Constructs a GroupingSearch instance that groups documents by index terms using the FieldCache . The group field can only have one token per document. This means that the field must not be analysed. Declaration public GroupingSearch(string groupField) Parameters Type Name Description System.String groupField The name of the field to group by. Methods | Improve this Doc View Source DisableCaching() Disables any enabled cache. Declaration public virtual GroupingSearch DisableCaching() Returns Type Description GroupingSearch this | Improve this Doc View Source GetAllGroupHeads() Returns the matching group heads if SetAllGroupHeads(Boolean) was set to true or an empty bit set. Declaration public virtual IBits GetAllGroupHeads() Returns Type Description IBits The matching group heads if SetAllGroupHeads(Boolean) was set to true or an empty bit set | Improve this Doc View Source GetAllMatchingGroups() If SetAllGroups(Boolean) was set to true then all matching groups are returned, otherwise an empty collection is returned. Declaration public virtual ICollection GetAllMatchingGroups() Returns Type Description ICollection all matching groups are returned, or an empty collection Remarks LUCENENET specific used to get the groups if the type is unknown or if the code expects any type, since GetAllMatchingGroups<T>() will throw an exception if the return type is incorrect. | Improve this Doc View Source GetAllMatchingGroups<T>() If SetAllGroups(Boolean) was set to true then all matching groups are returned, otherwise an empty collection is returned. Declaration public virtual ICollection<T> GetAllMatchingGroups<T>() Returns Type Description ICollection <T> all matching groups are returned, or an empty collection Type Parameters Name Description T The group value type. This can be a BytesRef or a MutableValue instance. If grouping by doc block this the group value is always null . | Improve this Doc View Source GroupByDocBlock<TGroupValue>(IndexSearcher, Filter, Query, Int32, Int32) Declaration protected virtual ITopGroups<TGroupValue> GroupByDocBlock<TGroupValue>(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher Filter filter Query query System.Int32 groupOffset System.Int32 groupLimit Returns Type Description ITopGroups <TGroupValue> Type Parameters Name Description TGroupValue | Improve this Doc View Source GroupByFieldOrFunction<TGroupValue>(IndexSearcher, Filter, Query, Int32, Int32) Declaration protected virtual ITopGroups<TGroupValue> GroupByFieldOrFunction<TGroupValue>(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher Filter filter Query query System.Int32 groupOffset System.Int32 groupLimit Returns Type Description ITopGroups <TGroupValue> Type Parameters Name Description TGroupValue | Improve this Doc View Source Search(IndexSearcher, Filter, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<object> Search(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher The IndexSearcher instance to execute the grouped search on. Filter filter The filter to execute with the grouping Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups < System.Object > the grouped result as a ITopGroups<TGroupValue> instance | Improve this Doc View Source Search(IndexSearcher, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<object> Search(IndexSearcher searcher, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher The IndexSearcher instance to execute the grouped search on. Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups < System.Object > the grouped result as a ITopGroups<TGroupValue> instance | Improve this Doc View Source Search<TGroupValue>(IndexSearcher, Filter, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<TGroupValue> Search<TGroupValue>(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher The IndexSearcher instance to execute the grouped search on. Filter filter The filter to execute with the grouping Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups <TGroupValue> the grouped result as a ITopGroups<TGroupValue> instance Type Parameters Name Description TGroupValue The expected return type of the search. | Improve this Doc View Source Search<TGroupValue>(IndexSearcher, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<TGroupValue> Search<TGroupValue>(IndexSearcher searcher, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher The IndexSearcher instance to execute the grouped search on. Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups <TGroupValue> the grouped result as a ITopGroups<TGroupValue> instance Type Parameters Name Description TGroupValue The expected return type of the search. | Improve this Doc View Source SetAllGroupHeads(Boolean) Whether to compute all group heads (most relevant document per group) matching the query. This feature isn't enabled when grouping by doc block. Declaration public virtual GroupingSearch SetAllGroupHeads(bool allGroupHeads) Parameters Type Name Description System.Boolean allGroupHeads Whether to compute all group heads (most relevant document per group) matching the query Returns Type Description GroupingSearch this | Improve this Doc View Source SetAllGroups(Boolean) Whether to also compute all groups matching the query. This can be used to determine the number of groups, which can be used for accurate pagination. When grouping by doc block the number of groups are automatically included in the TopGroups and this option doesn't have any influence. Declaration public virtual GroupingSearch SetAllGroups(bool allGroups) Parameters Type Name Description System.Boolean allGroups to also compute all groups matching the query Returns Type Description GroupingSearch this | Improve this Doc View Source SetCaching(Int32, Boolean) Enables caching for the second pass search. The cache will not contain more than the maximum specified documents. The cache is filled during the first pass searched and then replayed during the second pass searched. If the cache grows beyond the specified limit, then the cache is purged and not used in the second pass search. Declaration public virtual GroupingSearch SetCaching(int maxDocsToCache, bool cacheScores) Parameters Type Name Description System.Int32 maxDocsToCache The maximum number of documents the cache is allowed to hold System.Boolean cacheScores Whether to cache the scores Returns Type Description GroupingSearch this | Improve this Doc View Source SetCachingInMB(Double, Boolean) Enables caching for the second pass search. The cache will not grow over a specified limit in MB. The cache is filled during the first pass searched and then replayed during the second pass searched. If the cache grows beyond the specified limit, then the cache is purged and not used in the second pass search. Declaration public virtual GroupingSearch SetCachingInMB(double maxCacheRAMMB, bool cacheScores) Parameters Type Name Description System.Double maxCacheRAMMB The maximum amount in MB the cache is allowed to hold System.Boolean cacheScores Whether to cache the scores Returns Type Description GroupingSearch this | Improve this Doc View Source SetFillSortFields(Boolean) Whether to also fill the sort fields per returned group and groups docs. Declaration public virtual GroupingSearch SetFillSortFields(bool fillSortFields) Parameters Type Name Description System.Boolean fillSortFields Whether to also fill the sort fields per returned group and groups docs Returns Type Description GroupingSearch this | Improve this Doc View Source SetGroupDocsLimit(Int32) Specifies the number of documents to return inside a group from the specified groupDocsOffset. Declaration public virtual GroupingSearch SetGroupDocsLimit(int groupDocsLimit) Parameters Type Name Description System.Int32 groupDocsLimit The number of documents to return inside a group Returns Type Description GroupingSearch this | Improve this Doc View Source SetGroupDocsOffset(Int32) Specifies the offset for documents inside a group. Declaration public virtual GroupingSearch SetGroupDocsOffset(int groupDocsOffset) Parameters Type Name Description System.Int32 groupDocsOffset The offset for documents inside a Returns Type Description GroupingSearch this | Improve this Doc View Source SetGroupSort(Sort) Specifies how groups are sorted. Defaults to RELEVANCE . Declaration public virtual GroupingSearch SetGroupSort(Sort groupSort) Parameters Type Name Description Sort groupSort The sort for the groups. Returns Type Description GroupingSearch this | Improve this Doc View Source SetIncludeMaxScore(Boolean) Whether to include the score of the most relevant document per group. Declaration public virtual GroupingSearch SetIncludeMaxScore(bool includeMaxScore) Parameters Type Name Description System.Boolean includeMaxScore Whether to include the score of the most relevant document per group Returns Type Description GroupingSearch this | Improve this Doc View Source SetIncludeScores(Boolean) Whether to include the scores per doc inside a group. Declaration public virtual GroupingSearch SetIncludeScores(bool includeScores) Parameters Type Name Description System.Boolean includeScores Whether to include the scores per doc inside a group Returns Type Description GroupingSearch this | Improve this Doc View Source SetInitialSize(Int32) Sets the initial size of some internal used data structures. This prevents growing data structures many times. This can improve the performance of the grouping at the cost of more initial RAM. The SetAllGroups(Boolean) and SetAllGroupHeads(Boolean) features use this option. Defaults to 128. Declaration public virtual GroupingSearch SetInitialSize(int initialSize) Parameters Type Name Description System.Int32 initialSize The initial size of some internal used data structures Returns Type Description GroupingSearch this | Improve this Doc View Source SetSortWithinGroup(Sort) Specified how documents inside a group are sorted. Defaults to RELEVANCE . Declaration public virtual GroupingSearch SetSortWithinGroup(Sort sortWithinGroup) Parameters Type Name Description Sort sortWithinGroup The sort for documents inside a group Returns Type Description GroupingSearch this"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.html",
    "title": "Namespace Lucene.Net.Search.Grouping | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Grouping Classes AbstractAllGroupHeadsCollector LUCENENET specific class used to reference an AbstractAllGroupHeadsCollector<GH> subclass without refering to its generic closing type. AbstractAllGroupHeadsCollector_GroupHead Represents a group head. A group head is the most relevant document for a particular group. The relevancy is based is usually based on the sort. The group head contains a group value with its associated most relevant document id. AbstractAllGroupHeadsCollector<GH> This collector specializes in collecting the most relevant document (group head) for each group that match the query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractAllGroupHeadsCollector<GH>.TemporalResult Contains the result of group head retrieval. To prevent new object creations of this class for every collect. AbstractAllGroupsCollector<TGroupValue> A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. This is an abstract version. Concrete implementations define what a group actually is and how it is internally collected. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractDistinctValuesCollector LUCENENET specific class used to nest the AbstractDistinctValuesCollector.GroupCount<TGroupValue> class so it has similar syntax to that in Java Lucene (AbstractDistinctValuesCollector.GroupCount{TGroupValue} rather than AbstractDistinctValuesCollector{GC}.GroupCount{TGroupValue}). AbstractDistinctValuesCollector.GroupCount<TGroupValue> Returned by Groups , representing the value and set of distinct values for the group. AbstractDistinctValuesCollector<GC> A second pass grouping collector that keeps track of distinct values for a specified field for the top N group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractFirstPassGroupingCollector<TGroupValue> FirstPassGroupingCollector is the first of two passes necessary to collect grouped hits. This pass gathers the top N sorted groups. Concrete subclasses define what a group is and how it is internally collected. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractGroupFacetCollector Base class for computing grouped facets. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractGroupFacetCollector.AbstractSegmentResult Contains the local grouped segment counts for a particular segment. Each AbstractGroupFacetCollector.AbstractSegmentResult must be added together. AbstractGroupFacetCollector.FacetEntry Represents a facet entry with a value and a count. AbstractGroupFacetCollector.GroupedFacetResult The grouped facet result. Containing grouped facet entries, total count and total missing count. AbstractSecondPassGroupingCollector LUCENENET specific class used to simulate the syntax used to access nested classes of AbstractAllGroupHeadsCollector<GH> without referencing the generic closing type. AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> AbstractSecondPassGroupingCollector<TGroupValue> SecondPassGroupingCollector is the second of two passes necessary to collect grouped docs. This pass gathers the top N documents per top group computed from the first pass. Concrete subclasses define what a group is and how it is internally collected. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BlockGroupingCollector BlockGroupingCollector performs grouping with a single pass collector, as long as you are grouping by a doc block field, ie all documents sharing a given group value were indexed as a doc block using the atomic or API. This results in faster performance (~25% faster QPS) than the two-pass grouping collectors, with the tradeoff being that the documents in each group must always be indexed as a block. This collector also fills in TopGroups.totalGroupCount without requiring the separate TermAllGroupsCollector . However, this collector does not fill in the groupValue of each group; this field will always be null. NOTE : this collector makes no effort to verify the docs were in fact indexed as a block, so it's up to you to ensure this was the case. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CollectedSearchGroup<TGroupValue> Expert: representation of a group in AbstractFirstPassGroupingCollector<TGroupValue> , tracking the top doc and FieldComparer slot. This is a Lucene.NET INTERNAL API, use at your own risk GroupDocs<TGroupValue> Represents one group in the results. @lucene.experimental GroupingSearch Convenience class to perform grouping in a non distributed environment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SearchGroup LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of SearchGroup<TGroupValue> ) SearchGroup<TGroupValue> Represents a group that is found during the first pass search. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TopGroups LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of TopGroups<TGroupValue> ) TopGroups<TGroupValue> Represents result returned by a grouping search. @lucene.experimental Interfaces AbstractDistinctValuesCollector.IGroupCount<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue IAbstractAllGroupsCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue IAbstractDistinctValuesCollector<GC> LUCENENET specific interface used to apply covariance to GC IAbstractFirstPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. IAbstractSecondPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. ICollectedSearchGroup LUCENENET specific interface for passing/comparing the CollectedSearchGroup without referencing its generic closing type IGroupDocs<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. ISearchGroup<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. ITopGroups<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. Enums TopGroups.ScoreMergeMode How the GroupDocs score (if any) should be merged."
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractAllGroupsCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractAllGroupsCollector-1.html",
    "title": "Interface IAbstractAllGroupsCollector<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAbstractAllGroupsCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractAllGroupsCollector<out TGroupValue> : ICollector Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupCount Returns the total number of groups for the executed search. This is a convenience method. The following code snippet has the same effect: GetGroups().Count Declaration int GroupCount { get; } Property Value Type Description System.Int32 The total number of groups for the executed search | Improve this Doc View Source Groups Returns the group values This is an unordered collections of group values. For each group that matched the query there is a BytesRef representing a group value. Declaration IEnumerable<TGroupValue> Groups { get; } Property Value Type Description IEnumerable <TGroupValue> the group values"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractDistinctValuesCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractDistinctValuesCollector-1.html",
    "title": "Interface IAbstractDistinctValuesCollector<GC> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAbstractDistinctValuesCollector<GC> LUCENENET specific interface used to apply covariance to GC Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractDistinctValuesCollector<out GC> : ICollector Type Parameters Name Description GC Properties | Improve this Doc View Source Groups Returns all unique values for each top N group. Declaration IEnumerable<GC> Groups { get; } Property Value Type Description IEnumerable <GC> all unique values for each top N group"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractFirstPassGroupingCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractFirstPassGroupingCollector-1.html",
    "title": "Interface IAbstractFirstPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAbstractFirstPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractFirstPassGroupingCollector<out TGroupValue> : ICollector Type Parameters Name Description TGroupValue Methods | Improve this Doc View Source GetTopGroups(Int32, Boolean) Returns top groups, starting from offset. This may return null, if no groups were collected, or if the number of unique groups collected is <= offset. Declaration IEnumerable<ISearchGroup<TGroupValue>> GetTopGroups(int groupOffset, bool fillFields) Parameters Type Name Description System.Int32 groupOffset The offset in the collected groups System.Boolean fillFields Whether to fill to SortValues Returns Type Description IEnumerable < ISearchGroup <TGroupValue>> top groups, starting from offset Remarks LUCENENET NOTE: We must use rather than here because we need this to be covariant"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractSecondPassGroupingCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractSecondPassGroupingCollector-1.html",
    "title": "Interface IAbstractSecondPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAbstractSecondPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractSecondPassGroupingCollector<out TGroupValue> : ICollector Type Parameters Name Description TGroupValue Methods | Improve this Doc View Source GetTopGroups(Int32) Declaration ITopGroups<TGroupValue> GetTopGroups(int withinGroupOffset) Parameters Type Name Description System.Int32 withinGroupOffset Returns Type Description ITopGroups <TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ICollectedSearchGroup.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ICollectedSearchGroup.html",
    "title": "Interface ICollectedSearchGroup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICollectedSearchGroup LUCENENET specific interface for passing/comparing the CollectedSearchGroup without referencing its generic closing type Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface ICollectedSearchGroup Properties | Improve this Doc View Source ComparerSlot Declaration int ComparerSlot { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TopDoc Declaration int TopDoc { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IGroupDocs-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IGroupDocs-1.html",
    "title": "Interface IGroupDocs<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IGroupDocs<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IGroupDocs<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupSortValues Matches the groupSort passed to AbstractFirstPassGroupingCollector<TGroupValue> . Declaration object[] GroupSortValues { get; } Property Value Type Description System.Object [] | Improve this Doc View Source GroupValue The groupField value for all docs in this group; this may be null if hits did not have the groupField. Declaration TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source MaxScore Max score in this group Declaration float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source Score Overall aggregated score of this group (currently only set by join queries). Declaration float Score { get; } Property Value Type Description System.Single | Improve this Doc View Source ScoreDocs Hits; this may be FieldDoc instances if the withinGroupSort sorted by fields. Declaration ScoreDoc[] ScoreDocs { get; } Property Value Type Description ScoreDoc [] | Improve this Doc View Source TotalHits Total hits within this group Declaration int TotalHits { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ISearchGroup-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ISearchGroup-1.html",
    "title": "Interface ISearchGroup<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISearchGroup<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface ISearchGroup<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupValue The value that defines this group Declaration TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source SortValues The sort values used during sorting. These are the groupSort field values of the highest rank document (by the groupSort) within the group. Can be null if fillFields=false had been passed to GetTopGroups(Int32, Boolean) Declaration object[] SortValues { get; set; } Property Value Type Description System.Object []"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ITopGroups-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ITopGroups-1.html",
    "title": "Interface ITopGroups<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITopGroups<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface ITopGroups<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source Groups Group results in groupSort order Declaration IGroupDocs<TGroupValue>[] Groups { get; } Property Value Type Description IGroupDocs <TGroupValue>[] | Improve this Doc View Source GroupSort How groups are sorted against each other Declaration SortField[] GroupSort { get; } Property Value Type Description SortField [] | Improve this Doc View Source MaxScore Highest score across all hits, or if scores were not computed. Declaration float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source TotalGroupCount The total number of unique groups. If null this value is not computed. Declaration int? TotalGroupCount { get; } Property Value Type Description System.Nullable < System.Int32 > | Improve this Doc View Source TotalGroupedHitCount Number of documents grouped into the topN groups Declaration int TotalGroupedHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalHitCount Number of documents matching the search Declaration int TotalHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source WithinGroupSort How docs are sorted within each group Declaration SortField[] WithinGroupSort { get; } Property Value Type Description SortField []"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.SearchGroup.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.SearchGroup.html",
    "title": "Class SearchGroup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchGroup LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of SearchGroup<TGroupValue> ) Inheritance System.Object SearchGroup Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class SearchGroup : object Methods | Improve this Doc View Source Merge<T>(IList<IEnumerable<ISearchGroup<T>>>, Int32, Int32, Sort) Merges multiple collections of top groups, for example obtained from separate index shards. The provided groupSort must match how the groups were sorted, and the provided SearchGroups must have been computed with fillFields=true passed to GetTopGroups(Int32, Boolean) . NOTE: this returns null if the topGroups is empty. Declaration public static ICollection<SearchGroup<T>> Merge<T>(IList<IEnumerable<ISearchGroup<T>>> topGroups, int offset, int topN, Sort groupSort) Parameters Type Name Description IList < IEnumerable < ISearchGroup <T>>> topGroups System.Int32 offset System.Int32 topN Sort groupSort Returns Type Description ICollection < SearchGroup <T>> Type Parameters Name Description T"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.SearchGroup-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.SearchGroup-1.html",
    "title": "Class SearchGroup<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchGroup<TGroupValue> Represents a group that is found during the first pass search. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SearchGroup<TGroupValue> CollectedSearchGroup<TGroupValue> Implements ISearchGroup <TGroupValue> Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class SearchGroup<TGroupValue> : object, ISearchGroup<TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupValue The value that defines this group Declaration public TGroupValue GroupValue { get; set; } Property Value Type Description TGroupValue | Improve this Doc View Source SortValues The sort values used during sorting. These are the groupSort field values of the highest rank document (by the groupSort) within the group. Can be null if fillFields=false had been passed to GetTopGroups(Int32, Boolean) Declaration public object[] SortValues { get; set; } Property Value Type Description System.Object [] Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Implements ISearchGroup<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.html",
    "title": "Namespace Lucene.Net.Search.Grouping.Terms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Grouping.Terms <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for grouping by indexed terms via FieldCache . Classes TermAllGroupHeadsCollector LUCENENET specific class used to mimic the synatax used to access static members of TermAllGroupHeadsCollector<GH> without specifying its generic closing type. (TermAllGroupHeadsCollector.Create() rather than TermAllGroupHeadsCollector{GH}.Create()). TermAllGroupHeadsCollector<GH> A base implementation of AbstractAllGroupHeadsCollector<GH> for retrieving the most relevant groups when grouping on a string based group field. More specifically this all concrete implementations of this base implementation use SortedDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: an int hash set (SentinelIntSet) is used to detect if a group is already added to the total count. For each segment the int set is cleared and filled with previous counted groups that occur in the new segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermDistinctValuesCollector A term based implementation of AbstractDistinctValuesCollector{TermDistinctValuesCollector.GroupCount} that relies on SortedDocValues to count the distinct values per group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect groups. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermGroupFacetCollector An implementation of AbstractGroupFacetCollector that computes grouped facets based on the indexed terms from the FieldCache . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect grouped docs. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector.html",
    "title": "Class TermAllGroupHeadsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermAllGroupHeadsCollector LUCENENET specific class used to mimic the synatax used to access static members of TermAllGroupHeadsCollector<GH> without specifying its generic closing type. (TermAllGroupHeadsCollector.Create() rather than TermAllGroupHeadsCollector{GH}.Create()). Inheritance System.Object TermAllGroupHeadsCollector Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermAllGroupHeadsCollector : object Methods | Improve this Doc View Source Create(String, Sort) Creates an AbstractAllGroupHeadsCollector instance based on the supplied arguments. This factory method decides with implementation is best suited. Delegates to Create(String, Sort, Int32) with an initialSize of 128. Declaration public static AbstractAllGroupHeadsCollector Create(string groupField, Sort sortWithinGroup) Parameters Type Name Description System.String groupField The field to group by Sort sortWithinGroup The sort within each group Returns Type Description AbstractAllGroupHeadsCollector an AbstractAllGroupHeadsCollector instance based on the supplied arguments | Improve this Doc View Source Create(String, Sort, Int32) Creates an AbstractAllGroupHeadsCollector instance based on the supplied arguments. This factory method decides with implementation is best suited. Declaration public static AbstractAllGroupHeadsCollector Create(string groupField, Sort sortWithinGroup, int initialSize) Parameters Type Name Description System.String groupField The field to group by Sort sortWithinGroup The sort within each group System.Int32 initialSize The initial allocation size of the internal int set and group list which should roughly match the total number of expected unique groups. Be aware that the heap usage is 4 bytes * initialSize. Returns Type Description AbstractAllGroupHeadsCollector an AbstractAllGroupHeadsCollector instance based on the supplied arguments"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector-1.html",
    "title": "Class TermAllGroupHeadsCollector<GH> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermAllGroupHeadsCollector<GH> A base implementation of AbstractAllGroupHeadsCollector<GH> for retrieving the most relevant groups when grouping on a string based group field. More specifically this all concrete implementations of this base implementation use SortedDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector <GH> TermAllGroupHeadsCollector<GH> Implements ICollector Inherited Members AbstractAllGroupHeadsCollector<GH>.m_reversed AbstractAllGroupHeadsCollector<GH>.m_compIDXEnd AbstractAllGroupHeadsCollector<GH>.m_temporalResult AbstractAllGroupHeadsCollector<GH>.RetrieveGroupHeads(Int32) AbstractAllGroupHeadsCollector<GH>.RetrieveGroupHeads() AbstractAllGroupHeadsCollector<GH>.GroupHeadsCount AbstractAllGroupHeadsCollector<GH>.RetrieveGroupHeadAndAddIfNotExist(Int32) AbstractAllGroupHeadsCollector<GH>.CollectedGroupHeads AbstractAllGroupHeadsCollector<GH>.Collect(Int32) AbstractAllGroupHeadsCollector<GH>.AcceptsDocsOutOfOrder AbstractAllGroupHeadsCollector.SetScorer(Scorer) AbstractAllGroupHeadsCollector.SetNextReader(AtomicReaderContext) Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public abstract class TermAllGroupHeadsCollector<GH> : AbstractAllGroupHeadsCollector<GH>, ICollector where GH : AbstractAllGroupHeadsCollector_GroupHead Type Parameters Name Description GH Constructors | Improve this Doc View Source TermAllGroupHeadsCollector(String, Int32) Declaration protected TermAllGroupHeadsCollector(string groupField, int numberOfSorts) Parameters Type Name Description System.String groupField System.Int32 numberOfSorts Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupsCollector.html",
    "title": "Class TermAllGroupsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: an int hash set (SentinelIntSet) is used to detect if a group is already added to the total count. For each segment the int set is cleared and filled with previous counted groups that occur in the new segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupsCollector < BytesRef > TermAllGroupsCollector Implements IAbstractAllGroupsCollector < BytesRef > ICollector Inherited Members AbstractAllGroupsCollector<BytesRef>.GroupCount AbstractAllGroupsCollector<BytesRef>.SetScorer(Scorer) AbstractAllGroupsCollector<BytesRef>.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermAllGroupsCollector : AbstractAllGroupsCollector<BytesRef>, IAbstractAllGroupsCollector<BytesRef>, ICollector Constructors | Improve this Doc View Source TermAllGroupsCollector(String) Constructs a AbstractAllGroupsCollector<TGroupValue> . This sets the initial allocation size for the internal int set and group list to 128. Declaration public TermAllGroupsCollector(string groupField) Parameters Type Name Description System.String groupField The field to group by | Improve this Doc View Source TermAllGroupsCollector(String, Int32) Expert: Constructs a AbstractAllGroupsCollector<TGroupValue> Declaration public TermAllGroupsCollector(string groupField, int initialSize) Parameters Type Name Description System.String groupField The field to group by System.Int32 initialSize The initial allocation size of the internal int set and group list which should roughly match the total number of expected unique groups. Be aware that the heap usage is 4 bytes * initialSize. Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<BytesRef> Groups { get; } Property Value Type Description IEnumerable < BytesRef > Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.BytesRef>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.BytesRef>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractAllGroupsCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount.html",
    "title": "Class TermDistinctValuesCollector.GroupCount | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector.GroupCount < BytesRef > TermDistinctValuesCollector.GroupCount Implements AbstractDistinctValuesCollector.IGroupCount < BytesRef > Inherited Members AbstractDistinctValuesCollector.GroupCount<BytesRef>.GroupValue AbstractDistinctValuesCollector.GroupCount<BytesRef>.UniqueValues Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class GroupCount : AbstractDistinctValuesCollector.GroupCount<BytesRef>, AbstractDistinctValuesCollector.IGroupCount<BytesRef> Implements AbstractDistinctValuesCollector.IGroupCount<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.html",
    "title": "Class TermDistinctValuesCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermDistinctValuesCollector A term based implementation of AbstractDistinctValuesCollector{TermDistinctValuesCollector.GroupCount} that relies on SortedDocValues to count the distinct values per group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector < TermDistinctValuesCollector.GroupCount > TermDistinctValuesCollector Implements IAbstractDistinctValuesCollector < TermDistinctValuesCollector.GroupCount > ICollector Inherited Members AbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>.AcceptsDocsOutOfOrder AbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>.SetScorer(Scorer) Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermDistinctValuesCollector : AbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>, IAbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>, ICollector Constructors | Improve this Doc View Source TermDistinctValuesCollector(String, String, IEnumerable<ISearchGroup<BytesRef>>) Constructs TermDistinctValuesCollector instance. Declaration public TermDistinctValuesCollector(string groupField, string countField, IEnumerable<ISearchGroup<BytesRef>> groups) Parameters Type Name Description System.String groupField The field to group by System.String countField The field to count distinct values for IEnumerable < ISearchGroup < BytesRef >> groups The top N groups, collected during the first phase search Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<TermDistinctValuesCollector.GroupCount> Groups { get; } Property Value Type Description IEnumerable < TermDistinctValuesCollector.GroupCount > Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractDistinctValuesCollector<GC> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermFirstPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermFirstPassGroupingCollector.html",
    "title": "Class TermFirstPassGroupingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect groups. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractFirstPassGroupingCollector < BytesRef > TermFirstPassGroupingCollector Implements IAbstractFirstPassGroupingCollector < BytesRef > ICollector Inherited Members AbstractFirstPassGroupingCollector<BytesRef>.m_orderedGroups AbstractFirstPassGroupingCollector<BytesRef>.GetTopGroups(Int32, Boolean) AbstractFirstPassGroupingCollector<BytesRef>.SetScorer(Scorer) AbstractFirstPassGroupingCollector<BytesRef>.Collect(Int32) AbstractFirstPassGroupingCollector<BytesRef>.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermFirstPassGroupingCollector : AbstractFirstPassGroupingCollector<BytesRef>, IAbstractFirstPassGroupingCollector<BytesRef>, ICollector Constructors | Improve this Doc View Source TermFirstPassGroupingCollector(String, Sort, Int32) Create the first pass collector. Declaration public TermFirstPassGroupingCollector(string groupField, Sort groupSort, int topNGroups) Parameters Type Name Description System.String groupField The field used to group documents. This field must be single-valued and indexed ( FieldCache is used to access its value per-document). Sort groupSort The Sort used to sort the groups. The top sorted document within each group according to groupSort, determines how that group sorts against other groups. This must be non-null, ie, if you want to groupSort by relevance use RELEVANCE . System.Int32 topNGroups How many top groups to keep. Methods | Improve this Doc View Source CopyDocGroupValue(BytesRef, BytesRef) Declaration protected override BytesRef CopyDocGroupValue(BytesRef groupValue, BytesRef reuse) Parameters Type Name Description BytesRef groupValue BytesRef reuse Returns Type Description BytesRef Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.BytesRef>.CopyDocGroupValue(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source GetDocGroupValue(Int32) Declaration protected override BytesRef GetDocGroupValue(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description BytesRef Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.BytesRef>.GetDocGroupValue(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractFirstPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermGroupFacetCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermGroupFacetCollector.html",
    "title": "Class TermGroupFacetCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermGroupFacetCollector An implementation of AbstractGroupFacetCollector that computes grouped facets based on the indexed terms from the FieldCache . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractGroupFacetCollector TermGroupFacetCollector Implements ICollector Inherited Members AbstractGroupFacetCollector.m_groupField AbstractGroupFacetCollector.m_facetField AbstractGroupFacetCollector.m_facetPrefix AbstractGroupFacetCollector.m_segmentResults AbstractGroupFacetCollector.m_segmentFacetCounts AbstractGroupFacetCollector.m_segmentTotalCount AbstractGroupFacetCollector.m_startFacetOrd AbstractGroupFacetCollector.m_endFacetOrd AbstractGroupFacetCollector.MergeSegmentResults(Int32, Int32, Boolean) AbstractGroupFacetCollector.CreateSegmentResult() AbstractGroupFacetCollector.SetScorer(Scorer) AbstractGroupFacetCollector.Collect(Int32) AbstractGroupFacetCollector.SetNextReader(AtomicReaderContext) AbstractGroupFacetCollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public abstract class TermGroupFacetCollector : AbstractGroupFacetCollector, ICollector Methods | Improve this Doc View Source CreateTermGroupFacetCollector(String, String, Boolean, BytesRef, Int32) Factory method for creating the right implementation based on the fact whether the facet field contains multiple tokens per documents. Declaration public static TermGroupFacetCollector CreateTermGroupFacetCollector(string groupField, string facetField, bool facetFieldMultivalued, BytesRef facetPrefix, int initialSize) Parameters Type Name Description System.String groupField The group field System.String facetField The facet field System.Boolean facetFieldMultivalued Whether the facet field has multiple tokens per document BytesRef facetPrefix The facet prefix a facet entry should start with to be included. System.Int32 initialSize The initial allocation size of the internal int set and group facet list which should roughly match the total number of expected unique groups. Be aware that the heap usage is 4 bytes * initialSize. Returns Type Description TermGroupFacetCollector TermGroupFacetCollector implementation Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermSecondPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermSecondPassGroupingCollector.html",
    "title": "Class TermSecondPassGroupingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect grouped docs. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractSecondPassGroupingCollector < BytesRef > TermSecondPassGroupingCollector Implements IAbstractSecondPassGroupingCollector < BytesRef > ICollector Inherited Members AbstractSecondPassGroupingCollector<BytesRef>.m_groupMap AbstractSecondPassGroupingCollector<BytesRef>.m_groupDocs AbstractSecondPassGroupingCollector<BytesRef>.SetScorer(Scorer) AbstractSecondPassGroupingCollector<BytesRef>.Collect(Int32) AbstractSecondPassGroupingCollector<BytesRef>.AcceptsDocsOutOfOrder AbstractSecondPassGroupingCollector<BytesRef>.GetTopGroups(Int32) Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermSecondPassGroupingCollector : AbstractSecondPassGroupingCollector<BytesRef>, IAbstractSecondPassGroupingCollector<BytesRef>, ICollector Constructors | Improve this Doc View Source TermSecondPassGroupingCollector(String, IEnumerable<ISearchGroup<BytesRef>>, Sort, Sort, Int32, Boolean, Boolean, Boolean) Declaration public TermSecondPassGroupingCollector(string groupField, IEnumerable<ISearchGroup<BytesRef>> groups, Sort groupSort, Sort withinGroupSort, int maxDocsPerGroup, bool getScores, bool getMaxScores, bool fillSortFields) Parameters Type Name Description System.String groupField IEnumerable < ISearchGroup < BytesRef >> groups Sort groupSort Sort withinGroupSort System.Int32 maxDocsPerGroup System.Boolean getScores System.Boolean getMaxScores System.Boolean fillSortFields Methods | Improve this Doc View Source RetrieveGroup(Int32) Declaration protected override AbstractSecondPassGroupingCollector.SearchGroupDocs<BytesRef> RetrieveGroup(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs < BytesRef > Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.BytesRef>.RetrieveGroup(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractSecondPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups.html",
    "title": "Class TopGroups | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopGroups LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of TopGroups<TGroupValue> ) Inheritance System.Object TopGroups Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class TopGroups : object Methods | Improve this Doc View Source Merge<T>(ITopGroups<T>[], Sort, Sort, Int32, Int32, TopGroups.ScoreMergeMode) Merges an array of TopGroups, for example obtained from the second-pass collector across multiple shards. Each TopGroups must have been sorted by the same groupSort and docSort, and the top groups passed to all second-pass collectors must be the same. NOTE : We can't always compute an exact totalGroupCount. Documents belonging to a group may occur on more than one shard and thus the merged totalGroupCount can be higher than the actual totalGroupCount. In this case the totalGroupCount represents a upper bound. If the documents of one group do only reside in one shard then the totalGroupCount is exact. NOTE : the topDocs in each GroupDocs is actually an instance of TopDocsAndShards Declaration public static TopGroups<T> Merge<T>(ITopGroups<T>[] shardGroups, Sort groupSort, Sort docSort, int docOffset, int docTopN, TopGroups.ScoreMergeMode scoreMergeMode) Parameters Type Name Description ITopGroups <T>[] shardGroups Sort groupSort Sort docSort System.Int32 docOffset System.Int32 docTopN TopGroups.ScoreMergeMode scoreMergeMode Returns Type Description TopGroups <T> Type Parameters Name Description T"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups.ScoreMergeMode.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups.ScoreMergeMode.html",
    "title": "Enum TopGroups.ScoreMergeMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum TopGroups.ScoreMergeMode How the GroupDocs score (if any) should be merged. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public enum ScoreMergeMode : int Fields Name Description Avg Avg score across all shards for this group. None Set score to Float.NaN Total Sum score across all shards for this group."
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups-1.html",
    "title": "Class TopGroups<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopGroups<TGroupValue> Represents result returned by a grouping search. @lucene.experimental Inheritance System.Object TopGroups<TGroupValue> Implements ITopGroups <TGroupValue> Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class TopGroups<TGroupValue> : object, ITopGroups<TGroupValue> Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source TopGroups(ITopGroups<TGroupValue>, Nullable<Int32>) Declaration public TopGroups(ITopGroups<TGroupValue> oldTopGroups, int? totalGroupCount) Parameters Type Name Description ITopGroups <TGroupValue> oldTopGroups System.Nullable < System.Int32 > totalGroupCount | Improve this Doc View Source TopGroups(SortField[], SortField[], Int32, Int32, IGroupDocs<TGroupValue>[], Single) Declaration public TopGroups(SortField[] groupSort, SortField[] withinGroupSort, int totalHitCount, int totalGroupedHitCount, IGroupDocs<TGroupValue>[] groups, float maxScore) Parameters Type Name Description SortField [] groupSort SortField [] withinGroupSort System.Int32 totalHitCount System.Int32 totalGroupedHitCount IGroupDocs <TGroupValue>[] groups System.Single maxScore Properties | Improve this Doc View Source Groups Group results in groupSort order Declaration public IGroupDocs<TGroupValue>[] Groups { get; } Property Value Type Description IGroupDocs <TGroupValue>[] | Improve this Doc View Source GroupSort How groups are sorted against each other Declaration public SortField[] GroupSort { get; } Property Value Type Description SortField [] | Improve this Doc View Source MaxScore Highest score across all hits, or if scores were not computed. Declaration public float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source TotalGroupCount The total number of unique groups. If null this value is not computed. Declaration public int? TotalGroupCount { get; } Property Value Type Description System.Nullable < System.Int32 > | Improve this Doc View Source TotalGroupedHitCount Number of documents grouped into the topN groups Declaration public int TotalGroupedHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalHitCount Number of documents matching the search Declaration public int TotalHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source WithinGroupSort How docs are sorted within each group Declaration public SortField[] WithinGroupSort { get; } Property Value Type Description SortField [] Implements ITopGroups<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/package.html": {
    "href": "api/Lucene.Net.Grouping/package.html",
    "title": "Lucene.Net.Grouping | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Lucene.Net.Grouping <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> This module enables search result grouping with Lucene, where hits with the same value in the specified single-valued group field are grouped together. For example, if you group by the author field, then all documents with the same value in the author field fall into a single group. Grouping requires a number of inputs: groupField : this is the field used for grouping. For example, if you use the author field then each group has all books by the same author. Documents that don't have this field are grouped under a single group with a null group value. groupSort : how the groups are sorted. For sorting purposes, each group is \"represented\" by the highest-sorted document according to the groupSort within it. For example, if you specify \"price\" (ascending) then the first group is the one with the lowest price book within it. Or if you specify relevance group sort, then the first group is the one containing the highest scoring book. topNGroups : how many top groups to keep. For example, 10 means the top 10 groups are computed. groupOffset : which \"slice\" of top groups you want to retrieve. For example, 3 means you'll get 7 groups back (assuming topNGroups is 10). This is useful for paging, where you might show 5 groups per page. withinGroupSort : how the documents within each group are sorted. This can be different from the group sort. maxDocsPerGroup : how many top documents within each group to keep. withinGroupOffset : which \"slice\" of top documents you want to retrieve from each group. The implementation is two-pass: the first pass (<xref:Lucene.Net.Grouping.Term.TermFirstPassGroupingCollector>) gathers the top groups, and the second pass (<xref:Lucene.Net.Grouping.Term.TermSecondPassGroupingCollector>) gathers documents within those groups. If the search is costly to run you may want to use the CachingCollector class, which caches hits and can (quickly) replay them for the second pass. This way you only run the query once, but you pay a RAM cost to (briefly) hold all hits. Results are returned as a <xref:Lucene.Net.Grouping.TopGroups> instance. This module abstracts away what defines group and how it is collected. All grouping collectors are abstract and have currently term based implementations. One can implement collectors that for example group on multiple fields. Known limitations: For the two-pass grouping search, the group field must be a single-valued indexed field (or indexed as a SortedDocValuesField ). FieldCache is used to load the SortedDocValues for this field. Although Solr support grouping by function and this module has abstraction of what a group is, there are currently only implementations for grouping based on terms. Sharding is not directly supported, though is not too difficult, if you can merge the top groups and top documents per group yourself. Typical usage for the generic two-pass grouping search looks like this using the grouping convenience utility (optionally using caching for the second pass search): GroupingSearch groupingSearch = new GroupingSearch(\"author\"); groupingSearch.setGroupSort(groupSort); groupingSearch.setFillSortFields(fillFields); if (useCache) { // Sets cache in MB groupingSearch.setCachingInMB(4.0, true); } if (requiredTotalGroupCount) { groupingSearch.setAllGroups(true); } TermQuery query = new TermQuery(new Term(\"content\", searchTerm)); TopGroups result = groupingSearch.search(indexSearcher, query, groupOffset, groupLimit); // Render groupsResult... if (requiredTotalGroupCount) { int totalGroupCount = result.totalGroupCount; } To use the single-pass BlockGroupingCollector , first, at indexing time, you must ensure all docs in each group are added as a block, and you have some way to find the last document of each group. One simple way to do this is to add a marker binary field: // Create Documents from your source: List<Document> oneGroup = ...; Field groupEndField = new Field(\"groupEnd\", \"x\", Field.Store.NO, Field.Index.NOT_ANALYZED); groupEndField.setIndexOptions(IndexOptions.DOCS_ONLY); groupEndField.setOmitNorms(true); oneGroup.get(oneGroup.size()-1).add(groupEndField); // You can also use writer.updateDocuments(); just be sure you // replace an entire previous doc block with this new one. For // example, each group could have a \"groupID\" field, with the same // value for all docs in this group: writer.addDocuments(oneGroup); Then, at search time, do this up front: // Set this once in your app & save away for reusing across all queries: Filter groupEndDocs = new CachingWrapperFilter(new QueryWrapperFilter(new TermQuery(new Term(\"groupEnd\", \"x\")))); Finally, do this per search: // Per search: BlockGroupingCollector c = new BlockGroupingCollector(groupSort, groupOffset+topNGroups, needsScores, groupEndDocs); s.search(new TermQuery(new Term(\"content\", searchTerm)), c); TopGroups groupsResult = c.getTopGroups(withinGroupSort, groupOffset, docOffset, docOffset+docsPerGroup, fillFields); // Render groupsResult... Or alternatively use the GroupingSearch convenience utility: // Per search: GroupingSearch groupingSearch = new GroupingSearch(groupEndDocs); groupingSearch.setGroupSort(groupSort); groupingSearch.setIncludeScores(needsScores); TermQuery query = new TermQuery(new Term(\"content\", searchTerm)); TopGroups groupsResult = groupingSearch.search(indexSearcher, query, groupOffset, groupLimit); // Render groupsResult... Note that the groupValue of each GroupDocs will be null , so if you need to present this value you'll have to separately retrieve it (for example using stored fields, FieldCache , etc.). Another collector is the TermAllGroupHeadsCollector that can be used to retrieve all most relevant documents per group. Also known as group heads. This can be useful in situations when one wants to compute group based facets / statistics on the complete query result. The collector can be executed during the first or second phase. This collector can also be used with the GroupingSearch convenience utility, but when if one only wants to compute the most relevant documents per group it is better to just use the collector as done here below. AbstractAllGroupHeadsCollector c = TermAllGroupHeadsCollector.create(groupField, sortWithinGroup); s.search(new TermQuery(new Term(\"content\", searchTerm)), c); // Return all group heads as int array int[] groupHeadsArray = c.retrieveGroupHeads() // Return all group heads as FixedBitSet. int maxDoc = s.maxDoc(); FixedBitSet groupHeadsBitSet = c.retrieveGroupHeads(maxDoc) For each of the above collector types there is also a variant that works with ValueSource instead of of fields. Concretely this means that these variants can work with functions. These variants are slower than there term based counter parts. These implementations are located in the org.apache.lucene.search.grouping.function package, but can also be used with the GroupingSearch convenience utility"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.DefaultEncoder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.DefaultEncoder.html",
    "title": "Class DefaultEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultEncoder Simple IEncoder implementation that does not modify the output Inheritance System.Object DefaultEncoder Implements IEncoder Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class DefaultEncoder : object, IEncoder Constructors | Improve this Doc View Source DefaultEncoder() Declaration public DefaultEncoder() Methods | Improve this Doc View Source EncodeText(String) Declaration public virtual string EncodeText(string originalText) Parameters Type Name Description System.String originalText Returns Type Description System.String Implements IEncoder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.GradientFormatter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.GradientFormatter.html",
    "title": "Class GradientFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GradientFormatter Formats text with different color intensity depending on the score of the term. Inheritance System.Object GradientFormatter SpanGradientFormatter Implements IFormatter Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class GradientFormatter : object, IFormatter Constructors | Improve this Doc View Source GradientFormatter(Single, String, String, String, String) Sets the color range for the IDF scores Declaration public GradientFormatter(float maxScore, string minForegroundColor, string maxForegroundColor, string minBackgroundColor, string maxBackgroundColor) Parameters Type Name Description System.Single maxScore The score (and above) displayed as maxColor (See MaxTermWeight which can be used to callibrate scoring scale) System.String minForegroundColor The hex color used for representing IDF scores of zero eg FFFFFF (white) or null if no foreground color required System.String maxForegroundColor The largest hex color used for representing IDF scores eg 000000 (black) or null if no foreground color required System.String minBackgroundColor The hex color used for representing IDF scores of zero eg FFFFFF (white) or null if no background color required System.String maxBackgroundColor The largest hex color used for representing IDF scores eg 000000 (black) or null if no background color required Fields | Improve this Doc View Source m_bgBMax Declaration protected int m_bgBMax Field Value Type Description System.Int32 | Improve this Doc View Source m_bgBMin Declaration protected int m_bgBMin Field Value Type Description System.Int32 | Improve this Doc View Source m_bgGMax Declaration protected int m_bgGMax Field Value Type Description System.Int32 | Improve this Doc View Source m_bgGMin Declaration protected int m_bgGMin Field Value Type Description System.Int32 | Improve this Doc View Source m_bgRMax Declaration protected int m_bgRMax Field Value Type Description System.Int32 | Improve this Doc View Source m_bgRMin Declaration protected int m_bgRMin Field Value Type Description System.Int32 | Improve this Doc View Source m_fgBMax Declaration protected int m_fgBMax Field Value Type Description System.Int32 | Improve this Doc View Source m_fgBMin Declaration protected int m_fgBMin Field Value Type Description System.Int32 | Improve this Doc View Source m_fgGMax Declaration protected int m_fgGMax Field Value Type Description System.Int32 | Improve this Doc View Source m_fgGMin Declaration protected int m_fgGMin Field Value Type Description System.Int32 | Improve this Doc View Source m_fgRMax Declaration protected int m_fgRMax Field Value Type Description System.Int32 | Improve this Doc View Source m_fgRMin Declaration protected int m_fgRMin Field Value Type Description System.Int32 | Improve this Doc View Source m_highlightBackground Declaration protected bool m_highlightBackground Field Value Type Description System.Boolean | Improve this Doc View Source m_highlightForeground Declaration protected bool m_highlightForeground Field Value Type Description System.Boolean Methods | Improve this Doc View Source GetBackgroundColorString(Single) Declaration protected virtual string GetBackgroundColorString(float score) Parameters Type Name Description System.Single score Returns Type Description System.String | Improve this Doc View Source GetForegroundColorString(Single) Declaration protected virtual string GetForegroundColorString(float score) Parameters Type Name Description System.Single score Returns Type Description System.String | Improve this Doc View Source HexToInt32(String) Converts a hex string into an . NOTE: This was hexToInt() in Lucene Declaration public static int HexToInt32(string hex) Parameters Type Name Description System.String hex A string in capital or lower case hex, of no more then 16 characters. Returns Type Description System.Int32 | Improve this Doc View Source HighlightTerm(String, TokenGroup) Declaration public virtual string HighlightTerm(string originalText, TokenGroup tokenGroup) Parameters Type Name Description System.String originalText TokenGroup tokenGroup Returns Type Description System.String Implements IFormatter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.Highlighter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.Highlighter.html",
    "title": "Class Highlighter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Highlighter Class used to markup highlighted terms found in the best sections of a text, using configurable IFragmenter , , IFormatter , IEncoder and tokenizers. Inheritance System.Object Highlighter Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class Highlighter : object Constructors | Improve this Doc View Source Highlighter(IFormatter, IEncoder, IScorer) Declaration public Highlighter(IFormatter formatter, IEncoder encoder, IScorer fragmentScorer) Parameters Type Name Description IFormatter formatter IEncoder encoder IScorer fragmentScorer | Improve this Doc View Source Highlighter(IFormatter, IScorer) Declaration public Highlighter(IFormatter formatter, IScorer fragmentScorer) Parameters Type Name Description IFormatter formatter IScorer fragmentScorer | Improve this Doc View Source Highlighter(IScorer) Declaration public Highlighter(IScorer fragmentScorer) Parameters Type Name Description IScorer fragmentScorer Fields | Improve this Doc View Source DEFAULT_MAX_CHARS_TO_ANALYZE Declaration public static readonly int DEFAULT_MAX_CHARS_TO_ANALYZE Field Value Type Description System.Int32 Properties | Improve this Doc View Source Encoder Declaration public virtual IEncoder Encoder { get; set; } Property Value Type Description IEncoder | Improve this Doc View Source FragmentScorer Declaration public virtual IScorer FragmentScorer { get; set; } Property Value Type Description IScorer | Improve this Doc View Source MaxDocCharsToAnalyze Declaration public virtual int MaxDocCharsToAnalyze { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TextFragmenter Declaration public virtual IFragmenter TextFragmenter { get; set; } Property Value Type Description IFragmenter Methods | Improve this Doc View Source GetBestFragment(Analyzer, String, String) Highlights chosen terms in a text, extracting the most relevant section. This is a convenience method that calls GetBestFragment(TokenStream, String) Declaration public string GetBestFragment(Analyzer analyzer, string fieldName, string text) Parameters Type Name Description Analyzer analyzer the analyzer that will be used to split text into chunks System.String fieldName Name of field used to influence analyzer's tokenization policy System.String text text to highlight terms in Returns Type Description System.String highlighted text fragment or null if no terms found Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestFragment(TokenStream, String) Highlights chosen terms in a text, extracting the most relevant section. The document text is analysed in chunks to record hit statistics across the document. After accumulating stats, the fragment with the highest score is returned Declaration public string GetBestFragment(TokenStream tokenStream, string text) Parameters Type Name Description TokenStream tokenStream A stream of tokens identified in the text parameter, including offset information. This is typically produced by an analyzer re-parsing a document's text. Some work may be done on retrieving TokenStreams more efficiently by adding support for storing original text position data in the Lucene index but this support is not currently available (as of Lucene 1.4 rc2). System.String text text to highlight terms in Returns Type Description System.String highlighted text fragment or null if no terms found Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestFragments(Analyzer, String, String, Int32) Highlights chosen terms in a text, extracting the most relevant sections. This is a convenience method that calls GetBestFragments(TokenStream, String, Int32) Declaration public string[] GetBestFragments(Analyzer analyzer, string fieldName, string text, int maxNumFragments) Parameters Type Name Description Analyzer analyzer the analyzer that will be used to split text into chunks System.String fieldName the name of the field being highlighted (used by analyzer) System.String text text to highlight terms in System.Int32 maxNumFragments the maximum number of fragments. Returns Type Description System.String [] highlighted text fragments (between 0 and maxNumFragments number of fragments) Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestFragments(TokenStream, String, Int32) Highlights chosen terms in a text, extracting the most relevant sections. The document text is analysed in chunks to record hit statistics across the document. After accumulating stats, the fragments with the highest scores are returned as an array of strings in order of score (contiguous fragments are merged into one in their original order to improve readability) Declaration public string[] GetBestFragments(TokenStream tokenStream, string text, int maxNumFragments) Parameters Type Name Description TokenStream tokenStream System.String text text to highlight terms in System.Int32 maxNumFragments the maximum number of fragments. Returns Type Description System.String [] highlighted text fragments (between 0 and maxNumFragments number of fragments) Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestFragments(TokenStream, String, Int32, String) Highlights terms in the text , extracting the most relevant sections and concatenating the chosen fragments with a separator (typically \"...\"). The document text is analysed in chunks to record hit statistics across the document. After accumulating stats, the fragments with the highest scores are returned in order as \"separator\" delimited strings. Declaration public virtual string GetBestFragments(TokenStream tokenStream, string text, int maxNumFragments, string separator) Parameters Type Name Description TokenStream tokenStream System.String text text to highlight terms in System.Int32 maxNumFragments the maximum number of fragments. System.String separator the separator used to intersperse the document fragments (typically \"...\") Returns Type Description System.String highlighted text Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestTextFragments(TokenStream, String, Boolean, Int32) Low level api to get the most relevant (formatted) sections of the document. This method has been made public to allow visibility of score information held in TextFragment objects. Thanks to Jason Calabrese for help in redefining the interface. Declaration public TextFragment[] GetBestTextFragments(TokenStream tokenStream, string text, bool mergeContiguousFragments, int maxNumFragments) Parameters Type Name Description TokenStream tokenStream System.String text System.Boolean mergeContiguousFragments System.Int32 maxNumFragments Returns Type Description TextFragment [] Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.html",
    "title": "Namespace Lucene.Net.Search.Highlight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Highlight <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The highlight package contains classes to provide \"keyword in context\" features typically used to highlight search terms in the text of results pages. The Highlighter class is the central component and can be used to extract the most interesting sections of a piece of text and highlight them, with the help of Fragmenter, fragment Scorer, and Formatter classes. Example Usage //... Above, create documents with two fields, one with term vectors (tv) and one without (notv) IndexSearcher searcher = new IndexSearcher(directory); QueryParser parser = new QueryParser(\"notv\", analyzer); Query query = parser.parse(\"million\"); TopDocs hits = searcher.search(query, 10); SimpleHTMLFormatter htmlFormatter = new SimpleHTMLFormatter(); Highlighter highlighter = new Highlighter(htmlFormatter, new QueryScorer(query)); for (int i = 0; i < 10;=\"\" i++)=\"\" {=\"\" int=\"\" id=\"hits.scoreDocs[i].doc;\" document=\"\" doc=\"searcher.doc(id);\" string=\"\" text=\"doc.get(\" notv\");\"=\"\" tokenstream=\"\" tokenstream=\"TokenSources.getAnyTokenStream(searcher.getIndexReader(),\" id,=\"\" \"notv\",=\"\" analyzer);=\"\" textfragment[]=\"\" frag=\"highlighter.getBestTextFragments(tokenStream,\" text,=\"\" false,=\"\" 10);//highlighter.getbestfragments(tokenstream,=\"\" text,=\"\" 3,=\"\" \"...\");=\"\" for=\"\" (int=\"\" j=\"0;\" j=\"\">< frag.length;=\"\" j++)=\"\" {=\"\" if=\"\" ((frag[j]=\"\" !=\"null)\" &&=\"\" (frag[j].getscore()=\"\"> 0)) { System.out.println((frag[j].toString())); } } //Term vector text = doc.get(\"tv\"); tokenStream = TokenSources.getAnyTokenStream(searcher.getIndexReader(), hits.scoreDocs[i].doc, \"tv\", analyzer); frag = highlighter.getBestTextFragments(tokenStream, text, false, 10); for (int j = 0; j < frag.length;=\"\" j++)=\"\" {=\"\" if=\"\" ((frag[j]=\"\" !=\"null)\" &&=\"\" (frag[j].getscore()=\"\"> 0)) { System.out.println((frag[j].toString())); } } System.out.println(\"-------------\"); } New features 06/02/2005 This release adds options for encoding (thanks to Nicko Cadell). An \"Encoder\" implementation such as the new SimpleHTMLEncoder class can be passed to the highlighter to encode all those non-xhtml standard characters such as & into legal values. This simple class may not suffice for some languages - Commons Lang has an implementation that could be used: escapeHtml(String) in http://svn.apache.org/viewcvs.cgi/jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/StringEscapeUtils.java?rev=137958&view=markup New features 22/12/2004 This release adds some new capabilities: Faster highlighting using Term vector support New formatting options to use color intensity to show informational value Options for better summarization by using term IDF scores to influence fragment selection The highlighter takes a TokenStream as input. Until now these streams have typically been produced using an Analyzer but the new class TokenSources provides helper methods for obtaining TokenStreams from the new TermVector position support (see latest CVS version). The new class GradientFormatter can use a scale of colors to highlight terms according to their score. A subtle use of color can help emphasise the reasons for matching (useful when doing \"MoreLikeThis\" queries and you want to see what the basis of the similarities are). The QueryScorer class has a new constructor which can use an IndexReader to derive the IDF (inverse document frequency) for each term in order to influence the score. This is useful for helping to extracting the most significant sections of a document and in supplying scores used by the new GradientFormatter to color significant words more strongly. The QueryScorer.getMaxWeight method is useful when passed to the GradientFormatter constructor to define the top score which is associated with the top color. Classes DefaultEncoder Simple IEncoder implementation that does not modify the output GradientFormatter Formats text with different color intensity depending on the score of the term. Highlighter Class used to markup highlighted terms found in the best sections of a text, using configurable IFragmenter , , IFormatter , IEncoder and tokenizers. InvalidTokenOffsetsException Exception thrown if TokenStream Tokens are incompatible with provided text NullFragmenter IFragmenter implementation which does not fragment the text. This is useful for highlighting the entire content of a document or field. OffsetLimitTokenFilter This limits the number of tokens while indexing by adding up the current offset. PositionSpan Utility class to record Positions Spans This is a Lucene.NET INTERNAL API, use at your own risk QueryScorer IScorer implementation which scores text fragments by the number of unique query terms found. This class converts appropriate s to s and attempts to score only those terms that participated in generating the 'hit' on the document. QueryTermExtractor Utility class used to extract the terms used in a query, plus any weights. This class will not find terms for , RangeQuery and classes so the caller must pass a rewritten query (see ) to obtain a list of expanded terms. QueryTermScorer IScorer implementation which scores text fragments by the number of unique query terms found. This class uses the QueryTermExtractor class to process determine the query terms and their boosts to be used. SimpleFragmenter IFragmenter implementation which breaks text up into same-size fragments with no concerns over spotting sentence boundaries. SimpleHTMLEncoder Simple IEncoder implementation to escape text for HTML output SimpleHTMLFormatter Simple IFormatter implementation to highlight terms with a pre and post tag SimpleSpanFragmenter IFragmenter implementation which breaks text up into same-size fragments but does not split up . This is a simple sample class. SpanGradientFormatter Formats text with different color intensity depending on the score of the term using the span tag. GradientFormatter uses a bgcolor argument to the font tag which doesn't work in Mozilla, thus this class. TextFragment Low-level class used to record information about a section of a document with a score. TokenGroup One, or several overlapping tokens, along with the score(s) and the scope of the original text TokenSources Hides implementation issues associated with obtaining a for use with the Highlighter - can obtain from term vectors with offsets and positions or from an Analyzer re-parsing the stored content. see TokenStreamFromTermVector TokenStreamFromTermPositionVector created from a term vector field. WeightedSpanTerm Lightweight class to hold term, weight, and positions used for scoring this term. WeightedSpanTermExtractor Class used to extract WeightedSpanTerm s from a based on whether s from the are contained in a supplied . WeightedSpanTermExtractor.PositionCheckingMap<K> This class makes sure that if both position sensitive and insensitive versions of the same term are added, the position insensitive one wins. WeightedTerm Lightweight class to hold term and a Weight value used for scoring this term Interfaces IEncoder Encodes original text. The IEncoder works with the IFormatter to generate the output. IFormatter Processes terms found in the original text, typically by applying some form of mark-up to highlight terms in HTML search results pages. IFragmenter Implements the policy for breaking text into multiple fragments for consideration by the Highlighter class. A sophisticated implementation may do this on the basis of detecting end of sentences in the text. IScorer A IScorer is responsible for scoring a stream of tokens. These token scores can then be used to compute TextFragment scores."
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IEncoder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IEncoder.html",
    "title": "Interface IEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IEncoder Encodes original text. The IEncoder works with the IFormatter to generate the output. Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IEncoder Methods | Improve this Doc View Source EncodeText(String) Declaration string EncodeText(string originalText) Parameters Type Name Description System.String originalText The section of text being output Returns Type Description System.String"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IFormatter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IFormatter.html",
    "title": "Interface IFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFormatter Processes terms found in the original text, typically by applying some form of mark-up to highlight terms in HTML search results pages. Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IFormatter Methods | Improve this Doc View Source HighlightTerm(String, TokenGroup) Declaration string HighlightTerm(string originalText, TokenGroup tokenGroup) Parameters Type Name Description System.String originalText The section of text being considered for markup TokenGroup tokenGroup contains one or several overlapping Tokens along with their scores and positions. Returns Type Description System.String"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IFragmenter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IFragmenter.html",
    "title": "Interface IFragmenter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFragmenter Implements the policy for breaking text into multiple fragments for consideration by the Highlighter class. A sophisticated implementation may do this on the basis of detecting end of sentences in the text. Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IFragmenter Methods | Improve this Doc View Source IsNewFragment() Test to see if this token from the stream should be held in a new TextFragment . Every time this is called, the TokenStream passed to Start(String, TokenStream) will have been incremented. Declaration bool IsNewFragment() Returns Type Description System.Boolean | Improve this Doc View Source Start(String, TokenStream) Initializes the Fragmenter. You can grab references to the Attributes you are interested in from tokenStream and then access the values in IsNewFragment() . Declaration void Start(string originalText, TokenStream tokenStream) Parameters Type Name Description System.String originalText the original source text TokenStream tokenStream tokenStream the to be fragmented"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.InvalidTokenOffsetsException.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.InvalidTokenOffsetsException.html",
    "title": "Class InvalidTokenOffsetsException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InvalidTokenOffsetsException Exception thrown if TokenStream Tokens are incompatible with provided text Inheritance System.Object InvalidTokenOffsetsException Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class InvalidTokenOffsetsException : Exception Constructors | Improve this Doc View Source InvalidTokenOffsetsException() Declaration public InvalidTokenOffsetsException() | Improve this Doc View Source InvalidTokenOffsetsException(String) Declaration public InvalidTokenOffsetsException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source InvalidTokenOffsetsException(String, Exception) Declaration public InvalidTokenOffsetsException(string message, Exception inner) Parameters Type Name Description System.String message Exception inner"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IScorer.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IScorer.html",
    "title": "Interface IScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IScorer A IScorer is responsible for scoring a stream of tokens. These token scores can then be used to compute TextFragment scores. Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IScorer Properties | Improve this Doc View Source FragmentScore Called when the Highlighter has no more tokens for the current fragment - the IScorer returns the weighting it has derived for the most recent fragment, typically based on the results of GetTokenScore() . Declaration float FragmentScore { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source GetTokenScore() Called for each token in the current fragment. The Highlighter will increment the passed to init on every call. Declaration float GetTokenScore() Returns Type Description System.Single a score which is passed to the Highlighter class to influence the mark-up of the text (this return value is NOT used to score the fragment) | Improve this Doc View Source Init(TokenStream) Called to init the Scorer with a . You can grab references to the attributes you are interested in here and access them from GetTokenScore() . Declaration TokenStream Init(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream the that will be scored. Returns Type Description TokenStream either a that the Highlighter should continue using (eg if you read the tokenSream in this method) or null to continue using the same that was passed in. | Improve this Doc View Source StartFragment(TextFragment) Called when a new fragment is started for consideration. Declaration void StartFragment(TextFragment newFragment) Parameters Type Name Description TextFragment newFragment the fragment that will be scored next"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.NullFragmenter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.NullFragmenter.html",
    "title": "Class NullFragmenter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NullFragmenter IFragmenter implementation which does not fragment the text. This is useful for highlighting the entire content of a document or field. Inheritance System.Object NullFragmenter Implements IFragmenter Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class NullFragmenter : object, IFragmenter Methods | Improve this Doc View Source IsNewFragment() Declaration public virtual bool IsNewFragment() Returns Type Description System.Boolean | Improve this Doc View Source Start(String, TokenStream) Declaration public virtual void Start(string originalText, TokenStream tokenStream) Parameters Type Name Description System.String originalText TokenStream tokenStream Implements IFragmenter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.OffsetLimitTokenFilter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.OffsetLimitTokenFilter.html",
    "title": "Class OffsetLimitTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OffsetLimitTokenFilter This limits the number of tokens while indexing by adding up the current offset. Inheritance System.Object OffsetLimitTokenFilter Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public sealed class OffsetLimitTokenFilter : TokenFilter Constructors | Improve this Doc View Source OffsetLimitTokenFilter(TokenStream, Int32) Declaration public OffsetLimitTokenFilter(TokenStream input, int offsetLimit) Parameters Type Name Description TokenStream input System.Int32 offsetLimit Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override void Reset()"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.PositionSpan.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.PositionSpan.html",
    "title": "Class PositionSpan | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PositionSpan Utility class to record Positions Spans This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PositionSpan Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class PositionSpan : object Constructors | Improve this Doc View Source PositionSpan(Int32, Int32) Declaration public PositionSpan(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Properties | Improve this Doc View Source End Declaration public int End { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Start Declaration public int Start { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryScorer.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryScorer.html",
    "title": "Class QueryScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryScorer IScorer implementation which scores text fragments by the number of unique query terms found. This class converts appropriate s to s and attempts to score only those terms that participated in generating the 'hit' on the document. Inheritance System.Object QueryScorer Implements IScorer Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class QueryScorer : object, IScorer Constructors | Improve this Doc View Source QueryScorer(WeightedSpanTerm[]) Constructs a new QueryScorer instance Declaration public QueryScorer(WeightedSpanTerm[] weightedTerms) Parameters Type Name Description WeightedSpanTerm [] weightedTerms an array of pre-created WeightedSpanTerm s | Improve this Doc View Source QueryScorer(Query) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query) Parameters Type Name Description Query query to use for highlighting | Improve this Doc View Source QueryScorer(Query, IndexReader, String) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query, IndexReader reader, string field) Parameters Type Name Description Query query to use for highlighting IndexReader reader to use for quasi tf/idf scoring System.String field Field to highlight - pass null to ignore fields | Improve this Doc View Source QueryScorer(Query, IndexReader, String, String) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query, IndexReader reader, string field, string defaultField) Parameters Type Name Description Query query to use for highlighting IndexReader reader to use for quasi tf/idf scoring System.String field Field to highlight - pass null to ignore fields System.String defaultField The default field for queries with the field name unspecified | Improve this Doc View Source QueryScorer(Query, String) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query, string field) Parameters Type Name Description Query query to use for highlighting System.String field Field to highlight - pass null to ignore fields | Improve this Doc View Source QueryScorer(Query, String, String) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query, string field, string defaultField) Parameters Type Name Description Query query to use for highlighting System.String field Field to highlight - pass null to ignore fields System.String defaultField The default field for queries with the field name unspecified Properties | Improve this Doc View Source ExpandMultiTermQuery Controls whether or not multi-term queries are expanded against a MemoryIndex . true if multi-term queries should be expanded Declaration public virtual bool ExpandMultiTermQuery { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source FragmentScore Declaration public virtual float FragmentScore { get; } Property Value Type Description System.Single See Also FragmentScore | Improve this Doc View Source MaxTermWeight The highest weighted term (useful for passing to GradientFormatter to set top end of coloring scale). Declaration public virtual float MaxTermWeight { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source GetTokenScore() Declaration public virtual float GetTokenScore() Returns Type Description System.Single See Also GetTokenScore () | Improve this Doc View Source GetWeightedSpanTerm(String) Retrieve the WeightedSpanTerm for the specified token. Useful for passing Span information to a IFragmenter . Declaration public virtual WeightedSpanTerm GetWeightedSpanTerm(string token) Parameters Type Name Description System.String token token to get WeightedSpanTerm for Returns Type Description WeightedSpanTerm WeightedSpanTerm for token | Improve this Doc View Source Init(TokenStream) Declaration public virtual TokenStream Init(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream Returns Type Description TokenStream See Also Init ( TokenStream ) | Improve this Doc View Source NewTermExtractor(String) Declaration protected virtual WeightedSpanTermExtractor NewTermExtractor(string defaultField) Parameters Type Name Description System.String defaultField Returns Type Description WeightedSpanTermExtractor | Improve this Doc View Source SetMaxDocCharsToAnalyze(Int32) Declaration public virtual void SetMaxDocCharsToAnalyze(int maxDocCharsToAnalyze) Parameters Type Name Description System.Int32 maxDocCharsToAnalyze | Improve this Doc View Source SetWrapIfNotCachingTokenFilter(Boolean) By default, s that are not of the type are wrapped in a to ensure an efficient reset - if you are already using a different caching impl and you don't want it to be wrapped, set this to false. Declaration public virtual void SetWrapIfNotCachingTokenFilter(bool wrap) Parameters Type Name Description System.Boolean wrap | Improve this Doc View Source StartFragment(TextFragment) Declaration public virtual void StartFragment(TextFragment newFragment) Parameters Type Name Description TextFragment newFragment See Also StartFragment ( TextFragment ) Implements IScorer"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryTermExtractor.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryTermExtractor.html",
    "title": "Class QueryTermExtractor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryTermExtractor Utility class used to extract the terms used in a query, plus any weights. This class will not find terms for , RangeQuery and classes so the caller must pass a rewritten query (see ) to obtain a list of expanded terms. Inheritance System.Object QueryTermExtractor Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public static class QueryTermExtractor : object Methods | Improve this Doc View Source GetIdfWeightedTerms(Query, IndexReader, String) Extracts all terms texts of a given into an array of WeightedTerms Declaration public static WeightedTerm[] GetIdfWeightedTerms(Query query, IndexReader reader, string fieldName) Parameters Type Name Description Query query to extract term texts from IndexReader reader used to compute IDF which can be used to a) score selected fragments better b) use graded highlights eg chaning intensity of font color System.String fieldName the field on which Inverse Document Frequency (IDF) calculations are based Returns Type Description WeightedTerm [] an array of the terms used in a query, plus their weights. | Improve this Doc View Source GetTerms(Query) Extracts all terms texts of a given into an array of WeightedTerms Declaration public static WeightedTerm[] GetTerms(Query query) Parameters Type Name Description Query query to extract term texts from Returns Type Description WeightedTerm [] an array of the terms used in a query, plus their weights. | Improve this Doc View Source GetTerms(Query, Boolean) Extracts all terms texts of a given into an array of WeightedTerms Declaration public static WeightedTerm[] GetTerms(Query query, bool prohibited) Parameters Type Name Description Query query to extract term texts from System.Boolean prohibited true to extract \"prohibited\" terms, too Returns Type Description WeightedTerm [] an array of the terms used in a query, plus their weights. | Improve this Doc View Source GetTerms(Query, Boolean, String) Extracts all terms texts of a given into an array of WeightedTerms Declaration public static WeightedTerm[] GetTerms(Query query, bool prohibited, string fieldName) Parameters Type Name Description Query query to extract term texts from System.Boolean prohibited true to extract \"prohibited\" terms, too System.String fieldName The fieldName used to filter query terms Returns Type Description WeightedTerm [] an array of the terms used in a query, plus their weights."
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryTermScorer.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryTermScorer.html",
    "title": "Class QueryTermScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryTermScorer IScorer implementation which scores text fragments by the number of unique query terms found. This class uses the QueryTermExtractor class to process determine the query terms and their boosts to be used. Inheritance System.Object QueryTermScorer Implements IScorer Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class QueryTermScorer : object, IScorer Constructors | Improve this Doc View Source QueryTermScorer(WeightedTerm[]) Declaration public QueryTermScorer(WeightedTerm[] weightedTerms) Parameters Type Name Description WeightedTerm [] weightedTerms | Improve this Doc View Source QueryTermScorer(Query) Declaration public QueryTermScorer(Query query) Parameters Type Name Description Query query a Lucene query (ideally rewritten using before being passed to this class and the searcher) | Improve this Doc View Source QueryTermScorer(Query, IndexReader, String) Declaration public QueryTermScorer(Query query, IndexReader reader, string fieldName) Parameters Type Name Description Query query a Lucene query (ideally rewritten using before being passed to this class and the searcher) IndexReader reader used to compute IDF which can be used to a) score selected fragments better b) use graded highlights eg set font color intensity System.String fieldName the field on which Inverse Document Frequency (IDF) calculations are based | Improve this Doc View Source QueryTermScorer(Query, String) Declaration public QueryTermScorer(Query query, string fieldName) Parameters Type Name Description Query query a Lucene query (ideally rewritten using before being passed to this class and the searcher) System.String fieldName the Field name which is used to match Query terms Properties | Improve this Doc View Source FragmentScore FragmentScore Declaration public virtual float FragmentScore { get; } Property Value Type Description System.Single | Improve this Doc View Source MaxTermWeight The highest weighted term (useful for passing to GradientFormatter to set top end of coloring scale. Declaration public virtual float MaxTermWeight { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source AllFragmentsProcessed() Declaration public virtual void AllFragmentsProcessed() | Improve this Doc View Source GetTokenScore() GetTokenScore() Declaration public virtual float GetTokenScore() Returns Type Description System.Single | Improve this Doc View Source Init(TokenStream) Init(TokenStream) Declaration public virtual TokenStream Init(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream Returns Type Description TokenStream | Improve this Doc View Source StartFragment(TextFragment) Declaration public virtual void StartFragment(TextFragment newFragment) Parameters Type Name Description TextFragment newFragment Implements IScorer"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleFragmenter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleFragmenter.html",
    "title": "Class SimpleFragmenter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFragmenter IFragmenter implementation which breaks text up into same-size fragments with no concerns over spotting sentence boundaries. Inheritance System.Object SimpleFragmenter Implements IFragmenter Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleFragmenter : object, IFragmenter Constructors | Improve this Doc View Source SimpleFragmenter() Declaration public SimpleFragmenter() | Improve this Doc View Source SimpleFragmenter(Int32) Declaration public SimpleFragmenter(int fragmentSize) Parameters Type Name Description System.Int32 fragmentSize size in number of characters of each fragment Properties | Improve this Doc View Source FragmentSize Gets or Sets size in number of characters of each fragment Declaration public virtual int FragmentSize { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source IsNewFragment() IsNewFragment() Declaration public virtual bool IsNewFragment() Returns Type Description System.Boolean | Improve this Doc View Source Start(String, TokenStream) Start(String, TokenStream) Declaration public virtual void Start(string originalText, TokenStream stream) Parameters Type Name Description System.String originalText TokenStream stream Implements IFragmenter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleHTMLEncoder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleHTMLEncoder.html",
    "title": "Class SimpleHTMLEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleHTMLEncoder Simple IEncoder implementation to escape text for HTML output Inheritance System.Object SimpleHTMLEncoder Implements IEncoder Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleHTMLEncoder : object, IEncoder Constructors | Improve this Doc View Source SimpleHTMLEncoder() Declaration public SimpleHTMLEncoder() Methods | Improve this Doc View Source EncodeText(String) Declaration public string EncodeText(string originalText) Parameters Type Name Description System.String originalText Returns Type Description System.String | Improve this Doc View Source HtmlEncode(String) Encode string into HTML Declaration public static string HtmlEncode(string plainText) Parameters Type Name Description System.String plainText Returns Type Description System.String Implements IEncoder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleHTMLFormatter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleHTMLFormatter.html",
    "title": "Class SimpleHTMLFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleHTMLFormatter Simple IFormatter implementation to highlight terms with a pre and post tag Inheritance System.Object SimpleHTMLFormatter Implements IFormatter Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleHTMLFormatter : object, IFormatter Constructors | Improve this Doc View Source SimpleHTMLFormatter() Default constructor uses HTML: <B> tags to markup terms Declaration public SimpleHTMLFormatter() | Improve this Doc View Source SimpleHTMLFormatter(String, String) Declaration public SimpleHTMLFormatter(string preTag, string postTag) Parameters Type Name Description System.String preTag System.String postTag Methods | Improve this Doc View Source HighlightTerm(String, TokenGroup) HighlightTerm(String, TokenGroup) Declaration public virtual string HighlightTerm(string originalText, TokenGroup tokenGroup) Parameters Type Name Description System.String originalText TokenGroup tokenGroup Returns Type Description System.String Implements IFormatter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleSpanFragmenter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleSpanFragmenter.html",
    "title": "Class SimpleSpanFragmenter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleSpanFragmenter IFragmenter implementation which breaks text up into same-size fragments but does not split up . This is a simple sample class. Inheritance System.Object SimpleSpanFragmenter Implements IFragmenter Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleSpanFragmenter : object, IFragmenter Constructors | Improve this Doc View Source SimpleSpanFragmenter(QueryScorer) Declaration public SimpleSpanFragmenter(QueryScorer queryScorer) Parameters Type Name Description QueryScorer queryScorer QueryScorer that was used to score hits | Improve this Doc View Source SimpleSpanFragmenter(QueryScorer, Int32) Declaration public SimpleSpanFragmenter(QueryScorer queryScorer, int fragmentSize) Parameters Type Name Description QueryScorer queryScorer QueryScorer that was used to score hits System.Int32 fragmentSize size in bytes of each fragment Methods | Improve this Doc View Source IsNewFragment() Declaration public virtual bool IsNewFragment() Returns Type Description System.Boolean See Also IsNewFragment () | Improve this Doc View Source Start(String, TokenStream) Declaration public virtual void Start(string originalText, TokenStream tokenStream) Parameters Type Name Description System.String originalText TokenStream tokenStream See Also Start ( System.String , TokenStream ) Implements IFragmenter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SpanGradientFormatter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SpanGradientFormatter.html",
    "title": "Class SpanGradientFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanGradientFormatter Formats text with different color intensity depending on the score of the term using the span tag. GradientFormatter uses a bgcolor argument to the font tag which doesn't work in Mozilla, thus this class. Inheritance System.Object GradientFormatter SpanGradientFormatter Implements IFormatter Inherited Members GradientFormatter.m_fgRMin GradientFormatter.m_fgGMin GradientFormatter.m_fgBMin GradientFormatter.m_fgRMax GradientFormatter.m_fgGMax GradientFormatter.m_fgBMax GradientFormatter.m_highlightForeground GradientFormatter.m_bgRMin GradientFormatter.m_bgGMin GradientFormatter.m_bgBMin GradientFormatter.m_bgRMax GradientFormatter.m_bgGMax GradientFormatter.m_bgBMax GradientFormatter.m_highlightBackground GradientFormatter.GetForegroundColorString(Single) GradientFormatter.GetBackgroundColorString(Single) GradientFormatter.HexToInt32(String) Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SpanGradientFormatter : GradientFormatter, IFormatter Constructors | Improve this Doc View Source SpanGradientFormatter(Single, String, String, String, String) Declaration public SpanGradientFormatter(float maxScore, string minForegroundColor, string maxForegroundColor, string minBackgroundColor, string maxBackgroundColor) Parameters Type Name Description System.Single maxScore System.String minForegroundColor System.String maxForegroundColor System.String minBackgroundColor System.String maxBackgroundColor Methods | Improve this Doc View Source HighlightTerm(String, TokenGroup) Declaration public override string HighlightTerm(string originalText, TokenGroup tokenGroup) Parameters Type Name Description System.String originalText TokenGroup tokenGroup Returns Type Description System.String Overrides GradientFormatter.HighlightTerm(String, TokenGroup) Implements IFormatter See Also GradientFormatter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TextFragment.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TextFragment.html",
    "title": "Class TextFragment | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TextFragment Low-level class used to record information about a section of a document with a score. Inheritance System.Object TextFragment Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class TextFragment : object Constructors | Improve this Doc View Source TextFragment(StringBuilder, Int32, Int32) Declaration public TextFragment(StringBuilder markedUpText, int textStartPos, int fragNum) Parameters Type Name Description StringBuilder markedUpText System.Int32 textStartPos System.Int32 fragNum Properties | Improve this Doc View Source FragNum the fragment sequence number Declaration public virtual int FragNum { get; protected set; } Property Value Type Description System.Int32 | Improve this Doc View Source Score Declaration public virtual float Score { get; protected set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Follows(TextFragment) true if this fragment follows the one passed Declaration public virtual bool Follows(TextFragment fragment) Parameters Type Name Description TextFragment fragment Returns Type Description System.Boolean | Improve this Doc View Source Merge(TextFragment) Declaration public virtual void Merge(TextFragment frag2) Parameters Type Name Description TextFragment frag2 Fragment to be merged into this one | Improve this Doc View Source ToString() Returns the marked-up text for this text fragment Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenGroup.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenGroup.html",
    "title": "Class TokenGroup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenGroup One, or several overlapping tokens, along with the score(s) and the scope of the original text Inheritance System.Object TokenGroup Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class TokenGroup : object Constructors | Improve this Doc View Source TokenGroup(TokenStream) Declaration public TokenGroup(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream Properties | Improve this Doc View Source EndOffset the end position in the original text Declaration public virtual int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumTokens the number of tokens in this group Declaration public virtual int NumTokens { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset the start position in the original text Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalScore all tokens' scores summed up Declaration public virtual float TotalScore { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source GetScore(Int32) the \"n\"th score Declaration public virtual float GetScore(int index) Parameters Type Name Description System.Int32 index a value between 0 and numTokens -1 Returns Type Description System.Single | Improve this Doc View Source GetToken(Int32) the \"n\"th token Declaration public virtual Token GetToken(int index) Parameters Type Name Description System.Int32 index a value between 0 and numTokens -1 Returns Type Description Token"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenSources.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenSources.html",
    "title": "Class TokenSources | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenSources Hides implementation issues associated with obtaining a for use with the Highlighter - can obtain from term vectors with offsets and positions or from an Analyzer re-parsing the stored content. see TokenStreamFromTermVector Inheritance System.Object TokenSources Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class TokenSources : object Methods | Improve this Doc View Source GetAnyTokenStream(IndexReader, Int32, String, Analyzer) A convenience method that tries a number of approaches to getting a token stream. The cost of finding there are no termVectors in the index is minimal (1000 invocations still registers 0 ms). So this \"lazy\" (flexible?) approach to coding is probably acceptable Declaration public static TokenStream GetAnyTokenStream(IndexReader reader, int docId, string field, Analyzer analyzer) Parameters Type Name Description IndexReader reader System.Int32 docId System.String field Analyzer analyzer Returns Type Description TokenStream null if field not stored correctly | Improve this Doc View Source GetAnyTokenStream(IndexReader, Int32, String, Document, Analyzer) A convenience method that tries to first get a TermPositionVector for the specified docId, then, falls back to using the passed in to retrieve the . This is useful when you already have the document, but would prefer to use the vector first. Declaration public static TokenStream GetAnyTokenStream(IndexReader reader, int docId, string field, Document doc, Analyzer analyzer) Parameters Type Name Description IndexReader reader The to use to try and get the vector from System.Int32 docId The docId to retrieve. System.String field The field to retrieve on the document Document doc The document to fall back on Analyzer analyzer The analyzer to use for creating the TokenStream if the vector doesn't exist Returns Type Description TokenStream The for the on the | Improve this Doc View Source GetTokenStream(Document, String, Analyzer) Declaration public static TokenStream GetTokenStream(Document doc, string field, Analyzer analyzer) Parameters Type Name Description Document doc System.String field Analyzer analyzer Returns Type Description TokenStream | Improve this Doc View Source GetTokenStream(IndexReader, Int32, String, Analyzer) Declaration public static TokenStream GetTokenStream(IndexReader reader, int docId, string field, Analyzer analyzer) Parameters Type Name Description IndexReader reader System.Int32 docId System.String field Analyzer analyzer Returns Type Description TokenStream | Improve this Doc View Source GetTokenStream(String, String, Analyzer) Declaration public static TokenStream GetTokenStream(string field, string contents, Analyzer analyzer) Parameters Type Name Description System.String field System.String contents Analyzer analyzer Returns Type Description TokenStream | Improve this Doc View Source GetTokenStream(Terms) Declaration public static TokenStream GetTokenStream(Terms vector) Parameters Type Name Description Terms vector Returns Type Description TokenStream | Improve this Doc View Source GetTokenStream(Terms, Boolean) Low level api. Returns a token stream generated from a . This can be used to feed the highlighter with a pre-parsed token stream. The must have offsets available. In my tests the speeds to recreate 1000 token streams using this method are: with TermVector offset only data stored - 420 milliseconds with TermVector offset AND position data stored - 271 milliseconds (nb timings for TermVector with position data are based on a tokenizer with contiguous positions - no overlaps or gaps) The cost of not using TermPositionVector to store pre-parsed content and using an analyzer to re-parse the original content: reanalyzing the original content - 980 milliseconds The re-analyze timings will typically vary depending on - The complexity of the analyzer code (timings above were using a stemmer/lowercaser/stopword combo) The number of other fields (Lucene reads ALL fields off the disk when accessing just one document field - can cost dear!) Use of compression on field storage - could be faster due to compression (less disk IO) or slower (more CPU burn) depending on the content. Declaration public static TokenStream GetTokenStream(Terms tpv, bool tokenPositionsGuaranteedContiguous) Parameters Type Name Description Terms tpv System.Boolean tokenPositionsGuaranteedContiguous true if the token position numbers have no overlaps or gaps. If looking to eek out the last drops of performance, set to true. If in doubt, set to false. Returns Type Description TokenStream | Improve this Doc View Source GetTokenStreamWithOffsets(IndexReader, Int32, String) Returns a with positions and offsets constructed from field termvectors. If the field has no termvectors or offsets are not included in the termvector, return null. See GetTokenStream(Terms) for an explanation of what happens when positions aren't present. Declaration public static TokenStream GetTokenStreamWithOffsets(IndexReader reader, int docId, string field) Parameters Type Name Description IndexReader reader the to retrieve term vectors from System.Int32 docId the document to retrieve term vectors for System.String field the field to retrieve term vectors for Returns Type Description TokenStream a , or null if offsets are not available"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenStreamFromTermPositionVector.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenStreamFromTermPositionVector.html",
    "title": "Class TokenStreamFromTermPositionVector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenStreamFromTermPositionVector created from a term vector field. Inheritance System.Object TokenStreamFromTermPositionVector Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public sealed class TokenStreamFromTermPositionVector : TokenStream Constructors | Improve this Doc View Source TokenStreamFromTermPositionVector(Terms) Constructor Declaration public TokenStreamFromTermPositionVector(Terms vector) Parameters Type Name Description Terms vector Terms that contains the data for creating the . Must have positions and offsets. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override void Reset()"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTerm.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTerm.html",
    "title": "Class WeightedSpanTerm | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeightedSpanTerm Lightweight class to hold term, weight, and positions used for scoring this term. Inheritance System.Object WeightedTerm WeightedSpanTerm Inherited Members WeightedTerm.Term WeightedTerm.Weight Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedSpanTerm : WeightedTerm Constructors | Improve this Doc View Source WeightedSpanTerm(Single, String) Declaration public WeightedSpanTerm(float weight, string term) Parameters Type Name Description System.Single weight System.String term | Improve this Doc View Source WeightedSpanTerm(Single, String, Boolean) Declaration public WeightedSpanTerm(float weight, string term, bool positionSensitive) Parameters Type Name Description System.Single weight System.String term System.Boolean positionSensitive Properties | Improve this Doc View Source IsPositionSensitive Declaration public virtual bool IsPositionSensitive { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source PositionSpans Declaration public virtual IList<PositionSpan> PositionSpans { get; } Property Value Type Description IList < PositionSpan > Methods | Improve this Doc View Source AddPositionSpans(IList<PositionSpan>) Declaration public virtual void AddPositionSpans(IList<PositionSpan> positionSpans) Parameters Type Name Description IList < PositionSpan > positionSpans | Improve this Doc View Source CheckPosition(Int32) Checks to see if this term is valid at position . Declaration public virtual bool CheckPosition(int position) Parameters Type Name Description System.Int32 position to check against valid term postions Returns Type Description System.Boolean true iff this term is a hit at this position"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.html",
    "title": "Class WeightedSpanTermExtractor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeightedSpanTermExtractor Class used to extract WeightedSpanTerm s from a based on whether s from the are contained in a supplied . Inheritance System.Object WeightedSpanTermExtractor Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedSpanTermExtractor : object Constructors | Improve this Doc View Source WeightedSpanTermExtractor() Declaration public WeightedSpanTermExtractor() | Improve this Doc View Source WeightedSpanTermExtractor(String) Declaration public WeightedSpanTermExtractor(string defaultField) Parameters Type Name Description System.String defaultField Properties | Improve this Doc View Source ExpandMultiTermQuery Declaration public virtual bool ExpandMultiTermQuery { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsCachedTokenStream Declaration public virtual bool IsCachedTokenStream { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TokenStream Declaration public virtual TokenStream TokenStream { get; } Property Value Type Description TokenStream Methods | Improve this Doc View Source CollectSpanQueryFields(SpanQuery, ISet<String>) Declaration protected virtual void CollectSpanQueryFields(SpanQuery spanQuery, ISet<string> fieldNames) Parameters Type Name Description SpanQuery spanQuery ISet < System.String > fieldNames | Improve this Doc View Source Extract(Query, IDictionary<String, WeightedSpanTerm>) Fills a with WeightedSpanTerm s using the terms from the supplied query . Declaration protected virtual void Extract(Query query, IDictionary<string, WeightedSpanTerm> terms) Parameters Type Name Description Query query to extract Terms from IDictionary < System.String , WeightedSpanTerm > terms Map to place created WeightedSpanTerm s in | Improve this Doc View Source ExtractUnknownQuery(Query, IDictionary<String, WeightedSpanTerm>) Declaration protected virtual void ExtractUnknownQuery(Query query, IDictionary<string, WeightedSpanTerm> terms) Parameters Type Name Description Query query IDictionary < System.String , WeightedSpanTerm > terms | Improve this Doc View Source ExtractWeightedSpanTerms(IDictionary<String, WeightedSpanTerm>, SpanQuery) Fills a with WeightedSpanTerm s using the terms from the supplied . Declaration protected virtual void ExtractWeightedSpanTerms(IDictionary<string, WeightedSpanTerm> terms, SpanQuery spanQuery) Parameters Type Name Description IDictionary < System.String , WeightedSpanTerm > terms to place created WeightedSpanTerm s in SpanQuery spanQuery to extract Terms from | Improve this Doc View Source ExtractWeightedTerms(IDictionary<String, WeightedSpanTerm>, Query) Fills a with WeightedSpanTerm s using the terms from the supplied . Declaration protected virtual void ExtractWeightedTerms(IDictionary<string, WeightedSpanTerm> terms, Query query) Parameters Type Name Description IDictionary < System.String , WeightedSpanTerm > terms to place created WeightedSpanTerm s in Query query to extract Terms from | Improve this Doc View Source FieldNameComparer(String) Necessary to implement matches for queries against Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.defaultField Declaration protected virtual bool FieldNameComparer(string fieldNameToCheck) Parameters Type Name Description System.String fieldNameToCheck Returns Type Description System.Boolean | Improve this Doc View Source GetLeafContext() Declaration protected virtual AtomicReaderContext GetLeafContext() Returns Type Description AtomicReaderContext | Improve this Doc View Source GetWeightedSpanTerms(Query, TokenStream) Creates an from the given and . Declaration public virtual IDictionary<string, WeightedSpanTerm> GetWeightedSpanTerms(Query query, TokenStream tokenStream) Parameters Type Name Description Query query that caused hit TokenStream tokenStream of text to be highlighted Returns Type Description IDictionary < System.String , WeightedSpanTerm > Map containing WeightedSpanTerm s | Improve this Doc View Source GetWeightedSpanTerms(Query, TokenStream, String) Creates an from the given and . Declaration public virtual IDictionary<string, WeightedSpanTerm> GetWeightedSpanTerms(Query query, TokenStream tokenStream, string fieldName) Parameters Type Name Description Query query that caused hit TokenStream tokenStream of text to be highlighted System.String fieldName restricts Term's used based on field name Returns Type Description IDictionary < System.String , WeightedSpanTerm > Map containing WeightedSpanTerm s | Improve this Doc View Source GetWeightedSpanTermsWithScores(Query, TokenStream, String, IndexReader) Creates an from the given and . Uses a supplied to properly Weight terms (for gradient highlighting). Declaration public virtual IDictionary<string, WeightedSpanTerm> GetWeightedSpanTermsWithScores(Query query, TokenStream tokenStream, string fieldName, IndexReader reader) Parameters Type Name Description Query query that caused hit TokenStream tokenStream of text to be highlighted System.String fieldName restricts Term's used based on field name IndexReader reader to use for scoring Returns Type Description IDictionary < System.String , WeightedSpanTerm > Map of WeightedSpanTerm s with quasi tf/idf scores | Improve this Doc View Source MustRewriteQuery(SpanQuery) Declaration protected virtual bool MustRewriteQuery(SpanQuery spanQuery) Parameters Type Name Description SpanQuery spanQuery Returns Type Description System.Boolean | Improve this Doc View Source SetMaxDocCharsToAnalyze(Int32) Declaration protected void SetMaxDocCharsToAnalyze(int maxDocCharsToAnalyze) Parameters Type Name Description System.Int32 maxDocCharsToAnalyze | Improve this Doc View Source SetWrapIfNotCachingTokenFilter(Boolean) By default, s that are not of the type are wrapped in a to impl and you don't want it to be wrapped, set this to false. Declaration public virtual void SetWrapIfNotCachingTokenFilter(bool wrap) Parameters Type Name Description System.Boolean wrap"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.PositionCheckingMap-1.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.PositionCheckingMap-1.html",
    "title": "Class WeightedSpanTermExtractor.PositionCheckingMap<K> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeightedSpanTermExtractor.PositionCheckingMap<K> This class makes sure that if both position sensitive and insensitive versions of the same term are added, the position insensitive one wins. Inheritance System.Object WeightedSpanTermExtractor.PositionCheckingMap<K> Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax protected class PositionCheckingMap<K> : IDictionary<K, WeightedSpanTerm> Type Parameters Name Description K Properties | Improve this Doc View Source Count Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[K] Declaration public WeightedSpanTerm this[K key] { get; set; } Parameters Type Name Description K key Property Value Type Description WeightedSpanTerm | Improve this Doc View Source Keys Declaration public ICollection<K> Keys { get; } Property Value Type Description ICollection <K> | Improve this Doc View Source Values Declaration public ICollection<WeightedSpanTerm> Values { get; } Property Value Type Description ICollection < WeightedSpanTerm > Methods | Improve this Doc View Source Add(K, WeightedSpanTerm) Declaration public void Add(K key, WeightedSpanTerm value) Parameters Type Name Description K key WeightedSpanTerm value | Improve this Doc View Source Add(KeyValuePair<K, WeightedSpanTerm>) Declaration public void Add(KeyValuePair<K, WeightedSpanTerm> item) Parameters Type Name Description KeyValuePair <K, WeightedSpanTerm > item | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Contains(KeyValuePair<K, WeightedSpanTerm>) Declaration public bool Contains(KeyValuePair<K, WeightedSpanTerm> item) Parameters Type Name Description KeyValuePair <K, WeightedSpanTerm > item Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(K) Declaration public bool ContainsKey(K key) Parameters Type Name Description K key Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(KeyValuePair<K, WeightedSpanTerm>[], Int32) Declaration public void CopyTo(KeyValuePair<K, WeightedSpanTerm>[] array, int arrayIndex) Parameters Type Name Description KeyValuePair <K, WeightedSpanTerm >[] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<KeyValuePair<K, WeightedSpanTerm>> GetEnumerator() Returns Type Description IEnumerator < KeyValuePair <K, WeightedSpanTerm >> | Improve this Doc View Source Remove(K) Declaration public bool Remove(K key) Parameters Type Name Description K key Returns Type Description System.Boolean | Improve this Doc View Source Remove(KeyValuePair<K, WeightedSpanTerm>) Declaration public bool Remove(KeyValuePair<K, WeightedSpanTerm> item) Parameters Type Name Description KeyValuePair <K, WeightedSpanTerm > item Returns Type Description System.Boolean | Improve this Doc View Source TryGetValue(K, out WeightedSpanTerm) Declaration public bool TryGetValue(K key, out WeightedSpanTerm value) Parameters Type Name Description K key WeightedSpanTerm value Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedTerm.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedTerm.html",
    "title": "Class WeightedTerm | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeightedTerm Lightweight class to hold term and a Weight value used for scoring this term Inheritance System.Object WeightedTerm WeightedSpanTerm Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedTerm : object Constructors | Improve this Doc View Source WeightedTerm(Single, String) Declaration public WeightedTerm(float weight, string term) Parameters Type Name Description System.Single weight System.String term Properties | Improve this Doc View Source Term the term value (stemmed) Declaration public virtual string Term { get; set; } Property Value Type Description System.String | Improve this Doc View Source Weight the Weight associated with this term Declaration public virtual float Weight { get; set; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.BaseFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.BaseFragListBuilder.html",
    "title": "Class BaseFragListBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseFragListBuilder A abstract implementation of IFragListBuilder . Inheritance System.Object BaseFragListBuilder SimpleFragListBuilder WeightedFragListBuilder Implements IFragListBuilder Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public abstract class BaseFragListBuilder : object, IFragListBuilder Constructors | Improve this Doc View Source BaseFragListBuilder() Declaration public BaseFragListBuilder() | Improve this Doc View Source BaseFragListBuilder(Int32) Declaration public BaseFragListBuilder(int margin) Parameters Type Name Description System.Int32 margin Fields | Improve this Doc View Source MARGIN_DEFAULT Declaration public static readonly int MARGIN_DEFAULT Field Value Type Description System.Int32 | Improve this Doc View Source MIN_FRAG_CHAR_SIZE_FACTOR Declaration public static readonly int MIN_FRAG_CHAR_SIZE_FACTOR Field Value Type Description System.Int32 Methods | Improve this Doc View Source AcceptPhrase(FieldPhraseList.WeightedPhraseInfo, Int32, Int32) A predicate to decide if the given FieldPhraseList.WeightedPhraseInfo should be accepted as a highlighted phrase or if it should be discarded. The default implementation discards phrases that are composed of more than one term and where the matchLength exceeds the fragment character size. Declaration protected virtual bool AcceptPhrase(FieldPhraseList.WeightedPhraseInfo info, int matchLength, int fragCharSize) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo info the phrase info to accept System.Int32 matchLength the match length of the current phrase System.Int32 fragCharSize the configured fragment character size Returns Type Description System.Boolean true if this phrase info should be accepted as a highligh phrase | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, FieldFragList, Int32) Declaration protected virtual FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, FieldFragList fieldFragList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList FieldFragList fieldFragList System.Int32 fragCharSize Returns Type Description FieldFragList | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) Declaration public abstract FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList System.Int32 fragCharSize Returns Type Description FieldFragList Implements IFragListBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.BaseFragmentsBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.BaseFragmentsBuilder.html",
    "title": "Class BaseFragmentsBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseFragmentsBuilder Base IFragmentsBuilder implementation that supports colored pre/post tags and multivalued fields. Uses IBoundaryScanner to determine fragments. Inheritance System.Object BaseFragmentsBuilder ScoreOrderFragmentsBuilder SimpleFragmentsBuilder Implements IFragmentsBuilder Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public abstract class BaseFragmentsBuilder : object, IFragmentsBuilder Constructors | Improve this Doc View Source BaseFragmentsBuilder() Declaration protected BaseFragmentsBuilder() | Improve this Doc View Source BaseFragmentsBuilder(IBoundaryScanner) Declaration protected BaseFragmentsBuilder(IBoundaryScanner boundaryScanner) Parameters Type Name Description IBoundaryScanner boundaryScanner | Improve this Doc View Source BaseFragmentsBuilder(String[], String[]) Declaration protected BaseFragmentsBuilder(string[] preTags, string[] postTags) Parameters Type Name Description System.String [] preTags System.String [] postTags | Improve this Doc View Source BaseFragmentsBuilder(String[], String[], IBoundaryScanner) Declaration protected BaseFragmentsBuilder(string[] preTags, string[] postTags, IBoundaryScanner boundaryScanner) Parameters Type Name Description System.String [] preTags System.String [] postTags IBoundaryScanner boundaryScanner Fields | Improve this Doc View Source COLORED_POST_TAGS Declaration public static readonly string[] COLORED_POST_TAGS Field Value Type Description System.String [] | Improve this Doc View Source COLORED_PRE_TAGS Declaration public static readonly string[] COLORED_PRE_TAGS Field Value Type Description System.String [] | Improve this Doc View Source m_postTags Declaration protected string[] m_postTags Field Value Type Description System.String [] | Improve this Doc View Source m_preTags Declaration protected string[] m_preTags Field Value Type Description System.String [] Properties | Improve this Doc View Source IsDiscreteMultiValueHighlighting Declaration public virtual bool IsDiscreteMultiValueHighlighting { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MultiValuedSeparator Declaration public virtual char MultiValuedSeparator { get; set; } Property Value Type Description System.Char Methods | Improve this Doc View Source CreateFragment(IndexReader, Int32, String, FieldFragList) Declaration public virtual string CreateFragment(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName FieldFragList fieldFragList Returns Type Description System.String | Improve this Doc View Source CreateFragment(IndexReader, Int32, String, FieldFragList, String[], String[], IEncoder) Declaration public virtual string CreateFragment(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName FieldFragList fieldFragList System.String [] preTags System.String [] postTags IEncoder encoder Returns Type Description System.String | Improve this Doc View Source CreateFragments(IndexReader, Int32, String, FieldFragList, Int32) Declaration public virtual string[] CreateFragments(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, int maxNumFragments) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName FieldFragList fieldFragList System.Int32 maxNumFragments Returns Type Description System.String [] | Improve this Doc View Source CreateFragments(IndexReader, Int32, String, FieldFragList, Int32, String[], String[], IEncoder) Declaration public virtual string[] CreateFragments(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, int maxNumFragments, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName FieldFragList fieldFragList System.Int32 maxNumFragments System.String [] preTags System.String [] postTags IEncoder encoder Returns Type Description System.String [] | Improve this Doc View Source DiscreteMultiValueHighlighting(IList<FieldFragList.WeightedFragInfo>, Field[]) Declaration protected virtual IList<FieldFragList.WeightedFragInfo> DiscreteMultiValueHighlighting(IList<FieldFragList.WeightedFragInfo> fragInfos, Field[] fields) Parameters Type Name Description IList < FieldFragList.WeightedFragInfo > fragInfos Field [] fields Returns Type Description IList < FieldFragList.WeightedFragInfo > | Improve this Doc View Source GetFields(IndexReader, Int32, String) Declaration protected virtual Field[] GetFields(IndexReader reader, int docId, string fieldName) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName Returns Type Description Field [] | Improve this Doc View Source GetFragmentSource(StringBuilder, Int32[], Field[], Int32, Int32) Declaration protected virtual string GetFragmentSource(StringBuilder buffer, int[] index, Field[] values, int startOffset, int endOffset) Parameters Type Name Description StringBuilder buffer System.Int32 [] index Field [] values System.Int32 startOffset System.Int32 endOffset Returns Type Description System.String | Improve this Doc View Source GetFragmentSourceMSO(StringBuilder, Int32[], Field[], Int32, Int32, Int32[]) Declaration protected virtual string GetFragmentSourceMSO(StringBuilder buffer, int[] index, Field[] values, int startOffset, int endOffset, int[] modifiedStartOffset) Parameters Type Name Description StringBuilder buffer System.Int32 [] index Field [] values System.Int32 startOffset System.Int32 endOffset System.Int32 [] modifiedStartOffset Returns Type Description System.String | Improve this Doc View Source GetPostTag(Int32) Declaration protected virtual string GetPostTag(int num) Parameters Type Name Description System.Int32 num Returns Type Description System.String | Improve this Doc View Source GetPostTag(String[], Int32) Declaration protected virtual string GetPostTag(string[] postTags, int num) Parameters Type Name Description System.String [] postTags System.Int32 num Returns Type Description System.String | Improve this Doc View Source GetPreTag(Int32) Declaration protected virtual string GetPreTag(int num) Parameters Type Name Description System.Int32 num Returns Type Description System.String | Improve this Doc View Source GetPreTag(String[], Int32) Declaration protected virtual string GetPreTag(string[] preTags, int num) Parameters Type Name Description System.String [] preTags System.Int32 num Returns Type Description System.String | Improve this Doc View Source GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) Declaration public abstract IList<FieldFragList.WeightedFragInfo> GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo> src) Parameters Type Name Description IList < FieldFragList.WeightedFragInfo > src Returns Type Description IList < FieldFragList.WeightedFragInfo > | Improve this Doc View Source MakeFragment(StringBuilder, Int32[], Field[], FieldFragList.WeightedFragInfo, String[], String[], IEncoder) Declaration protected virtual string MakeFragment(StringBuilder buffer, int[] index, Field[] values, FieldFragList.WeightedFragInfo fragInfo, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description StringBuilder buffer System.Int32 [] index Field [] values FieldFragList.WeightedFragInfo fragInfo System.String [] preTags System.String [] postTags IEncoder encoder Returns Type Description System.String Implements IFragmentsBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FastVectorHighlighter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FastVectorHighlighter.html",
    "title": "Class FastVectorHighlighter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FastVectorHighlighter Another highlighter implementation. Inheritance System.Object FastVectorHighlighter Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class FastVectorHighlighter : object Constructors | Improve this Doc View Source FastVectorHighlighter() the default constructor. Declaration public FastVectorHighlighter() | Improve this Doc View Source FastVectorHighlighter(Boolean, Boolean) a constructor. Using SimpleFragListBuilder and ScoreOrderFragmentsBuilder . Declaration public FastVectorHighlighter(bool phraseHighlight, bool fieldMatch) Parameters Type Name Description System.Boolean phraseHighlight true or false for phrase highlighting System.Boolean fieldMatch true of false for field matching | Improve this Doc View Source FastVectorHighlighter(Boolean, Boolean, IFragListBuilder, IFragmentsBuilder) a constructor. A IFragListBuilder and a IFragmentsBuilder can be specified (plugins). Declaration public FastVectorHighlighter(bool phraseHighlight, bool fieldMatch, IFragListBuilder fragListBuilder, IFragmentsBuilder fragmentsBuilder) Parameters Type Name Description System.Boolean phraseHighlight true of false for phrase highlighting System.Boolean fieldMatch true of false for field matching IFragListBuilder fragListBuilder an instance of IFragmentsBuilder IFragmentsBuilder fragmentsBuilder an instance of IFragmentsBuilder Fields | Improve this Doc View Source DEFAULT_FIELD_MATCH Declaration public static readonly bool DEFAULT_FIELD_MATCH Field Value Type Description System.Boolean | Improve this Doc View Source DEFAULT_PHRASE_HIGHLIGHT Declaration public static readonly bool DEFAULT_PHRASE_HIGHLIGHT Field Value Type Description System.Boolean Properties | Improve this Doc View Source IsFieldMatch return whether fieldMatch or not. Declaration public virtual bool IsFieldMatch { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsPhraseHighlight return whether phraseHighlight or not. Declaration public virtual bool IsPhraseHighlight { get; } Property Value Type Description System.Boolean | Improve this Doc View Source PhraseLimit Gets or Sets the maximum number of phrases to analyze when searching for the highest-scoring phrase. The default is unlimited (int.MaxValue). Declaration public virtual int PhraseLimit { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetBestFragment(FieldQuery, IndexReader, Int32, String, Int32) return the best fragment. Declaration public string GetBestFragment(FieldQuery fieldQuery, IndexReader reader, int docId, string fieldName, int fragCharSize) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted System.Int32 fragCharSize the length (number of chars) of a fragment Returns Type Description System.String the best fragment (snippet) string | Improve this Doc View Source GetBestFragment(FieldQuery, IndexReader, Int32, String, Int32, IFragListBuilder, IFragmentsBuilder, String[], String[], IEncoder) return the best fragment. Declaration public string GetBestFragment(FieldQuery fieldQuery, IndexReader reader, int docId, string fieldName, int fragCharSize, IFragListBuilder fragListBuilder, IFragmentsBuilder fragmentsBuilder, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted System.Int32 fragCharSize the length (number of chars) of a fragment IFragListBuilder fragListBuilder IFragListBuilder object IFragmentsBuilder fragmentsBuilder IFragmentsBuilder object System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String the best fragment (snippet) string | Improve this Doc View Source GetBestFragments(FieldQuery, IndexReader, Int32, String, ISet<String>, Int32, Int32, IFragListBuilder, IFragmentsBuilder, String[], String[], IEncoder) Return the best fragments. Matches are scanned from matchedFields and turned into fragments against storedField . The highlighting may not make sense if matchedFields has matches with offsets that don't correspond features in storedField . It will outright throw a if matchedFields produces offsets outside of storedField . As such it is advisable that all matchedFields share the same source as storedField or are at least a prefix of it. Declaration public string[] GetBestFragments(FieldQuery fieldQuery, IndexReader reader, int docId, string storedField, ISet<string> matchedFields, int fragCharSize, int maxNumFragments, IFragListBuilder fragListBuilder, IFragmentsBuilder fragmentsBuilder, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader of the index System.Int32 docId document id to be highlighted System.String storedField field of the document that stores the text ISet < System.String > matchedFields fields of the document to scan for matches System.Int32 fragCharSize the length (number of chars) of a fragment System.Int32 maxNumFragments maximum number of fragments IFragListBuilder fragListBuilder IFragListBuilder object IFragmentsBuilder fragmentsBuilder IFragmentsBuilder object System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments | Improve this Doc View Source GetBestFragments(FieldQuery, IndexReader, Int32, String, Int32, Int32) return the best fragments. Declaration public string[] GetBestFragments(FieldQuery fieldQuery, IndexReader reader, int docId, string fieldName, int fragCharSize, int maxNumFragments) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted System.Int32 fragCharSize the length (number of chars) of a fragment System.Int32 maxNumFragments maximum number of fragments Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments | Improve this Doc View Source GetBestFragments(FieldQuery, IndexReader, Int32, String, Int32, Int32, IFragListBuilder, IFragmentsBuilder, String[], String[], IEncoder) return the best fragments. Declaration public string[] GetBestFragments(FieldQuery fieldQuery, IndexReader reader, int docId, string fieldName, int fragCharSize, int maxNumFragments, IFragListBuilder fragListBuilder, IFragmentsBuilder fragmentsBuilder, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted System.Int32 fragCharSize the length (number of chars) of a fragment System.Int32 maxNumFragments maximum number of fragments IFragListBuilder fragListBuilder IFragListBuilder object IFragmentsBuilder fragmentsBuilder IFragmentsBuilder object System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments | Improve this Doc View Source GetFieldQuery(Query) create a FieldQuery object. Declaration public virtual FieldQuery GetFieldQuery(Query query) Parameters Type Name Description Query query a query Returns Type Description FieldQuery the created FieldQuery object | Improve this Doc View Source GetFieldQuery(Query, IndexReader) create a FieldQuery object. Declaration public virtual FieldQuery GetFieldQuery(Query query, IndexReader reader) Parameters Type Name Description Query query a query IndexReader reader Returns Type Description FieldQuery the created FieldQuery object"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.html",
    "title": "Class FieldFragList | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldFragList FieldFragList has a list of \"frag info\" that is used by IFragmentsBuilder class to create fragments (snippets). Inheritance System.Object FieldFragList SimpleFieldFragList WeightedFieldFragList Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public abstract class FieldFragList : object Constructors | Improve this Doc View Source FieldFragList(Int32) a constructor. Declaration public FieldFragList(int fragCharSize) Parameters Type Name Description System.Int32 fragCharSize the length (number of chars) of a fragment Properties | Improve this Doc View Source FragInfos return the list of FieldFragList.WeightedFragInfo s. Declaration public virtual IList<FieldFragList.WeightedFragInfo> FragInfos { get; } Property Value Type Description IList < FieldFragList.WeightedFragInfo > Methods | Improve this Doc View Source Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) convert the list of FieldPhraseList.WeightedPhraseInfo to FieldFragList.WeightedFragInfo , then add it to the fragInfos Declaration public abstract void Add(int startOffset, int endOffset, IList<FieldPhraseList.WeightedPhraseInfo> phraseInfoList) Parameters Type Name Description System.Int32 startOffset start offset of the fragment System.Int32 endOffset end offset of the fragment IList < FieldPhraseList.WeightedPhraseInfo > phraseInfoList list of FieldPhraseList.WeightedPhraseInfo objects"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.WeightedFragInfo.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.WeightedFragInfo.html",
    "title": "Class FieldFragList.WeightedFragInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldFragList.WeightedFragInfo List of term offsets + weight for a frag info Inheritance System.Object FieldFragList.WeightedFragInfo Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedFragInfo : object Constructors | Improve this Doc View Source WeightedFragInfo(Int32, Int32, IList<FieldFragList.WeightedFragInfo.SubInfo>, Single) Declaration public WeightedFragInfo(int startOffset, int endOffset, IList<FieldFragList.WeightedFragInfo.SubInfo> subInfos, float totalBoost) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset IList < FieldFragList.WeightedFragInfo.SubInfo > subInfos System.Single totalBoost Properties | Improve this Doc View Source EndOffset Declaration public int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public int StartOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source SubInfos Declaration public IList<FieldFragList.WeightedFragInfo.SubInfo> SubInfos { get; } Property Value Type Description IList < FieldFragList.WeightedFragInfo.SubInfo > | Improve this Doc View Source TotalBoost Declaration public float TotalBoost { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.WeightedFragInfo.SubInfo.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.WeightedFragInfo.SubInfo.html",
    "title": "Class FieldFragList.WeightedFragInfo.SubInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldFragList.WeightedFragInfo.SubInfo Represents the list of term offsets for some text Inheritance System.Object FieldFragList.WeightedFragInfo.SubInfo Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SubInfo : object Constructors | Improve this Doc View Source SubInfo(String, IList<FieldPhraseList.WeightedPhraseInfo.Toffs>, Int32, Single) Declaration public SubInfo(string text, IList<FieldPhraseList.WeightedPhraseInfo.Toffs> termsOffsets, int seqnum, float boost) Parameters Type Name Description System.String text IList < FieldPhraseList.WeightedPhraseInfo.Toffs > termsOffsets System.Int32 seqnum System.Single boost Properties | Improve this Doc View Source Boost Declaration public virtual float Boost { get; } Property Value Type Description System.Single | Improve this Doc View Source Seqnum Declaration public virtual int Seqnum { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TermsOffsets Declaration public virtual IList<FieldPhraseList.WeightedPhraseInfo.Toffs> TermsOffsets { get; } Property Value Type Description IList < FieldPhraseList.WeightedPhraseInfo.Toffs > | Improve this Doc View Source Text Declaration public virtual string Text { get; } Property Value Type Description System.String Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.html",
    "title": "Class FieldPhraseList | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldPhraseList FieldPhraseList has a list of WeightedPhraseInfo that is used by FragListBuilder to create a FieldFragList object. Inheritance System.Object FieldPhraseList Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class FieldPhraseList : object Constructors | Improve this Doc View Source FieldPhraseList(FieldPhraseList[]) Merging constructor. Declaration public FieldPhraseList(FieldPhraseList[] toMerge) Parameters Type Name Description FieldPhraseList [] toMerge FieldPhraseList s to merge to build this one | Improve this Doc View Source FieldPhraseList(FieldTermStack, FieldQuery) create a FieldPhraseList that has no limit on the number of phrases to analyze Declaration public FieldPhraseList(FieldTermStack fieldTermStack, FieldQuery fieldQuery) Parameters Type Name Description FieldTermStack fieldTermStack FieldTermStack object FieldQuery fieldQuery FieldQuery object | Improve this Doc View Source FieldPhraseList(FieldTermStack, FieldQuery, Int32) a constructor. Declaration public FieldPhraseList(FieldTermStack fieldTermStack, FieldQuery fieldQuery, int phraseLimit) Parameters Type Name Description FieldTermStack fieldTermStack FieldTermStack object FieldQuery fieldQuery FieldQuery object System.Int32 phraseLimit maximum size of phraseList Properties | Improve this Doc View Source PhraseList return the list of FieldPhraseList.WeightedPhraseInfo . Declaration public virtual IList<FieldPhraseList.WeightedPhraseInfo> PhraseList { get; } Property Value Type Description IList < FieldPhraseList.WeightedPhraseInfo > Methods | Improve this Doc View Source AddIfNoOverlap(FieldPhraseList.WeightedPhraseInfo) Declaration public virtual void AddIfNoOverlap(FieldPhraseList.WeightedPhraseInfo wpi) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo wpi"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.WeightedPhraseInfo.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.WeightedPhraseInfo.html",
    "title": "Class FieldPhraseList.WeightedPhraseInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldPhraseList.WeightedPhraseInfo Represents the list of term offsets and boost for some text Inheritance System.Object FieldPhraseList.WeightedPhraseInfo Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedPhraseInfo : IComparable<FieldPhraseList.WeightedPhraseInfo> Constructors | Improve this Doc View Source WeightedPhraseInfo(ICollection<FieldPhraseList.WeightedPhraseInfo>) Merging constructor. Note that this just grabs seqnum from the first info. Declaration public WeightedPhraseInfo(ICollection<FieldPhraseList.WeightedPhraseInfo> toMerge) Parameters Type Name Description ICollection < FieldPhraseList.WeightedPhraseInfo > toMerge | Improve this Doc View Source WeightedPhraseInfo(IList<FieldTermStack.TermInfo>, Single) Declaration public WeightedPhraseInfo(IList<FieldTermStack.TermInfo> terms, float boost) Parameters Type Name Description IList < FieldTermStack.TermInfo > terms System.Single boost | Improve this Doc View Source WeightedPhraseInfo(IList<FieldTermStack.TermInfo>, Single, Int32) Declaration public WeightedPhraseInfo(IList<FieldTermStack.TermInfo> terms, float boost, int seqnum) Parameters Type Name Description IList < FieldTermStack.TermInfo > terms System.Single boost System.Int32 seqnum Properties | Improve this Doc View Source Boost the boost Declaration public virtual float Boost { get; } Property Value Type Description System.Single | Improve this Doc View Source EndOffset Declaration public virtual int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Seqnum the seqnum Declaration public virtual int Seqnum { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TermsInfos the termInfos Declaration public virtual IList<FieldTermStack.TermInfo> TermsInfos { get; } Property Value Type Description IList < FieldTermStack.TermInfo > | Improve this Doc View Source TermsOffsets the termsOffsets Declaration public virtual IList<FieldPhraseList.WeightedPhraseInfo.Toffs> TermsOffsets { get; } Property Value Type Description IList < FieldPhraseList.WeightedPhraseInfo.Toffs > Methods | Improve this Doc View Source CompareTo(FieldPhraseList.WeightedPhraseInfo) Declaration public virtual int CompareTo(FieldPhraseList.WeightedPhraseInfo other) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo other Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source GetText() Text of the match, calculated on the fly. Use for debugging only. Declaration public virtual string GetText() Returns Type Description System.String the text | Improve this Doc View Source IsOffsetOverlap(FieldPhraseList.WeightedPhraseInfo) Declaration public virtual bool IsOffsetOverlap(FieldPhraseList.WeightedPhraseInfo other) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo other Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.WeightedPhraseInfo.Toffs.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.WeightedPhraseInfo.Toffs.html",
    "title": "Class FieldPhraseList.WeightedPhraseInfo.Toffs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldPhraseList.WeightedPhraseInfo.Toffs Term offsets (start + end) Inheritance System.Object FieldPhraseList.WeightedPhraseInfo.Toffs Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class Toffs : IComparable<FieldPhraseList.WeightedPhraseInfo.Toffs> Constructors | Improve this Doc View Source Toffs(Int32, Int32) Declaration public Toffs(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset Properties | Improve this Doc View Source EndOffset Declaration public virtual int EndOffset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CompareTo(FieldPhraseList.WeightedPhraseInfo.Toffs) Declaration public virtual int CompareTo(FieldPhraseList.WeightedPhraseInfo.Toffs other) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo.Toffs other Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldQuery.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldQuery.html",
    "title": "Class FieldQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldQuery FieldQuery breaks down query object into terms/phrases and keeps them in a FieldQuery.QueryPhraseMap structure. Inheritance System.Object FieldQuery Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class FieldQuery : object Methods | Improve this Doc View Source ApplyParentBoost(Query, Query) Push parent's boost into a clone of query if parent has a non 1 boost. Declaration protected virtual Query ApplyParentBoost(Query query, Query parent) Parameters Type Name Description Query query Query parent Returns Type Description Query | Improve this Doc View Source GetFieldTermMap(String, String) Declaration public virtual FieldQuery.QueryPhraseMap GetFieldTermMap(string fieldName, string term) Parameters Type Name Description System.String fieldName System.String term Returns Type Description FieldQuery.QueryPhraseMap QueryPhraseMap | Improve this Doc View Source SearchPhrase(String, IList<FieldTermStack.TermInfo>) Declaration public virtual FieldQuery.QueryPhraseMap SearchPhrase(string fieldName, IList<FieldTermStack.TermInfo> phraseCandidate) Parameters Type Name Description System.String fieldName IList < FieldTermStack.TermInfo > phraseCandidate Returns Type Description FieldQuery.QueryPhraseMap QueryPhraseMap"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldQuery.QueryPhraseMap.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldQuery.QueryPhraseMap.html",
    "title": "Class FieldQuery.QueryPhraseMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldQuery.QueryPhraseMap Internal structure of a query for highlighting: represents a nested query structure Inheritance System.Object FieldQuery.QueryPhraseMap Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class QueryPhraseMap : object Constructors | Improve this Doc View Source QueryPhraseMap(FieldQuery) Declaration public QueryPhraseMap(FieldQuery fieldQuery) Parameters Type Name Description FieldQuery fieldQuery Properties | Improve this Doc View Source Boost Declaration public virtual float Boost { get; } Property Value Type Description System.Single | Improve this Doc View Source IsTerminal Declaration public virtual bool IsTerminal { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Slop Declaration public virtual int Slop { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TermOrPhraseNumber Declaration public virtual int TermOrPhraseNumber { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetTermMap(String) Declaration public virtual FieldQuery.QueryPhraseMap GetTermMap(string term) Parameters Type Name Description System.String term Returns Type Description FieldQuery.QueryPhraseMap | Improve this Doc View Source IsValidTermOrPhrase(IList<FieldTermStack.TermInfo>) Declaration public virtual bool IsValidTermOrPhrase(IList<FieldTermStack.TermInfo> phraseCandidate) Parameters Type Name Description IList < FieldTermStack.TermInfo > phraseCandidate Returns Type Description System.Boolean | Improve this Doc View Source SearchPhrase(IList<FieldTermStack.TermInfo>) Declaration public virtual FieldQuery.QueryPhraseMap SearchPhrase(IList<FieldTermStack.TermInfo> phraseCandidate) Parameters Type Name Description IList < FieldTermStack.TermInfo > phraseCandidate Returns Type Description FieldQuery.QueryPhraseMap"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldTermStack.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldTermStack.html",
    "title": "Class FieldTermStack | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldTermStack FieldTermStack is a stack that keeps query terms in the specified field of the document to be highlighted. Inheritance System.Object FieldTermStack Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class FieldTermStack : object Constructors | Improve this Doc View Source FieldTermStack(IndexReader, Int32, String, FieldQuery) a constructor. Declaration public FieldTermStack(IndexReader reader, int docId, string fieldName, FieldQuery fieldQuery) Parameters Type Name Description IndexReader reader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted FieldQuery fieldQuery FieldQuery object Properties | Improve this Doc View Source FieldName field name Declaration public virtual string FieldName { get; } Property Value Type Description System.String | Improve this Doc View Source IsEmpty to know whether the stack is empty. Returns true if the stack is empty, false if not Declaration public virtual bool IsEmpty { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Pop() Returns the top FieldTermStack.TermInfo object of the stack Declaration public virtual FieldTermStack.TermInfo Pop() Returns Type Description FieldTermStack.TermInfo the top FieldTermStack.TermInfo object of the stack | Improve this Doc View Source Push(FieldTermStack.TermInfo) Puts a FieldTermStack.TermInfo onto the top of the stack Declaration public virtual void Push(FieldTermStack.TermInfo termInfo) Parameters Type Name Description FieldTermStack.TermInfo termInfo the FieldTermStack.TermInfo object to be put on the top of the stack"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldTermStack.TermInfo.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldTermStack.TermInfo.html",
    "title": "Class FieldTermStack.TermInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldTermStack.TermInfo Single term with its position/offsets in the document and IDF weight. It is but considers only position. Inheritance System.Object FieldTermStack.TermInfo Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class TermInfo : IComparable<FieldTermStack.TermInfo> Constructors | Improve this Doc View Source TermInfo(String, Int32, Int32, Int32, Single) Declaration public TermInfo(string text, int startOffset, int endOffset, int position, float weight) Parameters Type Name Description System.String text System.Int32 startOffset System.Int32 endOffset System.Int32 position System.Single weight Properties | Improve this Doc View Source EndOffset Declaration public virtual int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Next Returns the next TermInfo at this same position. This is a circular list! Declaration public virtual FieldTermStack.TermInfo Next { get; } Property Value Type Description FieldTermStack.TermInfo | Improve this Doc View Source Position Declaration public virtual int Position { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Declaration public virtual string Text { get; } Property Value Type Description System.String | Improve this Doc View Source Weight Declaration public virtual float Weight { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source CompareTo(FieldTermStack.TermInfo) Declaration public virtual int CompareTo(FieldTermStack.TermInfo o) Parameters Type Name Description FieldTermStack.TermInfo o Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.html",
    "title": "Namespace Lucene.Net.Search.VectorHighlight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.VectorHighlight <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> This is an another highlighter implementation. Features fast for large docs support N-gram fields support phrase-unit highlighting with slops support multi-term (includes wildcard, range, regexp, etc) queries need Java 1.5 highlight fields need to be stored with Positions and Offsets take into account query boost and/or IDF-weight to score fragments support colored highlight tags pluggable FragListBuilder / FieldFragList pluggable FragmentsBuilder Algorithm To explain the algorithm, let's use the following sample text (to be highlighted) and user query: Sample Text Lucene is a search engine library. User Query Lucene^2 OR \"search library\"~1 The user query is a BooleanQuery that consists of TermQuery(\"Lucene\") with boost of 2 and PhraseQuery(\"search library\") with slop of 1. For your convenience, here is the offsets and positions info of the sample text. +--------+-----------------------------------+ | | 1111111111222222222233333| | offset|01234567890123456789012345678901234| +--------+-----------------------------------+ |document|Lucene is a search engine library. | +--------*-----------------------------------+ |position|0 1 2 3 4 5 | +--------*-----------------------------------+ Step 1. In Step 1, Fast Vector Highlighter generates FieldQuery.QueryPhraseMap from the user query. QueryPhraseMap consists of the following members: public class QueryPhraseMap { boolean terminal; int slop; // valid if terminal == true and phraseHighlight == true float boost; // valid if terminal == true Map<String, QueryPhraseMap> subMap; } QueryPhraseMap has subMap. The key of the subMap is a term text in the user query and the value is a subsequent QueryPhraseMap . If the query is a term (not phrase), then the subsequent QueryPhraseMap is marked as terminal. If the query is a phrase, then the subsequent QueryPhraseMap is not a terminal and it has the next term text in the phrase. From the sample user query, the following QueryPhraseMap will be generated: QueryPhraseMap +--------+-+ +-------+-+ |\"Lucene\"|o+->|boost=2|*| * : terminal +--------+-+ +-------+-+ +--------+-+ +---------+-+ +-------+------+-+ |\"search\"|o+->|\"library\"|o+->|boost=1|slop=1|*| +--------+-+ +---------+-+ +-------+------+-+ Step 2. In Step 2, Fast Vector Highlighter generates FieldTermStack . Fast Vector Highlighter uses term vector data (must be stored #setStoreTermVectorOffsets(boolean) and #setStoreTermVectorPositions(boolean) ) to generate it. FieldTermStack keeps the terms in the user query. Therefore, in this sample case, Fast Vector Highlighter generates the following FieldTermStack : FieldTermStack +------------------+ |\"Lucene\"(0,6,0) | +------------------+ |\"search\"(12,18,3) | +------------------+ |\"library\"(26,33,5)| +------------------+ where : \"termText\"(startOffset,endOffset,position) Step 3. In Step 3, Fast Vector Highlighter generates FieldPhraseList by reference to QueryPhraseMap and FieldTermStack . FieldPhraseList +----------------+-----------------+---+ |\"Lucene\" |[(0,6)] |w=2| +----------------+-----------------+---+ |\"search library\"|[(12,18),(26,33)]|w=1| +----------------+-----------------+---+ The type of each entry is WeightedPhraseInfo that consists of an array of terms offsets and weight. Step 4. In Step 4, Fast Vector Highlighter creates FieldFragList by reference to FieldPhraseList . In this sample case, the following FieldFragList will be generated: FieldFragList +---------------------------------+ |\"Lucene\"[(0,6)] | |\"search library\"[(12,18),(26,33)]| |totalBoost=3 | +---------------------------------+ The calculation for each FieldFragList.WeightedFragInfo.totalBoost (weight) depends on the implementation of FieldFragList.add( ... ) : public void add( int startOffset, int endOffset, List<WeightedPhraseInfo> phraseInfoList ) { float totalBoost = 0; List<SubInfo> subInfos = new ArrayList<SubInfo>(); for( WeightedPhraseInfo phraseInfo : phraseInfoList ){ subInfos.add( new SubInfo( phraseInfo.getText(), phraseInfo.getTermsOffsets(), phraseInfo.getSeqnum() ) ); totalBoost += phraseInfo.getBoost(); } getFragInfos().add( new WeightedFragInfo( startOffset, endOffset, subInfos, totalBoost ) ); } The used implementation of FieldFragList is noted in BaseFragListBuilder.createFieldFragList( ... ) : public FieldFragList createFieldFragList( FieldPhraseList fieldPhraseList, int fragCharSize ){ return createFieldFragList( fieldPhraseList, new SimpleFieldFragList( fragCharSize ), fragCharSize ); } Currently there are basically to approaches available: SimpleFragListBuilder using SimpleFieldFragList : sum-of-boosts -approach. The totalBoost is calculated by summarizing the query-boosts per term. Per default a term is boosted by 1.0 WeightedFragListBuilder using WeightedFieldFragList : sum-of-distinct-weights -approach. The totalBoost is calculated by summarizing the IDF-weights of distinct terms. Comparison of the two approaches: query = das alte testament (The Old Testament) Terms in fragment sum-of-distinct-weights sum-of-boosts das alte testament 5.339621 3.0 das alte testament 5.339621 3.0 das testament alte 5.339621 3.0 das alte testament 5.339621 3.0 das testament 2.9455688 2.0 das alte 2.4759595 2.0 das das das das 1.5015357 4.0 das das das 1.3003681 3.0 das das 1.061746 2.0 alte 1.0 1.0 alte 1.0 1.0 das 0.7507678 1.0 das 0.7507678 1.0 das 0.7507678 1.0 das 0.7507678 1.0 das 0.7507678 1.0 Step 5. In Step 5, by using FieldFragList and the field stored data, Fast Vector Highlighter creates highlighted snippets! Classes BaseFragListBuilder A abstract implementation of IFragListBuilder . BaseFragmentsBuilder Base IFragmentsBuilder implementation that supports colored pre/post tags and multivalued fields. Uses IBoundaryScanner to determine fragments. FastVectorHighlighter Another highlighter implementation. FieldFragList FieldFragList has a list of \"frag info\" that is used by IFragmentsBuilder class to create fragments (snippets). FieldFragList.WeightedFragInfo List of term offsets + weight for a frag info FieldFragList.WeightedFragInfo.SubInfo Represents the list of term offsets for some text FieldPhraseList FieldPhraseList has a list of WeightedPhraseInfo that is used by FragListBuilder to create a FieldFragList object. FieldPhraseList.WeightedPhraseInfo Represents the list of term offsets and boost for some text FieldPhraseList.WeightedPhraseInfo.Toffs Term offsets (start + end) FieldQuery FieldQuery breaks down query object into terms/phrases and keeps them in a FieldQuery.QueryPhraseMap structure. FieldQuery.QueryPhraseMap Internal structure of a query for highlighting: represents a nested query structure FieldTermStack FieldTermStack is a stack that keeps query terms in the specified field of the document to be highlighted. FieldTermStack.TermInfo Single term with its position/offsets in the document and IDF weight. It is but considers only position. ScoreOrderFragmentsBuilder An implementation of FragmentsBuilder that outputs score-order fragments. ScoreOrderFragmentsBuilder.ScoreComparer for FieldFragList.WeightedFragInfo by boost, breaking ties by offset. SimpleBoundaryScanner Simple boundary scanner implementation that divides fragments based on a set of separator characters. SimpleFieldFragList A simple implementation of FieldFragList . SimpleFragListBuilder A simple implementation of IFragListBuilder . SimpleFragmentsBuilder A simple implementation of FragmentsBuilder. SingleFragListBuilder An implementation class of IFragListBuilder that generates one FieldFragList.WeightedFragInfo object. Typical use case of this class is that you can get an entire field contents by using both of this class and SimpleFragmentsBuilder . FastVectorHighlighter h = new FastVectorHighlighter( true, true, new SingleFragListBuilder(), new SimpleFragmentsBuilder() ); WeightedFieldFragList A weighted implementation of FieldFragList . WeightedFragListBuilder A weighted implementation of IFragListBuilder . Interfaces IBoundaryScanner Finds fragment boundaries: pluggable into BaseFragmentsBuilder IFragListBuilder IFragListBuilder is an interface for FieldFragList builder classes. A IFragListBuilder class can be plugged in to Highlighter . IFragmentsBuilder IFragmentsBuilder is an interface for fragments (snippets) builder classes. A IFragmentsBuilder class can be plugged in to FastVectorHighlighter ."
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IBoundaryScanner.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IBoundaryScanner.html",
    "title": "Interface IBoundaryScanner | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IBoundaryScanner Finds fragment boundaries: pluggable into BaseFragmentsBuilder Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IBoundaryScanner Methods | Improve this Doc View Source FindEndOffset(StringBuilder, Int32) Scan forward to find start offset. Declaration int FindEndOffset(StringBuilder buffer, int start) Parameters Type Name Description StringBuilder buffer scanned object System.Int32 start start offset to begin Returns Type Description System.Int32 the found end offset | Improve this Doc View Source FindStartOffset(StringBuilder, Int32) Scan backward to find end offset. Declaration int FindStartOffset(StringBuilder buffer, int start) Parameters Type Name Description StringBuilder buffer scanned object System.Int32 start offset to begin Returns Type Description System.Int32 the found start offset"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IFragListBuilder.html",
    "title": "Interface IFragListBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFragListBuilder IFragListBuilder is an interface for FieldFragList builder classes. A IFragListBuilder class can be plugged in to Highlighter . Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IFragListBuilder Methods | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) create a FieldFragList . Declaration FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList FieldPhraseList object System.Int32 fragCharSize the length (number of chars) of a fragment Returns Type Description FieldFragList the created FieldFragList object"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IFragmentsBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IFragmentsBuilder.html",
    "title": "Interface IFragmentsBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFragmentsBuilder IFragmentsBuilder is an interface for fragments (snippets) builder classes. A IFragmentsBuilder class can be plugged in to FastVectorHighlighter . Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IFragmentsBuilder Methods | Improve this Doc View Source CreateFragment(IndexReader, Int32, String, FieldFragList) create a fragment. Declaration string CreateFragment(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList) Parameters Type Name Description IndexReader reader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted FieldFragList fieldFragList FieldFragList object Returns Type Description System.String a created fragment or null when no fragment created | Improve this Doc View Source CreateFragment(IndexReader, Int32, String, FieldFragList, String[], String[], IEncoder) create a fragment. Declaration string CreateFragment(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description IndexReader reader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted FieldFragList fieldFragList FieldFragList object System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String a created fragment or null when no fragment created | Improve this Doc View Source CreateFragments(IndexReader, Int32, String, FieldFragList, Int32) create multiple fragments. Declaration string[] CreateFragments(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, int maxNumFragments) Parameters Type Name Description IndexReader reader of the index System.Int32 docId document id to be highlighter System.String fieldName field of the document to be highlighted FieldFragList fieldFragList FieldFragList object System.Int32 maxNumFragments maximum number of fragments Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments | Improve this Doc View Source CreateFragments(IndexReader, Int32, String, FieldFragList, Int32, String[], String[], IEncoder) create multiple fragments. Declaration string[] CreateFragments(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, int maxNumFragments, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description IndexReader reader of the index System.Int32 docId document id to be highlighter System.String fieldName field of the document to be highlighted FieldFragList fieldFragList FieldFragList object System.Int32 maxNumFragments maximum number of fragments System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.ScoreOrderFragmentsBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.ScoreOrderFragmentsBuilder.html",
    "title": "Class ScoreOrderFragmentsBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScoreOrderFragmentsBuilder An implementation of FragmentsBuilder that outputs score-order fragments. Inheritance System.Object BaseFragmentsBuilder ScoreOrderFragmentsBuilder Implements IFragmentsBuilder Inherited Members BaseFragmentsBuilder.m_preTags BaseFragmentsBuilder.m_postTags BaseFragmentsBuilder.COLORED_PRE_TAGS BaseFragmentsBuilder.COLORED_POST_TAGS BaseFragmentsBuilder.CreateFragment(IndexReader, Int32, String, FieldFragList) BaseFragmentsBuilder.CreateFragments(IndexReader, Int32, String, FieldFragList, Int32) BaseFragmentsBuilder.CreateFragment(IndexReader, Int32, String, FieldFragList, String[], String[], IEncoder) BaseFragmentsBuilder.CreateFragments(IndexReader, Int32, String, FieldFragList, Int32, String[], String[], IEncoder) BaseFragmentsBuilder.GetFields(IndexReader, Int32, String) BaseFragmentsBuilder.MakeFragment(StringBuilder, Int32[], Field[], FieldFragList.WeightedFragInfo, String[], String[], IEncoder) BaseFragmentsBuilder.GetFragmentSourceMSO(StringBuilder, Int32[], Field[], Int32, Int32, Int32[]) BaseFragmentsBuilder.GetFragmentSource(StringBuilder, Int32[], Field[], Int32, Int32) BaseFragmentsBuilder.DiscreteMultiValueHighlighting(IList<FieldFragList.WeightedFragInfo>, Field[]) BaseFragmentsBuilder.MultiValuedSeparator BaseFragmentsBuilder.IsDiscreteMultiValueHighlighting BaseFragmentsBuilder.GetPreTag(Int32) BaseFragmentsBuilder.GetPostTag(Int32) BaseFragmentsBuilder.GetPreTag(String[], Int32) BaseFragmentsBuilder.GetPostTag(String[], Int32) Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class ScoreOrderFragmentsBuilder : BaseFragmentsBuilder, IFragmentsBuilder Constructors | Improve this Doc View Source ScoreOrderFragmentsBuilder() a constructor. Declaration public ScoreOrderFragmentsBuilder() | Improve this Doc View Source ScoreOrderFragmentsBuilder(IBoundaryScanner) Declaration public ScoreOrderFragmentsBuilder(IBoundaryScanner bs) Parameters Type Name Description IBoundaryScanner bs | Improve this Doc View Source ScoreOrderFragmentsBuilder(String[], String[]) a constructor. Declaration public ScoreOrderFragmentsBuilder(string[] preTags, string[] postTags) Parameters Type Name Description System.String [] preTags array of pre-tags for markup terms. System.String [] postTags array of post-tags for markup terms. | Improve this Doc View Source ScoreOrderFragmentsBuilder(String[], String[], IBoundaryScanner) Declaration public ScoreOrderFragmentsBuilder(string[] preTags, string[] postTags, IBoundaryScanner bs) Parameters Type Name Description System.String [] preTags System.String [] postTags IBoundaryScanner bs Methods | Improve this Doc View Source GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) Sort by score the list of FieldFragList.WeightedFragInfo Declaration public override IList<FieldFragList.WeightedFragInfo> GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo> src) Parameters Type Name Description IList < FieldFragList.WeightedFragInfo > src Returns Type Description IList < FieldFragList.WeightedFragInfo > Overrides BaseFragmentsBuilder.GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) Implements IFragmentsBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.ScoreOrderFragmentsBuilder.ScoreComparer.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.ScoreOrderFragmentsBuilder.ScoreComparer.html",
    "title": "Class ScoreOrderFragmentsBuilder.ScoreComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScoreOrderFragmentsBuilder.ScoreComparer for FieldFragList.WeightedFragInfo by boost, breaking ties by offset. Inheritance System.Object ScoreOrderFragmentsBuilder.ScoreComparer Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class ScoreComparer : IComparer<FieldFragList.WeightedFragInfo> Methods | Improve this Doc View Source Compare(FieldFragList.WeightedFragInfo, FieldFragList.WeightedFragInfo) Declaration public virtual int Compare(FieldFragList.WeightedFragInfo o1, FieldFragList.WeightedFragInfo o2) Parameters Type Name Description FieldFragList.WeightedFragInfo o1 FieldFragList.WeightedFragInfo o2 Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleBoundaryScanner.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleBoundaryScanner.html",
    "title": "Class SimpleBoundaryScanner | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleBoundaryScanner Simple boundary scanner implementation that divides fragments based on a set of separator characters. Inheritance System.Object SimpleBoundaryScanner Implements IBoundaryScanner Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleBoundaryScanner : object, IBoundaryScanner Constructors | Improve this Doc View Source SimpleBoundaryScanner() Declaration public SimpleBoundaryScanner() | Improve this Doc View Source SimpleBoundaryScanner(Char[]) Declaration public SimpleBoundaryScanner(char[] boundaryChars) Parameters Type Name Description System.Char [] boundaryChars | Improve this Doc View Source SimpleBoundaryScanner(Int32) Declaration public SimpleBoundaryScanner(int maxScan) Parameters Type Name Description System.Int32 maxScan | Improve this Doc View Source SimpleBoundaryScanner(Int32, ISet<Char>) Declaration public SimpleBoundaryScanner(int maxScan, ISet<char> boundaryChars) Parameters Type Name Description System.Int32 maxScan ISet < System.Char > boundaryChars | Improve this Doc View Source SimpleBoundaryScanner(Int32, Char[]) Declaration public SimpleBoundaryScanner(int maxScan, char[] boundaryChars) Parameters Type Name Description System.Int32 maxScan System.Char [] boundaryChars Fields | Improve this Doc View Source DEFAULT_BOUNDARY_CHARS Declaration public static readonly char[] DEFAULT_BOUNDARY_CHARS Field Value Type Description System.Char [] | Improve this Doc View Source DEFAULT_MAX_SCAN Declaration public static readonly int DEFAULT_MAX_SCAN Field Value Type Description System.Int32 | Improve this Doc View Source m_boundaryChars Declaration protected ISet<char> m_boundaryChars Field Value Type Description ISet < System.Char > | Improve this Doc View Source m_maxScan Declaration protected int m_maxScan Field Value Type Description System.Int32 Methods | Improve this Doc View Source FindEndOffset(StringBuilder, Int32) Declaration public virtual int FindEndOffset(StringBuilder buffer, int start) Parameters Type Name Description StringBuilder buffer System.Int32 start Returns Type Description System.Int32 | Improve this Doc View Source FindStartOffset(StringBuilder, Int32) Declaration public virtual int FindStartOffset(StringBuilder buffer, int start) Parameters Type Name Description StringBuilder buffer System.Int32 start Returns Type Description System.Int32 Implements IBoundaryScanner"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFieldFragList.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFieldFragList.html",
    "title": "Class SimpleFieldFragList | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFieldFragList A simple implementation of FieldFragList . Inheritance System.Object FieldFragList SimpleFieldFragList Inherited Members FieldFragList.FragInfos Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleFieldFragList : FieldFragList Constructors | Improve this Doc View Source SimpleFieldFragList(Int32) a constructor. Declaration public SimpleFieldFragList(int fragCharSize) Parameters Type Name Description System.Int32 fragCharSize the length (number of chars) of a fragment Methods | Improve this Doc View Source Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) Declaration public override void Add(int startOffset, int endOffset, IList<FieldPhraseList.WeightedPhraseInfo> phraseInfoList) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset IList < FieldPhraseList.WeightedPhraseInfo > phraseInfoList Overrides FieldFragList.Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>)"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFragListBuilder.html",
    "title": "Class SimpleFragListBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFragListBuilder A simple implementation of IFragListBuilder . Inheritance System.Object BaseFragListBuilder SimpleFragListBuilder Implements IFragListBuilder Inherited Members BaseFragListBuilder.MARGIN_DEFAULT BaseFragListBuilder.MIN_FRAG_CHAR_SIZE_FACTOR BaseFragListBuilder.CreateFieldFragList(FieldPhraseList, FieldFragList, Int32) BaseFragListBuilder.AcceptPhrase(FieldPhraseList.WeightedPhraseInfo, Int32, Int32) Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleFragListBuilder : BaseFragListBuilder, IFragListBuilder Constructors | Improve this Doc View Source SimpleFragListBuilder() Declaration public SimpleFragListBuilder() | Improve this Doc View Source SimpleFragListBuilder(Int32) Declaration public SimpleFragListBuilder(int margin) Parameters Type Name Description System.Int32 margin Methods | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) CreateFieldFragList(FieldPhraseList, Int32) Declaration public override FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList System.Int32 fragCharSize Returns Type Description FieldFragList Overrides BaseFragListBuilder.CreateFieldFragList(FieldPhraseList, Int32) Implements IFragListBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFragmentsBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFragmentsBuilder.html",
    "title": "Class SimpleFragmentsBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFragmentsBuilder A simple implementation of FragmentsBuilder. Inheritance System.Object BaseFragmentsBuilder SimpleFragmentsBuilder Implements IFragmentsBuilder Inherited Members BaseFragmentsBuilder.m_preTags BaseFragmentsBuilder.m_postTags BaseFragmentsBuilder.COLORED_PRE_TAGS BaseFragmentsBuilder.COLORED_POST_TAGS BaseFragmentsBuilder.CreateFragment(IndexReader, Int32, String, FieldFragList) BaseFragmentsBuilder.CreateFragments(IndexReader, Int32, String, FieldFragList, Int32) BaseFragmentsBuilder.CreateFragment(IndexReader, Int32, String, FieldFragList, String[], String[], IEncoder) BaseFragmentsBuilder.CreateFragments(IndexReader, Int32, String, FieldFragList, Int32, String[], String[], IEncoder) BaseFragmentsBuilder.GetFields(IndexReader, Int32, String) BaseFragmentsBuilder.MakeFragment(StringBuilder, Int32[], Field[], FieldFragList.WeightedFragInfo, String[], String[], IEncoder) BaseFragmentsBuilder.GetFragmentSourceMSO(StringBuilder, Int32[], Field[], Int32, Int32, Int32[]) BaseFragmentsBuilder.GetFragmentSource(StringBuilder, Int32[], Field[], Int32, Int32) BaseFragmentsBuilder.DiscreteMultiValueHighlighting(IList<FieldFragList.WeightedFragInfo>, Field[]) BaseFragmentsBuilder.MultiValuedSeparator BaseFragmentsBuilder.IsDiscreteMultiValueHighlighting BaseFragmentsBuilder.GetPreTag(Int32) BaseFragmentsBuilder.GetPostTag(Int32) BaseFragmentsBuilder.GetPreTag(String[], Int32) BaseFragmentsBuilder.GetPostTag(String[], Int32) Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleFragmentsBuilder : BaseFragmentsBuilder, IFragmentsBuilder Constructors | Improve this Doc View Source SimpleFragmentsBuilder() a constructor. Declaration public SimpleFragmentsBuilder() | Improve this Doc View Source SimpleFragmentsBuilder(IBoundaryScanner) Declaration public SimpleFragmentsBuilder(IBoundaryScanner bs) Parameters Type Name Description IBoundaryScanner bs | Improve this Doc View Source SimpleFragmentsBuilder(String[], String[]) a constructor. Declaration public SimpleFragmentsBuilder(string[] preTags, string[] postTags) Parameters Type Name Description System.String [] preTags array of pre-tags for markup terms. System.String [] postTags array of post-tags for markup terms. | Improve this Doc View Source SimpleFragmentsBuilder(String[], String[], IBoundaryScanner) Declaration public SimpleFragmentsBuilder(string[] preTags, string[] postTags, IBoundaryScanner bs) Parameters Type Name Description System.String [] preTags System.String [] postTags IBoundaryScanner bs Methods | Improve this Doc View Source GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) do nothing. return the source list. Declaration public override IList<FieldFragList.WeightedFragInfo> GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo> src) Parameters Type Name Description IList < FieldFragList.WeightedFragInfo > src Returns Type Description IList < FieldFragList.WeightedFragInfo > Overrides BaseFragmentsBuilder.GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) Implements IFragmentsBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SingleFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SingleFragListBuilder.html",
    "title": "Class SingleFragListBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleFragListBuilder An implementation class of IFragListBuilder that generates one FieldFragList.WeightedFragInfo object. Typical use case of this class is that you can get an entire field contents by using both of this class and SimpleFragmentsBuilder . FastVectorHighlighter h = new FastVectorHighlighter( true, true, new SingleFragListBuilder(), new SimpleFragmentsBuilder() ); Inheritance System.Object SingleFragListBuilder Implements IFragListBuilder Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SingleFragListBuilder : object, IFragListBuilder Methods | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) Declaration public virtual FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList System.Int32 fragCharSize Returns Type Description FieldFragList Implements IFragListBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.WeightedFieldFragList.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.WeightedFieldFragList.html",
    "title": "Class WeightedFieldFragList | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeightedFieldFragList A weighted implementation of FieldFragList . Inheritance System.Object FieldFragList WeightedFieldFragList Inherited Members FieldFragList.FragInfos Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedFieldFragList : FieldFragList Constructors | Improve this Doc View Source WeightedFieldFragList(Int32) a constructor. Declaration public WeightedFieldFragList(int fragCharSize) Parameters Type Name Description System.Int32 fragCharSize the length (number of chars) of a fragment Methods | Improve this Doc View Source Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) . Declaration public override void Add(int startOffset, int endOffset, IList<FieldPhraseList.WeightedPhraseInfo> phraseInfoList) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset IList < FieldPhraseList.WeightedPhraseInfo > phraseInfoList Overrides FieldFragList.Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>)"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.WeightedFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.WeightedFragListBuilder.html",
    "title": "Class WeightedFragListBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeightedFragListBuilder A weighted implementation of IFragListBuilder . Inheritance System.Object BaseFragListBuilder WeightedFragListBuilder Implements IFragListBuilder Inherited Members BaseFragListBuilder.MARGIN_DEFAULT BaseFragListBuilder.MIN_FRAG_CHAR_SIZE_FACTOR BaseFragListBuilder.CreateFieldFragList(FieldPhraseList, FieldFragList, Int32) BaseFragListBuilder.AcceptPhrase(FieldPhraseList.WeightedPhraseInfo, Int32, Int32) Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedFragListBuilder : BaseFragListBuilder, IFragListBuilder Constructors | Improve this Doc View Source WeightedFragListBuilder() Declaration public WeightedFragListBuilder() | Improve this Doc View Source WeightedFragListBuilder(Int32) Declaration public WeightedFragListBuilder(int margin) Parameters Type Name Description System.Int32 margin Methods | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) CreateFieldFragList(FieldPhraseList, Int32) Declaration public override FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList System.Int32 fragCharSize Returns Type Description FieldFragList Overrides BaseFragListBuilder.CreateFieldFragList(FieldPhraseList, Int32) Implements IFragListBuilder"
  },
  "api/Lucene.Net.Highlighter/overview.html": {
    "href": "api/Lucene.Net.Highlighter/overview.html",
    "title": "Lucene.Net.Highlighter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Lucene.Net.Highlighter <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The highlight package contains classes to provide \"keyword in context\" features typically used to highlight search terms in the text of results pages."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.html",
    "title": "Namespace Lucene.Net.Analysis.Icu | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Icu <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- :Post-Release-Update-Version.LUCENE_XY: - several mentions in this file --> This module exposes functionality from ICU to Apache Lucene. ICU4J is a Java library that enhances Java's internationalization support by improving performance, keeping current with the Unicode Standard, and providing richer APIs. For an introduction to Lucene's analysis API, see the Lucene.Net.Analysis package documentation. This module exposes the following functionality: Text Segmentation : Tokenizes text based on properties and rules defined in Unicode. Collation : Compare strings according to the conventions and standards of a particular language, region or country. Normalization : Converts text to a unique, equivalent form. Case Folding : Removes case distinctions with Unicode's Default Caseless Matching algorithm. Search Term Folding : Removes distinctions (such as accent marks) between similar characters for a loose or fuzzy search. Text Transformation : Transforms Unicode text in a context-sensitive fashion: e.g. mapping Traditional to Simplified Chinese Text Segmentation Text Segmentation (Tokenization) divides document and query text into index terms (typically words). Unicode provides special properties and rules so that this can be done in a manner that works well with most languages. Text Segmentation implements the word segmentation specified in Unicode Text Segmentation . Additionally the algorithm can be tailored based on writing system, for example text in the Thai script is automatically delegated to a dictionary-based segmentation algorithm. Use Cases As a more thorough replacement for StandardTokenizer that works well for most languages. Example Usages Tokenizing multilanguage text /** * This tokenizer will work well in general for most languages. */ Tokenizer tokenizer = new ICUTokenizer(reader); Collation ICUCollationKeyAnalyzer converts each token into its binary CollationKey using the provided Collator , allowing it to be stored as an index term. ICUCollationKeyAnalyzer depends on ICU4J to produce the CollationKey s. Use Cases Efficient sorting of terms in languages that use non-Unicode character orderings. (Lucene Sort using a Locale can be very slow.) Efficient range queries over fields that contain terms in languages that use non-Unicode character orderings. (Range queries using a Locale can be very slow.) Effective Locale-specific normalization (case differences, diacritics, etc.). ( LowerCaseFilter and ASCIIFoldingFilter provide these services in a generic way that doesn't take into account locale-specific needs.) Example Usages Farsi Range Queries Collator collator = Collator.getInstance(new ULocale(\"ar\")); ICUCollationKeyAnalyzer analyzer = new ICUCollationKeyAnalyzer(Version.LUCENE_48, collator); RAMDirectory ramDir = new RAMDirectory(); IndexWriter writer = new IndexWriter(ramDir, new IndexWriterConfig(Version.LUCENE_48, analyzer)); Document doc = new Document(); doc.add(new Field(\"content\", \"\\u0633\\u0627\\u0628\", Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc); writer.close(); IndexSearcher is = new IndexSearcher(ramDir, true); QueryParser aqp = new QueryParser(Version.LUCENE_48, \"content\", analyzer); aqp.setAnalyzeRangeTerms(true); // Unicode order would include U+0633 in [ U+062F - U+0698 ], but Farsi // orders the U+0698 character before the U+0633 character, so the single // indexed Term above should NOT be returned by a ConstantScoreRangeQuery // with a Farsi Collator (or an Arabic one for the case when Farsi is not // supported). ScoreDoc[] result = is.search(aqp.parse(\"[ \\u062F TO \\u0698 ]\"), null, 1000).scoreDocs; assertEquals(\"The index Term should not be included.\", 0, result.length); Danish Sorting Analyzer analyzer = new ICUCollationKeyAnalyzer(Version.LUCENE_48, Collator.getInstance(new ULocale(\"da\", \"dk\"))); RAMDirectory indexStore = new RAMDirectory(); IndexWriter writer = new IndexWriter(indexStore, new IndexWriterConfig(Version.LUCENE_48, analyzer)); String[] tracer = new String[] { \"A\", \"B\", \"C\", \"D\", \"E\" }; String[] data = new String[] { \"HAT\", \"HUT\", \"H\\u00C5T\", \"H\\u00D8T\", \"HOT\" }; String[] sortedTracerOrder = new String[] { \"A\", \"E\", \"B\", \"D\", \"C\" }; for (int i = 0 ; i < data.length=\"\" ;=\"\" ++i)=\"\" {=\"\" document=\"\" doc=\"new\" document();=\"\" doc.add(new=\"\" field(\"tracer\",=\"\" tracer[i],=\"\" field.store.yes,=\"\" field.index.no));=\"\" doc.add(new=\"\" field(\"contents\",=\"\" data[i],=\"\" field.store.no,=\"\" field.index.analyzed));=\"\" writer.adddocument(doc);=\"\" }=\"\" writer.close();=\"\" indexsearcher=\"\" searcher=\"new\" indexsearcher(indexstore,=\"\" true);=\"\" sort=\"\" sort=\"new\" sort();=\"\" sort.setsort(new=\"\" sortfield(\"contents\",=\"\" sortfield.string));=\"\" query=\"\" query=\"new\" matchalldocsquery();=\"\" scoredoc[]=\"\" result=\"searcher.search(query,\" null,=\"\" 1000,=\"\" sort).scoredocs;=\"\" for=\"\" (int=\"\" i=\"0\" ;=\"\" i=\"\">< result.length=\"\" ;=\"\" ++i)=\"\" {=\"\" document=\"\" doc=\"searcher.doc(result[i].doc);\" assertequals(sortedtracerorder[i],=\"\" doc.getvalues(\"tracer\")[0]);=\"\" }=\"\"> Turkish Case Normalization Collator collator = Collator.getInstance(new ULocale(\"tr\", \"TR\")); collator.setStrength(Collator.PRIMARY); Analyzer analyzer = new ICUCollationKeyAnalyzer(Version.LUCENE_48, collator); RAMDirectory ramDir = new RAMDirectory(); IndexWriter writer = new IndexWriter(ramDir, new IndexWriterConfig(Version.LUCENE_48, analyzer)); Document doc = new Document(); doc.add(new Field(\"contents\", \"DIGY\", Field.Store.NO, Field.Index.ANALYZED)); writer.addDocument(doc); writer.close(); IndexSearcher is = new IndexSearcher(ramDir, true); QueryParser parser = new QueryParser(Version.LUCENE_48, \"contents\", analyzer); Query query = parser.parse(\"d\\u0131gy\"); // U+0131: dotless i ScoreDoc[] result = is.search(query, null, 1000).scoreDocs; assertEquals(\"The index Term should be included.\", 1, result.length); Caveats and Comparisons WARNING: Make sure you use exactly the same Collator at index and query time -- CollationKey s are only comparable when produced by the same Collator . Since {@link java.text.RuleBasedCollator}s are not independently versioned, it is unsafe to search against stored CollationKey s unless the following are exactly the same (best practice is to store this information with the index and check that they remain the same at query time): JVM vendor JVM version, including patch version The language (and country and variant, if specified) of the Locale used when constructing the collator via {@link java.text.Collator#getInstance(java.util.Locale)}. The collation strength used - see {@link java.text.Collator#setStrength(int)} ICUCollationKeyAnalyzer uses ICU4J's Collator , which makes its version available, thus allowing collation to be versioned independently from the JVM. ICUCollationKeyAnalyzer is also significantly faster and generates significantly shorter keys than CollationKeyAnalyzer . See http://site.icu-project.org/charts/collation-icu4j-sun for key generation timing and key length comparisons between ICU4J and java.text.Collator over several languages. CollationKey s generated by java.text.Collator s are not compatible with those those generated by ICU Collators. Specifically, if you use CollationKeyAnalyzer to generate index terms, do not use ICUCollationKeyAnalyzer on the query side, or vice versa. Normalization ICUNormalizer2Filter normalizes term text to a Unicode Normalization Form , so that equivalent forms are standardized to a unique form. Use Cases Removing differences in width for Asian-language text. Standardizing complex text with non-spacing marks so that characters are ordered consistently. Example Usages Normalizing text to NFC /** * Normalizer2 objects are unmodifiable and immutable. */ Normalizer2 normalizer = Normalizer2.getInstance(null, \"nfc\", Normalizer2.Mode.COMPOSE); /** * This filter will normalize to NFC. */ TokenStream tokenstream = new ICUNormalizer2Filter(tokenizer, normalizer); Case Folding Default caseless matching, or case-folding is more than just conversion to lowercase. For example, it handles cases such as the Greek sigma, so that \"Μάϊος\" and \"ΜΆΪΟΣ\" will match correctly. Case-folding is still only an approximation of the language-specific rules governing case. If the specific language is known, consider using ICUCollationKeyFilter and indexing collation keys instead. This implementation performs the \"full\" case-folding specified in the Unicode standard, and this may change the length of the term. For example, the German ß is case-folded to the string 'ss'. Case folding is related to normalization, and as such is coupled with it in this integration. To perform case-folding, you use normalization with the form \"nfkc_cf\" (which is the default). Use Cases As a more thorough replacement for LowerCaseFilter that has good behavior for most languages. Example Usages Lowercasing text /** * This filter will case-fold and normalize to NFKC. */ TokenStream tokenstream = new ICUNormalizer2Filter(tokenizer); Search Term Folding Search term folding removes distinctions (such as accent marks) between similar characters. It is useful for a fuzzy or loose search. Search term folding implements many of the foldings specified in Character Foldings as a special normalization form. This folding applies NFKC, Case Folding, and many character foldings recursively. Use Cases As a more thorough replacement for ASCIIFoldingFilter and LowerCaseFilter that applies the same ideas to many more languages. Example Usages Removing accents /** * This filter will case-fold, remove accents and other distinctions, and * normalize to NFKC. */ TokenStream tokenstream = new ICUFoldingFilter(tokenizer); Text Transformation ICU provides text-transformation functionality via its Transliteration API. This allows you to transform text in a variety of ways, taking context into account. For more information, see the User's Guide and Rule Tutorial . Use Cases Convert Traditional to Simplified Transliterate between different writing systems: e.g. Romanization Example Usages Convert Traditional to Simplified /** * This filter will map Traditional Chinese to Simplified Chinese */ TokenStream tokenstream = new ICUTransformFilter(tokenizer, Transliterator.getInstance(\"Traditional-Simplified\")); Transliterate Serbian Cyrillic to Serbian Latin /** * This filter will map Serbian Cyrillic to Serbian Latin according to BGN rules */ TokenStream tokenstream = new ICUTransformFilter(tokenizer, Transliterator.getInstance(\"Serbian-Latin/BGN\")); Backwards Compatibility This module exists to provide up-to-date Unicode functionality that supports the most recent version of Unicode (currently 6.3). However, some users who wish for stronger backwards compatibility can restrict ICUNormalizer2Filter to operate on only a specific Unicode Version by using a {@link com.ibm.icu.text.FilteredNormalizer2}. Example Usages Restricting normalization to Unicode 5.0 /** * This filter will do NFC normalization, but will ignore any characters that * did not exist as of Unicode 5.0. Because of the normalization stability policy * of Unicode, this is an easy way to force normalization to a specific version. */ Normalizer2 normalizer = Normalizer2.getInstance(null, \"nfc\", Normalizer2.Mode.COMPOSE); UnicodeSet set = new UnicodeSet(\"[:age=5.0:]\"); // see FilteredNormalizer2 docs, the set should be frozen or performance will suffer set.freeze(); FilteredNormalizer2 unicode50 = new FilteredNormalizer2(normalizer, set); TokenStream tokenstream = new ICUNormalizer2Filter(tokenizer, unicode50); Classes ICUFoldingFilter A TokenFilter that applies search term folding to Unicode text, applying foldings from UTR#30 Character Foldings. ICUFoldingFilterFactory Factory for ICUFoldingFilter . ICUNormalizer2CharFilter Normalize token text with ICU's . ICUNormalizer2CharFilterFactory Factory for ICUNormalizer2CharFilter . ICUNormalizer2Filter Normalize token text with ICU's . ICUNormalizer2FilterFactory Factory for ICUNormalizer2Filter . ICUTransformFilter A TokenFilter that transforms text with ICU. ICUTransformFilterFactory Factory for ICUTransformFilter ."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUFoldingFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUFoldingFilter.html",
    "title": "Class ICUFoldingFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUFoldingFilter A TokenFilter that applies search term folding to Unicode text, applying foldings from UTR#30 Character Foldings. Inheritance System.Object AttributeSource TokenStream TokenFilter ICUNormalizer2Filter ICUFoldingFilter Implements IDisposable Inherited Members ICUNormalizer2Filter.IncrementToken() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUFoldingFilter : ICUNormalizer2Filter, IDisposable Remarks This filter applies the following foldings from the report to unicode text: Accent removal Case folding Canonical duplicates folding Dashes folding Diacritic removal (including stroke, hook, descender) Greek letterforms folding Han Radical folding Hebrew Alternates folding Jamo folding Letterforms folding Math symbol folding Multigraph Expansions: All Native digit folding No-break folding Overline folding Positional forms folding Small forms folding Space folding Spacing Accents folding Subscript folding Superscript folding Suzhou Numeral folding Symbol folding Underline folding Vertical forms folding Width folding Additionally, Default Ignorables are removed, and text is normalized to NFKC. All foldings, case folding, and normalization mappings are applied recursively to ensure a fully folded and normalized result. Constructors | Improve this Doc View Source ICUFoldingFilter(TokenStream) Create a new ICUFoldingFilter on the specified input Declaration public ICUFoldingFilter(TokenStream input) Parameters Type Name Description TokenStream input Implements IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUFoldingFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUFoldingFilterFactory.html",
    "title": "Class ICUFoldingFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUFoldingFilterFactory Factory for ICUFoldingFilter . Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ICUFoldingFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUFoldingFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Remarks <fieldType name=\"text_folded\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ICUFoldingFilterFactory\"/> </analyzer> </fieldType> Constructors | Improve this Doc View Source ICUFoldingFilterFactory(IDictionary<String, String>) Creates a new ICUFoldingFilterFactory . Declaration public ICUFoldingFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilter.html",
    "title": "Class ICUNormalizer2CharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUNormalizer2CharFilter Normalize token text with ICU's . Inheritance System.Object CharFilter BaseCharFilter ICUNormalizer2CharFilter Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Read() CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUNormalizer2CharFilter : BaseCharFilter Constructors | Improve this Doc View Source ICUNormalizer2CharFilter(TextReader) Create a new ICUNormalizer2CharFilter that combines NFKC normalization, Case Folding, and removes Default Ignorables (NFKC_Casefold). Declaration public ICUNormalizer2CharFilter(TextReader input) Parameters Type Name Description TextReader input | Improve this Doc View Source ICUNormalizer2CharFilter(TextReader, Normalizer2) Create a new ICUNormalizer2CharFilter with the specified . Declaration public ICUNormalizer2CharFilter(TextReader input, Normalizer2 normalizer) Parameters Type Name Description TextReader input Input text. Normalizer2 normalizer Normalizer to use. Methods | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilterFactory.html",
    "title": "Class ICUNormalizer2CharFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUNormalizer2CharFilterFactory Factory for ICUNormalizer2CharFilter . Inheritance System.Object AbstractAnalysisFactory CharFilterFactory ICUNormalizer2CharFilterFactory Implements IMultiTermAwareComponent Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUNormalizer2CharFilterFactory : CharFilterFactory, IMultiTermAwareComponent Remarks Supports the following attributes: name A Unicode Normalization Form , one of 'nfc','nfkc', 'nfkc_cf'. Default is nfkc_cf. mode Either 'compose' or 'decompose'. Default is compose. Use \"decompose\" with nfc or nfkc, to get nfd or nfkd, respectively. filter A pattern. Codepoints outside the set are always left unchanged. Default is [] (the null set, no filtering). Constructors | Improve this Doc View Source ICUNormalizer2CharFilterFactory(IDictionary<String, String>) Creates a new ICUNormalizer2CharFilterFactory . Declaration public ICUNormalizer2CharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description 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 TextReader input Returns Type Description TextReader | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent See Also ICUNormalizer2CharFilter"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2Filter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2Filter.html",
    "title": "Class ICUNormalizer2Filter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUNormalizer2Filter Normalize token text with ICU's . Inheritance System.Object AttributeSource TokenStream TokenFilter ICUNormalizer2Filter ICUFoldingFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUNormalizer2Filter : TokenFilter, IDisposable Remarks With this filter, you can normalize text in the following ways: NFKC Normalization, Case Folding, and removing Ignorables (the default) Using a standard Normalization mode (NFC, NFD, NFKC, NFKD) Based on rules from a custom normalization mapping. If you use the defaults, this filter is a simple way to standardize Unicode text in a language-independent way for search: The case folding that it does can be seen as a replacement for LowerCaseFilter: For example, it handles cases such as the Greek sigma, so that \"Μάϊος\" and \"ΜΆΪΟΣ\" will match correctly. The normalization will standardizes different forms of the same character in Unicode. For example, CJK full-width numbers will be standardized to their ASCII forms. Ignorables such as Zero-Width Joiner and Variation Selectors are removed. These are typically modifier characters that affect display. Constructors | Improve this Doc View Source ICUNormalizer2Filter(TokenStream) Create a new ICUNormalizer2Filter that combines NFKC normalization, Case Folding, and removes Default Ignorables (NFKC_Casefold) Declaration public ICUNormalizer2Filter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source ICUNormalizer2Filter(TokenStream, Normalizer2) Create a new ICUNormalizer2Filter with the specified Declaration public ICUNormalizer2Filter(TokenStream input, Normalizer2 normalizer) Parameters Type Name Description TokenStream input stream Normalizer2 normalizer normalizer to use Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2FilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2FilterFactory.html",
    "title": "Class ICUNormalizer2FilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUNormalizer2FilterFactory Factory for ICUNormalizer2Filter . Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ICUNormalizer2FilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUNormalizer2FilterFactory : TokenFilterFactory, IMultiTermAwareComponent Remarks Supports the following attributes: name A Unicode Normalization Form , one of 'nfc','nfkc', 'nfkc_cf'. Default is nfkc_cf. mode Either 'compose' or 'decompose'. Default is compose. Use \"decompose\" with nfc or nfkc, to get nfd or nfkd, respectively. filter A pattern. Codepoints outside the set are always left unchanged. Default is [] (the null set, no filtering). Constructors | Improve this Doc View Source ICUNormalizer2FilterFactory(IDictionary<String, String>) Creates a new ICUNormalizer2FilterFactory . Declaration public ICUNormalizer2FilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent See Also ICUNormalizer2Filter"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUTransformFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUTransformFilter.html",
    "title": "Class ICUTransformFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUTransformFilter A TokenFilter that transforms text with ICU. Inheritance System.Object AttributeSource TokenStream TokenFilter ICUTransformFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUTransformFilter : TokenFilter, IDisposable Remarks ICU provides text-transformation functionality via its Transliteration API. Although script conversion is its most common use, a Transliterator can actually perform a more general class of tasks. In fact, Transliterator defines a very general API which specifies only that a segment of the input text is replaced by new text. The particulars of this conversion are determined entirely by subclasses of Transliterator. Some useful transformations for search are built-in: Conversion from Traditional to Simplified Chinese characters Conversion from Hiragana to Katakana Conversion from Fullwidth to Halfwidth forms. Script conversions, for example Serbian Cyrillic to Latin Example usage: stream = new ICUTransformFilter(stream, Transliterator.GetInstance(\"Traditional-Simplified\")); For more details, see the ICU User Guide . Constructors | Improve this Doc View Source ICUTransformFilter(TokenStream, Transliterator) Create a new ICUTransformFilter that transforms text on the given stream. Declaration public ICUTransformFilter(TokenStream input, Transliterator transform) Parameters Type Name Description TokenStream input TokenStream to filter. Transliterator transform Transliterator to transform the text. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUTransformFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUTransformFilterFactory.html",
    "title": "Class ICUTransformFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUTransformFilterFactory Factory for ICUTransformFilter . Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ICUTransformFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUTransformFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Remarks Supports the following attributes: A Transliterator ID, one from Either 'forward' or 'reverse'. Default is forward. Constructors | Improve this Doc View Source ICUTransformFilterFactory(IDictionary<String, String>) Creates a new ICUTransformFilterFactory . Declaration public ICUTransformFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.DefaultICUTokenizerConfig.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.DefaultICUTokenizerConfig.html",
    "title": "Class DefaultICUTokenizerConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultICUTokenizerConfig Default ICUTokenizerConfig that is generally applicable to many languages. Inheritance System.Object ICUTokenizerConfig DefaultICUTokenizerConfig Namespace : Lucene.Net.Analysis.Icu.Segmentation Assembly : Lucene.Net.ICU.dll Syntax public class DefaultICUTokenizerConfig : ICUTokenizerConfig Remarks Generally tokenizes Unicode text according to UAX#29 ( BreakIterator.GetWordInstance(ULocale.ROOT) ), but with the following tailorings: Thai, Lao, Myanmar, Khmer, and CJK text is broken into words with a dictionary. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source DefaultICUTokenizerConfig(Boolean, Boolean) Creates a new config. This object is lightweight, but the first time the class is referenced, breakiterators will be initialized. Declaration public DefaultICUTokenizerConfig(bool cjkAsWords, bool myanmarAsWords) Parameters Type Name Description System.Boolean cjkAsWords true if cjk text should undergo dictionary-based segmentation, otherwise text will be segmented according to UAX#29 defaults. System.Boolean myanmarAsWords If this is true, all Han+Hiragana+Katakana words will be tagged as IDEOGRAPHIC. Fields | Improve this Doc View Source WORD_HANGUL Token type for words containing Korean hangul Declaration public static readonly string WORD_HANGUL Field Value Type Description System.String | Improve this Doc View Source WORD_HIRAGANA Token type for words containing Japanese hiragana Declaration public static readonly string WORD_HIRAGANA Field Value Type Description System.String | Improve this Doc View Source WORD_IDEO Token type for words containing ideographic characters Declaration public static readonly string WORD_IDEO Field Value Type Description System.String | Improve this Doc View Source WORD_KATAKANA Token type for words containing Japanese katakana Declaration public static readonly string WORD_KATAKANA Field Value Type Description System.String | Improve this Doc View Source WORD_LETTER Token type for words that contain letters Declaration public static readonly string WORD_LETTER Field Value Type Description System.String | Improve this Doc View Source WORD_NUMBER Token type for words that appear to be numbers Declaration public static readonly string WORD_NUMBER Field Value Type Description System.String Properties | Improve this Doc View Source CombineCJ Declaration public override bool CombineCJ { get; } Property Value Type Description System.Boolean Overrides ICUTokenizerConfig.CombineCJ Methods | Improve this Doc View Source GetBreakIterator(Int32) Declaration public override BreakIterator GetBreakIterator(int script) Parameters Type Name Description System.Int32 script Returns Type Description BreakIterator Overrides ICUTokenizerConfig.GetBreakIterator(Int32) | Improve this Doc View Source GetType(Int32, Int32) Declaration public override string GetType(int script, int ruleStatus) Parameters Type Name Description System.Int32 script System.Int32 ruleStatus Returns Type Description System.String Overrides ICUTokenizerConfig.GetType(Int32, Int32)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.html",
    "title": "Namespace Lucene.Net.Analysis.Icu.Segmentation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Icu.Segmentation <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Tokenizer that breaks text into words with the Unicode Text Segmentation algorithm. Classes DefaultICUTokenizerConfig Default ICUTokenizerConfig that is generally applicable to many languages. ICUTokenizer Breaks text into words according to UAX #29: Unicode Text Segmentation ( http://www.unicode.org/reports/tr29/ ) Words are broken across script boundaries, then segmented according to the BreakIterator and typing provided by the ICUTokenizerConfig This is a Lucene.NET EXPERIMENTAL API, use at your own risk ICUTokenizerConfig Class that allows for tailored Unicode Text Segmentation on a per-writing system basis. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ICUTokenizerFactory Factory for ICUTokenizer . Words are broken across script boundaries, then segmented according to the and typing provided by the DefaultICUTokenizerConfig ."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizer.html",
    "title": "Class ICUTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUTokenizer Breaks text into words according to UAX #29: Unicode Text Segmentation ( http://www.unicode.org/reports/tr29/ ) Words are broken across script boundaries, then segmented according to the BreakIterator and typing provided by the ICUTokenizerConfig This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream Tokenizer ICUTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Icu.Segmentation Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source ICUTokenizer(AttributeSource.AttributeFactory, TextReader, ICUTokenizerConfig) Construct a new ICUTokenizer that breaks text into words from the given , using a tailored configuration. Declaration public ICUTokenizer(AttributeSource.AttributeFactory factory, TextReader input, ICUTokenizerConfig config) Parameters Type Name Description AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use. TextReader input containing text to tokenize. ICUTokenizerConfig config Tailored configuration. | Improve this Doc View Source ICUTokenizer(TextReader) Construct a new ICUTokenizer that breaks text into words from the given . Declaration public ICUTokenizer(TextReader input) Parameters Type Name Description TextReader input containing text to tokenize. Remarks The default script-specific handling is used. The default attribute factory is used. See Also DefaultICUTokenizerConfig | Improve this Doc View Source ICUTokenizer(TextReader, ICUTokenizerConfig) Construct a new ICUTokenizer that breaks text into words from the given , using a tailored configuration. Declaration public ICUTokenizer(TextReader input, ICUTokenizerConfig config) Parameters Type Name Description TextReader input containing text to tokenize. ICUTokenizerConfig config Tailored configuration. Remarks The default attribute factory is used. Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements IDisposable See Also ICUTokenizerConfig"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizerConfig.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizerConfig.html",
    "title": "Class ICUTokenizerConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUTokenizerConfig Class that allows for tailored Unicode Text Segmentation on a per-writing system basis. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ICUTokenizerConfig DefaultICUTokenizerConfig Namespace : Lucene.Net.Analysis.Icu.Segmentation Assembly : Lucene.Net.ICU.dll Syntax public abstract class ICUTokenizerConfig : object Constructors | Improve this Doc View Source ICUTokenizerConfig() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public ICUTokenizerConfig() Properties | Improve this Doc View Source CombineCJ true if Han, Hiragana, and Katakana scripts should all be returned as Japanese Declaration public abstract bool CombineCJ { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source GetBreakIterator(Int32) Return a breakiterator capable of processing a given script. Declaration public abstract BreakIterator GetBreakIterator(int script) Parameters Type Name Description System.Int32 script Returns Type Description BreakIterator | Improve this Doc View Source GetType(Int32, Int32) Return a token type value for a given script and BreakIterator rule status. Declaration public abstract string GetType(int script, int ruleStatus) Parameters Type Name Description System.Int32 script System.Int32 ruleStatus Returns Type Description System.String"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizerFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizerFactory.html",
    "title": "Class ICUTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUTokenizerFactory Factory for ICUTokenizer . Words are broken across script boundaries, then segmented according to the and typing provided by the DefaultICUTokenizerConfig . Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ICUTokenizerFactory Implements IResourceLoaderAware Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Icu.Segmentation Assembly : Lucene.Net.ICU.dll Syntax public class ICUTokenizerFactory : TokenizerFactory, IResourceLoaderAware Remarks To use the default set of per-script rules: <fieldType name=\"text_icu\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ICUTokenizerFactory\"/> </analyzer> </fieldType> You can customize this tokenizer's behavior by specifying per-script rule files, which are compiled by the ICU . See the ICU RuleBasedBreakIterator syntax reference . To add per-script rules, add a \"rulefiles\" argument, which should contain a comma-separated list of code:rulefile pairs in the following format: four-letter ISO 15924 script code , followed by a colon, then a resource path. E.g. to specify rules for Latin (script code \"Latn\") and Cyrillic (script code \"Cyrl\"): <fieldType name=\"text_icu_custom\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ICUTokenizerFactory\" cjkAsWords=\"true\" rulefiles=\"Latn:my.Latin.rules.rbbi,Cyrl:my.Cyrillic.rules.rbbi\"/> </analyzer> </fieldType> Constructors | Improve this Doc View Source ICUTokenizerFactory(IDictionary<String, String>) Creates a new ICUTokenizerFactory . Declaration public ICUTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input Returns Type Description Tokenizer | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Analysis.Icu.TokenAttributes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Icu.TokenAttributes <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Additional ICU-specific Attributes for text analysis. Classes ScriptAttribute Implementation of IScriptAttribute that stores the script as an integer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces IScriptAttribute This attribute stores the UTR #24 script value for a token of text. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.IScriptAttribute.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.IScriptAttribute.html",
    "title": "Interface IScriptAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IScriptAttribute This attribute stores the UTR #24 script value for a token of text. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Icu.TokenAttributes Assembly : Lucene.Net.ICU.dll Syntax public interface IScriptAttribute : IAttribute Properties | Improve this Doc View Source Code Gets or Sets the numeric code for this script value. This is the constant value from . Declaration int Code { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetName() Get the full name. Declaration string GetName() Returns Type Description System.String UTR #24 full name. | Improve this Doc View Source GetShortName() Get the abbreviated name. Declaration string GetShortName() Returns Type Description System.String UTR #24 abbreviated name."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.ScriptAttribute.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.ScriptAttribute.html",
    "title": "Class ScriptAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScriptAttribute Implementation of IScriptAttribute that stores the script as an integer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Attribute ScriptAttribute Implements IScriptAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Analysis.Icu.TokenAttributes Assembly : Lucene.Net.ICU.dll Syntax public class ScriptAttribute : Attribute, IScriptAttribute, IAttribute Constructors | Improve this Doc View Source ScriptAttribute() Initializes this attribute with . Declaration public ScriptAttribute() Properties | Improve this Doc View Source Code Declaration public virtual int Code { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source GetName() Declaration public virtual string GetName() Returns Type Description System.String | Improve this Doc View Source GetShortName() Declaration public virtual string GetShortName() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) Implements IScriptAttribute IAttribute"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.html",
    "title": "Namespace Lucene.Net.Analysis.Th | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Th <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Thai. Classes ThaiAnalyzer Analyzer for Thai language. It uses to break words. You must specify the required LuceneVersion compatibility when creating ThaiAnalyzer : As of 3.6, a set of Thai stopwords is used by default ThaiTokenizer Tokenizer that use to tokenize Thai text. ThaiTokenizerFactory Factory for ThaiTokenizer . <fieldType name=\"text_thai\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ThaiTokenizerFactory\"/> </analyzer> </fieldType> ThaiWordFilter TokenFilter that use to break each Token that is Thai into separate Token(s) for each Thai word. Please note: Since matchVersion 3.1 on, this filter no longer lowercases non-thai text. ThaiAnalyzer will insert a LowerCaseFilter before this filter so the behaviour of the Analyzer does not change. With version 3.1, the filter handles position increments correctly. ThaiWordFilterFactory Factory for ThaiWordFilter . <fieldType name=\"text_thai\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ThaiWordFilterFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiAnalyzer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiAnalyzer.html",
    "title": "Class ThaiAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThaiAnalyzer Analyzer for Thai language. It uses to break words. You must specify the required LuceneVersion compatibility when creating ThaiAnalyzer : As of 3.6, a set of Thai stopwords is used by default Inheritance System.Object Analyzer StopwordAnalyzerBase ThaiAnalyzer Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax public sealed class ThaiAnalyzer : StopwordAnalyzerBase Constructors | Improve this Doc View Source ThaiAnalyzer(LuceneVersion) Builds an analyzer with the default stop words. Declaration public ThaiAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source ThaiAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public ThaiAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Thai stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = null Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , ThaiWordFilter , and StopFilter"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiTokenizer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiTokenizer.html",
    "title": "Class ThaiTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThaiTokenizer Tokenizer that use to tokenize Thai text. Inheritance System.Object AttributeSource TokenStream Tokenizer SegmentingTokenizerBase ThaiTokenizer Implements IDisposable Inherited Members SegmentingTokenizerBase.BUFFERMAX SegmentingTokenizerBase.m_buffer SegmentingTokenizerBase.m_offset SegmentingTokenizerBase.IncrementToken() SegmentingTokenizerBase.Reset() SegmentingTokenizerBase.End() SegmentingTokenizerBase.IsSafeEnd(Char) Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax public class ThaiTokenizer : SegmentingTokenizerBase, IDisposable Constructors | Improve this Doc View Source ThaiTokenizer(AttributeSource.AttributeFactory, TextReader) Creates a new ThaiTokenizer , supplying the AttributeSource.AttributeFactory Declaration public ThaiTokenizer(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader reader | Improve this Doc View Source ThaiTokenizer(TextReader) Creates a new ThaiTokenizer Declaration public ThaiTokenizer(TextReader reader) Parameters Type Name Description TextReader reader Methods | Improve this Doc View Source IncrementWord() Declaration protected override bool IncrementWord() Returns Type Description System.Boolean Overrides SegmentingTokenizerBase.IncrementWord() | Improve this Doc View Source SetNextSentence(Int32, Int32) Declaration protected override void SetNextSentence(int sentenceStart, int sentenceEnd) Parameters Type Name Description System.Int32 sentenceStart System.Int32 sentenceEnd Overrides SegmentingTokenizerBase.SetNextSentence(Int32, Int32) Implements IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiTokenizerFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiTokenizerFactory.html",
    "title": "Class ThaiTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThaiTokenizerFactory Factory for ThaiTokenizer . <fieldType name=\"text_thai\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ThaiTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ThaiTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax public class ThaiTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source ThaiTokenizerFactory(IDictionary<String, String>) Creates a new ThaiTokenizerFactory Declaration public ThaiTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader reader Returns Type Description Tokenizer"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiWordFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiWordFilter.html",
    "title": "Class ThaiWordFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThaiWordFilter TokenFilter that use to break each Token that is Thai into separate Token(s) for each Thai word. Please note: Since matchVersion 3.1 on, this filter no longer lowercases non-thai text. ThaiAnalyzer will insert a LowerCaseFilter before this filter so the behaviour of the Analyzer does not change. With version 3.1, the filter handles position increments correctly. Inheritance System.Object AttributeSource TokenStream TokenFilter ThaiWordFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax public sealed class ThaiWordFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ThaiWordFilter(LuceneVersion, TokenStream) Creates a new ThaiWordFilter with the specified match version. Declaration public ThaiWordFilter(LuceneVersion matchVersion, TokenStream input) Parameters Type Name Description LuceneVersion matchVersion TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiWordFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiWordFilterFactory.html",
    "title": "Class ThaiWordFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThaiWordFilterFactory Factory for ThaiWordFilter . <fieldType name=\"text_thai\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ThaiWordFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ThaiWordFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax public class ThaiWordFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ThaiWordFilterFactory(IDictionary<String, String>) Creates a new ThaiWordFilterFactory Declaration public ThaiWordFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.CharArrayIterator.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.CharArrayIterator.html",
    "title": "Class CharArrayIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArrayIterator A CharacterIterator used internally for use with This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CharArrayIterator Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.ICU.dll Syntax public abstract class CharArrayIterator : CharacterIterator Properties | Improve this Doc View Source BeginIndex Declaration public override int BeginIndex { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Current Declaration public override char Current { get; } Property Value Type Description System.Char | Improve this Doc View Source EndIndex Declaration public override int EndIndex { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Index Declaration public override int Index { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Length Declaration public virtual int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Start Declaration public virtual int Start { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Declaration public virtual char[] Text { get; } Property Value Type Description System.Char [] Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object | Improve this Doc View Source First() Declaration public override char First() Returns Type Description System.Char | Improve this Doc View Source JreBugWorkaround(Char) Declaration protected abstract char JreBugWorkaround(char ch) Parameters Type Name Description System.Char ch Returns Type Description System.Char | Improve this Doc View Source Last() Declaration public override char Last() Returns Type Description System.Char | Improve this Doc View Source NewSentenceInstance() Create a new CharArrayIterator that works around JRE bugs in a manner suitable for . Declaration public static CharArrayIterator NewSentenceInstance() Returns Type Description CharArrayIterator | Improve this Doc View Source NewWordInstance() Create a new CharArrayIterator that works around JRE bugs in a manner suitable for . Declaration public static CharArrayIterator NewWordInstance() Returns Type Description CharArrayIterator | Improve this Doc View Source Next() Declaration public override char Next() Returns Type Description System.Char | Improve this Doc View Source Previous() Declaration public override char Previous() Returns Type Description System.Char | Improve this Doc View Source SetIndex(Int32) Declaration public override char SetIndex(int position) Parameters Type Name Description System.Int32 position Returns Type Description System.Char | Improve this Doc View Source SetText(Char[], Int32, Int32) Set a new region of text to be examined by this iterator Declaration public virtual void SetText(char[] array, int start, int length) Parameters Type Name Description System.Char [] array text buffer to examine System.Int32 start offset into buffer System.Int32 length maximum length to examine"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.html",
    "title": "Namespace Lucene.Net.Analysis.Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Util <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Utility functions for text analysis. Classes CharArrayIterator A CharacterIterator used internally for use with This is a Lucene.NET INTERNAL API, use at your own risk SegmentingTokenizerBase Breaks text into sentences with a and allows subclasses to decompose these sentences into words. This can be used by subclasses that need sentence context for tokenization purposes, such as CJK segmenters. Additionally it can be used by subclasses that want to mark sentence boundaries (with a custom attribute, extra token, position increment, etc) for downstream processing. @lucene.experimental"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.SegmentingTokenizerBase.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.SegmentingTokenizerBase.html",
    "title": "Class SegmentingTokenizerBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentingTokenizerBase Breaks text into sentences with a and allows subclasses to decompose these sentences into words. This can be used by subclasses that need sentence context for tokenization purposes, such as CJK segmenters. Additionally it can be used by subclasses that want to mark sentence boundaries (with a custom attribute, extra token, position increment, etc) for downstream processing. @lucene.experimental Inheritance System.Object AttributeSource TokenStream Tokenizer SegmentingTokenizerBase HMMChineseTokenizer OpenNLPTokenizer ThaiTokenizer Implements IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.ICU.dll Syntax public abstract class SegmentingTokenizerBase : Tokenizer, IDisposable Constructors | Improve this Doc View Source SegmentingTokenizerBase(AttributeSource.AttributeFactory, TextReader, BreakIterator) Construct a new SegmenterBase, also supplying the AttributeSource.AttributeFactory Declaration public SegmentingTokenizerBase(AttributeSource.AttributeFactory factory, TextReader reader, BreakIterator iterator) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader reader BreakIterator iterator | Improve this Doc View Source SegmentingTokenizerBase(TextReader, BreakIterator) Construct a new SegmenterBase, using the provided for sentence segmentation. Note that you should never share s across different TokenStream s, instead a newly created or cloned one should always be provided to this constructor. Declaration public SegmentingTokenizerBase(TextReader reader, BreakIterator iterator) Parameters Type Name Description TextReader reader BreakIterator iterator Fields | Improve this Doc View Source BUFFERMAX Declaration protected const int BUFFERMAX = null Field Value Type Description System.Int32 | Improve this Doc View Source m_buffer Declaration protected readonly char[] m_buffer Field Value Type Description System.Char [] | Improve this Doc View Source m_offset accumulated offset of previous buffers for this reader, for offsetAtt Declaration protected int m_offset Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IncrementWord() Returns true if another word is available Declaration protected abstract bool IncrementWord() Returns Type Description System.Boolean | Improve this Doc View Source IsSafeEnd(Char) For sentence tokenization, these are the unambiguous break positions. Declaration protected virtual bool IsSafeEnd(char ch) Parameters Type Name Description System.Char ch Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() | Improve this Doc View Source SetNextSentence(Int32, Int32) Provides the next input sentence for analysis Declaration protected abstract void SetNextSentence(int sentenceStart, int sentenceEnd) Parameters Type Name Description System.Int32 sentenceStart System.Int32 sentenceEnd Implements IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.html",
    "title": "Namespace Lucene.Net.Collation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Collation <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Unicode collation support. Collation converts each token into its binary CollationKey using the provided Collator , allowing it to be stored as an index term. Use Cases Efficient sorting of terms in languages that use non-Unicode character orderings. (Lucene Sort using a Locale can be very slow.) Efficient range queries over fields that contain terms in languages that use non-Unicode character orderings. (Range queries using a Locale can be very slow.) Effective Locale-specific normalization (case differences, diacritics, etc.). ( LowerCaseFilter and ASCIIFoldingFilter provide these services in a generic way that doesn't take into account locale-specific needs.) Example Usages Farsi Range Queries // \"fa\" Locale is not supported by Sun JDK 1.4 or 1.5 Collator collator = Collator.getInstance(new Locale(\"ar\")); CollationKeyAnalyzer analyzer = new CollationKeyAnalyzer(version, collator); RAMDirectory ramDir = new RAMDirectory(); IndexWriter writer = new IndexWriter(ramDir, new IndexWriterConfig(version, analyzer)); Document doc = new Document(); doc.add(new TextField(\"content\", \"\\u0633\\u0627\\u0628\", Field.Store.YES)); writer.addDocument(doc); writer.close(); IndexReader ir = DirectoryReader.open(ramDir); IndexSearcher is = new IndexSearcher(ir); QueryParser aqp = new QueryParser(version, \"content\", analyzer); aqp.setAnalyzeRangeTerms(true); // Unicode order would include U+0633 in [ U+062F - U+0698 ], but Farsi // orders the U+0698 character before the U+0633 character, so the single // indexed Term above should NOT be returned by a ConstantScoreRangeQuery // with a Farsi Collator (or an Arabic one for the case when Farsi is not // supported). ScoreDoc[] result = is.search(aqp.parse(\"[ \\u062F TO \\u0698 ]\"), null, 1000).scoreDocs; assertEquals(\"The index Term should not be included.\", 0, result.length); Danish Sorting Analyzer analyzer = new CollationKeyAnalyzer(version, Collator.getInstance(new Locale(\"da\", \"dk\"))); RAMDirectory indexStore = new RAMDirectory(); IndexWriter writer = new IndexWriter(indexStore, new IndexWriterConfig(version, analyzer)); String[] tracer = new String[] { \"A\", \"B\", \"C\", \"D\", \"E\" }; String[] data = new String[] { \"HAT\", \"HUT\", \"H\\u00C5T\", \"H\\u00D8T\", \"HOT\" }; String[] sortedTracerOrder = new String[] { \"A\", \"E\", \"B\", \"D\", \"C\" }; for (int i = 0 ; i < data.length=\"\" ;=\"\" ++i)=\"\" {=\"\" document=\"\" doc=\"new\" document();=\"\" doc.add(new=\"\" storedfield(\"tracer\",=\"\" tracer[i]));=\"\" doc.add(new=\"\" textfield(\"contents\",=\"\" data[i],=\"\" field.store.no));=\"\" writer.adddocument(doc);=\"\" }=\"\" writer.close();=\"\" indexreader=\"\" ir=\"DirectoryReader.open(indexStore);\" indexsearcher=\"\" searcher=\"new\" indexsearcher(ir);=\"\" sort=\"\" sort=\"new\" sort();=\"\" sort.setsort(new=\"\" sortfield(\"contents\",=\"\" sortfield.string));=\"\" query=\"\" query=\"new\" matchalldocsquery();=\"\" scoredoc[]=\"\" result=\"searcher.search(query,\" null,=\"\" 1000,=\"\" sort).scoredocs;=\"\" for=\"\" (int=\"\" i=\"0\" ;=\"\" i=\"\">< result.length=\"\" ;=\"\" ++i)=\"\" {=\"\" document=\"\" doc=\"searcher.doc(result[i].doc);\" assertequals(sortedtracerorder[i],=\"\" doc.getvalues(\"tracer\")[0]);=\"\" }=\"\"> Turkish Case Normalization Collator collator = Collator.getInstance(new Locale(\"tr\", \"TR\")); collator.setStrength(Collator.PRIMARY); Analyzer analyzer = new CollationKeyAnalyzer(version, collator); RAMDirectory ramDir = new RAMDirectory(); IndexWriter writer = new IndexWriter(ramDir, new IndexWriterConfig(version, analyzer)); Document doc = new Document(); doc.add(new TextField(\"contents\", \"DIGY\", Field.Store.NO)); writer.addDocument(doc); writer.close(); IndexReader ir = DirectoryReader.open(ramDir); IndexSearcher is = new IndexSearcher(ir); QueryParser parser = new QueryParser(version, \"contents\", analyzer); Query query = parser.parse(\"d\\u0131gy\"); // U+0131: dotless i ScoreDoc[] result = is.search(query, null, 1000).scoreDocs; assertEquals(\"The index Term should be included.\", 1, result.length); Caveats and Comparisons WARNING: Make sure you use exactly the same Collator at index and query time -- CollationKey s are only comparable when produced by the same Collator . Since {@link java.text.RuleBasedCollator}s are not independently versioned, it is unsafe to search against stored CollationKey s unless the following are exactly the same (best practice is to store this information with the index and check that they remain the same at query time): JVM vendor JVM version, including patch version The language (and country and variant, if specified) of the Locale used when constructing the collator via {@link java.text.Collator#getInstance(java.util.Locale)}. The collation strength used - see {@link java.text.Collator#setStrength(int)} ICUCollationKeyAnalyzer , available in the icu analysis module , uses ICU4J's Collator , which makes its version available, thus allowing collation to be versioned independently from the JVM. ICUCollationKeyAnalyzer is also significantly faster and generates significantly shorter keys than CollationKeyAnalyzer . See http://site.icu-project.org/charts/collation-icu4j-sun for key generation timing and key length comparisons between ICU4J and java.text.Collator over several languages. CollationKey s generated by java.text.Collator s are not compatible with those those generated by ICU Collators. Specifically, if you use CollationKeyAnalyzer to generate index terms, do not use ICUCollationKeyAnalyzer on the query side, or vice versa. Classes ICUCollationAttributeFactory Converts each token into its , and then encodes bytes as an index term. ICUCollationDocValuesField Indexes sort keys as a single-valued SortedDocValuesField . ICUCollationKeyAnalyzer Configures KeywordTokenizer with ICUCollationAttributeFactory . ICUCollationKeyFilter Converts each token into its , and then encodes the with IndexableBinaryStringTools , to allow it to be stored as an index term. ICUCollationKeyFilterFactory Factory for ICUCollationKeyFilter ."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationAttributeFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationAttributeFactory.html",
    "title": "Class ICUCollationAttributeFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUCollationAttributeFactory Converts each token into its , and then encodes bytes as an index term. Inheritance System.Object AttributeSource.AttributeFactory ICUCollationAttributeFactory Inherited Members AttributeSource.AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY Namespace : Lucene.Net.Collation Assembly : Lucene.Net.ICU.dll Syntax public class ICUCollationAttributeFactory : AttributeSource.AttributeFactory Remarks WARNING: Make sure you use exactly the same at index and query time -- s are only comparable when produced by the same . s are independently versioned, so it is safe to search against stored s if the following are exactly the same (best practice is to store this information with the index and check that they remain the same at query time): Collator version - see Version The collation strength used - see s generated by ICU Collators are not compatible with those generated by java.text.Collators. Specifically, if you use ICUCollationAttributeFactory to generate index terms, do not use CollationAttributeFactory on the query side, or vice versa. ICUCollationAttributeFactory is significantly faster and generates significantly shorter keys than CollationAttributeFactory. See http://site.icu-project.org/charts/collation-icu4j-sun for key generation timing and key length comparisons between ICU4J and java.text.Collator over several languages. Constructors | Improve this Doc View Source ICUCollationAttributeFactory(Collator) Create an ICUCollationAttributeFactory , using DEFAULT_ATTRIBUTE_FACTORY as the factory for all other attributes. Declaration public ICUCollationAttributeFactory(Collator collator) Parameters Type Name Description Collator collator generator | Improve this Doc View Source ICUCollationAttributeFactory(AttributeSource.AttributeFactory, Collator) Create an ICUCollationAttributeFactory , using the supplied Attribute Factory as the factory for all other attributes. Declaration public ICUCollationAttributeFactory(AttributeSource.AttributeFactory delegate, Collator collator) Parameters Type Name Description AttributeSource.AttributeFactory delegate Attribute Factory Collator collator generator Methods | Improve this Doc View Source CreateAttributeInstance<T>() Declaration public override Attribute CreateAttributeInstance<T>() where T : IAttribute Returns Type Description Attribute Type Parameters Name Description T Overrides AttributeSource.AttributeFactory.CreateAttributeInstance<T>()"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationDocValuesField.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationDocValuesField.html",
    "title": "Class ICUCollationDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUCollationDocValuesField Indexes sort keys as a single-valued SortedDocValuesField . Inheritance System.Object Field ICUCollationDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Collation Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUCollationDocValuesField : Field, IIndexableField Remarks This is more efficient that ICUCollationKeyAnalyzer if the field only has one value: no uninversion is necessary to sort on the field, locale-sensitive range queries can still work via FieldCacheRangeFilter , and the underlying data structures built at index-time are likely more efficient and use less memory than FieldCache. Constructors | Improve this Doc View Source ICUCollationDocValuesField(String, Collator) Create a new ICUCollationDocValuesField . NOTE: you should not create a new one for each document, instead just make one and reuse it during your indexing process, setting the value via SetStringValue(String) . Declaration public ICUCollationDocValuesField(string name, Collator collator) Parameters Type Name Description System.String name Field name. Collator collator Collator for generating collation keys. Properties | Improve this Doc View Source Name Declaration public override string Name { get; } Property Value Type Description System.String Overrides Field.Name Methods | Improve this Doc View Source SetStringValue(String) Declaration public override void SetStringValue(string value) Parameters Type Name Description System.String value Implements IIndexableField"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyAnalyzer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyAnalyzer.html",
    "title": "Class ICUCollationKeyAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUCollationKeyAnalyzer Configures KeywordTokenizer with ICUCollationAttributeFactory . Inheritance System.Object Analyzer ICUCollationKeyAnalyzer Inherited Members Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >) Lucene.Net.Analysis.Analyzer.NewAnonymous(Func<, , >, Func<, , >, Lucene.Net.Analysis.ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Collation Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUCollationKeyAnalyzer : Analyzer Remarks Converts the token into its , and then encodes the either directly or with IndexableBinaryStringTools (see below ), to allow it to be stored as an index term. WARNING: Make sure you use exactly the same at index and query time -- CollationKeys are only comparable when produced by the same . s are independently versioned, so it is safe to search against stored s if the following are exactly the same (best practice is to store this information with the index and check that they remain the same at query time): Collator version - see Version The collation strength used - see s generated by ICU Collators are not compatible with those generated by java.text.Collators. Specifically, if you use ICUCollationKeyAnalyzer to generate index terms, do not use CollationKeyAnalyzer on the query side, or vice versa. ICUCollationKeyAnalyzer is significantly faster and generates significantly shorter keys than CollationKeyAnalyzer. See http://site.icu-project.org/charts/collation-icu4j-sun for key generation timing and key length comparisons between ICU4J and java.text.Collator over several languages. You must specify the required LuceneVersion compatibility when creating ICUCollationKeyAnalyzer : As of 4.0, s are directly encoded as bytes. Previous versions will encode the bytes with IndexableBinaryStringTools . Constructors | Improve this Doc View Source ICUCollationKeyAnalyzer(Collator) Declaration public ICUCollationKeyAnalyzer(Collator collator) Parameters Type Name Description Collator collator | Improve this Doc View Source ICUCollationKeyAnalyzer(LuceneVersion, Collator) Create a new ICUCollationKeyAnalyzer , using the specified collator . Declaration public ICUCollationKeyAnalyzer(LuceneVersion matchVersion, Collator collator) Parameters Type Name Description LuceneVersion matchVersion See ICUCollationKeyAnalyzer . Collator collator generator. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyFilter.html",
    "title": "Class ICUCollationKeyFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUCollationKeyFilter Converts each token into its , and then encodes the with IndexableBinaryStringTools , to allow it to be stored as an index term. Inheritance System.Object AttributeSource TokenStream TokenFilter ICUCollationKeyFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Collation Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUCollationKeyFilter : TokenFilter, IDisposable Remarks WARNING: Make sure you use exactly the same at index and query time -- CollationKeys are only comparable when produced by the same . s are independently versioned, so it is safe to search against stored s if the following are exactly the same (best practice is to store this information with the index and check that they remain the same at query time): Collator version - see Version The collation strength used - see s generated by ICU Collators are not compatible with those generated by java.text.Collators. Specifically, if you use ICUCollationKeyAnalyzer to generate index terms, do not use CollationKeyAnalyzer on the query side, or vice versa. ICUCollationKeyAnalyzer is significantly faster and generates significantly shorter keys than CollationKeyAnalyzer. See http://site.icu-project.org/charts/collation-icu4j-sun for key generation timing and key length comparisons between ICU4J and java.text.Collator over several languages. Constructors | Improve this Doc View Source ICUCollationKeyFilter(TokenStream, Collator) Creates a new ICUCollationKeyFilter . Declaration public ICUCollationKeyFilter(TokenStream input, Collator collator) Parameters Type Name Description TokenStream input Source token stream. Collator collator generator. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyFilterFactory.html",
    "title": "Class ICUCollationKeyFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUCollationKeyFilterFactory Factory for ICUCollationKeyFilter . Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ICUCollationKeyFilterFactory Implements IMultiTermAwareComponent IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion Namespace : Lucene.Net.Collation Assembly : Lucene.Net.ICU.dll Syntax public class ICUCollationKeyFilterFactory : TokenFilterFactory, IMultiTermAwareComponent, IResourceLoaderAware Remarks This factory can be created in two ways: Based upon a system collator associated with a Locale. Based upon a tailored ruleset. Using a System collator: locale: RFC 3066 locale ID (mandatory) strength: 'primary','secondary','tertiary', 'quaternary', or 'identical' (optional) decomposition: 'no', or 'canonical' (optional) Using a Tailored ruleset: custom: UTF-8 text file containing rules supported by RuleBasedCollator (mandatory) strength: 'primary','secondary','tertiary', 'quaternary', or 'identical' (optional) decomposition: 'no' or 'canonical' (optional) Expert options: alternate: 'shifted' or 'non-ignorable'. Can be used to ignore punctuation/whitespace. caseLevel: 'true' or 'false'. Useful with strength=primary to ignore accents but not case. caseFirst: 'lower' or 'upper'. Useful to control which is sorted first when case is not ignored. numeric: 'true' or 'false'. Digits are sorted according to numeric value, e.g. foobar-9 sorts before foobar-10 Constructors | Improve this Doc View Source ICUCollationKeyFilterFactory(IDictionary<String, String>) Declaration public ICUCollationKeyFilterFactory(IDictionary<string, string> args) Parameters Type Name Description IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IMultiTermAwareComponent IResourceLoaderAware"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.TokenAttributes.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Collation.TokenAttributes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Collation.TokenAttributes <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Custom <xref:Lucene.Net.Util.AttributeImpl> for indexing collation keys as index terms. Classes ICUCollatedTermAttribute Extension of CharTermAttribute that encodes the term text as a binary Unicode collation key instead of as UTF-8 bytes."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.TokenAttributes.ICUCollatedTermAttribute.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.TokenAttributes.ICUCollatedTermAttribute.html",
    "title": "Class ICUCollatedTermAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUCollatedTermAttribute Extension of CharTermAttribute that encodes the term text as a binary Unicode collation key instead of as UTF-8 bytes. Inheritance System.Object Attribute CharTermAttribute ICUCollatedTermAttribute Implements ICharTermAttribute ICharSequence ITermToBytesRefAttribute IAttribute Inherited Members CharTermAttribute.CopyBuffer(Char[], Int32, Int32) CharTermAttribute.Buffer CharTermAttribute.ResizeBuffer(Int32) CharTermAttribute.Length CharTermAttribute.SetLength(Int32) CharTermAttribute.SetEmpty() CharTermAttribute.BytesRef CharTermAttribute.Item[Int32] CharTermAttribute.SubSequence(Int32, Int32) CharTermAttribute.Append(String, Int32, Int32) CharTermAttribute.Append(Char) CharTermAttribute.Append(Char[]) CharTermAttribute.Append(Char[], Int32, Int32) CharTermAttribute.Append(String) CharTermAttribute.Append(StringBuilder) CharTermAttribute.Append(StringBuilder, Int32, Int32) CharTermAttribute.Append(ICharTermAttribute) CharTermAttribute.Append(ICharSequence) CharTermAttribute.Append(ICharSequence, Int32, Int32) CharTermAttribute.GetHashCode() CharTermAttribute.Clear() CharTermAttribute.Clone() CharTermAttribute.Equals(Object) CharTermAttribute.ToString() CharTermAttribute.ReflectWith(IAttributeReflector) CharTermAttribute.CopyTo(IAttribute) Attribute.ReflectAsString(Boolean) Namespace : Lucene.Net.Collation.TokenAttributes Assembly : Lucene.Net.ICU.dll Syntax public class ICUCollatedTermAttribute : CharTermAttribute, ICharTermAttribute, ICharSequence, ITermToBytesRefAttribute, IAttribute Constructors | Improve this Doc View Source ICUCollatedTermAttribute(Collator) Create a new ICUCollatedTermAttribute Declaration public ICUCollatedTermAttribute(Collator collator) Parameters Type Name Description Collator collator Collation key generator. Methods | Improve this Doc View Source FillBytesRef() Declaration public override void FillBytesRef() Overrides CharTermAttribute.FillBytesRef() Implements ICharTermAttribute ICharSequence ITermToBytesRefAttribute IAttribute"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Documents.DocumentExtensions.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Documents.DocumentExtensions.html",
    "title": "Class DocumentExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocumentExtensions LUCENENET specific extensions to the Document class. Inheritance System.Object DocumentExtensions Namespace : Lucene.Net.Documents Assembly : Lucene.Net.ICU.dll Syntax public static class DocumentExtensions : object Methods | Improve this Doc View Source AddICUCollationDocValuesField(Document, String, Collator) Adds a new ICUCollationDocValuesField . NOTE: you should not create a new one for each document, instead just make one and reuse it during your indexing process, setting the value via SetStringValue(String) . Declaration public static ICUCollationDocValuesField AddICUCollationDocValuesField(this Document document, string name, Collator collator) Parameters Type Name Description Document document This Document . System.String name Field name. Collator collator Collator for generating collation keys. Returns Type Description ICUCollationDocValuesField The field that was added to this Document ."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Documents.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Documents.html",
    "title": "Namespace Lucene.Net.Documents | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Documents <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Misc extensions of the Document/Field API. Classes DocumentExtensions LUCENENET specific extensions to the class."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.DefaultPassageFormatter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.DefaultPassageFormatter.html",
    "title": "Class DefaultPassageFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultPassageFormatter Creates a formatted snippet from the top passages. The default implementation marks the query terms as bold, and places ellipses between unconnected passages. Inheritance System.Object PassageFormatter DefaultPassageFormatter Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public class DefaultPassageFormatter : PassageFormatter Constructors | Improve this Doc View Source DefaultPassageFormatter() Creates a new DefaultPassageFormatter with the default tags. Declaration public DefaultPassageFormatter() | Improve this Doc View Source DefaultPassageFormatter(String, String, String, Boolean) Creates a new DefaultPassageFormatter with custom tags. Declaration public DefaultPassageFormatter(string preTag, string postTag, string ellipsis, bool escape) Parameters Type Name Description System.String preTag text which should appear before a highlighted term. System.String postTag text which should appear after a highlighted term. System.String ellipsis text which should be used to connect two unconnected passages. System.Boolean escape true if text should be html-escaped Fields | Improve this Doc View Source m_ellipsis text that will appear between two unconnected passages Declaration protected readonly string m_ellipsis Field Value Type Description System.String | Improve this Doc View Source m_escape true if we should escape for html Declaration protected readonly bool m_escape Field Value Type Description System.Boolean | Improve this Doc View Source m_postTag text that will appear after highlighted terms Declaration protected readonly string m_postTag Field Value Type Description System.String | Improve this Doc View Source m_preTag text that will appear before highlighted terms Declaration protected readonly string m_preTag Field Value Type Description System.String Methods | Improve this Doc View Source Append(StringBuilder, String, Int32, Int32) Appends original text to the response. Declaration protected virtual void Append(StringBuilder dest, string content, int start, int end) Parameters Type Name Description StringBuilder dest resulting text, possibly transformed or encoded System.String content original text content System.Int32 start index of the first character in content System.Int32 end index of the character following the last character in content | Improve this Doc View Source Format(Passage[], String) Declaration public override object Format(Passage[] passages, string content) Parameters Type Name Description Passage [] passages System.String content Returns Type Description System.Object Overrides PassageFormatter.Format(Passage[], String)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.html",
    "title": "Namespace Lucene.Net.Search.PostingsHighlight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.PostingsHighlight <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Highlighter implementation that uses offsets from postings lists. Classes DefaultPassageFormatter Creates a formatted snippet from the top passages. The default implementation marks the query terms as bold, and places ellipses between unconnected passages. ICUPostingsHighlighter Simple highlighter that does not analyze fields nor use term vectors. Instead it requires DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Passage Represents a passage (typically a sentence of the document). A passage contains NumMatches highlights from the query, and the offsets and query terms that correspond with each match. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PassageFormatter Creates a formatted snippet from the top passages. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PassageScorer Ranks passages found by ICUPostingsHighlighter . Each passage is scored as a miniature document within the document. The final score is computed as norm * ∑ ( weight * tf ). The default implementation is norm * BM25. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WholeBreakIterator Just produces one single fragment for the entire text"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.ICUPostingsHighlighter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.ICUPostingsHighlighter.html",
    "title": "Class ICUPostingsHighlighter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUPostingsHighlighter Simple highlighter that does not analyze fields nor use term vectors. Instead it requires DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Inheritance System.Object ICUPostingsHighlighter Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public class ICUPostingsHighlighter : object Remarks PostingsHighlighter treats the single original document as the whole corpus, and then scores individual passages as if they were documents in this corpus. It uses a to find passages in the text; by default it breaks using (for sentence breaking). It then iterates in parallel (merge sorting by offset) through the positions of all terms from the query, coalescing those hits that occur in a single passage into a Passage , and then scores each Passage using a separate PassageScorer . Passages are finally formatted into highlighted snippets with a PassageFormatter . You can customize the behavior by subclassing this highlighter, some important hooks: GetBreakIterator(String) : Customize how the text is divided into passages. GetScorer(String) : Customize how passages are ranked. GetFormatter(String) : Customize how snippets are formatted. GetIndexAnalyzer(String) : Enable highlighting of MultiTermQuerys such as WildcardQuery . WARNING : The code is very new and probably still has some exciting bugs! Example usage: // configure field with offsets at index time IndexableFieldType offsetsType = new IndexableFieldType(TextField.TYPE_STORED); offsetsType.IndexOptions = IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS; Field body = new Field(\"body\", \"foobar\", offsetsType); // retrieve highlights at query time ICUPostingsHighlighter highlighter = new ICUPostingsHighlighter(); Query query = new TermQuery(new Term(\"body\", \"highlighting\")); TopDocs topDocs = searcher.Search(query, n); string highlights[] = highlighter.Highlight(\"body\", query, searcher, topDocs); This is thread-safe, and can be used across different readers. Note that the .NET implementation differs from the PostingsHighlighter in Lucene in that it is backed by an ICU , which differs slightly in default behavior than the one in the JDK. However, the ICU behavior can be customized to meet a lot of scenarios that the one in the JDK cannot. See the ICU documentation at http://userguide.icu-project.org/boundaryanalysis/break-rules for more information how to pass custom rules to an ICU . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source ICUPostingsHighlighter() Creates a new highlighter with DEFAULT_MAX_LENGTH . Declaration public ICUPostingsHighlighter() | Improve this Doc View Source ICUPostingsHighlighter(Int32) Creates a new highlighter, specifying maximum content length. Declaration public ICUPostingsHighlighter(int maxLength) Parameters Type Name Description System.Int32 maxLength maximum content size to process. Fields | Improve this Doc View Source DEFAULT_MAX_LENGTH Default maximum content size to process. Typically snippets closer to the beginning of the document better summarize its content Declaration public static readonly int DEFAULT_MAX_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetBreakIterator(String) Returns the to use for dividing text into passages. This instantiates an by default; subclasses can override to customize. Declaration protected virtual BreakIterator GetBreakIterator(string field) Parameters Type Name Description System.String field Returns Type Description BreakIterator | Improve this Doc View Source GetEmptyHighlight(String, BreakIterator, Int32) Called to summarize a document when no hits were found. By default this just returns the first maxPassages sentences; subclasses can override to customize. Declaration protected virtual Passage[] GetEmptyHighlight(string fieldName, BreakIterator bi, int maxPassages) Parameters Type Name Description System.String fieldName BreakIterator bi System.Int32 maxPassages Returns Type Description Passage [] | Improve this Doc View Source GetFormatter(String) Returns the PassageFormatter to use for formatting passages into highlighted snippets. This returns a new PassageFormatter by default; subclasses can override to customize. Declaration protected virtual PassageFormatter GetFormatter(string field) Parameters Type Name Description System.String field Returns Type Description PassageFormatter | Improve this Doc View Source GetIndexAnalyzer(String) Returns the analyzer originally used to index the content for field . This is used to highlight some MultiTermQuery s. Declaration protected virtual Analyzer GetIndexAnalyzer(string field) Parameters Type Name Description System.String field Returns Type Description Analyzer Analyzer or null (the default, meaning no special multi-term processing) | Improve this Doc View Source GetMultiValuedSeparator(String) Returns the logical separator between values for multi-valued fields. The default value is a space character, which means passages can span across values, but a subclass can override, for example with U+2029 PARAGRAPH SEPARATOR (PS) if each value holds a discrete passage for highlighting. Declaration protected virtual char GetMultiValuedSeparator(string field) Parameters Type Name Description System.String field Returns Type Description System.Char | Improve this Doc View Source GetScorer(String) Returns the PassageScorer to use for ranking passages. This returns a new PassageScorer by default; subclasses can override to customize. Declaration protected virtual PassageScorer GetScorer(string field) Parameters Type Name Description System.String field Returns Type Description PassageScorer | Improve this Doc View Source Highlight(String, Query, IndexSearcher, TopDocs) Highlights the top passages from a single field. Declaration public virtual string[] Highlight(string field, Query query, IndexSearcher searcher, TopDocs topDocs) Parameters Type Name Description System.String field field name to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. TopDocs topDocs TopDocs containing the summary result documents to highlight. Returns Type Description System.String [] Array of formatted snippets corresponding to the documents in topDocs . If no highlights were found for a document, the first sentence for the field will be returned. | Improve this Doc View Source Highlight(String, Query, IndexSearcher, TopDocs, Int32) Highlights the top-N passages from a single field. Declaration public virtual string[] Highlight(string field, Query query, IndexSearcher searcher, TopDocs topDocs, int maxPassages) Parameters Type Name Description System.String field field name to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. TopDocs topDocs TopDocs containing the summary result documents to highlight. System.Int32 maxPassages The maximum number of top-N ranked passages used to form the highlighted snippets. Returns Type Description System.String [] Array of formatted snippets corresponding to the documents in topDocs . If no highlights were found for a document, the first maxPassages sentences from the field will be returned. | Improve this Doc View Source HighlightFields(String[], Query, IndexSearcher, TopDocs) Highlights the top passages from multiple fields. Conceptually, this behaves as a more efficient form of: IDictionary<string, string[]> m = new Dictionary<string, string[]>(); foreach (string field in fields) { m[field] = Highlight(field, query, searcher, topDocs); } return m; Declaration public virtual IDictionary<string, string[]> HighlightFields(string[] fields, Query query, IndexSearcher searcher, TopDocs topDocs) Parameters Type Name Description System.String [] fields field names to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. TopDocs topDocs TopDocs containing the summary result documents to highlight. Returns Type Description IDictionary < System.String , System.String []> keyed on field name, containing the array of formatted snippets corresponding to the documents in topDocs . If no highlights were found for a document, the first sentence from the field will be returned. | Improve this Doc View Source HighlightFields(String[], Query, IndexSearcher, TopDocs, Int32[]) Highlights the top-N passages from multiple fields. Conceptually, this behaves as a more efficient form of: IDictionary<string, string[]> m = new Dictionary<string, string[]>(); foreach (string field in fields) { m[field] = Highlight(field, query, searcher, topDocs, maxPassages); } return m; Declaration public virtual IDictionary<string, string[]> HighlightFields(string[] fields, Query query, IndexSearcher searcher, TopDocs topDocs, int[] maxPassages) Parameters Type Name Description System.String [] fields field names to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. TopDocs topDocs TopDocs containing the summary result documents to highlight. System.Int32 [] maxPassages The maximum number of top-N ranked passages per-field used to form the highlighted snippets. Returns Type Description IDictionary < System.String , System.String []> keyed on field name, containing the array of formatted snippets corresponding to the documents in topDocs . If no highlights were found for a document, the first maxPassages sentences from the field will be returned. | Improve this Doc View Source HighlightFields(String[], Query, IndexSearcher, Int32[], Int32[]) Highlights the top-N passages from multiple fields, for the provided int[] docids. Declaration public virtual IDictionary<string, string[]> HighlightFields(string[] fieldsIn, Query query, IndexSearcher searcher, int[] docidsIn, int[] maxPassagesIn) Parameters Type Name Description System.String [] fieldsIn field names to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. System.Int32 [] docidsIn containing the document IDs to highlight. System.Int32 [] maxPassagesIn The maximum number of top-N ranked passages per-field used to form the highlighted snippets. Returns Type Description IDictionary < System.String , System.String []> keyed on field name, containing the array of formatted snippets corresponding to the documents in docidsIn . If no highlights were found for a document, the first maxPassages from the field will be returned. | Improve this Doc View Source HighlightFieldsAsObjects(String[], Query, IndexSearcher, Int32[], Int32[]) Expert: highlights the top-N passages from multiple fields, for the provided int[] docids, to custom object as returned by the PassageFormatter . Use this API to render to something other than . Declaration protected virtual IDictionary<string, object[]> HighlightFieldsAsObjects(string[] fieldsIn, Query query, IndexSearcher searcher, int[] docidsIn, int[] maxPassagesIn) Parameters Type Name Description System.String [] fieldsIn field names to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. System.Int32 [] docidsIn containing the document IDs to highlight. System.Int32 [] maxPassagesIn The maximum number of top-N ranked passages per-field used to form the highlighted snippets. Returns Type Description IDictionary < System.String , System.Object []> keyed on field name, containing the array of formatted snippets corresponding to the documents in docidsIn . If no highlights were found for a document, the first maxPassagesIn from the field will be returned. | Improve this Doc View Source LoadFieldValues(IndexSearcher, String[], Int32[], Int32) Loads the string values for each field X docID to be highlighted. By default this loads from stored fields, but a subclass can change the source. This method should allocate the string[fields.length][docids.length] and fill all values. The returned strings must be identical to what was indexed. Declaration protected virtual IList<string[]> LoadFieldValues(IndexSearcher searcher, string[] fields, int[] docids, int maxLength) Parameters Type Name Description IndexSearcher searcher System.String [] fields System.Int32 [] docids System.Int32 maxLength Returns Type Description IList < System.String []>"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.Passage.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.Passage.html",
    "title": "Class Passage | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Passage Represents a passage (typically a sentence of the document). A passage contains NumMatches highlights from the query, and the offsets and query terms that correspond with each match. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Passage Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public sealed class Passage : object Properties | Improve this Doc View Source EndOffset Gets the end index (exclusive) of the passage in the original content: always >= StartOffset Declaration public int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MatchEnds End offsets of the term matches, corresponding with MatchStarts . Only NumMatches are valid. Note that its possible that an end offset could exceed beyond the bounds of the passage EndOffset , if the Analyzer produced a term which spans a passage boundary. Declaration public IReadOnlyList<int> MatchEnds { get; } Property Value Type Description IReadOnlyList < System.Int32 > | Improve this Doc View Source MatchStarts Start offsets of the term matches, in increasing order. Only NumMatches are valid. Note that these offsets are absolute (not relative to StartOffset ). Declaration public IReadOnlyList<int> MatchStarts { get; } Property Value Type Description IReadOnlyList < System.Int32 > | Improve this Doc View Source MatchTerms BytesRef (term text) of the matches, corresponding with MatchStarts . Only NumMatches are valid. Declaration public IReadOnlyList<BytesRef> MatchTerms { get; } Property Value Type Description IReadOnlyList < BytesRef > | Improve this Doc View Source NumMatches Number of term matches available in MatchStarts , MatchEnds , MatchTerms Declaration public int NumMatches { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Score Passage's score. Declaration public float Score { get; } Property Value Type Description System.Single | Improve this Doc View Source StartOffset Gets the start index (inclusive) of the passage in the original content: always >= 0. Declaration public int StartOffset { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.PassageFormatter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.PassageFormatter.html",
    "title": "Class PassageFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PassageFormatter Creates a formatted snippet from the top passages. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PassageFormatter DefaultPassageFormatter Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public abstract class PassageFormatter : object Methods | Improve this Doc View Source Format(Passage[], String) Formats the top passages from content into a human-readable text snippet. Declaration public abstract object Format(Passage[] passages, string content) Parameters Type Name Description Passage [] passages top-N passages for the field. Note these are sorted in the order that they appear in the document for convenience. System.String content content for the field. Returns Type Description System.Object formatted highlight. Note that for the non-expert APIs in ICUPostingsHighlighter that return , the method on the returned by this method is used to compute the string."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.PassageScorer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.PassageScorer.html",
    "title": "Class PassageScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PassageScorer Ranks passages found by ICUPostingsHighlighter . Each passage is scored as a miniature document within the document. The final score is computed as norm * ∑ ( weight * tf ). The default implementation is norm * BM25. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PassageScorer Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public class PassageScorer : object Constructors | Improve this Doc View Source PassageScorer() Creates PassageScorer with these default values: k1 = 1.2 b = 0.75 pivot = 87 Declaration public PassageScorer() | Improve this Doc View Source PassageScorer(Single, Single, Single) Creates PassageScorer with specified scoring parameters Declaration public PassageScorer(float k1, float b, float pivot) Parameters Type Name Description System.Single k1 Controls non-linear term frequency normalization (saturation). System.Single b Controls to what degree passage length normalizes tf values. System.Single pivot Pivot value for length normalization (some rough idea of average sentence length in characters). Methods | Improve this Doc View Source Norm(Int32) Normalize a passage according to its position in the document. Typically passages towards the beginning of the document are more useful for summarizing the contents. The default implementation is 1 + 1/log(pivot + passageStart) Declaration public virtual float Norm(int passageStart) Parameters Type Name Description System.Int32 passageStart start offset of the passage Returns Type Description System.Single a boost value multiplied into the passage's core. | Improve this Doc View Source Tf(Int32, Int32) Computes term weight, given the frequency within the passage and the passage's length. Declaration public virtual float Tf(int freq, int passageLen) Parameters Type Name Description System.Int32 freq number of occurrences of within this passage System.Int32 passageLen length of the passage in characters. Returns Type Description System.Single term weight | Improve this Doc View Source Weight(Int32, Int32) Computes term importance, given its in-document statistics. Declaration public virtual float Weight(int contentLength, int totalTermFreq) Parameters Type Name Description System.Int32 contentLength length of document in characters System.Int32 totalTermFreq number of time term occurs in document Returns Type Description System.Single term importance"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.WholeBreakIterator.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.WholeBreakIterator.html",
    "title": "Class WholeBreakIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WholeBreakIterator Just produces one single fragment for the entire text Inheritance System.Object WholeBreakIterator Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public sealed class WholeBreakIterator : BreakIterator Properties | Improve this Doc View Source Current Declaration public override int Current { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Declaration public override CharacterIterator Text { get; } Property Value Type Description CharacterIterator Methods | Improve this Doc View Source First() Declaration public override int First() Returns Type Description System.Int32 | Improve this Doc View Source Following(Int32) Declaration public override int Following(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description System.Int32 | Improve this Doc View Source IsBoundary(Int32) Declaration public override bool IsBoundary(int offset) Parameters Type Name Description System.Int32 offset Returns Type Description System.Boolean | Improve this Doc View Source Last() Declaration public override int Last() Returns Type Description System.Int32 | Improve this Doc View Source Next() Declaration public override int Next() Returns Type Description System.Int32 | Improve this Doc View Source Next(Int32) Declaration public override int Next(int n) Parameters Type Name Description System.Int32 n Returns Type Description System.Int32 | Improve this Doc View Source Preceding(Int32) Declaration public override int Preceding(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description System.Int32 | Improve this Doc View Source Previous() Declaration public override int Previous() Returns Type Description System.Int32 | Improve this Doc View Source SetText(CharacterIterator) Declaration public override void SetText(CharacterIterator newText) Parameters Type Name Description CharacterIterator newText"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.VectorHighlight.BreakIteratorBoundaryScanner.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.VectorHighlight.BreakIteratorBoundaryScanner.html",
    "title": "Class BreakIteratorBoundaryScanner | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BreakIteratorBoundaryScanner A IBoundaryScanner implementation that uses to find boundaries in the text. Inheritance System.Object BreakIteratorBoundaryScanner Implements IBoundaryScanner Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.ICU.dll Syntax public class BreakIteratorBoundaryScanner : object, IBoundaryScanner Constructors | Improve this Doc View Source BreakIteratorBoundaryScanner(BreakIterator) Declaration public BreakIteratorBoundaryScanner(BreakIterator bi) Parameters Type Name Description BreakIterator bi Methods | Improve this Doc View Source FindEndOffset(StringBuilder, Int32) Declaration public virtual int FindEndOffset(StringBuilder buffer, int start) Parameters Type Name Description StringBuilder buffer System.Int32 start Returns Type Description System.Int32 | Improve this Doc View Source FindStartOffset(StringBuilder, Int32) Declaration public virtual int FindStartOffset(StringBuilder buffer, int start) Parameters Type Name Description StringBuilder buffer System.Int32 start Returns Type Description System.Int32 Implements IBoundaryScanner"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.VectorHighlight.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.VectorHighlight.html",
    "title": "Namespace Lucene.Net.Search.VectorHighlight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.VectorHighlight <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> This is an another highlighter implementation. Features fast for large docs support N-gram fields support phrase-unit highlighting with slops support multi-term (includes wildcard, range, regexp, etc) queries need Java 1.5 highlight fields need to be stored with Positions and Offsets take into account query boost and/or IDF-weight to score fragments support colored highlight tags pluggable FragListBuilder / FieldFragList pluggable FragmentsBuilder Algorithm To explain the algorithm, let's use the following sample text (to be highlighted) and user query: Sample Text Lucene is a search engine library. User Query Lucene^2 OR \"search library\"~1 The user query is a BooleanQuery that consists of TermQuery(\"Lucene\") with boost of 2 and PhraseQuery(\"search library\") with slop of 1. For your convenience, here is the offsets and positions info of the sample text. +--------+-----------------------------------+ | | 1111111111222222222233333| | offset|01234567890123456789012345678901234| +--------+-----------------------------------+ |document|Lucene is a search engine library. | +--------*-----------------------------------+ |position|0 1 2 3 4 5 | +--------*-----------------------------------+ Step 1. In Step 1, Fast Vector Highlighter generates FieldQuery.QueryPhraseMap from the user query. QueryPhraseMap consists of the following members: public class QueryPhraseMap { boolean terminal; int slop; // valid if terminal == true and phraseHighlight == true float boost; // valid if terminal == true Map<String, QueryPhraseMap> subMap; } QueryPhraseMap has subMap. The key of the subMap is a term text in the user query and the value is a subsequent QueryPhraseMap . If the query is a term (not phrase), then the subsequent QueryPhraseMap is marked as terminal. If the query is a phrase, then the subsequent QueryPhraseMap is not a terminal and it has the next term text in the phrase. From the sample user query, the following QueryPhraseMap will be generated: QueryPhraseMap +--------+-+ +-------+-+ |\"Lucene\"|o+->|boost=2|*| * : terminal +--------+-+ +-------+-+ +--------+-+ +---------+-+ +-------+------+-+ |\"search\"|o+->|\"library\"|o+->|boost=1|slop=1|*| +--------+-+ +---------+-+ +-------+------+-+ Step 2. In Step 2, Fast Vector Highlighter generates FieldTermStack . Fast Vector Highlighter uses term vector data (must be stored #setStoreTermVectorOffsets(boolean) and #setStoreTermVectorPositions(boolean) ) to generate it. FieldTermStack keeps the terms in the user query. Therefore, in this sample case, Fast Vector Highlighter generates the following FieldTermStack : FieldTermStack +------------------+ |\"Lucene\"(0,6,0) | +------------------+ |\"search\"(12,18,3) | +------------------+ |\"library\"(26,33,5)| +------------------+ where : \"termText\"(startOffset,endOffset,position) Step 3. In Step 3, Fast Vector Highlighter generates FieldPhraseList by reference to QueryPhraseMap and FieldTermStack . FieldPhraseList +----------------+-----------------+---+ |\"Lucene\" |[(0,6)] |w=2| +----------------+-----------------+---+ |\"search library\"|[(12,18),(26,33)]|w=1| +----------------+-----------------+---+ The type of each entry is WeightedPhraseInfo that consists of an array of terms offsets and weight. Step 4. In Step 4, Fast Vector Highlighter creates FieldFragList by reference to FieldPhraseList . In this sample case, the following FieldFragList will be generated: FieldFragList +---------------------------------+ |\"Lucene\"[(0,6)] | |\"search library\"[(12,18),(26,33)]| |totalBoost=3 | +---------------------------------+ The calculation for each FieldFragList.WeightedFragInfo.totalBoost (weight) depends on the implementation of FieldFragList.add( ... ) : public void add( int startOffset, int endOffset, List<WeightedPhraseInfo> phraseInfoList ) { float totalBoost = 0; List<SubInfo> subInfos = new ArrayList<SubInfo>(); for( WeightedPhraseInfo phraseInfo : phraseInfoList ){ subInfos.add( new SubInfo( phraseInfo.getText(), phraseInfo.getTermsOffsets(), phraseInfo.getSeqnum() ) ); totalBoost += phraseInfo.getBoost(); } getFragInfos().add( new WeightedFragInfo( startOffset, endOffset, subInfos, totalBoost ) ); } The used implementation of FieldFragList is noted in BaseFragListBuilder.createFieldFragList( ... ) : public FieldFragList createFieldFragList( FieldPhraseList fieldPhraseList, int fragCharSize ){ return createFieldFragList( fieldPhraseList, new SimpleFieldFragList( fragCharSize ), fragCharSize ); } Currently there are basically to approaches available: SimpleFragListBuilder using SimpleFieldFragList : sum-of-boosts -approach. The totalBoost is calculated by summarizing the query-boosts per term. Per default a term is boosted by 1.0 WeightedFragListBuilder using WeightedFieldFragList : sum-of-distinct-weights -approach. The totalBoost is calculated by summarizing the IDF-weights of distinct terms. Comparison of the two approaches: query = das alte testament (The Old Testament) Terms in fragment sum-of-distinct-weights sum-of-boosts das alte testament 5.339621 3.0 das alte testament 5.339621 3.0 das testament alte 5.339621 3.0 das alte testament 5.339621 3.0 das testament 2.9455688 2.0 das alte 2.4759595 2.0 das das das das 1.5015357 4.0 das das das 1.3003681 3.0 das das 1.061746 2.0 alte 1.0 1.0 alte 1.0 1.0 das 0.7507678 1.0 das 0.7507678 1.0 das 0.7507678 1.0 das 0.7507678 1.0 das 0.7507678 1.0 Step 5. In Step 5, by using FieldFragList and the field stored data, Fast Vector Highlighter creates highlighted snippets! Classes BreakIteratorBoundaryScanner A IBoundaryScanner implementation that uses to find boundaries in the text."
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.FixedBitSetCachingWrapperFilter.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.FixedBitSetCachingWrapperFilter.html",
    "title": "Class FixedBitSetCachingWrapperFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedBitSetCachingWrapperFilter A that caches sets using a , as required for joins. Inheritance System.Object FixedBitSetCachingWrapperFilter Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public sealed class FixedBitSetCachingWrapperFilter : CachingWrapperFilter Constructors | Improve this Doc View Source FixedBitSetCachingWrapperFilter(Filter) Sole constructor, see . Declaration public FixedBitSetCachingWrapperFilter(Filter filter) Parameters Type Name Description Filter filter Methods | Improve this Doc View Source DocIdSetToCache(DocIdSet, AtomicReader) Declaration protected override DocIdSet DocIdSetToCache(DocIdSet docIdSet, AtomicReader reader) Parameters Type Name Description DocIdSet docIdSet AtomicReader reader Returns Type Description DocIdSet"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.html",
    "title": "Namespace Lucene.Net.Join | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Join <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> This modules support index-time and query-time joins. Index-time joins The index-time joining support joins while searching, where joined documents are indexed as a single document block using IndexWriter.addDocuments . This is useful for any normalized content (XML documents or database tables). In database terms, all rows for all joined tables matching a single row of the primary table must be indexed as a single document block, with the parent document being last in the group. When you index in this way, the documents in your index are divided into parent documents (the last document of each block) and child documents (all others). You provide a Filter that identifies the parent documents, as Lucene does not currently record any information about doc blocks. At search time, use ToParentBlockJoinQuery to remap/join matches from any child Query (ie, a query that matches only child documents) up to the parent document space. The resulting query can then be used as a clause in any query that matches parent. If you only care about the parent documents matching the query, you can use any collector to collect the parent hits, but if you'd also like to see which child documents match for each parent document, use the ToParentBlockJoinCollector to collect the hits. Once the search is done, you retrieve a <xref:Lucene.Net.Grouping.TopGroups> instance from the ToParentBlockJoinCollector.getTopGroups method. To map/join in the opposite direction, use ToChildBlockJoinQuery . This wraps any query matching parent documents, creating the joined query matching only child documents. Query-time joins The query time joining is index term based and implemented as two pass search. The first pass collects all the terms from a fromField that match the fromQuery. The second pass returns all documents that have matching terms in a toField to the terms collected in the first pass. Query time joining has the following input: fromField : The from field to join from. fromQuery : The query executed to collect the from terms. This is usually the user specified query. multipleValuesPerDocument : Whether the fromField contains more than one value per document scoreMode : Defines how scores are translated to the other join side. If you don't care about scoring use #None mode. This will disable scoring and is therefore more efficient (requires less memory and is faster). toField : The to field to join to Basically the query-time joining is accessible from one static method. The user of this method supplies the method with the described input and a IndexSearcher where the from terms need to be collected from. The returned query can be executed with the same IndexSearcher , but also with another IndexSearcher . Example usage of the JoinUtil.createJoinQuery : String fromField = \"from\"; // Name of the from field boolean multipleValuesPerDocument = false; // Set only yo true in the case when your fromField has multiple values per document in your index String toField = \"to\"; // Name of the to field ScoreMode scoreMode = ScoreMode.Max // Defines how the scores are translated into the other side of the join. Query fromQuery = new TermQuery(new Term(\"content\", searchTerm)); // Query executed to collect from values to join to the to values Query joinQuery = JoinUtil.createJoinQuery(fromField, multipleValuesPerDocument, toField, fromQuery, fromSearcher, scoreMode); TopDocs topDocs = toSearcher.search(joinQuery, 10); // Note: toSearcher can be the same as the fromSearcher // Render topDocs... Classes FixedBitSetCachingWrapperFilter A that caches sets using a , as required for joins. JoinUtil Utility for query time joining using Lucene.Net.Join.TermsQuery and Lucene.Net.Join.TermsCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToChildBlockJoinQuery Just like ToParentBlockJoinQuery , except this query joins in reverse: you provide a matching parent documents and it joins down to child documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToParentBlockJoinCollector Collects parent document hits for a containing one more more BlockJoinQuery clauses, sorted by the specified parent . Note that this cannot perform arbitrary joins; rather, it requires that all joined documents are indexed as a doc block (using or . Ie, the join is computed at index time. The parent must only use fields from the parent documents; sorting by field in the child documents is not supported. You should only use this collector if one or more of the clauses in the query is a ToParentBlockJoinQuery . This collector will find those query clauses and record the matching child documents for the top scoring parent documents. Multiple joins (star join) and nested joins and a mix of the two are allowed, as long as in all cases the documents corresponding to a single row of each joined parent table were indexed as a doc block. For the simple star join you can retrieve the ITopGroups<TGroupValue> instance containing each ToParentBlockJoinQuery 's matching child documents for the top parent groups, using GetTopGroups(ToParentBlockJoinQuery, Sort, Int32, Int32, Int32, Boolean) . Ie, a single query, which will contain two or more ToParentBlockJoinQuery 's as clauses representing the star join, can then retrieve two or more ITopGroups<TGroupValue> instances. For nested joins, the query will run correctly (ie, match the right parent and child documents), however, because TopGroups<TGroupValue> is currently unable to support nesting (each group is not able to hold another TopGroups<TGroupValue> ), you are only able to retrieve the TopGroups<TGroupValue> of the first join. The TopGroups<TGroupValue> of the nested joins will not be correct. See http://lucene.apache.org/core/4_8_0/join/ for a code sample. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToParentBlockJoinFieldComparer A field comparer that allows parent documents to be sorted by fields from the nested / child documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToParentBlockJoinFieldComparer.Highest Concrete implementation of ToParentBlockJoinSortField to sorts the parent docs with the highest values in the child / nested docs first. ToParentBlockJoinFieldComparer.Lowest Concrete implementation of ToParentBlockJoinSortField to sorts the parent docs with the lowest values in the child / nested docs first. ToParentBlockJoinQuery This query requires that you index children and parent docs as a single block, using the or API. In each block, the child documents must appear first, ending with the parent document. At search time you provide a identifying the parents, however this must provide an per sub-reader. Once the block index is built, use this query to wrap any sub-query matching only child docs and join matches in that child document space up to the parent document space. You can then use this as a clause with other queries in the parent document space. See ToChildBlockJoinQuery if you need to join in the reverse order. The child documents must be orthogonal to the parent documents: the wrapped child query must never return a parent document. If you'd like to retrieve ITopGroups<TGroupValue> for the resulting query, use the ToParentBlockJoinCollector . Note that this is not necessary, ie, if you simply want to collect the parent documents and don't need to see which child documents matched under that parent, then you can use any collector. NOTE : If the overall query contains parent-only matches, for example you OR a parent-only query with a joined child-only query, then the resulting collected documents will be correct, however the ITopGroups<TGroupValue> you get from ToParentBlockJoinCollector will not contain every child for parents that had matched. See http://lucene.apache.org/core/4_8_0/join/ for an overview. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToParentBlockJoinSortField A special sort field that allows sorting parent docs based on nested / child level fields. Based on the sort order it either takes the document with the lowest or highest field value into account. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums ScoreMode How to aggregate multiple child hit scores into a single parent score."
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.JoinUtil.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.JoinUtil.html",
    "title": "Class JoinUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JoinUtil Utility for query time joining using Lucene.Net.Join.TermsQuery and Lucene.Net.Join.TermsCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object JoinUtil Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public sealed class JoinUtil : object Methods | Improve this Doc View Source CreateJoinQuery(String, Boolean, String, Query, IndexSearcher, ScoreMode) Method for query time joining. Execute the returned query with a to retrieve all documents that have the same terms in the to field that match with documents matching the specified fromQuery and have the same terms in the from field. In the case a single document relates to more than one document the multipleValuesPerDocument option should be set to true. When the multipleValuesPerDocument is set to true only the the score from the first encountered join value originating from the 'from' side is mapped into the 'to' side. Even in the case when a second join value related to a specific document yields a higher score. Obviously this doesn't apply in the case that None is used, since no scores are computed at all. Memory considerations: During joining all unique join values are kept in memory. On top of that when the scoreMode isn't set to None a float value per unique join value is kept in memory for computing scores. When scoreMode is set to Avg also an additional integer value is kept in memory per unique join value. Declaration public static Query CreateJoinQuery(string fromField, bool multipleValuesPerDocument, string toField, Query fromQuery, IndexSearcher fromSearcher, ScoreMode scoreMode) Parameters Type Name Description System.String fromField The from field to join from System.Boolean multipleValuesPerDocument Whether the from field has multiple terms per document System.String toField The to field to join to Query fromQuery The query to match documents on the from side IndexSearcher fromSearcher The searcher that executed the specified fromQuery ScoreMode scoreMode Instructs how scores from the fromQuery are mapped to the returned query Returns Type Description Query A instance that can be used to join documents based on the terms in the from and to field"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ScoreMode.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ScoreMode.html",
    "title": "Enum ScoreMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum ScoreMode How to aggregate multiple child hit scores into a single parent score. Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public enum ScoreMode : int Fields Name Description Avg Parent hit's score is the average of all child scores. Max Parent hit's score is the max of all child scores. None Do no scoring. Total Parent hit's score is the sum of all child scores."
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToChildBlockJoinQuery.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToChildBlockJoinQuery.html",
    "title": "Class ToChildBlockJoinQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToChildBlockJoinQuery Just like ToParentBlockJoinQuery , except this query joins in reverse: you provide a matching parent documents and it joins down to child documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ToChildBlockJoinQuery Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public class ToChildBlockJoinQuery : Query Constructors | Improve this Doc View Source ToChildBlockJoinQuery(Query, Filter, Boolean) Create a ToChildBlockJoinQuery . Declaration public ToChildBlockJoinQuery(Query parentQuery, Filter parentsFilter, bool doScores) Parameters Type Name Description Query parentQuery that matches parent documents Filter parentsFilter (must produce FixedBitSet per-segment, like FixedBitSetCachingWrapperFilter ) identifying the parent documents. System.Boolean doScores True if parent scores should be calculated. Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinCollector.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinCollector.html",
    "title": "Class ToParentBlockJoinCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToParentBlockJoinCollector Collects parent document hits for a containing one more more BlockJoinQuery clauses, sorted by the specified parent . Note that this cannot perform arbitrary joins; rather, it requires that all joined documents are indexed as a doc block (using or . Ie, the join is computed at index time. The parent must only use fields from the parent documents; sorting by field in the child documents is not supported. You should only use this collector if one or more of the clauses in the query is a ToParentBlockJoinQuery . This collector will find those query clauses and record the matching child documents for the top scoring parent documents. Multiple joins (star join) and nested joins and a mix of the two are allowed, as long as in all cases the documents corresponding to a single row of each joined parent table were indexed as a doc block. For the simple star join you can retrieve the ITopGroups<TGroupValue> instance containing each ToParentBlockJoinQuery 's matching child documents for the top parent groups, using GetTopGroups(ToParentBlockJoinQuery, Sort, Int32, Int32, Int32, Boolean) . Ie, a single query, which will contain two or more ToParentBlockJoinQuery 's as clauses representing the star join, can then retrieve two or more ITopGroups<TGroupValue> instances. For nested joins, the query will run correctly (ie, match the right parent and child documents), however, because TopGroups<TGroupValue> is currently unable to support nesting (each group is not able to hold another TopGroups<TGroupValue> ), you are only able to retrieve the TopGroups<TGroupValue> of the first join. The TopGroups<TGroupValue> of the nested joins will not be correct. See http://lucene.apache.org/core/4_8_0/join/ for a code sample. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ToParentBlockJoinCollector Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public class ToParentBlockJoinCollector : ICollector Constructors | Improve this Doc View Source ToParentBlockJoinCollector(Sort, Int32, Boolean, Boolean) Creates a ToParentBlockJoinCollector . The provided sort must not be null. If you pass true trackScores , all ToParentBlockQuery instances must not use None . Declaration public ToParentBlockJoinCollector(Sort sort, int numParentHits, bool trackScores, bool trackMaxScore) Parameters Type Name Description Sort sort System.Int32 numParentHits System.Boolean trackScores System.Boolean trackMaxScore Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxScore Returns the highest score across all collected parent hits, as long as trackMaxScores=true was passed ToParentBlockJoinCollector(Sort, Int32, Boolean, Boolean) on construction. Else, this returns . Declaration public virtual float MaxScore { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int parentDoc) Parameters Type Name Description System.Int32 parentDoc | Improve this Doc View Source GetTopGroups(ToParentBlockJoinQuery, Sort, Int32, Int32, Int32, Boolean) Returns the ITopGroups<TGroupValue> for the specified BlockJoinQuery. The groupValue of each GroupDocs will be the parent docID for that group. The number of documents within each group is calculated as minimum of maxDocsPerGroup and number of matched child documents for that group. Returns null if no groups matched. Declaration public virtual ITopGroups<int> GetTopGroups(ToParentBlockJoinQuery query, Sort withinGroupSort, int offset, int maxDocsPerGroup, int withinGroupOffset, bool fillSortFields) Parameters Type Name Description ToParentBlockJoinQuery query Search query Sort withinGroupSort Sort criteria within groups System.Int32 offset Parent docs offset System.Int32 maxDocsPerGroup Upper bound of documents per group number System.Int32 withinGroupOffset Offset within each group of child docs System.Boolean fillSortFields Specifies whether to add sort fields or not Returns Type Description ITopGroups < System.Int32 > ITopGroups<TGroupValue> for specified query | Improve this Doc View Source GetTopGroupsWithAllChildDocs(ToParentBlockJoinQuery, Sort, Int32, Int32, Boolean) Returns the TopGroups<TGroupValue> for the specified BlockJoinQuery. The groupValue of each GroupDocs will be the parent docID for that group. The number of documents within each group equals to the total number of matched child documents for that group. Returns null if no groups matched. Declaration public virtual ITopGroups<int> GetTopGroupsWithAllChildDocs(ToParentBlockJoinQuery query, Sort withinGroupSort, int offset, int withinGroupOffset, bool fillSortFields) Parameters Type Name Description ToParentBlockJoinQuery query Search query Sort withinGroupSort Sort criteria within groups System.Int32 offset Parent docs offset System.Int32 withinGroupOffset Offset within each group of child docs System.Boolean fillSortFields Specifies whether to add sort fields or not Returns Type Description ITopGroups < System.Int32 > ITopGroups<TGroupValue> for specified query | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.Highest.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.Highest.html",
    "title": "Class ToParentBlockJoinFieldComparer.Highest | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToParentBlockJoinFieldComparer.Highest Concrete implementation of ToParentBlockJoinSortField to sorts the parent docs with the highest values in the child / nested docs first. Inheritance System.Object ToParentBlockJoinFieldComparer ToParentBlockJoinFieldComparer.Highest Inherited Members ToParentBlockJoinFieldComparer.Compare(Int32, Int32) ToParentBlockJoinFieldComparer.SetBottom(Int32) ToParentBlockJoinFieldComparer.SetTopValue(Object) ToParentBlockJoinFieldComparer.SetNextReader(AtomicReaderContext) ToParentBlockJoinFieldComparer.Item[Int32] Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public sealed class Highest : ToParentBlockJoinFieldComparer Constructors | Improve this Doc View Source Highest(FieldComparer, Filter, Filter, Int32) Create ToParentBlockJoinFieldComparer.Highest Declaration public Highest(FieldComparer wrappedComparer, Filter parentFilter, Filter childFilter, int spareSlot) Parameters Type Name Description FieldComparer wrappedComparer The on the child / nested level. Filter parentFilter (must produce per-segment) that identifies the parent documents. Filter childFilter that defines which child / nested documents participates in sorting. System.Int32 spareSlot The extra slot inside the wrapped comparer that is used to compare which nested document inside the parent document scope is most competitive. Methods | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int parentDoc) Parameters Type Name Description System.Int32 parentDoc Returns Type Description System.Int32 | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int parentDoc) Parameters Type Name Description System.Int32 parentDoc Returns Type Description System.Int32 | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int parentDoc) Parameters Type Name Description System.Int32 slot System.Int32 parentDoc"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.html",
    "title": "Class ToParentBlockJoinFieldComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToParentBlockJoinFieldComparer A field comparer that allows parent documents to be sorted by fields from the nested / child documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ToParentBlockJoinFieldComparer ToParentBlockJoinFieldComparer.Highest ToParentBlockJoinFieldComparer.Lowest Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public abstract class ToParentBlockJoinFieldComparer : FieldComparer<object> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description IComparable Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.Lowest.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.Lowest.html",
    "title": "Class ToParentBlockJoinFieldComparer.Lowest | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToParentBlockJoinFieldComparer.Lowest Concrete implementation of ToParentBlockJoinSortField to sorts the parent docs with the lowest values in the child / nested docs first. Inheritance System.Object ToParentBlockJoinFieldComparer ToParentBlockJoinFieldComparer.Lowest Inherited Members ToParentBlockJoinFieldComparer.Compare(Int32, Int32) ToParentBlockJoinFieldComparer.SetBottom(Int32) ToParentBlockJoinFieldComparer.SetTopValue(Object) ToParentBlockJoinFieldComparer.SetNextReader(AtomicReaderContext) ToParentBlockJoinFieldComparer.Item[Int32] Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public sealed class Lowest : ToParentBlockJoinFieldComparer Constructors | Improve this Doc View Source Lowest(FieldComparer, Filter, Filter, Int32) Create ToParentBlockJoinFieldComparer.Lowest Declaration public Lowest(FieldComparer wrappedComparer, Filter parentFilter, Filter childFilter, int spareSlot) Parameters Type Name Description FieldComparer wrappedComparer The on the child / nested level. Filter parentFilter (must produce per-segment) that identifies the parent documents. Filter childFilter that defines which child / nested documents participates in sorting. System.Int32 spareSlot The extra slot inside the wrapped comparer that is used to compare which nested document inside the parent document scope is most competitive. Methods | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int parentDoc) Parameters Type Name Description System.Int32 parentDoc Returns Type Description System.Int32 | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int parentDoc) Parameters Type Name Description System.Int32 parentDoc Returns Type Description System.Int32 | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int parentDoc) Parameters Type Name Description System.Int32 slot System.Int32 parentDoc"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinQuery.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinQuery.html",
    "title": "Class ToParentBlockJoinQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToParentBlockJoinQuery This query requires that you index children and parent docs as a single block, using the or API. In each block, the child documents must appear first, ending with the parent document. At search time you provide a identifying the parents, however this must provide an per sub-reader. Once the block index is built, use this query to wrap any sub-query matching only child docs and join matches in that child document space up to the parent document space. You can then use this as a clause with other queries in the parent document space. See ToChildBlockJoinQuery if you need to join in the reverse order. The child documents must be orthogonal to the parent documents: the wrapped child query must never return a parent document. If you'd like to retrieve ITopGroups<TGroupValue> for the resulting query, use the ToParentBlockJoinCollector . Note that this is not necessary, ie, if you simply want to collect the parent documents and don't need to see which child documents matched under that parent, then you can use any collector. NOTE : If the overall query contains parent-only matches, for example you OR a parent-only query with a joined child-only query, then the resulting collected documents will be correct, however the ITopGroups<TGroupValue> you get from ToParentBlockJoinCollector will not contain every child for parents that had matched. See http://lucene.apache.org/core/4_8_0/join/ for an overview. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ToParentBlockJoinQuery Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public class ToParentBlockJoinQuery : Query Constructors | Improve this Doc View Source ToParentBlockJoinQuery(Query, Filter, ScoreMode) Create a ToParentBlockJoinQuery . Declaration public ToParentBlockJoinQuery(Query childQuery, Filter parentsFilter, ScoreMode scoreMode) Parameters Type Name Description Query childQuery matching child documents. Filter parentsFilter (must produce per-segment, like FixedBitSetCachingWrapperFilter ) identifying the parent documents. ScoreMode scoreMode How to aggregate multiple child scores into a single parent score. Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinSortField.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinSortField.html",
    "title": "Class ToParentBlockJoinSortField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToParentBlockJoinSortField A special sort field that allows sorting parent docs based on nested / child level fields. Based on the sort order it either takes the document with the lowest or highest field value into account. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ToParentBlockJoinSortField Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public class ToParentBlockJoinSortField : SortField Constructors | Improve this Doc View Source ToParentBlockJoinSortField(String, SortFieldType, Boolean, Filter, Filter) Create ToParentBlockJoinSortField . The parent document ordering is based on child document ordering (reverse). Declaration public ToParentBlockJoinSortField(string field, SortFieldType type, bool reverse, Filter parentFilter, Filter childFilter) Parameters Type Name Description System.String field The sort field on the nested / child level. SortFieldType type The sort type on the nested / child level. System.Boolean reverse Whether natural order should be reversed on the nested / child level. Filter parentFilter that identifies the parent documents. Filter childFilter that defines which child documents participates in sorting. | Improve this Doc View Source ToParentBlockJoinSortField(String, SortFieldType, Boolean, Boolean, Filter, Filter) Create ToParentBlockJoinSortField . Declaration public ToParentBlockJoinSortField(string field, SortFieldType type, bool reverse, bool order, Filter parentFilter, Filter childFilter) Parameters Type Name Description System.String field The sort field on the nested / child level. SortFieldType type The sort type on the nested / child level. System.Boolean reverse Whether natural order should be reversed on the nested / child document level. System.Boolean order Whether natural order should be reversed on the parent level. Filter parentFilter that identifies the parent documents. Filter childFilter that defines which child documents participates in sorting. Methods | Improve this Doc View Source GetComparer(Int32, Int32) Declaration public override FieldComparer GetComparer(int numHits, int sortPos) Parameters Type Name Description System.Int32 numHits System.Int32 sortPos Returns Type Description FieldComparer"
  },
  "api/Lucene.Net.Memory/Lucene.Net.Index.Memory.html": {
    "href": "api/Lucene.Net.Memory/Lucene.Net.Index.Memory.html",
    "title": "Namespace Lucene.Net.Index.Memory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Index.Memory <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> High-performance single-document main memory Apache Lucene fulltext search index. Classes MemoryIndex High-performance single-document main memory Apache Lucene fulltext search index. Overview This class is a replacement/substitute for a large subset of RAMDirectory functionality. It is designed to enable maximum efficiency for on-the-fly matchmaking combining structured and fuzzy fulltext search in realtime streaming applications such as Nux XQuery based XML message queues, publish-subscribe systems for Blogs/newsfeeds, text chat, data acquisition and distribution systems, application level routers, firewalls, classifiers, etc. Rather than targeting fulltext search of infrequent queries over huge persistent data archives (historic search), this class targets fulltext search of huge numbers of queries over comparatively small transient realtime data (prospective search). For example as in float score = Search(string text, Query query) Each instance can hold at most one Lucene \"document\", with a document containing zero or more \"fields\", each field having a name and a fulltext value. The fulltext value is tokenized (split and transformed) into zero or more index terms (aka words) on AddField() , according to the policy implemented by an Analyzer. For example, Lucene analyzers can split on whitespace, normalize to lower case for case insensitivity, ignore common terms with little discriminatory value such as \"he\", \"in\", \"and\" (stop words), reduce the terms to their natural linguistic root form such as \"fishing\" being reduced to \"fish\" (stemming), resolve synonyms/inflexions/thesauri (upon indexing and/or querying), etc. For details, see Lucene Analyzer Intro . Arbitrary Lucene queries can be run against this class - see Lucene Query Syntax as well as Query Parser Rules . Note that a Lucene query selects on the field names and associated (indexed) tokenized terms, not on the original fulltext(s) - the latter are not stored but rather thrown away immediately after tokenization. For some interesting background information on search technology, see Bob Wyman's Prospective Search , Jim Gray's A Call to Arms - Custom subscriptions , and Tim Bray's On Search, the Series . Example Usage Analyzer analyzer = new SimpleAnalyzer(version); MemoryIndex index = new MemoryIndex(); index.AddField(\"content\", \"Readings about Salmons and other select Alaska fishing Manuals\", analyzer); index.AddField(\"author\", \"Tales of James\", analyzer); QueryParser parser = new QueryParser(version, \"content\", analyzer); float score = index.Search(parser.Parse(\"+author:james +salmon~ +fish* manual~\")); if (score > 0.0f) { Console.WriteLine(\"it's a match\"); } else { Console.WriteLine(\"no match found\"); } Console.WriteLine(\"indexData=\" + index.toString()); Example XQuery Usage (: An XQuery that finds all books authored by James that have something to do with \"salmon fishing manuals\", sorted by relevance :) declare namespace lucene = \"java:nux.xom.pool.FullTextUtil\"; declare variable $query := \"+salmon~ +fish* manual~\"; (: any arbitrary Lucene query can go here :) for $book in /books/book[author=\"James\" and lucene:match(abstract, $query) > 0.0] let $score := lucene:match($book/abstract, $query) order by $score descending return $book No thread safety guarantees An instance can be queried multiple times with the same or different queries, but an instance is not thread-safe. If desired use idioms such as: MemoryIndex index = ... lock (index) { // read and/or write index (i.e. add fields and/or query) } Performance Notes Internally there's a new data structure geared towards efficient indexing and searching, plus the necessary support code to seamlessly plug into the Lucene framework. This class performs very well for very small texts (e.g. 10 chars) as well as for large texts (e.g. 10 MB) and everything in between. Typically, it is about 10-100 times faster than RAMDirectory . Note that RAMDirectory has particularly large efficiency overheads for small to medium sized texts, both in time and space. Indexing a field with N tokens takes O(N) in the best case, and O(N logN) in the worst case. Memory consumption is probably larger than for RAMDirectory . Example throughput of many simple term queries over a single MemoryIndex: ~500000 queries/sec on a MacBook Pro, jdk 1.5.0_06, server VM. As always, your mileage may vary. If you're curious about the whereabouts of bottlenecks, run java 1.5 with the non-perturbing '-server -agentlib:hprof=cpu=samples,depth=10' flags, then study the trace log and correlate its hotspot trailer with its call stack headers (see hprof tracing )."
  },
  "api/Lucene.Net.Memory/Lucene.Net.Index.Memory.MemoryIndex.html": {
    "href": "api/Lucene.Net.Memory/Lucene.Net.Index.Memory.MemoryIndex.html",
    "title": "Class MemoryIndex | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MemoryIndex High-performance single-document main memory Apache Lucene fulltext search index. Overview This class is a replacement/substitute for a large subset of RAMDirectory functionality. It is designed to enable maximum efficiency for on-the-fly matchmaking combining structured and fuzzy fulltext search in realtime streaming applications such as Nux XQuery based XML message queues, publish-subscribe systems for Blogs/newsfeeds, text chat, data acquisition and distribution systems, application level routers, firewalls, classifiers, etc. Rather than targeting fulltext search of infrequent queries over huge persistent data archives (historic search), this class targets fulltext search of huge numbers of queries over comparatively small transient realtime data (prospective search). For example as in float score = Search(string text, Query query) Each instance can hold at most one Lucene \"document\", with a document containing zero or more \"fields\", each field having a name and a fulltext value. The fulltext value is tokenized (split and transformed) into zero or more index terms (aka words) on AddField() , according to the policy implemented by an Analyzer. For example, Lucene analyzers can split on whitespace, normalize to lower case for case insensitivity, ignore common terms with little discriminatory value such as \"he\", \"in\", \"and\" (stop words), reduce the terms to their natural linguistic root form such as \"fishing\" being reduced to \"fish\" (stemming), resolve synonyms/inflexions/thesauri (upon indexing and/or querying), etc. For details, see Lucene Analyzer Intro . Arbitrary Lucene queries can be run against this class - see Lucene Query Syntax as well as Query Parser Rules . Note that a Lucene query selects on the field names and associated (indexed) tokenized terms, not on the original fulltext(s) - the latter are not stored but rather thrown away immediately after tokenization. For some interesting background information on search technology, see Bob Wyman's Prospective Search , Jim Gray's A Call to Arms - Custom subscriptions , and Tim Bray's On Search, the Series . Example Usage Analyzer analyzer = new SimpleAnalyzer(version); MemoryIndex index = new MemoryIndex(); index.AddField(\"content\", \"Readings about Salmons and other select Alaska fishing Manuals\", analyzer); index.AddField(\"author\", \"Tales of James\", analyzer); QueryParser parser = new QueryParser(version, \"content\", analyzer); float score = index.Search(parser.Parse(\"+author:james +salmon~ +fish* manual~\")); if (score > 0.0f) { Console.WriteLine(\"it's a match\"); } else { Console.WriteLine(\"no match found\"); } Console.WriteLine(\"indexData=\" + index.toString()); Example XQuery Usage (: An XQuery that finds all books authored by James that have something to do with \"salmon fishing manuals\", sorted by relevance :) declare namespace lucene = \"java:nux.xom.pool.FullTextUtil\"; declare variable $query := \"+salmon~ +fish* manual~\"; (: any arbitrary Lucene query can go here :) for $book in /books/book[author=\"James\" and lucene:match(abstract, $query) > 0.0] let $score := lucene:match($book/abstract, $query) order by $score descending return $book No thread safety guarantees An instance can be queried multiple times with the same or different queries, but an instance is not thread-safe. If desired use idioms such as: MemoryIndex index = ... lock (index) { // read and/or write index (i.e. add fields and/or query) } Performance Notes Internally there's a new data structure geared towards efficient indexing and searching, plus the necessary support code to seamlessly plug into the Lucene framework. This class performs very well for very small texts (e.g. 10 chars) as well as for large texts (e.g. 10 MB) and everything in between. Typically, it is about 10-100 times faster than RAMDirectory . Note that RAMDirectory has particularly large efficiency overheads for small to medium sized texts, both in time and space. Indexing a field with N tokens takes O(N) in the best case, and O(N logN) in the worst case. Memory consumption is probably larger than for RAMDirectory . Example throughput of many simple term queries over a single MemoryIndex: ~500000 queries/sec on a MacBook Pro, jdk 1.5.0_06, server VM. As always, your mileage may vary. If you're curious about the whereabouts of bottlenecks, run java 1.5 with the non-perturbing '-server -agentlib:hprof=cpu=samples,depth=10' flags, then study the trace log and correlate its hotspot trailer with its call stack headers (see hprof tracing ). Inheritance System.Object MemoryIndex Namespace : Lucene.Net.Index.Memory Assembly : Lucene.Net.Memory.dll Syntax public class MemoryIndex : object Constructors | Improve this Doc View Source MemoryIndex() Constructs an empty instance. Declaration public MemoryIndex() | Improve this Doc View Source MemoryIndex(Boolean) Constructs an empty instance that can optionally store the start and end character offset of each token term in the text. This can be useful for highlighting of hit locations with the Lucene highlighter package. Protected until the highlighter package matures, so that this can actually be meaningfully integrated. Declaration public MemoryIndex(bool storeOffsets) Parameters Type Name Description System.Boolean storeOffsets whether or not to store the start and end character offset of each token term in the text Methods | Improve this Doc View Source AddField(String, TokenStream) Equivalent to AddField(fieldName, stream, 1.0f) . Declaration public virtual void AddField(string fieldName, TokenStream stream) Parameters Type Name Description System.String fieldName a name to be associated with the text TokenStream stream the token stream to retrieve tokens from | Improve this Doc View Source AddField(String, TokenStream, Single) Iterates over the given token stream and adds the resulting terms to the index; Equivalent to adding a tokenized, indexed, termVectorStored, unstored, Lucene Field . Finally closes the token stream. Note that untokenized keywords can be added with this method via KeywordTokenStream{T}(ICollection{T} )\"/>, the Lucene KeywordTokenizer or similar utilities. Declaration public virtual void AddField(string fieldName, TokenStream stream, float boost) Parameters Type Name Description System.String fieldName a name to be associated with the text TokenStream stream the token stream to retrieve tokens from. System.Single boost the boost factor for hits for this field See Also Boost | Improve this Doc View Source AddField(String, TokenStream, Single, Int32) Iterates over the given token stream and adds the resulting terms to the index; Equivalent to adding a tokenized, indexed, termVectorStored, unstored, Lucene Field . Finally closes the token stream. Note that untokenized keywords can be added with this method via KeywordTokenStream{T}(ICollection{T} )\"/>, the Lucene KeywordTokenizer or similar utilities. Declaration public virtual void AddField(string fieldName, TokenStream stream, float boost, int positionIncrementGap) Parameters Type Name Description System.String fieldName a name to be associated with the text TokenStream stream the token stream to retrieve tokens from. System.Single boost the boost factor for hits for this field System.Int32 positionIncrementGap the position increment gap if fields with the same name are added more than once See Also Boost | Improve this Doc View Source AddField(String, TokenStream, Single, Int32, Int32) Iterates over the given token stream and adds the resulting terms to the index; Equivalent to adding a tokenized, indexed, termVectorStored, unstored, Lucene Field . Finally closes the token stream. Note that untokenized keywords can be added with this method via KeywordTokenStream{T}(ICollection{T} )\"/>, the Lucene KeywordTokenizer or similar utilities. Declaration public virtual void AddField(string fieldName, TokenStream stream, float boost, int positionIncrementGap, int offsetGap) Parameters Type Name Description System.String fieldName a name to be associated with the text TokenStream stream the token stream to retrieve tokens from. System.Single boost the boost factor for hits for this field System.Int32 positionIncrementGap the position increment gap if fields with the same name are added more than once System.Int32 offsetGap the offset gap if fields with the same name are added more than once See Also Boost | Improve this Doc View Source AddField(String, String, Analyzer) Convenience method; Tokenizes the given field text and adds the resulting terms to the index; Equivalent to adding an indexed non-keyword Lucene Field that is tokenized, not stored, termVectorStored with positions (or termVectorStored with positions and offsets), Declaration public virtual void AddField(string fieldName, string text, Analyzer analyzer) Parameters Type Name Description System.String fieldName a name to be associated with the text System.String text the text to tokenize and index. Analyzer analyzer the analyzer to use for tokenization | Improve this Doc View Source CreateSearcher() Creates and returns a searcher that can be used to execute arbitrary Lucene queries and to collect the resulting query results as hits. Declaration public virtual IndexSearcher CreateSearcher() Returns Type Description IndexSearcher a searcher | Improve this Doc View Source GetMemorySize() Returns a reasonable approximation of the main memory [bytes] consumed by this instance. Useful for smart memory sensititive caches/pools. Declaration public virtual long GetMemorySize() Returns Type Description System.Int64 the main memory consumption | Improve this Doc View Source KeywordTokenStream<T>(ICollection<T>) Convenience method; Creates and returns a token stream that generates a token for each keyword in the given collection, \"as is\", without any transforming text analysis. The resulting token stream can be fed into AddField(String, TokenStream) , perhaps wrapped into another TokenFilter , as desired. Declaration public virtual TokenStream KeywordTokenStream<T>(ICollection<T> keywords) Parameters Type Name Description ICollection <T> keywords the keywords to generate tokens for Returns Type Description TokenStream the corresponding token stream Type Parameters Name Description T | Improve this Doc View Source Reset() Resets the MemoryIndex to its initial state and recycles all internal buffers. Declaration public virtual void Reset() | Improve this Doc View Source Search(Query) Convenience method that efficiently returns the relevance score by matching this index against the given Lucene query expression. Declaration public virtual float Search(Query query) Parameters Type Name Description Query query an arbitrary Lucene query to run against this index Returns Type Description System.Single the relevance score of the matchmaking; A number in the range [0.0 .. 1.0], with 0.0 indicating no match. The higher the number the better the match. | Improve this Doc View Source ToString() Returns a String representation of the index data for debugging purposes. Declaration public override string ToString() Returns Type Description System.String the string representation"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Documents.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Documents.html",
    "title": "Namespace Lucene.Net.Documents | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Documents <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Misc extensions of the Document/Field API. Classes LazyDocument Defers actually loading a field's value until you ask for it. You must not use the returned Field instances after the provided reader has been closed. LazyDocument.LazyField @lucene.internal"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Documents.LazyDocument.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Documents.LazyDocument.html",
    "title": "Class LazyDocument | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LazyDocument Defers actually loading a field's value until you ask for it. You must not use the returned Field instances after the provided reader has been closed. Inheritance System.Object LazyDocument Namespace : Lucene.Net.Documents Assembly : Lucene.Net.Misc.dll Syntax public class LazyDocument : object Constructors | Improve this Doc View Source LazyDocument(IndexReader, Int32) Declaration public LazyDocument(IndexReader reader, int docID) Parameters Type Name Description IndexReader reader System.Int32 docID Methods | Improve this Doc View Source GetField(FieldInfo) Creates an IndexableField whose value will be lazy loaded if and when it is used. NOTE: This method must be called once for each value of the field name specified in sequence that the values exist. This method may not be used to generate multiple, lazy, IndexableField instances refering to the same underlying IndexableField instance. The lazy loading of field values from all instances of IndexableField objects returned by this method are all backed by a single Document per LazyDocument instance. Declaration public virtual IIndexableField GetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description IIndexableField See Also GetField(FieldInfo)"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Documents.LazyDocument.LazyField.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Documents.LazyDocument.LazyField.html",
    "title": "Class LazyDocument.LazyField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LazyDocument.LazyField @lucene.internal Inheritance System.Object LazyDocument.LazyField Implements IIndexableField Namespace : Lucene.Net.Documents Assembly : Lucene.Net.Misc.dll Syntax public class LazyField : object, IIndexableField Properties | Improve this Doc View Source Boost Gets the boost factor on this field. Declaration public virtual float Boost { get; } Property Value Type Description System.Single | Improve this Doc View Source FieldType Returns the FieldType for this field as type FieldType . Declaration public virtual FieldType FieldType { get; } Property Value Type Description FieldType | Improve this Doc View Source HasBeenLoaded non-private for test only access @lucene.internal Declaration public virtual bool HasBeenLoaded { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IndexableFieldType Returns the FieldType for this field as type IIndexableFieldType . Declaration public virtual IIndexableFieldType IndexableFieldType { get; } Property Value Type Description IIndexableFieldType | Improve this Doc View Source Name The field's name Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumericType Gets the NumericFieldType of the underlying value, or NONE if the value is not set or non-numeric. Expert: The difference between this property and NumericType is this is represents the current state of the field (whether being written or read) and the FieldType property represents instructions on how the field will be written, but does not re-populate when reading back from an index (it is write-only). In Java, the numeric type was determined by checking the type of GetNumericValue() . However, since there are no reference number types in .NET, using GetNumericValue() so will cause boxing/unboxing. It is therefore recommended to use this property to check the underlying type and the corresponding Get*Value() method to retrieve the value. NOTE: Since Lucene codecs do not support BYTE or INT16 , fields created with these types will always be INT32 when read back from the index. Declaration public virtual NumericFieldType NumericType { get; } Property Value Type Description NumericFieldType Methods | Improve this Doc View Source GetBinaryValue() Non-null if this field has a binary value. Declaration public virtual BytesRef GetBinaryValue() Returns Type Description BytesRef | Improve this Doc View Source GetByteValue() Returns the field value as or null if the type is non-numeric. Declaration public virtual byte? GetByteValue() Returns Type Description System.Nullable < System.Byte > The field value or null if the type is non-numeric. | Improve this Doc View Source GetDoubleValue() Returns the field value as or null if the type is non-numeric. Declaration public virtual double? GetDoubleValue() Returns Type Description System.Nullable < System.Double > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt16Value() Returns the field value as or null if the type is non-numeric. Declaration public virtual short? GetInt16Value() Returns Type Description System.Nullable < System.Int16 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt32Value() Returns the field value as or null if the type is non-numeric. Declaration public virtual int? GetInt32Value() Returns Type Description System.Nullable < System.Int32 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt64Value() Returns the field value as or null if the type is non-numeric. Declaration public virtual long? GetInt64Value() Returns Type Description System.Nullable < System.Int64 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetNumericValue() Declaration public virtual object GetNumericValue() Returns Type Description System.Object | Improve this Doc View Source GetReaderValue() The value of the field as a , or null . If null , the value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual TextReader GetReaderValue() Returns Type Description TextReader | Improve this Doc View Source GetSingleValue() Returns the field value as or null if the type is non-numeric. Declaration public virtual float? GetSingleValue() Returns Type Description System.Nullable < System.Single > The field value or null if the type is non-numeric. | Improve this Doc View Source GetStringValue() The value of the field as a , or null . If null , the value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue() Returns Type Description System.String The string representation of the value if it is either a or numeric type. | Improve this Doc View Source GetStringValue(IFormatProvider) The value of the field as a , or null . If null , the value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(IFormatProvider provider) Parameters Type Name Description IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a or numeric type. | Improve this Doc View Source GetStringValue(String) The value of the field as a , or null . If null , the value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(string format) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a or numeric type. | Improve this Doc View Source GetStringValue(String, IFormatProvider) The value of the field as a , or null . If null , the value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(string format, IFormatProvider provider) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a or numeric type. | Improve this Doc View Source GetTokenStream(Analyzer) Declaration public virtual TokenStream GetTokenStream(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Returns Type Description TokenStream Implements IIndexableField"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.CompoundFileExtractor.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.CompoundFileExtractor.html",
    "title": "Class CompoundFileExtractor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompoundFileExtractor Command-line tool for extracting sub-files out of a compound file. Inheritance System.Object CompoundFileExtractor Namespace : Lucene.Net.Index Assembly : Lucene.Net.Misc.dll Syntax public class CompoundFileExtractor : object Methods | Improve this Doc View Source Main(String[]) Prints the filename and size of each file within a given compound file. Add the -extract flag to extract files to the current working directory. In order to make the extracted version of the index work, you have to copy the segments file from the compound index into the directory where the extracted files are stored. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.html",
    "title": "Namespace Lucene.Net.Index | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Index <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Misc index tools and index support. Classes CompoundFileExtractor Command-line tool for extracting sub-files out of a compound file. IndexSplitter Command-line tool that enables listing segments in an index, copying specific segments to another index, and deleting segments from an index. This tool does file-level copying of segments files. This means it's unable to split apart a single segment into multiple segments. For example if your index is a single segment, this tool won't help. Also, it does basic file-level copying (using simple Stream) so it will not work with non FSDirectory Directory impls. @lucene.experimental You can easily accidentally remove segments from your index so be careful! MultiPassIndexSplitter This tool splits input index into multiple equal parts. The method employed here uses AddIndexes(IndexReader[]) where the input data comes from the input index with artificially applied deletes to the document id-s that fall outside the selected partition. Note 1: Deletes are only applied to a buffered list of deleted docs and don't affect the source index - this tool works also with read-only indexes. Note 2: the disadvantage of this tool is that source index needs to be read as many times as there are parts to be created, hence the name of this tool. NOTE : this tool is unaware of documents added atomically via or , which means it can easily break up such document groups. PKIndexSplitter Split an index based on a Filter ."
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.IndexSplitter.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.IndexSplitter.html",
    "title": "Class IndexSplitter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexSplitter Command-line tool that enables listing segments in an index, copying specific segments to another index, and deleting segments from an index. This tool does file-level copying of segments files. This means it's unable to split apart a single segment into multiple segments. For example if your index is a single segment, this tool won't help. Also, it does basic file-level copying (using simple Stream) so it will not work with non FSDirectory Directory impls. @lucene.experimental You can easily accidentally remove segments from your index so be careful! Inheritance System.Object IndexSplitter Namespace : Lucene.Net.Index Assembly : Lucene.Net.Misc.dll Syntax public class IndexSplitter : object Constructors | Improve this Doc View Source IndexSplitter(DirectoryInfo) Declaration public IndexSplitter(DirectoryInfo dir) Parameters Type Name Description DirectoryInfo dir Properties | Improve this Doc View Source Infos Declaration public SegmentInfos Infos { get; set; } Property Value Type Description SegmentInfos Methods | Improve this Doc View Source ListSegments() Declaration public virtual void ListSegments() | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source Remove(String[]) Declaration public virtual void Remove(string[] segs) Parameters Type Name Description System.String [] segs | Improve this Doc View Source Split(DirectoryInfo, String[]) Declaration public virtual void Split(DirectoryInfo destDir, string[] segs) Parameters Type Name Description DirectoryInfo destDir System.String [] segs"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.MultiPassIndexSplitter.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.MultiPassIndexSplitter.html",
    "title": "Class MultiPassIndexSplitter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiPassIndexSplitter This tool splits input index into multiple equal parts. The method employed here uses AddIndexes(IndexReader[]) where the input data comes from the input index with artificially applied deletes to the document id-s that fall outside the selected partition. Note 1: Deletes are only applied to a buffered list of deleted docs and don't affect the source index - this tool works also with read-only indexes. Note 2: the disadvantage of this tool is that source index needs to be read as many times as there are parts to be created, hence the name of this tool. NOTE : this tool is unaware of documents added atomically via or , which means it can easily break up such document groups. Inheritance System.Object MultiPassIndexSplitter Namespace : Lucene.Net.Index Assembly : Lucene.Net.Misc.dll Syntax public class MultiPassIndexSplitter : object Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source Split(LuceneVersion, IndexReader, Directory[], Boolean) Split source index into multiple parts. Declaration public virtual void Split(LuceneVersion version, IndexReader in, Directory[] outputs, bool seq) Parameters Type Name Description LuceneVersion version lucene compatibility version IndexReader in source index, can have deletions, can have multiple segments (or multiple readers). Directory [] outputs list of directories where the output parts will be stored. System.Boolean seq if true, then the source index will be split into equal increasing ranges of document id-s. If false, source document id-s will be assigned in a deterministic round-robin fashion to one of the output splits."
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.PKIndexSplitter.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.PKIndexSplitter.html",
    "title": "Class PKIndexSplitter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PKIndexSplitter Split an index based on a Filter . Inheritance System.Object PKIndexSplitter Namespace : Lucene.Net.Index Assembly : Lucene.Net.Misc.dll Syntax public class PKIndexSplitter : object Constructors | Improve this Doc View Source PKIndexSplitter(Directory, Directory, Directory, Term, IndexWriterConfig, IndexWriterConfig) Declaration public PKIndexSplitter(Directory input, Directory dir1, Directory dir2, Term midTerm, IndexWriterConfig config1, IndexWriterConfig config2) Parameters Type Name Description Directory input Directory dir1 Directory dir2 Term midTerm IndexWriterConfig config1 IndexWriterConfig config2 | Improve this Doc View Source PKIndexSplitter(Directory, Directory, Directory, Filter, IndexWriterConfig, IndexWriterConfig) Declaration public PKIndexSplitter(Directory input, Directory dir1, Directory dir2, Filter docsInFirstIndex, IndexWriterConfig config1, IndexWriterConfig config2) Parameters Type Name Description Directory input Directory dir1 Directory dir2 Filter docsInFirstIndex IndexWriterConfig config1 IndexWriterConfig config2 | Improve this Doc View Source PKIndexSplitter(LuceneVersion, Directory, Directory, Directory, Term) Split an index based on a given primary key term and a 'middle' term. If the middle term is present, it's sent to dir2. Declaration public PKIndexSplitter(LuceneVersion version, Directory input, Directory dir1, Directory dir2, Term midTerm) Parameters Type Name Description LuceneVersion version Directory input Directory dir1 Directory dir2 Term midTerm | Improve this Doc View Source PKIndexSplitter(LuceneVersion, Directory, Directory, Directory, Filter) Split an index based on a Filter . All documents that match the filter are sent to dir1, remaining ones to dir2. Declaration public PKIndexSplitter(LuceneVersion version, Directory input, Directory dir1, Directory dir2, Filter docsInFirstIndex) Parameters Type Name Description LuceneVersion version Directory input Directory dir1 Directory dir2 Filter docsInFirstIndex Methods | Improve this Doc View Source Split() Declaration public virtual void Split()"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.BlockJoinComparerSource.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.BlockJoinComparerSource.html",
    "title": "Class BlockJoinComparerSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockJoinComparerSource Helper class to sort readers that contain blocks of documents. Note that this class is intended to used with SortingMergePolicy , and for other purposes has some limitations: Cannot yet be used with IndexSearcher.SearchAfter Filling sort field values is not yet supported. @lucene.experimental Inheritance System.Object FieldComparerSource BlockJoinComparerSource Namespace : Lucene.Net.Index.Sorter Assembly : Lucene.Net.Misc.dll Syntax public class BlockJoinComparerSource : FieldComparerSource Constructors | Improve this Doc View Source BlockJoinComparerSource(Filter, Sort) Create a new BlockJoinComparerSource, sorting only blocks of documents with parentSort and not reordering children with a block. Declaration public BlockJoinComparerSource(Filter parentsFilter, Sort parentSort) Parameters Type Name Description Filter parentsFilter Filter identifying parent documents Sort parentSort Sort for parent documents | Improve this Doc View Source BlockJoinComparerSource(Filter, Sort, Sort) Create a new BlockJoinComparerSource, specifying the sort order for both blocks of documents and children within a block. Declaration public BlockJoinComparerSource(Filter parentsFilter, Sort parentSort, Sort childSort) Parameters Type Name Description Filter parentsFilter Filter identifying parent documents Sort parentSort Sort for parent documents Sort childSort Sort for child documents in the same block Methods | Improve this Doc View Source NewComparer(String, Int32, Int32, Boolean) Declaration public override FieldComparer NewComparer(string fieldname, int numHits, int sortPos, bool reversed) Parameters Type Name Description System.String fieldname System.Int32 numHits System.Int32 sortPos System.Boolean reversed Returns Type Description FieldComparer | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.EarlyTerminatingSortingCollector.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.EarlyTerminatingSortingCollector.html",
    "title": "Class EarlyTerminatingSortingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EarlyTerminatingSortingCollector A ICollector that early terminates collection of documents on a per-segment basis, if the segment was sorted according to the given Sort . NOTE: the ICollector detects sorted segments according to SortingMergePolicy , so it's best used in conjunction with it. Also, it collects up to a specified m_numDocsToCollect from each segment, and therefore is mostly suitable for use in conjunction with collectors such as TopDocsCollector<T> , and not e.g. TotalHitCountCollector . NOTE : If you wrap a TopDocsCollector<T> that sorts in the same order as the index order, the returned GetTopDocs() will be correct. However the total of TotalHits hit count will be underestimated since not all matching documents will have been collected. NOTE : This ICollector uses ToString() to detect whether a segment was sorted with the same Sort . This has two implications: if a custom comparer is not implemented correctly and returns different identifiers for equivalent instances, this collector will not detect sorted segments, if you suddenly change the IndexWriter 's SortingMergePolicy to sort according to another criterion and if both the old and the new Sort s have the same identifier, this ICollector will incorrectly detect sorted segments. @lucene.experimental Inheritance System.Object EarlyTerminatingSortingCollector Implements ICollector Namespace : Lucene.Net.Index.Sorter Assembly : Lucene.Net.Misc.dll Syntax public class EarlyTerminatingSortingCollector : object, ICollector Constructors | Improve this Doc View Source EarlyTerminatingSortingCollector(ICollector, Sort, Int32) Create a new EarlyTerminatingSortingCollector instance. Declaration public EarlyTerminatingSortingCollector(ICollector in, Sort sort, int numDocsToCollect) Parameters Type Name Description ICollector in the collector to wrap Sort sort the sort you are sorting the search results on System.Int32 numDocsToCollect the number of documents to collect on each segment. When wrapping a TopDocsCollector<T> , this number should be the number of hits. Fields | Improve this Doc View Source m_in The wrapped Collector Declaration protected readonly ICollector m_in Field Value Type Description ICollector | Improve this Doc View Source m_numDocsToCollect Number of documents to collect in each segment Declaration protected readonly int m_numDocsToCollect Field Value Type Description System.Int32 | Improve this Doc View Source m_segmentSorted True if the current segment being processed is sorted by Sort() Declaration protected bool m_segmentSorted Field Value Type Description System.Boolean | Improve this Doc View Source m_segmentTotalCollect Number of documents to collect in the current segment being processed Declaration protected int m_segmentTotalCollect Field Value Type Description System.Int32 | Improve this Doc View Source m_sort Sort used to sort the search results Declaration protected readonly Sort m_sort Field Value Type Description Sort Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.html",
    "title": "Namespace Lucene.Net.Index.Sorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Index.Sorter <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Provides index sorting capablities. The application can use any Sort specification, e.g. to sort by fields using DocValues or FieldCache, or to reverse the order of the documents (by using SortField.Type.DOC in reverse). Multi-level sorts can be specified the same way you would when searching, by building Sort from multiple SortFields. SortingMergePolicy can be used to make Lucene sort segments before merging them. This will ensure that every segment resulting from a merge will be sorted according to the provided Sort . This however makes merging and thus indexing slower. Sorted segments allow for early query termination when the sort order matches index order. This makes query execution faster since not all documents need to be visited. Please note that this is an expert feature and should not be used without a deep understanding of Lucene merging and document collection. Classes BlockJoinComparerSource Helper class to sort readers that contain blocks of documents. Note that this class is intended to used with SortingMergePolicy , and for other purposes has some limitations: Cannot yet be used with IndexSearcher.SearchAfter Filling sort field values is not yet supported. @lucene.experimental EarlyTerminatingSortingCollector A ICollector that early terminates collection of documents on a per-segment basis, if the segment was sorted according to the given Sort . NOTE: the ICollector detects sorted segments according to SortingMergePolicy , so it's best used in conjunction with it. Also, it collects up to a specified m_numDocsToCollect from each segment, and therefore is mostly suitable for use in conjunction with collectors such as TopDocsCollector<T> , and not e.g. TotalHitCountCollector . NOTE : If you wrap a TopDocsCollector<T> that sorts in the same order as the index order, the returned GetTopDocs() will be correct. However the total of TotalHits hit count will be underestimated since not all matching documents will have been collected. NOTE : This ICollector uses ToString() to detect whether a segment was sorted with the same Sort . This has two implications: if a custom comparer is not implemented correctly and returns different identifiers for equivalent instances, this collector will not detect sorted segments, if you suddenly change the IndexWriter 's SortingMergePolicy to sort according to another criterion and if both the old and the new Sort s have the same identifier, this ICollector will incorrectly detect sorted segments. @lucene.experimental SortingAtomicReader An AtomicReader which supports sorting documents by a given Sort . You can use this class to sort an index as follows: IndexWriter writer; // writer to which the sorted index will be added DirectoryReader reader; // reader on the input index Sort sort; // determines how the documents are sorted AtomicReader sortingReader = SortingAtomicReader.Wrap(SlowCompositeReaderWrapper.Wrap(reader), sort); writer.AddIndexes(reader); reader.Dispose(); // alternatively, you can use a using block writer.Dispose(); // alternatively, you can use a using block This is a Lucene.NET EXPERIMENTAL API, use at your own risk SortingMergePolicy A MergePolicy that reorders documents according to a Sort before merging them. As a consequence, all segments resulting from a merge will be sorted while segments resulting from a flush will be in the order in which documents have been added. NOTE : Never use this policy if you rely on IndexWriter.AddDocuments to have sequentially-assigned doc IDs, this policy will scatter doc IDs. NOTE : This policy should only be used with idempotent Sort s so that the order of segments is predictable. For example, using INDEXORDER in reverse (which is not idempotent) will make the order of documents in a segment depend on the number of times the segment has been merged. @lucene.experimental"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.SortingAtomicReader.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.SortingAtomicReader.html",
    "title": "Class SortingAtomicReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortingAtomicReader An AtomicReader which supports sorting documents by a given Sort . You can use this class to sort an index as follows: IndexWriter writer; // writer to which the sorted index will be added DirectoryReader reader; // reader on the input index Sort sort; // determines how the documents are sorted AtomicReader sortingReader = SortingAtomicReader.Wrap(SlowCompositeReaderWrapper.Wrap(reader), sort); writer.AddIndexes(reader); reader.Dispose(); // alternatively, you can use a using block writer.Dispose(); // alternatively, you can use a using block This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexReader AtomicReader FilterAtomicReader SortingAtomicReader Inherited Members FilterAtomicReader.Unwrap(AtomicReader) FilterAtomicReader.m_input FilterAtomicReader.FieldInfos FilterAtomicReader.NumDocs FilterAtomicReader.MaxDoc FilterAtomicReader.DoClose() FilterAtomicReader.ToString() FilterAtomicReader.CheckIntegrity() AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) Lucene.Net.Index.IndexReader.Document(System.Int32, ISet<>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey Namespace : Lucene.Net.Index.Sorter Assembly : Lucene.Net.Misc.dll Syntax public class SortingAtomicReader : FilterAtomicReader Properties | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides FilterAtomicReader.Fields | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides FilterAtomicReader.LiveDocs Methods | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields | Improve this Doc View Source Wrap(AtomicReader, Sort) Return a sorted view of reader according to the order defined by sort . If the reader is already sorted, this method might return the reader as-is. Declaration public static AtomicReader Wrap(AtomicReader reader, Sort sort) Parameters Type Name Description AtomicReader reader Sort sort Returns Type Description AtomicReader"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.SortingMergePolicy.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Index.Sorter.SortingMergePolicy.html",
    "title": "Class SortingMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortingMergePolicy A MergePolicy that reorders documents according to a Sort before merging them. As a consequence, all segments resulting from a merge will be sorted while segments resulting from a flush will be in the order in which documents have been added. NOTE : Never use this policy if you rely on IndexWriter.AddDocuments to have sequentially-assigned doc IDs, this policy will scatter doc IDs. NOTE : This policy should only be used with idempotent Sort s so that the order of segments is predictable. For example, using INDEXORDER in reverse (which is not idempotent) will make the order of documents in a segment depend on the number of times the segment has been merged. @lucene.experimental Inheritance System.Object MergePolicy SortingMergePolicy Inherited Members MergePolicy.DEFAULT_NO_CFS_RATIO MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize Lucene.Net.Index.MergePolicy.FindForcedMerges(Lucene.Net.Index.SegmentInfos, System.Int32, IDictionary<, >) MergePolicy.Dispose() MergePolicy.Size(SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB Namespace : Lucene.Net.Index.Sorter Assembly : Lucene.Net.Misc.dll Syntax public sealed class SortingMergePolicy : MergePolicy Constructors | Improve this Doc View Source SortingMergePolicy(MergePolicy, Sort) Create a new MergePolicy that sorts documents with the given sort . Declaration public SortingMergePolicy(MergePolicy in, Sort sort) Parameters Type Name Description MergePolicy in Sort sort Fields | Improve this Doc View Source SORTER_ID_PROP Put in the Diagnostics to denote that this segment is sorted. Declaration public static readonly string SORTER_ID_PROP Field Value Type Description System.String Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides MergePolicy.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos segmentInfos System.Int32 maxSegmentCount IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source IsSorted(AtomicReader, Sort) Returns true if the given reader is sorted by the specified sort . Declaration public static bool IsSorted(AtomicReader reader, Sort sort) Parameters Type Name Description AtomicReader reader Sort sort Returns Type Description System.Boolean | Improve this Doc View Source SetIndexWriter(IndexWriter) Declaration public override void SetIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer Overrides MergePolicy.SetIndexWriter(IndexWriter) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source UseCompoundFile(SegmentInfos, SegmentCommitInfo) Declaration public override bool UseCompoundFile(SegmentInfos segments, SegmentCommitInfo newSegment) Parameters Type Name Description SegmentInfos segments SegmentCommitInfo newSegment Returns Type Description System.Boolean Overrides MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo)"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.GetTermInfo.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.GetTermInfo.html",
    "title": "Class GetTermInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GetTermInfo Utility to get document frequency and total number of occurrences (sum of the tf for each doc) of a term. Inheritance System.Object GetTermInfo Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public class GetTermInfo : object Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source TermInfo(Directory, Term) Declaration public static void TermInfo(Directory dir, Term term) Parameters Type Name Description Directory dir Term term"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.HighFreqTerms.DocFreqComparer.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.HighFreqTerms.DocFreqComparer.html",
    "title": "Class HighFreqTerms.DocFreqComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HighFreqTerms.DocFreqComparer Compares terms by DocFreq Inheritance System.Object HighFreqTerms.DocFreqComparer Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public sealed class DocFreqComparer : IComparer<TermStats> Methods | Improve this Doc View Source Compare(TermStats, TermStats) Declaration public int Compare(TermStats a, TermStats b) Parameters Type Name Description TermStats a TermStats b Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.HighFreqTerms.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.HighFreqTerms.html",
    "title": "Class HighFreqTerms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HighFreqTerms HighFreqTerms class extracts the top n most frequent terms (by document frequency) from an existing Lucene index and reports their document frequency. If the -t flag is given, both document frequency and total tf (total number of occurrences) are reported, ordered by descending total tf. Inheritance System.Object HighFreqTerms Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public class HighFreqTerms : object Fields | Improve this Doc View Source DEFAULT_NUMTERMS Declaration public const int DEFAULT_NUMTERMS = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetHighFreqTerms(IndexReader, Int32, String, IComparer<TermStats>) Returns TermStats[] ordered by the specified comparer Declaration public static TermStats[] GetHighFreqTerms(IndexReader reader, int numTerms, string field, IComparer<TermStats> comparer) Parameters Type Name Description IndexReader reader System.Int32 numTerms System.String field IComparer < TermStats > comparer Returns Type Description TermStats [] | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.HighFreqTerms.TotalTermFreqComparer.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.HighFreqTerms.TotalTermFreqComparer.html",
    "title": "Class HighFreqTerms.TotalTermFreqComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HighFreqTerms.TotalTermFreqComparer Compares terms by TotalTermFreq Inheritance System.Object HighFreqTerms.TotalTermFreqComparer Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public sealed class TotalTermFreqComparer : IComparer<TermStats> Methods | Improve this Doc View Source Compare(TermStats, TermStats) Declaration public int Compare(TermStats a, TermStats b) Parameters Type Name Description TermStats a TermStats b Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.html",
    "title": "Namespace Lucene.Net.Misc | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Misc <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Misc Tools The misc package has various tools for splitting/merging indices, changing norms, finding high freq terms, and others. NativeUnixDirectory NOTE : This uses C++ sources (accessible via JNI), which you'll have to compile on your platform. <xref:Lucene.Net.Store.NativeUnixDirectory> is a Directory implementation that bypasses the OS's buffer cache (using direct IO) for any IndexInput and IndexOutput used during merging of segments larger than a specified size (default 10 MB). This avoids evicting hot pages that are still in-use for searching, keeping search more responsive while large merges run. See this blog post for details. Steps to build: cd lucene/misc/ To compile NativePosixUtil.cpp -> libNativePosixUtil.so, run ant build-native-unix . libNativePosixUtil.so will be located in the lucene/build/native/ folder Make sure libNativePosixUtil.so is on your LD_LIBRARY_PATH so java can find it (something like export LD_LIBRARY_PATH=/path/to/dir:$LD_LIBRARY_PATH , where /path/to/dir contains libNativePosixUtil.so) ant jar to compile the java source and put that JAR on your CLASSPATH NativePosixUtil.cpp/java also expose access to the posix_madvise, madvise, posix_fadvise functions, which are somewhat more cross platform than O_DIRECT, however, in testing (see above link), these APIs did not seem to help prevent buffer cache eviction. Classes GetTermInfo Utility to get document frequency and total number of occurrences (sum of the tf for each doc) of a term. HighFreqTerms HighFreqTerms class extracts the top n most frequent terms (by document frequency) from an existing Lucene index and reports their document frequency. If the -t flag is given, both document frequency and total tf (total number of occurrences) are reported, ordered by descending total tf. HighFreqTerms.DocFreqComparer Compares terms by DocFreq HighFreqTerms.TotalTermFreqComparer Compares terms by TotalTermFreq IndexMergeTool Merges indices specified on the command line into the index specified as the first command line argument. SweetSpotSimilarity A similarity with a lengthNorm that provides for a \"plateau\" of equally good lengths, and tf helper functions. For lengthNorm, A min/max can be specified to define the plateau of lengths that should all have a norm of 1.0. Below the min, and above the max the lengthNorm drops off in a sqrt function. For tf, baselineTf and hyperbolicTf functions are provided, which subclasses can choose between. TermStats Holder for a term along with its statistics ( DocFreq and TotalTermFreq )."
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.IndexMergeTool.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.IndexMergeTool.html",
    "title": "Class IndexMergeTool | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexMergeTool Merges indices specified on the command line into the index specified as the first command line argument. Inheritance System.Object IndexMergeTool Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public class IndexMergeTool : object Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.SweetSpotSimilarity.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.SweetSpotSimilarity.html",
    "title": "Class SweetSpotSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SweetSpotSimilarity A similarity with a lengthNorm that provides for a \"plateau\" of equally good lengths, and tf helper functions. For lengthNorm, A min/max can be specified to define the plateau of lengths that should all have a norm of 1.0. Below the min, and above the max the lengthNorm drops off in a sqrt function. For tf, baselineTf and hyperbolicTf functions are provided, which subclasses can choose between. Inheritance System.Object Similarity TFIDFSimilarity DefaultSimilarity SweetSpotSimilarity Inherited Members DefaultSimilarity.Coord(Int32, Int32) DefaultSimilarity.QueryNorm(Single) DefaultSimilarity.EncodeNormValue(Single) DefaultSimilarity.DecodeNormValue(Int64) DefaultSimilarity.SloppyFreq(Int32) DefaultSimilarity.ScorePayload(Int32, Int32, Int32, BytesRef) DefaultSimilarity.Idf(Int64, Int64) DefaultSimilarity.m_discountOverlaps DefaultSimilarity.DiscountOverlaps DefaultSimilarity.ToString() TFIDFSimilarity.IdfExplain(CollectionStatistics, TermStatistics) TFIDFSimilarity.IdfExplain(CollectionStatistics, TermStatistics[]) TFIDFSimilarity.ComputeNorm(FieldInvertState) TFIDFSimilarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) TFIDFSimilarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public class SweetSpotSimilarity : DefaultSimilarity Constructors | Improve this Doc View Source SweetSpotSimilarity() Declaration public SweetSpotSimilarity() Methods | Improve this Doc View Source BaselineTf(Single) Implemented as: (x <= min) ? base : Math.Sqrt(x+(base**2)-min) ...but with a special case check for 0. This degrates to Math.Sqrt(x) when min and base are both 0 Declaration public virtual float BaselineTf(float freq) Parameters Type Name Description System.Single freq Returns Type Description System.Single See Also SetBaselineTfFactors(Single, Single) | Improve this Doc View Source ComputeLengthNorm(Int32) Implemented as: 1/sqrt( steepness * (Math.Abs(x-min) + Math.Abs(x-max) - (max-min)) + 1 ) . This degrades to 1/Math.Sqrt(x) when min and max are both 1 and steepness is 0.5 :TODO: potential optimization is to just flat out return 1.0f if numTerms is between min and max. Declaration public virtual float ComputeLengthNorm(int numTerms) Parameters Type Name Description System.Int32 numTerms Returns Type Description System.Single See Also SetLengthNormFactors(Int32, Int32, Single, Boolean) | Improve this Doc View Source HyperbolicTf(Single) Uses a hyperbolic tangent function that allows for a hard max... tf(x)=min+(max-min)/2*(((base**(x-xoffset)-base**-(x-xoffset))/(base**(x-xoffset)+base**-(x-xoffset)))+1) This code is provided as a convenience for subclasses that want to use a hyperbolic tf function. Declaration public virtual float HyperbolicTf(float freq) Parameters Type Name Description System.Single freq Returns Type Description System.Single See Also SetHyperbolicTfFactors(Single, Single, Double, Single) | Improve this Doc View Source LengthNorm(FieldInvertState) Implemented as state.Boost * ComputeLengthNorm(numTokens) where numTokens does not count overlap tokens if discountOverlaps is true by default or true for this specific field. Declaration public override float LengthNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Single Overrides DefaultSimilarity.LengthNorm(FieldInvertState) | Improve this Doc View Source SetBaselineTfFactors(Single, Single) Sets the baseline and minimum function variables for baselineTf Declaration public virtual void SetBaselineTfFactors(float base, float min) Parameters Type Name Description System.Single base System.Single min See Also BaselineTf(Single) | Improve this Doc View Source SetHyperbolicTfFactors(Single, Single, Double, Single) Sets the function variables for the hyperbolicTf functions Declaration public virtual void SetHyperbolicTfFactors(float min, float max, double base, float xoffset) Parameters Type Name Description System.Single min the minimum tf value to ever be returned (default: 0.0) System.Single max the maximum tf value to ever be returned (default: 2.0) System.Double base the base value to be used in the exponential for the hyperbolic function (default: 1.3) System.Single xoffset the midpoint of the hyperbolic function (default: 10.0) See Also HyperbolicTf(Single) | Improve this Doc View Source SetLengthNormFactors(Int32, Int32, Single, Boolean) Sets the default function variables used by lengthNorm when no field specific variables have been set. Declaration public virtual void SetLengthNormFactors(int min, int max, float steepness, bool discountOverlaps) Parameters Type Name Description System.Int32 min System.Int32 max System.Single steepness System.Boolean discountOverlaps See Also ComputeLengthNorm(Int32) | Improve this Doc View Source Tf(Single) Delegates to baselineTf Declaration public override float Tf(float freq) Parameters Type Name Description System.Single freq Returns Type Description System.Single See Also BaselineTf(Single)"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Misc.TermStats.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Misc.TermStats.html",
    "title": "Class TermStats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermStats Holder for a term along with its statistics ( DocFreq and TotalTermFreq ). Inheritance System.Object TermStats Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public sealed class TermStats : object Properties | Improve this Doc View Source DocFreq Declaration public int DocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Field Declaration public string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source TotalTermFreq Declaration public long TotalTermFreq { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.html",
    "title": "Namespace Lucene.Net.Util.Fst | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Fst <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Misc FST classes. Classes ListOfOutputs<T> Wraps another Outputs implementation and encodes one or more of its output values. You can use this when a single input may need to map to more than one output, maintaining order: pass the same input with a different output by calling Add(Int32sRef, T) multiple times. The builder will then combine the outputs using the Merge(T, T) method. The resulting FST may not be minimal when an input has more than one output, as this requires pushing all multi-output values to a final state. NOTE: the only way to create multiple outputs is to add the same input to the FST multiple times in a row. This is how the FST maps a single input to multiple outputs (e.g. you cannot pass a List<Object> to Add(Int32sRef, T) ). If your outputs are longs, and you need at most 2, then use UpToTwoPositiveInt64Outputs instead since it stores the outputs more compactly (by stealing a bit from each long value). NOTE: this cannot wrap itself (ie you cannot make an FST with List<List<Object>> outputs using this). @lucene.experimental UpToTwoPositiveInt64Outputs An FST Outputs<T> implementation where each output is one or two non-negative long values. If it's a output, is returned; else, TwoLongs. Order is preserved in the TwoLongs case, ie .first is the first input/output added to Builder<T> , and .second is the second. You cannot store 0 output with this (that's reserved to mean \"no output\")! NOTE: the only way to create a TwoLongs output is to add the same input to the FST twice in a row. This is how the FST maps a single input to two outputs (e.g. you cannot pass a UpToTwoPositiveInt64Outputs.TwoInt64s to Add(Int32sRef, T) . If you need more than two then use ListOfOutputs<T> , but if you only have at most 2 then this implementation will require fewer bytes as it steals one bit from each long value. NOTE: the resulting FST is not guaranteed to be minimal! See Builder<T> . NOTE: This was UpToTwoPositiveIntOutputs in Lucene - the data type (int) was wrong there - it should have been long This is a Lucene.NET EXPERIMENTAL API, use at your own risk UpToTwoPositiveInt64Outputs.TwoInt64s Holds two long outputs. NOTE: This was TwoLongs in Lucene"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.ListOfOutputs-1.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.ListOfOutputs-1.html",
    "title": "Class ListOfOutputs<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ListOfOutputs<T> Wraps another Outputs implementation and encodes one or more of its output values. You can use this when a single input may need to map to more than one output, maintaining order: pass the same input with a different output by calling Add(Int32sRef, T) multiple times. The builder will then combine the outputs using the Merge(T, T) method. The resulting FST may not be minimal when an input has more than one output, as this requires pushing all multi-output values to a final state. NOTE: the only way to create multiple outputs is to add the same input to the FST multiple times in a row. This is how the FST maps a single input to multiple outputs (e.g. you cannot pass a List<Object> to Add(Int32sRef, T) ). If your outputs are longs, and you need at most 2, then use UpToTwoPositiveInt64Outputs instead since it stores the outputs more compactly (by stealing a bit from each long value). NOTE: this cannot wrap itself (ie you cannot make an FST with List<List<Object>> outputs using this). @lucene.experimental Inheritance System.Object Outputs < System.Object > ListOfOutputs<T> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.Misc.dll Syntax public sealed class ListOfOutputs<T> : Outputs<object> Type Parameters Name Description T Constructors | Improve this Doc View Source ListOfOutputs(Outputs<T>) Declaration public ListOfOutputs(Outputs<T> outputs) Parameters Type Name Description Outputs <T> outputs Properties | Improve this Doc View Source NoOutput Declaration public override object NoOutput { get; } Property Value Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.NoOutput Methods | Improve this Doc View Source Add(Object, Object) Declaration public override object Add(object prefix, object output) Parameters Type Name Description System.Object prefix System.Object output Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Add(System.Object, System.Object) | Improve this Doc View Source AsList(Object) Declaration public IList<T> AsList(object output) Parameters Type Name Description System.Object output Returns Type Description IList <T> | Improve this Doc View Source Common(Object, Object) Declaration public override object Common(object output1, object output2) Parameters Type Name Description System.Object output1 System.Object output2 Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Common(System.Object, System.Object) | Improve this Doc View Source Merge(Object, Object) Declaration public override object Merge(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Merge(System.Object, System.Object) | Improve this Doc View Source OutputToString(Object) Declaration public override string OutputToString(object output) Parameters Type Name Description System.Object output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.OutputToString(System.Object) | Improve this Doc View Source Read(DataInput) Declaration public override object Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source ReadFinalOutput(DataInput) Declaration public override object ReadFinalOutput(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.ReadFinalOutput(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Object, Object) Declaration public override object Subtract(object object, object inc) Parameters Type Name Description System.Object object System.Object inc Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Subtract(System.Object, System.Object) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source Write(Object, DataOutput) Declaration public override void Write(object output, DataOutput out) Parameters Type Name Description System.Object output DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Write(System.Object, Lucene.Net.Store.DataOutput) | Improve this Doc View Source WriteFinalOutput(Object, DataOutput) Declaration public override void WriteFinalOutput(object output, DataOutput out) Parameters Type Name Description System.Object output DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.WriteFinalOutput(System.Object, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.UpToTwoPositiveInt64Outputs.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.UpToTwoPositiveInt64Outputs.html",
    "title": "Class UpToTwoPositiveInt64Outputs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UpToTwoPositiveInt64Outputs An FST Outputs<T> implementation where each output is one or two non-negative long values. If it's a output, is returned; else, TwoLongs. Order is preserved in the TwoLongs case, ie .first is the first input/output added to Builder<T> , and .second is the second. You cannot store 0 output with this (that's reserved to mean \"no output\")! NOTE: the only way to create a TwoLongs output is to add the same input to the FST twice in a row. This is how the FST maps a single input to two outputs (e.g. you cannot pass a UpToTwoPositiveInt64Outputs.TwoInt64s to Add(Int32sRef, T) . If you need more than two then use ListOfOutputs<T> , but if you only have at most 2 then this implementation will require fewer bytes as it steals one bit from each long value. NOTE: the resulting FST is not guaranteed to be minimal! See Builder<T> . NOTE: This was UpToTwoPositiveIntOutputs in Lucene - the data type (int) was wrong there - it should have been long This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < System.Object > UpToTwoPositiveInt64Outputs Inherited Members Outputs<Object>.WriteFinalOutput(Object, DataOutput) Outputs<Object>.ReadFinalOutput(DataInput) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.Misc.dll Syntax public sealed class UpToTwoPositiveInt64Outputs : Outputs<object> Properties | Improve this Doc View Source NoOutput Declaration public override object NoOutput { get; } Property Value Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.NoOutput Methods | Improve this Doc View Source Add(Object, Object) Declaration public override object Add(object prefix, object output) Parameters Type Name Description System.Object prefix System.Object output Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Add(System.Object, System.Object) | Improve this Doc View Source Common(Object, Object) Declaration public override object Common(object output1, object output2) Parameters Type Name Description System.Object output1 System.Object output2 Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Common(System.Object, System.Object) | Improve this Doc View Source Get(Int64) Declaration public long? Get(long v) Parameters Type Name Description System.Int64 v Returns Type Description System.Nullable < System.Int64 > | Improve this Doc View Source Get(Int64, Int64) Declaration public UpToTwoPositiveInt64Outputs.TwoInt64s Get(long first, long second) Parameters Type Name Description System.Int64 first System.Int64 second Returns Type Description UpToTwoPositiveInt64Outputs.TwoInt64s | Improve this Doc View Source GetSingleton(Boolean) Declaration public static UpToTwoPositiveInt64Outputs GetSingleton(bool doShare) Parameters Type Name Description System.Boolean doShare Returns Type Description UpToTwoPositiveInt64Outputs | Improve this Doc View Source Merge(Object, Object) Declaration public override object Merge(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Merge(System.Object, System.Object) | Improve this Doc View Source OutputToString(Object) Declaration public override string OutputToString(object output) Parameters Type Name Description System.Object output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.OutputToString(System.Object) | Improve this Doc View Source Read(DataInput) Declaration public override object Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Object, Object) Declaration public override object Subtract(object output, object inc) Parameters Type Name Description System.Object output System.Object inc Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Subtract(System.Object, System.Object) | Improve this Doc View Source Write(Object, DataOutput) Declaration public override void Write(object output, DataOutput out) Parameters Type Name Description System.Object output DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Write(System.Object, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.UpToTwoPositiveInt64Outputs.TwoInt64s.html": {
    "href": "api/Lucene.Net.Misc/Lucene.Net.Util.Fst.UpToTwoPositiveInt64Outputs.TwoInt64s.html",
    "title": "Class UpToTwoPositiveInt64Outputs.TwoInt64s | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UpToTwoPositiveInt64Outputs.TwoInt64s Holds two long outputs. NOTE: This was TwoLongs in Lucene Inheritance System.Object UpToTwoPositiveInt64Outputs.TwoInt64s Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.Misc.dll Syntax public sealed class TwoInt64s : object Constructors | Improve this Doc View Source TwoInt64s(Int64, Int64) Declaration public TwoInt64s(long first, long second) Parameters Type Name Description System.Int64 first System.Int64 second Properties | Improve this Doc View Source First Declaration public long First { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Second Declaration public long Second { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.BooleanFilter.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.BooleanFilter.html",
    "title": "Class BooleanFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanFilter A container Filter that allows Boolean composition of Filter s. Filter s are allocated into one of three logical constructs; SHOULD, MUST NOT, MUST The results Filter BitSet is constructed as follows: SHOULD Filters are OR'd together The resulting Filter is NOT'd with the NOT Filter s The resulting Filter is AND'd with the MUST Filter s Inheritance System.Object Filter BooleanFilter Implements IEnumerable < FilterClause > Inherited Members Lucene.Net.Search.Filter.NewAnonymous(Func<, , >) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class BooleanFilter : Filter, IEnumerable<FilterClause> Properties | Improve this Doc View Source Clauses Gets the list of clauses Declaration public virtual IList<FilterClause> Clauses { get; } Property Value Type Description IList < FilterClause > Methods | Improve this Doc View Source Add(FilterClause) Adds a new FilterClause to the Boolean Filter container Declaration public virtual void Add(FilterClause filterClause) Parameters Type Name Description FilterClause filterClause A FilterClause object containing a Filter and an Occur parameter | Improve this Doc View Source Add(Filter, Occur) Declaration public void Add(Filter filter, Occur occur) Parameters Type Name Description Filter filter Occur occur | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Returns the a DocIdSetIterator representing the Boolean composition of the filters that have been added. Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetEnumerator() Returns an iterator on the clauses in this query. It implements the interface to make it possible to do: for (FilterClause clause : booleanFilter) {} Declaration public IEnumerator<FilterClause> GetEnumerator() Returns Type Description IEnumerator < FilterClause > | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Prints a user-readable version of this Filter . Declaration public override string ToString() Returns Type Description System.String Implements IEnumerable<>"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.BoostingQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.BoostingQuery.html",
    "title": "Class BoostingQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostingQuery The BoostingQuery class can be used to effectively demote results that match a given query. Unlike the \"NOT\" clause, this still selects documents that contain undesirable terms, but reduces their overall score: Query balancedQuery = new BoostingQuery(positiveQuery, negativeQuery, 0.01f); In this scenario the positiveQuery contains the mandatory, desirable criteria which is used to select all matching documents, and the negativeQuery contains the undesirable elements which are simply used to lessen the scores. Documents that match the negativeQuery have their score multiplied by the supplied \"boost\" parameter, so this should be less than 1 to achieve a demoting effect This code was originally made available here: [WWW] http://marc.theaimsgroup.com/?l=lucene-user&m=108058407130459&w=2 and is documented here: http://wiki.apache.org/lucene-java/CommunityContributions Inheritance System.Object Query BoostingQuery Inherited Members Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Lucene.Net.Search.Query.ExtractTerms(ISet<>) Query.Clone() Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class BoostingQuery : Query Constructors | Improve this Doc View Source BoostingQuery(Query, Query, Single) Declaration public BoostingQuery(Query match, Query context, float boost) Parameters Type Name Description Query match Query context System.Single boost Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.ChainedFilter.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.ChainedFilter.html",
    "title": "Class ChainedFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ChainedFilter Allows multiple Filter s to be chained. Logical operations such as NOT and XOR are applied between filters. One operation can be used for all filters, or a specific operation can be declared for each filter. Order in which filters are called depends on the position of the filter in the chain. It's probably more efficient to place the most restrictive filters/least computationally-intensive filters first. Inheritance System.Object Filter ChainedFilter Inherited Members Lucene.Net.Search.Filter.NewAnonymous(Func<, , >) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class ChainedFilter : Filter Constructors | Improve this Doc View Source ChainedFilter(Filter[]) Ctor. Declaration public ChainedFilter(Filter[] chain) Parameters Type Name Description Filter [] chain The chain of filters | Improve this Doc View Source ChainedFilter(Filter[], Int32) Ctor. Declaration public ChainedFilter(Filter[] chain, int logic) Parameters Type Name Description Filter [] chain The chain of filters System.Int32 logic Logical operation to apply to ALL filters | Improve this Doc View Source ChainedFilter(Filter[], Int32[]) Ctor. Declaration public ChainedFilter(Filter[] chain, int[] logicArray) Parameters Type Name Description Filter [] chain The chain of filters System.Int32 [] logicArray Logical operations to apply between filters Fields | Improve this Doc View Source AND Declaration public const int AND = null Field Value Type Description System.Int32 | Improve this Doc View Source ANDNOT Declaration public const int ANDNOT = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT Logical operation when none is declared. Defaults to OR. Declaration public const int DEFAULT = null Field Value Type Description System.Int32 | Improve this Doc View Source OR Declaration public const int OR = null Field Value Type Description System.Int32 | Improve this Doc View Source XOR Declaration public const int XOR = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) GetDocIdSet(AtomicReaderContext, IBits) . Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.CommonTermsQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.CommonTermsQuery.html",
    "title": "Class CommonTermsQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CommonTermsQuery A query that executes high-frequency terms in a optional sub-query to prevent slow queries due to \"common\" terms like stopwords. This query builds 2 queries off the Add(Term) added terms: low-frequency terms are added to a required boolean clause and high-frequency terms are added to an optional boolean clause. The optional clause is only executed if the required \"low-frequency\" clause matches. Scores produced by this query will be slightly different than plain BooleanQuery scorer mainly due to differences in the number of leaf queries in the required boolean clause. In most cases, high-frequency terms are unlikely to significantly contribute to the document score unless at least one of the low-frequency terms are matched. This query can improve query execution times significantly if applicable. CommonTermsQuery has several advantages over stopword filtering at index or query time since a term can be \"classified\" based on the actual document frequency in the index and can prevent slow queries even across domains without specialized stopword files. Note: if the query only contains high-frequency terms the query is rewritten into a plain conjunction query ie. all high-frequency terms need to match in order to match a document. Collection initializer note: To create and populate a CommonTermsQuery in a single statement, you can use the following example as a guide: var query = new CommonTermsQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Inheritance System.Object Query CommonTermsQuery Implements IEnumerable < Term > Inherited Members Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Lucene.Net.Search.Query.ExtractTerms(ISet<>) Query.Clone() Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class CommonTermsQuery : Query, IEnumerable<Term> Constructors | Improve this Doc View Source CommonTermsQuery(Occur, Occur, Single) Creates a new CommonTermsQuery Declaration public CommonTermsQuery(Occur highFreqOccur, Occur lowFreqOccur, float maxTermFrequency) Parameters Type Name Description Occur highFreqOccur Occur used for high frequency terms Occur lowFreqOccur Occur used for low frequency terms System.Single maxTermFrequency a value in [0..1) (or absolute number >=1) representing the maximum threshold of a terms document frequency to be considered a low frequency term. | Improve this Doc View Source CommonTermsQuery(Occur, Occur, Single, Boolean) Creates a new CommonTermsQuery Declaration public CommonTermsQuery(Occur highFreqOccur, Occur lowFreqOccur, float maxTermFrequency, bool disableCoord) Parameters Type Name Description Occur highFreqOccur Occur used for high frequency terms Occur lowFreqOccur Occur used for low frequency terms System.Single maxTermFrequency a value in [0..1) (or absolute number >=1) representing the maximum threshold of a terms document frequency to be considered a low frequency term. System.Boolean disableCoord disables in scoring for the low / high frequency sub-queries Fields | Improve this Doc View Source m_disableCoord Declaration protected readonly bool m_disableCoord Field Value Type Description System.Boolean | Improve this Doc View Source m_highFreqBoost Declaration protected float m_highFreqBoost Field Value Type Description System.Single | Improve this Doc View Source m_highFreqMinNrShouldMatch Declaration protected float m_highFreqMinNrShouldMatch Field Value Type Description System.Single | Improve this Doc View Source m_highFreqOccur Declaration protected readonly Occur m_highFreqOccur Field Value Type Description Occur | Improve this Doc View Source m_lowFreqBoost Declaration protected float m_lowFreqBoost Field Value Type Description System.Single | Improve this Doc View Source m_lowFreqMinNrShouldMatch Declaration protected float m_lowFreqMinNrShouldMatch Field Value Type Description System.Single | Improve this Doc View Source m_lowFreqOccur Declaration protected readonly Occur m_lowFreqOccur Field Value Type Description Occur | Improve this Doc View Source m_maxTermFrequency Declaration protected readonly float m_maxTermFrequency Field Value Type Description System.Single | Improve this Doc View Source m_terms Declaration protected readonly IList<Term> m_terms Field Value Type Description IList < Term > Properties | Improve this Doc View Source HighFreqMinimumNumberShouldMatch Gets or Sets a minimum number of the high frequent optional BooleanClauses which must be satisfied in order to produce a match on the low frequency terms query part. This method accepts a float value in the range [0..1) as a fraction of the actual query terms in the low frequent clause or a number >=1 as an absolut number of clauses that need to match. By default no optional clauses are necessary for a match (unless there are no required clauses). If this method is used, then the specified number of clauses is required. Declaration public virtual float HighFreqMinimumNumberShouldMatch { get; set; } Property Value Type Description System.Single | Improve this Doc View Source IsCoordDisabled Returns true iff is disabled in scoring for the high and low frequency query instance. The top level query will always disable coords. Declaration public virtual bool IsCoordDisabled { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowFreqMinimumNumberShouldMatch Gets or Sets a minimum number of the low frequent optional BooleanClauses which must be satisfied in order to produce a match on the low frequency terms query part. This method accepts a float value in the range [0..1) as a fraction of the actual query terms in the low frequent clause or a number >=1 as an absolut number of clauses that need to match. By default no optional clauses are necessary for a match (unless there are no required clauses). If this method is used, then the specified number of clauses is required. Declaration public virtual float LowFreqMinimumNumberShouldMatch { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Add(Term) Adds a term to the CommonTermsQuery Declaration public virtual void Add(Term term) Parameters Type Name Description Term term the term to add | Improve this Doc View Source BuildQuery(Int32, TermContext[], Term[]) Declaration protected virtual Query BuildQuery(int maxDoc, TermContext[] contextArray, Term[] queryTerms) Parameters Type Name Description System.Int32 maxDoc TermContext [] contextArray Term [] queryTerms Returns Type Description Query | Improve this Doc View Source CalcHighFreqMinimumNumberShouldMatch(Int32) Declaration protected virtual int CalcHighFreqMinimumNumberShouldMatch(int numOptional) Parameters Type Name Description System.Int32 numOptional Returns Type Description System.Int32 | Improve this Doc View Source CalcLowFreqMinimumNumberShouldMatch(Int32) Declaration protected virtual int CalcLowFreqMinimumNumberShouldMatch(int numOptional) Parameters Type Name Description System.Int32 numOptional Returns Type Description System.Int32 | Improve this Doc View Source CollectTermContext(IndexReader, IList<AtomicReaderContext>, TermContext[], Term[]) Declaration public virtual void CollectTermContext(IndexReader reader, IList<AtomicReaderContext> leaves, TermContext[] contextArray, Term[] queryTerms) Parameters Type Name Description IndexReader reader IList < AtomicReaderContext > leaves TermContext [] contextArray Term [] queryTerms | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the m_terms collection. Declaration public IEnumerator<Term> GetEnumerator() Returns Type Description IEnumerator < Term > An enumerator that can be used to iterate through the m_terms collection. | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source NewTermQuery(Term, TermContext) Builds a new TermQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual Query NewTermQuery(Term term, TermContext context) Parameters Type Name Description Term term term TermContext context the TermContext to be used to create the low level term query. Can be null . Returns Type Description Query new TermQuery instance | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Implements IEnumerable<>"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.CustomScoreProvider.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.CustomScoreProvider.html",
    "title": "Class CustomScoreProvider | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CustomScoreProvider An instance of this subclass should be returned by GetCustomScoreProvider(AtomicReaderContext) , if you want to modify the custom score calculation of a CustomScoreQuery . Since Lucene 2.9, queries operate on each segment of an index separately, so the protected m_context field can be used to resolve doc IDs, as the supplied doc ID is per-segment and without knowledge of the IndexReader you cannot access the document or IFieldCache . @lucene.experimental @since 2.9.2 Inheritance System.Object CustomScoreProvider Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class CustomScoreProvider : object Constructors | Improve this Doc View Source CustomScoreProvider(AtomicReaderContext) Creates a new instance of the provider class for the given IndexReader . Declaration public CustomScoreProvider(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Fields | Improve this Doc View Source m_context Declaration protected readonly AtomicReaderContext m_context Field Value Type Description AtomicReaderContext Methods | Improve this Doc View Source CustomExplain(Int32, Explanation, Explanation) Explain the custom score. Whenever overriding CustomScore(Int32, Single, Single) , this method should also be overridden to provide the correct explanation for the part of the custom scoring. Declaration public virtual Explanation CustomExplain(int doc, Explanation subQueryExpl, Explanation valSrcExpl) Parameters Type Name Description System.Int32 doc doc being explained. Explanation subQueryExpl explanation for the sub-query part. Explanation valSrcExpl explanation for the value source part. Returns Type Description Explanation an explanation for the custom score | Improve this Doc View Source CustomExplain(Int32, Explanation, Explanation[]) Explain the custom score. Whenever overriding CustomScore(Int32, Single, Single[]) , this method should also be overridden to provide the correct explanation for the part of the custom scoring. Declaration public virtual Explanation CustomExplain(int doc, Explanation subQueryExpl, Explanation[] valSrcExpls) Parameters Type Name Description System.Int32 doc doc being explained. Explanation subQueryExpl explanation for the sub-query part. Explanation [] valSrcExpls explanation for the value source part. Returns Type Description Explanation an explanation for the custom score | Improve this Doc View Source CustomScore(Int32, Single, Single) Compute a custom score by the subQueryScore and the FunctionQuery score. Subclasses can override this method to modify the custom score. If your custom scoring is different than the default herein you should override at least one of the two CustomScore(Int32, Single, Single) methods. If the number of FunctionQuery s is always < 2 it is sufficient to override this CustomScore(Int32, Single, Single) method, which is simpler. The default computation herein is a multiplication of the two scores: ModifiedScore = subQueryScore * valSrcScore Declaration public virtual float CustomScore(int doc, float subQueryScore, float valSrcScore) Parameters Type Name Description System.Int32 doc id of scored doc. System.Single subQueryScore score of that doc by the subQuery. System.Single valSrcScore score of that doc by the FunctionQuery . Returns Type Description System.Single custom score. | Improve this Doc View Source CustomScore(Int32, Single, Single[]) Compute a custom score by the subQuery score and a number of FunctionQuery scores. Subclasses can override this method to modify the custom score. If your custom scoring is different than the default herein you should override at least one of the two CustomScore(Int32, Single, Single) methods. If the number of FunctionQuery s is always < 2 it is sufficient to override the other CustomScore(Int32, Single, Single) method, which is simpler. The default computation herein is a multiplication of given scores: ModifiedScore = valSrcScore * valSrcScores[0] * valSrcScores[1] * ... Declaration public virtual float CustomScore(int doc, float subQueryScore, float[] valSrcScores) Parameters Type Name Description System.Int32 doc id of scored doc. System.Single subQueryScore score of that doc by the subQuery. System.Single [] valSrcScores scores of that doc by the FunctionQuery . Returns Type Description System.Single custom score."
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.CustomScoreQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.CustomScoreQuery.html",
    "title": "Class CustomScoreQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CustomScoreQuery Query that sets document score as a programmatic function of several (sub) scores: the score of its subQuery (any query) (optional) the score of its FunctionQuery (or queries). Subclasses can modify the computation by overriding GetCustomScoreProvider(AtomicReaderContext) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Query CustomScoreQuery Inherited Members Query.Boost Query.ToString() Lucene.Net.Search.Query.ExtractTerms(ISet<>) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class CustomScoreQuery : Query Constructors | Improve this Doc View Source CustomScoreQuery(Query) Create a CustomScoreQuery over input subQuery . Declaration public CustomScoreQuery(Query subQuery) Parameters Type Name Description Query subQuery the sub query whose scored is being customized. Must not be null . | Improve this Doc View Source CustomScoreQuery(Query, FunctionQuery) Create a CustomScoreQuery over input subQuery and a FunctionQuery . Declaration public CustomScoreQuery(Query subQuery, FunctionQuery scoringQuery) Parameters Type Name Description Query subQuery the sub query whose score is being customized. Must not be null . FunctionQuery scoringQuery a value source query whose scores are used in the custom score computation. This parameter is optional - it can be null. | Improve this Doc View Source CustomScoreQuery(Query, FunctionQuery[]) Create a CustomScoreQuery over input subQuery and a FunctionQuery . Declaration public CustomScoreQuery(Query subQuery, params FunctionQuery[] scoringQueries) Parameters Type Name Description Query subQuery the sub query whose score is being customized. Must not be null . FunctionQuery [] scoringQueries value source queries whose scores are used in the custom score computation. This parameter is optional - it can be null or even an empty array. Properties | Improve this Doc View Source IsStrict Checks if this is strict custom scoring. In strict custom scoring, the ValueSource part does not participate in weight normalization. This may be useful when one wants full control over how scores are modified, and does not care about normalizing by the ValueSource part. One particular case where this is useful if for testing this query. Note: only has effect when the ValueSource part is not null . Declaration public virtual bool IsStrict { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Name A short name of this query, used in ToString(String) . Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source ScoringQueries The scoring queries that only affect the score of CustomScoreQuery . Declaration public virtual Query[] ScoringQueries { get; } Property Value Type Description Query [] | Improve this Doc View Source SubQuery The sub-query that CustomScoreQuery wraps, affecting both the score and which documents match. Declaration public virtual Query SubQuery { get; } Property Value Type Description Query Methods | Improve this Doc View Source Clone() Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms | Improve this Doc View Source GetCustomScoreProvider(AtomicReaderContext) Returns a CustomScoreProvider that calculates the custom scores for the given IndexReader . The default implementation returns a default implementation as specified in the docs of CustomScoreProvider . @since 2.9.2 Declaration protected virtual CustomScoreProvider GetCustomScoreProvider(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description CustomScoreProvider | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.FilterClause.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.FilterClause.html",
    "title": "Class FilterClause | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterClause A Filter that wrapped with an indication of how that filter is used when composed with another filter. (Follows the boolean logic in BooleanClause for composition of queries.) Inheritance System.Object FilterClause Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public sealed class FilterClause : object Constructors | Improve this Doc View Source FilterClause(Filter, Occur) Create a new FilterClause Declaration public FilterClause(Filter filter, Occur occur) Parameters Type Name Description Filter filter A Filter object containing a BitSet Occur occur A parameter implementation indicating SHOULD, MUST or MUST NOT Properties | Improve this Doc View Source Filter Returns this FilterClause 's filter Declaration public Filter Filter { get; } Property Value Type Description Filter A Filter object | Improve this Doc View Source Occur Returns this FilterClause 's occur parameter Declaration public Occur Occur { get; } Property Value Type Description Occur An Occur object Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.BoostedQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.BoostedQuery.html",
    "title": "Class BoostedQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostedQuery Query that is boosted by a ValueSource Inheritance System.Object Query BoostedQuery Inherited Members Query.Boost Query.ToString() Lucene.Net.Search.Query.ExtractTerms(ISet<>) Query.Clone() Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public class BoostedQuery : Query Constructors | Improve this Doc View Source BoostedQuery(Query, ValueSource) Declaration public BoostedQuery(Query subQuery, ValueSource boostVal) Parameters Type Name Description Query subQuery ValueSource boostVal Properties | Improve this Doc View Source Query Declaration public virtual Query Query { get; } Property Value Type Description Query | Improve this Doc View Source ValueSource Declaration public virtual ValueSource ValueSource { get; } Property Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.BoolDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.BoolDocValues.html",
    "title": "Class BoolDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoolDocValues Abstract FunctionValues implementation which supports retrieving values. Implementations can control how the values are loaded through BoolVal(Int32) Inheritance System.Object FunctionValues BoolDocValues Inherited Members FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class BoolDocValues : FunctionValues Constructors | Improve this Doc View Source BoolDocValues(ValueSource) Declaration public BoolDocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source BoolVal(Int32) Declaration public abstract override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DocTermsIndexDocValues.DocTermsIndexException.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DocTermsIndexDocValues.DocTermsIndexException.html",
    "title": "Class DocTermsIndexDocValues.DocTermsIndexException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocTermsIndexDocValues.DocTermsIndexException Custom to be thrown when the DocTermsIndex for a field cannot be generated Inheritance System.Object DocTermsIndexDocValues.DocTermsIndexException Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public sealed class DocTermsIndexException : Exception Constructors | Improve this Doc View Source DocTermsIndexException(String, Exception) Declaration public DocTermsIndexException(string fieldName, Exception cause) Parameters Type Name Description System.String fieldName Exception cause"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DocTermsIndexDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DocTermsIndexDocValues.html",
    "title": "Class DocTermsIndexDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocTermsIndexDocValues Serves as base class for FunctionValues based on DocTermsIndex. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object FunctionValues DocTermsIndexDocValues Inherited Members FunctionValues.ByteVal(Int32) FunctionValues.Int16Val(Int32) FunctionValues.SingleVal(Int32) FunctionValues.Int32Val(Int32) FunctionValues.Int64Val(Int32) FunctionValues.DoubleVal(Int32) FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class DocTermsIndexDocValues : FunctionValues Constructors | Improve this Doc View Source DocTermsIndexDocValues(ValueSource, AtomicReaderContext, String) Declaration public DocTermsIndexDocValues(ValueSource vs, AtomicReaderContext context, string field) Parameters Type Name Description ValueSource vs AtomicReaderContext context System.String field Fields | Improve this Doc View Source m_spare Declaration protected readonly BytesRef m_spare Field Value Type Description BytesRef | Improve this Doc View Source m_spareChars Declaration protected readonly CharsRef m_spareChars Field Value Type Description CharsRef | Improve this Doc View Source m_termsIndex Declaration protected readonly SortedDocValues m_termsIndex Field Value Type Description SortedDocValues | Improve this Doc View Source m_val Declaration protected readonly MutableValueStr m_val Field Value Type Description MutableValueStr | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Properties | Improve this Doc View Source NumOrd Declaration public override int NumOrd { get; } Property Value Type Description System.Int32 Overrides FunctionValues.NumOrd Methods | Improve this Doc View Source BoolVal(Int32) Declaration public override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source BytesVal(Int32, BytesRef) Declaration public override bool BytesVal(int doc, BytesRef target) Parameters Type Name Description System.Int32 doc BytesRef target Returns Type Description System.Boolean Overrides FunctionValues.BytesVal(Int32, BytesRef) | Improve this Doc View Source Exists(Int32) Declaration public override bool Exists(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.Exists(Int32) | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public override ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer Overrides FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source ObjectVal(Int32) Declaration public abstract override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source OrdVal(Int32) Declaration public override int OrdVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.OrdVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32) | Improve this Doc View Source ToTerm(String) Declaration protected abstract string ToTerm(string readableValue) Parameters Type Name Description System.String readableValue Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DoubleDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DoubleDocValues.html",
    "title": "Class DoubleDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleDocValues Abstract FunctionValues implementation which supports retrieving values. Implementations can control how the values are loaded through DoubleVal(Int32) Inheritance System.Object FunctionValues DoubleDocValues Inherited Members FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class DoubleDocValues : FunctionValues Constructors | Improve this Doc View Source DoubleDocValues(ValueSource) Declaration public DoubleDocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source BoolVal(Int32) Declaration public override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public abstract override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public override ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer Overrides FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.html",
    "title": "Namespace Lucene.Net.Queries.Function.DocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Queries.Function.DocValues <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> FunctionValues for different data types. Classes BoolDocValues Abstract FunctionValues implementation which supports retrieving values. Implementations can control how the values are loaded through BoolVal(Int32) DocTermsIndexDocValues Serves as base class for FunctionValues based on DocTermsIndex. This is a Lucene.NET INTERNAL API, use at your own risk DocTermsIndexDocValues.DocTermsIndexException Custom to be thrown when the DocTermsIndex for a field cannot be generated DoubleDocValues Abstract FunctionValues implementation which supports retrieving values. Implementations can control how the values are loaded through DoubleVal(Int32) Int32DocValues Abstract FunctionValues implementation which supports retrieving values. Implementations can control how the values are loaded through Int32Val(Int32) NOTE: This was IntDocValues in Lucene Int64DocValues Abstract FunctionValues implementation which supports retrieving values. Implementations can control how the values are loaded through Int64Val(Int32) NOTE: This was LongDocValues in Lucene SingleDocValues Abstract FunctionValues implementation which supports retrieving values. Implementations can control how the values are loaded through SingleVal(Int32) NOTE: This was FloatDocValues in Lucene StrDocValues Abstract FunctionValues implementation which supports retrieving values. Implementations can control how the values are loaded through StrVal(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.Int32DocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.Int32DocValues.html",
    "title": "Class Int32DocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32DocValues Abstract FunctionValues implementation which supports retrieving values. Implementations can control how the values are loaded through Int32Val(Int32) NOTE: This was IntDocValues in Lucene Inheritance System.Object FunctionValues Int32DocValues Inherited Members FunctionValues.BoolVal(Int32) FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class Int32DocValues : FunctionValues Constructors | Improve this Doc View Source Int32DocValues(ValueSource) Declaration public Int32DocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public override ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer Overrides FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public abstract override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.Int64DocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.Int64DocValues.html",
    "title": "Class Int64DocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64DocValues Abstract FunctionValues implementation which supports retrieving values. Implementations can control how the values are loaded through Int64Val(Int32) NOTE: This was LongDocValues in Lucene Inheritance System.Object FunctionValues Int64DocValues Inherited Members FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class Int64DocValues : FunctionValues Constructors | Improve this Doc View Source Int64DocValues(ValueSource) Declaration public Int64DocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source BoolVal(Int32) Declaration public override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source ExternalToInt64(String) NOTE: This was externalToLong() in Lucene Declaration protected virtual long ExternalToInt64(string extVal) Parameters Type Name Description System.String extVal Returns Type Description System.Int64 | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public override ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer Overrides FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) Declaration public abstract override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.SingleDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.SingleDocValues.html",
    "title": "Class SingleDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleDocValues Abstract FunctionValues implementation which supports retrieving values. Implementations can control how the values are loaded through SingleVal(Int32) NOTE: This was FloatDocValues in Lucene Inheritance System.Object FunctionValues SingleDocValues Inherited Members FunctionValues.BoolVal(Int32) FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class SingleDocValues : FunctionValues Constructors | Improve this Doc View Source SingleDocValues(ValueSource) Declaration public SingleDocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public abstract override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.StrDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.StrDocValues.html",
    "title": "Class StrDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StrDocValues Abstract FunctionValues implementation which supports retrieving values. Implementations can control how the values are loaded through StrVal(Int32) Inheritance System.Object FunctionValues StrDocValues Inherited Members FunctionValues.ByteVal(Int32) FunctionValues.Int16Val(Int32) FunctionValues.SingleVal(Int32) FunctionValues.Int32Val(Int32) FunctionValues.Int64Val(Int32) FunctionValues.DoubleVal(Int32) FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class StrDocValues : FunctionValues Constructors | Improve this Doc View Source StrDocValues(ValueSource) Declaration public StrDocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source BoolVal(Int32) Declaration public override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public abstract override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.AllScorer.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.AllScorer.html",
    "title": "Class FunctionQuery.AllScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionQuery.AllScorer Inheritance System.Object DocIdSetIterator DocsEnum Scorer FunctionQuery.AllScorer Inherited Members Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax protected class AllScorer : Scorer Constructors | Improve this Doc View Source AllScorer(FunctionQuery, AtomicReaderContext, IBits, FunctionQuery.FunctionWeight, Single) Declaration public AllScorer(FunctionQuery outerInstance, AtomicReaderContext context, IBits acceptDocs, FunctionQuery.FunctionWeight w, float qWeight) Parameters Type Name Description FunctionQuery outerInstance AtomicReaderContext context IBits acceptDocs FunctionQuery.FunctionWeight w System.Single qWeight Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 | Improve this Doc View Source Explain(Int32) Declaration public virtual Explanation Explain(int d) Parameters Type Name Description System.Int32 d Returns Type Description Explanation | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.FunctionWeight.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.FunctionWeight.html",
    "title": "Class FunctionQuery.FunctionWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionQuery.FunctionWeight Inheritance System.Object Weight FunctionQuery.FunctionWeight Inherited Members Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax protected class FunctionWeight : Weight Constructors | Improve this Doc View Source FunctionWeight(FunctionQuery, IndexSearcher) Declaration public FunctionWeight(FunctionQuery outerInstance, IndexSearcher searcher) Parameters Type Name Description FunctionQuery outerInstance IndexSearcher searcher Fields | Improve this Doc View Source m_context Declaration protected readonly IDictionary m_context Field Value Type Description IDictionary | Improve this Doc View Source m_queryNorm Declaration protected float m_queryNorm Field Value Type Description System.Single | Improve this Doc View Source m_queryWeight Declaration protected float m_queryWeight Field Value Type Description System.Single | Improve this Doc View Source m_searcher Declaration protected readonly IndexSearcher m_searcher Field Value Type Description IndexSearcher Properties | Improve this Doc View Source Query Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext ctx, int doc) Parameters Type Name Description AtomicReaderContext ctx System.Int32 doc Returns Type Description Explanation | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext ctx, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext ctx IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Declaration public override void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.html",
    "title": "Class FunctionQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionQuery Returns a score for each document based on a ValueSource , often some function of the value of a field. Note: This API is experimental and may change in non backward-compatible ways in the future Inheritance System.Object Query FunctionQuery Inherited Members Query.Boost Query.ToString() Lucene.Net.Search.Query.ExtractTerms(ISet<>) Query.Clone() Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public class FunctionQuery : Query Constructors | Improve this Doc View Source FunctionQuery(ValueSource) Declaration public FunctionQuery(ValueSource func) Parameters Type Name Description ValueSource func defines the function to be used for scoring Properties | Improve this Doc View Source ValueSource Declaration public virtual ValueSource ValueSource { get; } Property Value Type Description ValueSource The associated ValueSource Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionValues.html",
    "title": "Class FunctionValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionValues Represents field values as different types. Normally created via a ValueSource for a particular field and reader. Inheritance System.Object FunctionValues BoolDocValues DocTermsIndexDocValues DoubleDocValues Int32DocValues Int64DocValues SingleDocValues StrDocValues MultiFunction.Values Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public abstract class FunctionValues : object Properties | Improve this Doc View Source NumOrd Declaration public virtual int NumOrd { get; } Property Value Type Description System.Int32 the number of unique sort ordinals this instance has Methods | Improve this Doc View Source BoolVal(Int32) Declaration public virtual bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean | Improve this Doc View Source BytesVal(Int32, BytesRef) returns the bytes representation of the str val - TODO: should this return the indexed raw bytes not? Declaration public virtual bool BytesVal(int doc, BytesRef target) Parameters Type Name Description System.Int32 doc BytesRef target Returns Type Description System.Boolean | Improve this Doc View Source ByteVal(Int32) Declaration public virtual byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte | Improve this Doc View Source ByteVal(Int32, Byte[]) Declaration public virtual void ByteVal(int doc, byte[] vals) Parameters Type Name Description System.Int32 doc System.Byte [] vals | Improve this Doc View Source DoubleVal(Int32) Declaration public virtual double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double | Improve this Doc View Source DoubleVal(Int32, Double[]) Declaration public virtual void DoubleVal(int doc, double[] vals) Parameters Type Name Description System.Int32 doc System.Double [] vals | Improve this Doc View Source Exists(Int32) Returns true if there is a value for this document Declaration public virtual bool Exists(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean | Improve this Doc View Source Explain(Int32) Declaration public virtual Explanation Explain(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description Explanation | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public virtual ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer | Improve this Doc View Source GetScorer(IndexReader) Declaration public virtual ValueSourceScorer GetScorer(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description ValueSourceScorer | Improve this Doc View Source GetValueFiller() @lucene.experimental Declaration public virtual FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public virtual short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 | Improve this Doc View Source Int16Val(Int32, Int16[]) NOTE: This was shortVal() in Lucene Declaration public virtual void Int16Val(int doc, short[] vals) Parameters Type Name Description System.Int32 doc System.Int16 [] vals | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public virtual int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 | Improve this Doc View Source Int32Val(Int32, Int32[]) NOTE: This was intVal() in Lucene Declaration public virtual void Int32Val(int doc, int[] vals) Parameters Type Name Description System.Int32 doc System.Int32 [] vals | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public virtual long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 | Improve this Doc View Source Int64Val(Int32, Int64[]) NOTE: This was longVal() in Lucene Declaration public virtual void Int64Val(int doc, long[] vals) Parameters Type Name Description System.Int32 doc System.Int64 [] vals | Improve this Doc View Source ObjectVal(Int32) Native representation of the value Declaration public virtual object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object | Improve this Doc View Source OrdVal(Int32) Declaration public virtual int OrdVal(int doc) Parameters Type Name Description System.Int32 doc The doc to retrieve to sort ordinal for Returns Type Description System.Int32 the sort ordinal for the specified doc TODO: Maybe we can just use intVal for this... | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public virtual float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single | Improve this Doc View Source SingleVal(Int32, Single[]) NOTE: This was floatVal() in Lucene Declaration public virtual void SingleVal(int doc, float[] vals) Parameters Type Name Description System.Int32 doc System.Single [] vals | Improve this Doc View Source StrVal(Int32) Declaration public virtual string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String | Improve this Doc View Source StrVal(Int32, String[]) Declaration public virtual void StrVal(int doc, string[] vals) Parameters Type Name Description System.Int32 doc System.String [] vals | Improve this Doc View Source ToString(Int32) Declaration public abstract string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionValues.ValueFiller.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionValues.ValueFiller.html",
    "title": "Class FunctionValues.ValueFiller | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionValues.ValueFiller Abstraction of the logic required to fill the value of a specified doc into a reusable MutableValue . Implementations of FunctionValues are encouraged to define their own implementations of FunctionValues.ValueFiller if their value is not a . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FunctionValues.ValueFiller Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public abstract class ValueFiller : object Properties | Improve this Doc View Source Value MutableValue will be reused across calls Declaration public abstract MutableValue Value { get; } Property Value Type Description MutableValue Methods | Improve this Doc View Source FillValue(Int32) MutableValue will be reused across calls. Returns true if the value exists. Declaration public abstract void FillValue(int doc) Parameters Type Name Description System.Int32 doc"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.html",
    "title": "Namespace Lucene.Net.Queries.Function | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Queries.Function <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Queries that compute score based upon a function Classes BoostedQuery Query that is boosted by a ValueSource FunctionQuery Returns a score for each document based on a ValueSource , often some function of the value of a field. Note: This API is experimental and may change in non backward-compatible ways in the future FunctionQuery.AllScorer FunctionQuery.FunctionWeight FunctionValues Represents field values as different types. Normally created via a ValueSource for a particular field and reader. FunctionValues.ValueFiller Abstraction of the logic required to fill the value of a specified doc into a reusable MutableValue . Implementations of FunctionValues are encouraged to define their own implementations of FunctionValues.ValueFiller if their value is not a . This is a Lucene.NET EXPERIMENTAL API, use at your own risk ValueSource Instantiates FunctionValues for a particular reader. Often used when creating a FunctionQuery . ValueSourceScorer Scorer which returns the result of SingleVal(Int32) as the score for a document."
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSource.html",
    "title": "Class ValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ValueSource Instantiates FunctionValues for a particular reader. Often used when creating a FunctionQuery . Inheritance System.Object ValueSource TaxonomyFacetSumValueSource.ScoreValueSource BoolFunction ConstNumberSource DocFreqValueSource DualSingleFunction FieldCacheSource LinearSingleFunction LiteralValueSource MaxDocValueSource MultiFunction MultiSingleFunction MultiValueSource NormValueSource NumDocsValueSource OrdFieldSource QueryValueSource RangeMapSingleFunction ReciprocalSingleFunction ReverseOrdFieldSource ScaleSingleFunction SingularFunction SumTotalTermFreqValueSource TotalTermFreqValueSource Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public abstract class ValueSource : object Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Implementations should propagate CreateWeight to sub-ValueSources which can optionally store weight info in the context. The context object will be passed to GetValues() where this info can be retrieved. Declaration public virtual void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher | Improve this Doc View Source Equals(Object) Declaration public abstract override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetDescription() description of field, used in Explain() Declaration public abstract string GetDescription() Returns Type Description System.String | Improve this Doc View Source GetHashCode() Declaration public abstract override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source GetSortField(Boolean) EXPERIMENTAL: This method is subject to change. Get the SortField for this ValueSource . Uses the GetValues(IDictionary, AtomicReaderContext) to populate the SortField . Declaration public virtual SortField GetSortField(bool reverse) Parameters Type Name Description System.Boolean reverse true if this is a reverse sort. Returns Type Description SortField The SortField for the ValueSource | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Gets the values for this reader and the context that was previously passed to CreateWeight(IDictionary, IndexSearcher) Declaration public abstract FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues | Improve this Doc View Source NewContext(IndexSearcher) Returns a new non-threadsafe context map. Declaration public static IDictionary NewContext(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description IDictionary | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.BoolFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.BoolFunction.html",
    "title": "Class BoolFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoolFunction Abstract parent class for those ValueSource implementations which apply boolean logic to their values Inheritance System.Object ValueSource BoolFunction IfFunction MultiBoolFunction SimpleBoolFunction Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.Equals(Object) ValueSource.GetHashCode() ValueSource.GetDescription() ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class BoolFunction : ValueSource"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ByteFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ByteFieldSource.html",
    "title": "Class ByteFieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteFieldSource Obtains field values from the FieldCache using and makes those values available as other numeric types, casting as needed. * Inheritance System.Object ValueSource FieldCacheSource ByteFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ByteFieldSource : FieldCacheSource Constructors | Improve this Doc View Source ByteFieldSource(String) Declaration public ByteFieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source ByteFieldSource(String, FieldCache.IByteParser) Declaration public ByteFieldSource(string field, FieldCache.IByteParser parser) Parameters Type Name Description System.String field FieldCache.IByteParser parser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.BytesRefFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.BytesRefFieldSource.html",
    "title": "Class BytesRefFieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefFieldSource An implementation for retrieving FunctionValues instances for based fields. Inheritance System.Object ValueSource FieldCacheSource BytesRefFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field FieldCacheSource.GetDescription() FieldCacheSource.Equals(Object) FieldCacheSource.GetHashCode() ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class BytesRefFieldSource : FieldCacheSource Constructors | Improve this Doc View Source BytesRefFieldSource(String) Declaration public BytesRefFieldSource(string field) Parameters Type Name Description System.String field Methods | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ConstNumberSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ConstNumberSource.html",
    "title": "Class ConstNumberSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstNumberSource ConstNumberSource is the base class for all constant numbers Inheritance System.Object ValueSource ConstNumberSource ConstValueSource DoubleConstValueSource Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.Equals(Object) ValueSource.GetHashCode() ValueSource.GetDescription() ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class ConstNumberSource : ValueSource Properties | Improve this Doc View Source Bool Declaration public abstract bool Bool { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Double Declaration public abstract double Double { get; } Property Value Type Description System.Double | Improve this Doc View Source Int32 NOTE: This was getInt() in Lucene Declaration public abstract int Int32 { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64 NOTE: This was getLong() in Lucene Declaration public abstract long Int64 { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Single NOTE: This was getFloat() in Lucene Declaration public abstract float Single { get; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ConstValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ConstValueSource.html",
    "title": "Class ConstValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstValueSource ConstValueSource returns a constant for all documents Inheritance System.Object ValueSource ConstNumberSource ConstValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ConstValueSource : ConstNumberSource Constructors | Improve this Doc View Source ConstValueSource(Single) Declaration public ConstValueSource(float constant) Parameters Type Name Description System.Single constant Properties | Improve this Doc View Source Bool Declaration public override bool Bool { get; } Property Value Type Description System.Boolean Overrides ConstNumberSource.Bool | Improve this Doc View Source Double Declaration public override double Double { get; } Property Value Type Description System.Double Overrides ConstNumberSource.Double | Improve this Doc View Source Int32 NOTE: This was getInt() in Lucene Declaration public override int Int32 { get; } Property Value Type Description System.Int32 Overrides ConstNumberSource.Int32 | Improve this Doc View Source Int64 NOTE: This was getLong() in Lucene Declaration public override long Int64 { get; } Property Value Type Description System.Int64 Overrides ConstNumberSource.Int64 | Improve this Doc View Source Single NOTE: This was getFloat() in Lucene Declaration public override float Single { get; } Property Value Type Description System.Single Overrides ConstNumberSource.Single Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DefFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DefFunction.html",
    "title": "Class DefFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefFunction ValueSource implementation which only returns the values from the provided ValueSource s which are available for a particular docId. Consequently, when combined with a ConstValueSource , this function serves as a way to return a default value when the values for a field are unavailable. Inheritance System.Object ValueSource MultiFunction DefFunction Inherited Members MultiFunction.m_sources MultiFunction.GetDescription() MultiFunction.GetDescription(String, IList<ValueSource>) MultiFunction.ValsArr(IList<ValueSource>, IDictionary, AtomicReaderContext) MultiFunction.ToString(String, FunctionValues[], Int32) MultiFunction.CreateWeight(IDictionary, IndexSearcher) MultiFunction.GetHashCode() MultiFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DefFunction : MultiFunction Constructors | Improve this Doc View Source DefFunction(IList<ValueSource>) Declaration public DefFunction(IList<ValueSource> sources) Parameters Type Name Description IList < ValueSource > sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiFunction.Name Methods | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary fcontext, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary fcontext AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DivSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DivSingleFunction.html",
    "title": "Class DivSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DivSingleFunction Function to divide \"a\" by \"b\" NOTE: This was DivFloatFunction in Lucene Inheritance System.Object ValueSource DualSingleFunction DivSingleFunction Inherited Members DualSingleFunction.m_a DualSingleFunction.m_b DualSingleFunction.GetDescription() DualSingleFunction.GetValues(IDictionary, AtomicReaderContext) DualSingleFunction.CreateWeight(IDictionary, IndexSearcher) DualSingleFunction.GetHashCode() DualSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DivSingleFunction : DualSingleFunction Constructors | Improve this Doc View Source DivSingleFunction(ValueSource, ValueSource) Declaration public DivSingleFunction(ValueSource a, ValueSource b) Parameters Type Name Description ValueSource a the numerator. ValueSource b the denominator. Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides DualSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues, FunctionValues) Declaration protected override float Func(int doc, FunctionValues aVals, FunctionValues bVals) Parameters Type Name Description System.Int32 doc FunctionValues aVals FunctionValues bVals Returns Type Description System.Single Overrides DualSingleFunction.Func(Int32, FunctionValues, FunctionValues)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DocFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DocFreqValueSource.html",
    "title": "Class DocFreqValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocFreqValueSource DocFreqValueSource returns the number of documents containing the term. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource DocFreqValueSource IDFValueSource TermFreqValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DocFreqValueSource : ValueSource Constructors | Improve this Doc View Source DocFreqValueSource(String, String, String, BytesRef) Declaration public DocFreqValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Fields | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_indexedBytes Declaration protected readonly BytesRef m_indexedBytes Field Value Type Description BytesRef | Improve this Doc View Source m_indexedField Declaration protected readonly string m_indexedField Field Value Type Description System.String | Improve this Doc View Source m_val Declaration protected readonly string m_val Field Value Type Description System.String Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DoubleConstValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DoubleConstValueSource.html",
    "title": "Class DoubleConstValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleConstValueSource Function that returns a constant double value for every document. Inheritance System.Object ValueSource ConstNumberSource DoubleConstValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DoubleConstValueSource : ConstNumberSource Constructors | Improve this Doc View Source DoubleConstValueSource(Double) Declaration public DoubleConstValueSource(double constant) Parameters Type Name Description System.Double constant Properties | Improve this Doc View Source Bool Declaration public override bool Bool { get; } Property Value Type Description System.Boolean Overrides ConstNumberSource.Bool | Improve this Doc View Source Double Declaration public override double Double { get; } Property Value Type Description System.Double Overrides ConstNumberSource.Double | Improve this Doc View Source Int32 NOTE: This was getInt() in Lucene Declaration public override int Int32 { get; } Property Value Type Description System.Int32 Overrides ConstNumberSource.Int32 | Improve this Doc View Source Int64 NOTE: This was getLong() in Lucene Declaration public override long Int64 { get; } Property Value Type Description System.Int64 Overrides ConstNumberSource.Int64 | Improve this Doc View Source Single NOTE: This was getFloat() in Lucene Declaration public override float Single { get; } Property Value Type Description System.Single Overrides ConstNumberSource.Single Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DoubleFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DoubleFieldSource.html",
    "title": "Class DoubleFieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleFieldSource Obtains field values from and makes those values available as other numeric types, casting as needed. Inheritance System.Object ValueSource FieldCacheSource DoubleFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DoubleFieldSource : FieldCacheSource Constructors | Improve this Doc View Source DoubleFieldSource(String) Declaration public DoubleFieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source DoubleFieldSource(String, FieldCache.IDoubleParser) Declaration public DoubleFieldSource(string field, FieldCache.IDoubleParser parser) Parameters Type Name Description System.String field FieldCache.IDoubleParser parser Fields | Improve this Doc View Source m_parser Declaration protected readonly FieldCache.IDoubleParser m_parser Field Value Type Description FieldCache.IDoubleParser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DualSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DualSingleFunction.html",
    "title": "Class DualSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DualSingleFunction Abstract ValueSource implementation which wraps two ValueSource s and applies an extendible function to their values. NOTE: This was DualFloatFunction in Lucene Inheritance System.Object ValueSource DualSingleFunction DivSingleFunction PowSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class DualSingleFunction : ValueSource Constructors | Improve this Doc View Source DualSingleFunction(ValueSource, ValueSource) Declaration public DualSingleFunction(ValueSource a, ValueSource b) Parameters Type Name Description ValueSource a the base. ValueSource b the exponent. Fields | Improve this Doc View Source m_a Declaration protected readonly ValueSource m_a Field Value Type Description ValueSource | Improve this Doc View Source m_b Declaration protected readonly ValueSource m_b Field Value Type Description ValueSource Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source Func(Int32, FunctionValues, FunctionValues) Declaration protected abstract float Func(int doc, FunctionValues aVals, FunctionValues bVals) Parameters Type Name Description System.Int32 doc FunctionValues aVals FunctionValues bVals Returns Type Description System.Single | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.EnumFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.EnumFieldSource.html",
    "title": "Class EnumFieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnumFieldSource Obtains field values from and makes those values available as other numeric types, casting as needed. StrVal of the value is not the value, but its (displayed) value Inheritance System.Object ValueSource FieldCacheSource EnumFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class EnumFieldSource : FieldCacheSource Constructors | Improve this Doc View Source EnumFieldSource(String, FieldCache.IInt32Parser, IDictionary<Nullable<Int32>, String>, IDictionary<String, Nullable<Int32>>) Declaration public EnumFieldSource(string field, FieldCache.IInt32Parser parser, IDictionary<int?, string> enumIntToStringMap, IDictionary<string, int?> enumStringToIntMap) Parameters Type Name Description System.String field FieldCache.IInt32Parser parser IDictionary < System.Nullable < System.Int32 >, System.String > enumIntToStringMap IDictionary < System.String , System.Nullable < System.Int32 >> enumStringToIntMap Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.FieldCacheSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.FieldCacheSource.html",
    "title": "Class FieldCacheSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheSource A base class for ValueSource implementations that retrieve values for a single field from the FieldCache . Inheritance System.Object ValueSource FieldCacheSource ByteFieldSource BytesRefFieldSource DoubleFieldSource EnumFieldSource Int16FieldSource Int32FieldSource Int64FieldSource JoinDocFreqValueSource SingleFieldSource Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class FieldCacheSource : ValueSource Constructors | Improve this Doc View Source FieldCacheSource(String) Declaration public FieldCacheSource(string field) Parameters Type Name Description System.String field Fields | Improve this Doc View Source m_cache Declaration protected readonly IFieldCache m_cache Field Value Type Description IFieldCache | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; } Property Value Type Description System.String | Improve this Doc View Source FieldCache Declaration public virtual IFieldCache FieldCache { get; } Property Value Type Description IFieldCache Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.html",
    "title": "Namespace Lucene.Net.Queries.Function.ValueSources | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Queries.Function.ValueSources <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> A variety of functions to use with FunctionQuery. Classes BoolFunction Abstract parent class for those ValueSource implementations which apply boolean logic to their values ByteFieldSource Obtains field values from the FieldCache using and makes those values available as other numeric types, casting as needed. * BytesRefFieldSource An implementation for retrieving FunctionValues instances for based fields. ConstNumberSource ConstNumberSource is the base class for all constant numbers ConstValueSource ConstValueSource returns a constant for all documents DefFunction ValueSource implementation which only returns the values from the provided ValueSource s which are available for a particular docId. Consequently, when combined with a ConstValueSource , this function serves as a way to return a default value when the values for a field are unavailable. DivSingleFunction Function to divide \"a\" by \"b\" NOTE: This was DivFloatFunction in Lucene DocFreqValueSource DocFreqValueSource returns the number of documents containing the term. This is a Lucene.NET INTERNAL API, use at your own risk DoubleConstValueSource Function that returns a constant double value for every document. DoubleFieldSource Obtains field values from and makes those values available as other numeric types, casting as needed. DualSingleFunction Abstract ValueSource implementation which wraps two ValueSource s and applies an extendible function to their values. NOTE: This was DualFloatFunction in Lucene EnumFieldSource Obtains field values from and makes those values available as other numeric types, casting as needed. StrVal of the value is not the value, but its (displayed) value FieldCacheSource A base class for ValueSource implementations that retrieve values for a single field from the FieldCache . IDFValueSource Function that returns for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity @lucene.internal IfFunction Depending on the value of the Lucene.Net.Queries.Function.ValueSources.IfFunction.ifSource function, returns the value of the Lucene.Net.Queries.Function.ValueSources.IfFunction.trueSource or Lucene.Net.Queries.Function.ValueSources.IfFunction.falseSource function. Int16FieldSource Obtains field values from the FieldCache using and makes those values available as other numeric types, casting as needed. NOTE: This was ShortFieldSource in Lucene Int32FieldSource Obtains field values from and makes those values available as other numeric types, casting as needed. NOTE: This was IntFieldSource in Lucene Int64FieldSource Obtains field values from and makes those values available as other numeric types, casting as needed. NOTE: This was LongFieldSource in Lucene JoinDocFreqValueSource Use a field value and find the Document Frequency within another field. @since solr 4.0 LinearSingleFunction LinearSingleFunction implements a linear function over another ValueSource . Normally Used as an argument to a FunctionQuery NOTE: This was LinearFloatFunction in Lucene LiteralValueSource Pass a the field value through as a , no matter the type // Q: doesn't this mean it's a \"str\"? MaxDocValueSource Returns the value of MaxDoc for every document. This is the number of documents including deletions. MaxSingleFunction MaxSingleFunction returns the max of it's components. NOTE: This was MaxFloatFunction in Lucene MinSingleFunction MinSingleFunction returns the min of it's components. NOTE: This was MinFloatFunction in Lucene MultiBoolFunction Abstract ValueSource implementation which wraps multiple ValueSource s and applies an extendible function to their values. MultiFunction Abstract parent class for ValueSource implementations that wrap multiple ValueSource s and apply their own logic. MultiFunction.Values MultiSingleFunction Abstract ValueSource implementation which wraps multiple ValueSource s and applies an extendible function to their values. NOTE: This was MultiFloatFunction in Lucene MultiValueSource A ValueSource that abstractly represents ValueSource s for poly fields, and other things. NormValueSource Function that returns for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity @lucene.internal NumDocsValueSource Returns the value of NumDocs for every document. This is the number of documents excluding deletions. OrdFieldSource Obtains the ordinal of the field value from the default Lucene FieldCache using StringIndex. The native lucene index order is used to assign an ordinal value for each field value. Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1. Example: If there were only three field values: \"apple\",\"banana\",\"pear\" then ord(\"apple\")=1, ord(\"banana\")=2, ord(\"pear\")=3 WARNING: Ord depends on the position in an index and can thus change when other documents are inserted or deleted, or if a MultiSearcher is used. WARNING: as of Solr 1.4, ord() and rord() can cause excess memory use since they must use a FieldCache entry at the top level reader, while sorting and function queries now use entries at the segment level. Hence sorting or using a different function query, in addition to ord()/rord() will double memory use. PowSingleFunction Function to raise the base \"a\" to the power \"b\" NOTE: This was PowFloatFunction in Lucene ProductSingleFunction ProductSingleFunction returns the product of it's components. NOTE: This was ProductFloatFunction in Lucene QueryValueSource QueryValueSource returns the relevance score of the query RangeMapSingleFunction RangeMapSingleFunction implements a map function over another ValueSource whose values fall within min and max inclusive to target . Normally used as an argument to a FunctionQuery NOTE: This was RangeMapFloatFunction in Lucene ReciprocalSingleFunction ReciprocalSingleFunction implements a reciprocal function f(x) = a/(mx+b) , based on the value of a field or function as exported by ValueSource . When a and b are equal, and x>=0 , this function has a maximum value of 1 that drops as x increases. Increasing the value of a and b together results in a movement of the entire function to a flatter part of the curve. These properties make this an idea function for boosting more recent documents. Example: recip(ms(NOW,mydatefield),3.16e-11,1,1) A multiplier of 3.16e-11 changes the units from milliseconds to years (since there are about 3.16e10 milliseconds per year). Thus, a very recent date will yield a value close to 1/(0+1) or 1, a date a year in the past will get a multiplier of about 1/(1+1) or 1/2, and date two years old will yield 1/(2+1) or 1/3. NOTE: This was ReciprocalFloatFunction in Lucene ReverseOrdFieldSource Obtains the ordinal of the field value from the default Lucene FieldCache using and reverses the order. The native lucene index order is used to assign an ordinal value for each field value. Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1. Example of reverse ordinal (rord): If there were only three field values: \"apple\",\"banana\",\"pear\" then rord(\"apple\")=3, rord(\"banana\")=2, ord(\"pear\")=1 WARNING: Ord depends on the position in an index and can thus change when other documents are inserted or deleted, or if a MultiSearcher is used. WARNING: as of Solr 1.4, ord() and rord() can cause excess memory use since they must use a FieldCache entry at the top level reader, while sorting and function queries now use entries at the segment level. Hence sorting or using a different function query, in addition to ord()/rord() will double memory use. ScaleSingleFunction Scales values to be between min and max . This implementation currently traverses all of the source values to obtain their min and max. This implementation currently cannot distinguish when documents have been deleted or documents that have no value, and 0.0 values will be used for these cases. This means that if values are normally all greater than 0.0, one can still end up with 0.0 as the min value to map from. In these cases, an appropriate map() function could be used as a workaround to change 0.0 to a value in the real range. NOTE: This was ScaleFloatFunction in Lucene SimpleBoolFunction BoolFunction implementation which applies an extendible function to the values of a single wrapped ValueSource . Functions this can be used for include whether a field has a value or not, or inverting the value of the wrapped ValueSource . SimpleSingleFunction A simple function with a single argument NOTE: This was SimpleFloatFunction in Lucene SingleFieldSource Obtains field values from and makes those values available as other numeric types, casting as needed. NOTE: This was FloatFieldSource in Lucene SingularFunction A function with a single (one) argument. NOTE: This was SingleFunction in Lucene, changed to avoid conusion with operations on the datatype . SumSingleFunction SumSingleFunction returns the sum of its components. NOTE: This was SumFloatFunction in Lucene SumTotalTermFreqValueSource SumTotalTermFreqValueSource returns the number of tokens. (sum of term freqs across all documents, across all terms). Returns -1 if frequencies were omitted for the field, or if the codec doesn't support this statistic. This is a Lucene.NET INTERNAL API, use at your own risk TermFreqValueSource Function that returns Freq for the supplied term in every document. If the term does not exist in the document, returns 0. If frequencies are omitted, returns 1. TFValueSource Function that returns for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity @lucene.internal TotalTermFreqValueSource TotalTermFreqValueSource returns the total term freq (sum of term freqs across all documents). Returns -1 if frequencies were omitted for the field, or if the codec doesn't support this statistic. This is a Lucene.NET INTERNAL API, use at your own risk VectorValueSource Converts individual ValueSource instances to leverage the FunctionValues *Val functions that work with multiple values, i.e. DoubleVal(Int32, Double[])"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.IDFValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.IDFValueSource.html",
    "title": "Class IDFValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IDFValueSource Function that returns for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity @lucene.internal Inheritance System.Object ValueSource DocFreqValueSource IDFValueSource Inherited Members DocFreqValueSource.m_field DocFreqValueSource.m_indexedField DocFreqValueSource.m_val DocFreqValueSource.m_indexedBytes DocFreqValueSource.GetDescription() DocFreqValueSource.CreateWeight(IDictionary, IndexSearcher) DocFreqValueSource.GetHashCode() DocFreqValueSource.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class IDFValueSource : DocFreqValueSource Constructors | Improve this Doc View Source IDFValueSource(String, String, String, BytesRef) Declaration public IDFValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Properties | Improve this Doc View Source Name Declaration public override string Name { get; } Property Value Type Description System.String Overrides DocFreqValueSource.Name Methods | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides DocFreqValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.IfFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.IfFunction.html",
    "title": "Class IfFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IfFunction Depending on the value of the Lucene.Net.Queries.Function.ValueSources.IfFunction.ifSource function, returns the value of the Lucene.Net.Queries.Function.ValueSources.IfFunction.trueSource or Lucene.Net.Queries.Function.ValueSources.IfFunction.falseSource function. Inheritance System.Object ValueSource BoolFunction IfFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class IfFunction : BoolFunction Constructors | Improve this Doc View Source IfFunction(ValueSource, ValueSource, ValueSource) Declaration public IfFunction(ValueSource ifSource, ValueSource trueSource, ValueSource falseSource) Parameters Type Name Description ValueSource ifSource ValueSource trueSource ValueSource falseSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int16FieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int16FieldSource.html",
    "title": "Class Int16FieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int16FieldSource Obtains field values from the FieldCache using and makes those values available as other numeric types, casting as needed. NOTE: This was ShortFieldSource in Lucene Inheritance System.Object ValueSource FieldCacheSource Int16FieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class Int16FieldSource : FieldCacheSource Constructors | Improve this Doc View Source Int16FieldSource(String) Declaration public Int16FieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source Int16FieldSource(String, FieldCache.IInt16Parser) Declaration public Int16FieldSource(string field, FieldCache.IInt16Parser parser) Parameters Type Name Description System.String field FieldCache.IInt16Parser parser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int32FieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int32FieldSource.html",
    "title": "Class Int32FieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32FieldSource Obtains field values from and makes those values available as other numeric types, casting as needed. NOTE: This was IntFieldSource in Lucene Inheritance System.Object ValueSource FieldCacheSource Int32FieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class Int32FieldSource : FieldCacheSource Constructors | Improve this Doc View Source Int32FieldSource(String) Declaration public Int32FieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source Int32FieldSource(String, FieldCache.IInt32Parser) Declaration public Int32FieldSource(string field, FieldCache.IInt32Parser parser) Parameters Type Name Description System.String field FieldCache.IInt32Parser parser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int64FieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int64FieldSource.html",
    "title": "Class Int64FieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64FieldSource Obtains field values from and makes those values available as other numeric types, casting as needed. NOTE: This was LongFieldSource in Lucene Inheritance System.Object ValueSource FieldCacheSource Int64FieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class Int64FieldSource : FieldCacheSource Constructors | Improve this Doc View Source Int64FieldSource(String) Declaration public Int64FieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source Int64FieldSource(String, FieldCache.IInt64Parser) Declaration public Int64FieldSource(string field, FieldCache.IInt64Parser parser) Parameters Type Name Description System.String field FieldCache.IInt64Parser parser Fields | Improve this Doc View Source m_parser Declaration protected readonly FieldCache.IInt64Parser m_parser Field Value Type Description FieldCache.IInt64Parser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source ExternalToInt64(String) NOTE: This was externalToLong() in Lucene Declaration public virtual long ExternalToInt64(string extVal) Parameters Type Name Description System.String extVal Returns Type Description System.Int64 | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext) | Improve this Doc View Source Int64ToObject(Int64) NOTE: This was longToObject() in Lucene Declaration public virtual object Int64ToObject(long val) Parameters Type Name Description System.Int64 val Returns Type Description System.Object | Improve this Doc View Source Int64ToString(Int64) NOTE: This was longToString() in Lucene Declaration public virtual string Int64ToString(long val) Parameters Type Name Description System.Int64 val Returns Type Description System.String | Improve this Doc View Source NewMutableValueInt64() NOTE: This was longToString() in Lucene Declaration protected virtual MutableValueInt64 NewMutableValueInt64() Returns Type Description MutableValueInt64"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.JoinDocFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.JoinDocFreqValueSource.html",
    "title": "Class JoinDocFreqValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JoinDocFreqValueSource Use a field value and find the Document Frequency within another field. @since solr 4.0 Inheritance System.Object ValueSource FieldCacheSource JoinDocFreqValueSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class JoinDocFreqValueSource : FieldCacheSource Constructors | Improve this Doc View Source JoinDocFreqValueSource(String, String) Declaration public JoinDocFreqValueSource(string field, string qfield) Parameters Type Name Description System.String field System.String qfield Fields | Improve this Doc View Source m_qfield Declaration protected readonly string m_qfield Field Value Type Description System.String | Improve this Doc View Source NAME Declaration public const string NAME = null Field Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.LinearSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.LinearSingleFunction.html",
    "title": "Class LinearSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LinearSingleFunction LinearSingleFunction implements a linear function over another ValueSource . Normally Used as an argument to a FunctionQuery NOTE: This was LinearFloatFunction in Lucene Inheritance System.Object ValueSource LinearSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class LinearSingleFunction : ValueSource Constructors | Improve this Doc View Source LinearSingleFunction(ValueSource, Single, Single) Declaration public LinearSingleFunction(ValueSource source, float slope, float intercept) Parameters Type Name Description ValueSource source System.Single slope System.Single intercept Fields | Improve this Doc View Source m_intercept Declaration protected readonly float m_intercept Field Value Type Description System.Single | Improve this Doc View Source m_slope Declaration protected readonly float m_slope Field Value Type Description System.Single | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.LiteralValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.LiteralValueSource.html",
    "title": "Class LiteralValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LiteralValueSource Pass a the field value through as a , no matter the type // Q: doesn't this mean it's a \"str\"? Inheritance System.Object ValueSource LiteralValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class LiteralValueSource : ValueSource Constructors | Improve this Doc View Source LiteralValueSource(String) Declaration public LiteralValueSource(string str) Parameters Type Name Description System.String str Fields | Improve this Doc View Source hash Declaration public static readonly int hash Field Value Type Description System.Int32 | Improve this Doc View Source m_bytesRef Declaration protected readonly BytesRef m_bytesRef Field Value Type Description BytesRef | Improve this Doc View Source m_str Declaration protected readonly string m_str Field Value Type Description System.String Properties | Improve this Doc View Source Value returns the literal value Declaration public virtual string Value { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MaxDocValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MaxDocValueSource.html",
    "title": "Class MaxDocValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MaxDocValueSource Returns the value of MaxDoc for every document. This is the number of documents including deletions. Inheritance System.Object ValueSource MaxDocValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class MaxDocValueSource : ValueSource Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MaxSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MaxSingleFunction.html",
    "title": "Class MaxSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MaxSingleFunction MaxSingleFunction returns the max of it's components. NOTE: This was MaxFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction MaxSingleFunction Inherited Members MultiSingleFunction.m_sources MultiSingleFunction.GetDescription() MultiSingleFunction.GetValues(IDictionary, AtomicReaderContext) MultiSingleFunction.CreateWeight(IDictionary, IndexSearcher) MultiSingleFunction.GetHashCode() MultiSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class MaxSingleFunction : MultiSingleFunction Constructors | Improve this Doc View Source MaxSingleFunction(ValueSource[]) Declaration public MaxSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected override float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single Overrides MultiSingleFunction.Func(Int32, FunctionValues[])"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MinSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MinSingleFunction.html",
    "title": "Class MinSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MinSingleFunction MinSingleFunction returns the min of it's components. NOTE: This was MinFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction MinSingleFunction Inherited Members MultiSingleFunction.m_sources MultiSingleFunction.GetDescription() MultiSingleFunction.GetValues(IDictionary, AtomicReaderContext) MultiSingleFunction.CreateWeight(IDictionary, IndexSearcher) MultiSingleFunction.GetHashCode() MultiSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class MinSingleFunction : MultiSingleFunction Constructors | Improve this Doc View Source MinSingleFunction(ValueSource[]) Declaration public MinSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected override float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single Overrides MultiSingleFunction.Func(Int32, FunctionValues[])"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiBoolFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiBoolFunction.html",
    "title": "Class MultiBoolFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiBoolFunction Abstract ValueSource implementation which wraps multiple ValueSource s and applies an extendible function to their values. Inheritance System.Object ValueSource BoolFunction MultiBoolFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class MultiBoolFunction : BoolFunction Constructors | Improve this Doc View Source MultiBoolFunction(IList<ValueSource>) Declaration public MultiBoolFunction(IList<ValueSource> sources) Parameters Type Name Description IList < ValueSource > sources Fields | Improve this Doc View Source m_sources Declaration protected readonly IList<ValueSource> m_sources Field Value Type Description IList < ValueSource > Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected abstract bool Func(int doc, FunctionValues[] vals) Parameters Type Name Description System.Int32 doc FunctionValues [] vals Returns Type Description System.Boolean | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiFunction.html",
    "title": "Class MultiFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiFunction Abstract parent class for ValueSource implementations that wrap multiple ValueSource s and apply their own logic. Inheritance System.Object ValueSource MultiFunction DefFunction Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class MultiFunction : ValueSource Constructors | Improve this Doc View Source MultiFunction(IList<ValueSource>) Declaration protected MultiFunction(IList<ValueSource> sources) Parameters Type Name Description IList < ValueSource > sources Fields | Improve this Doc View Source m_sources Declaration protected readonly IList<ValueSource> m_sources Field Value Type Description IList < ValueSource > Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetDescription(String, IList<ValueSource>) Declaration public static string GetDescription(string name, IList<ValueSource> sources) Parameters Type Name Description System.String name IList < ValueSource > sources Returns Type Description System.String | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source ToString(String, FunctionValues[], Int32) Declaration public static string ToString(string name, FunctionValues[] valsArr, int doc) Parameters Type Name Description System.String name FunctionValues [] valsArr System.Int32 doc Returns Type Description System.String | Improve this Doc View Source ValsArr(IList<ValueSource>, IDictionary, AtomicReaderContext) Declaration public static FunctionValues[] ValsArr(IList<ValueSource> sources, IDictionary fcontext, AtomicReaderContext readerContext) Parameters Type Name Description IList < ValueSource > sources IDictionary fcontext AtomicReaderContext readerContext Returns Type Description FunctionValues []"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiFunction.Values.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiFunction.Values.html",
    "title": "Class MultiFunction.Values | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiFunction.Values Inheritance System.Object FunctionValues MultiFunction.Values Inherited Members FunctionValues.ByteVal(Int32) FunctionValues.Int16Val(Int32) FunctionValues.SingleVal(Int32) FunctionValues.Int32Val(Int32) FunctionValues.Int64Val(Int32) FunctionValues.DoubleVal(Int32) FunctionValues.StrVal(Int32) FunctionValues.BoolVal(Int32) FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.ObjectVal(Int32) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.GetValueFiller() FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class Values : FunctionValues Constructors | Improve this Doc View Source Values(MultiFunction, FunctionValues[]) Declaration public Values(MultiFunction outerInstance, FunctionValues[] valsArr) Parameters Type Name Description MultiFunction outerInstance FunctionValues [] valsArr Methods | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiSingleFunction.html",
    "title": "Class MultiSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiSingleFunction Abstract ValueSource implementation which wraps multiple ValueSource s and applies an extendible function to their values. NOTE: This was MultiFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction MaxSingleFunction MinSingleFunction ProductSingleFunction SumSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class MultiSingleFunction : ValueSource Constructors | Improve this Doc View Source MultiSingleFunction(ValueSource[]) Declaration public MultiSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Fields | Improve this Doc View Source m_sources Declaration protected readonly ValueSource[] m_sources Field Value Type Description ValueSource [] Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected abstract float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiValueSource.html",
    "title": "Class MultiValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiValueSource A ValueSource that abstractly represents ValueSource s for poly fields, and other things. Inheritance System.Object ValueSource MultiValueSource VectorValueSource Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.Equals(Object) ValueSource.GetHashCode() ValueSource.GetDescription() ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class MultiValueSource : ValueSource Properties | Improve this Doc View Source Dimension Declaration public abstract int Dimension { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.NormValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.NormValueSource.html",
    "title": "Class NormValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormValueSource Function that returns for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity @lucene.internal Inheritance System.Object ValueSource NormValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class NormValueSource : ValueSource Constructors | Improve this Doc View Source NormValueSource(String) Declaration public NormValueSource(string field) Parameters Type Name Description System.String field Fields | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.NumDocsValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.NumDocsValueSource.html",
    "title": "Class NumDocsValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumDocsValueSource Returns the value of NumDocs for every document. This is the number of documents excluding deletions. Inheritance System.Object ValueSource NumDocsValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class NumDocsValueSource : ValueSource Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.OrdFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.OrdFieldSource.html",
    "title": "Class OrdFieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OrdFieldSource Obtains the ordinal of the field value from the default Lucene FieldCache using StringIndex. The native lucene index order is used to assign an ordinal value for each field value. Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1. Example: If there were only three field values: \"apple\",\"banana\",\"pear\" then ord(\"apple\")=1, ord(\"banana\")=2, ord(\"pear\")=3 WARNING: Ord depends on the position in an index and can thus change when other documents are inserted or deleted, or if a MultiSearcher is used. WARNING: as of Solr 1.4, ord() and rord() can cause excess memory use since they must use a FieldCache entry at the top level reader, while sorting and function queries now use entries at the segment level. Hence sorting or using a different function query, in addition to ord()/rord() will double memory use. Inheritance System.Object ValueSource OrdFieldSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class OrdFieldSource : ValueSource Constructors | Improve this Doc View Source OrdFieldSource(String) Declaration public OrdFieldSource(string field) Parameters Type Name Description System.String field Fields | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.PowSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.PowSingleFunction.html",
    "title": "Class PowSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PowSingleFunction Function to raise the base \"a\" to the power \"b\" NOTE: This was PowFloatFunction in Lucene Inheritance System.Object ValueSource DualSingleFunction PowSingleFunction Inherited Members DualSingleFunction.m_a DualSingleFunction.m_b DualSingleFunction.GetDescription() DualSingleFunction.GetValues(IDictionary, AtomicReaderContext) DualSingleFunction.CreateWeight(IDictionary, IndexSearcher) DualSingleFunction.GetHashCode() DualSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class PowSingleFunction : DualSingleFunction Constructors | Improve this Doc View Source PowSingleFunction(ValueSource, ValueSource) Declaration public PowSingleFunction(ValueSource a, ValueSource b) Parameters Type Name Description ValueSource a the base. ValueSource b the exponent. Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides DualSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues, FunctionValues) Declaration protected override float Func(int doc, FunctionValues aVals, FunctionValues bVals) Parameters Type Name Description System.Int32 doc FunctionValues aVals FunctionValues bVals Returns Type Description System.Single Overrides DualSingleFunction.Func(Int32, FunctionValues, FunctionValues)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ProductSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ProductSingleFunction.html",
    "title": "Class ProductSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ProductSingleFunction ProductSingleFunction returns the product of it's components. NOTE: This was ProductFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction ProductSingleFunction Inherited Members MultiSingleFunction.m_sources MultiSingleFunction.GetDescription() MultiSingleFunction.GetValues(IDictionary, AtomicReaderContext) MultiSingleFunction.CreateWeight(IDictionary, IndexSearcher) MultiSingleFunction.GetHashCode() MultiSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ProductSingleFunction : MultiSingleFunction Constructors | Improve this Doc View Source ProductSingleFunction(ValueSource[]) Declaration public ProductSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected override float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single Overrides MultiSingleFunction.Func(Int32, FunctionValues[])"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.QueryValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.QueryValueSource.html",
    "title": "Class QueryValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryValueSource QueryValueSource returns the relevance score of the query Inheritance System.Object ValueSource QueryValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class QueryValueSource : ValueSource Constructors | Improve this Doc View Source QueryValueSource(Query, Single) Declaration public QueryValueSource(Query q, float defVal) Parameters Type Name Description Query q System.Single defVal Properties | Improve this Doc View Source DefaultValue Declaration public virtual float DefaultValue { get; } Property Value Type Description System.Single | Improve this Doc View Source Query Declaration public virtual Query Query { get; } Property Value Type Description Query Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary fcontext, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary fcontext AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.RangeMapSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.RangeMapSingleFunction.html",
    "title": "Class RangeMapSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RangeMapSingleFunction RangeMapSingleFunction implements a map function over another ValueSource whose values fall within min and max inclusive to target . Normally used as an argument to a FunctionQuery NOTE: This was RangeMapFloatFunction in Lucene Inheritance System.Object ValueSource RangeMapSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class RangeMapSingleFunction : ValueSource Constructors | Improve this Doc View Source RangeMapSingleFunction(ValueSource, Single, Single, ValueSource, ValueSource) Declaration public RangeMapSingleFunction(ValueSource source, float min, float max, ValueSource target, ValueSource def) Parameters Type Name Description ValueSource source System.Single min System.Single max ValueSource target ValueSource def | Improve this Doc View Source RangeMapSingleFunction(ValueSource, Single, Single, Single, Nullable<Single>) Declaration public RangeMapSingleFunction(ValueSource source, float min, float max, float target, float? def) Parameters Type Name Description ValueSource source System.Single min System.Single max System.Single target System.Nullable < System.Single > def Fields | Improve this Doc View Source m_defaultVal Declaration protected readonly ValueSource m_defaultVal Field Value Type Description ValueSource | Improve this Doc View Source m_max Declaration protected readonly float m_max Field Value Type Description System.Single | Improve this Doc View Source m_min Declaration protected readonly float m_min Field Value Type Description System.Single | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource | Improve this Doc View Source m_target Declaration protected readonly ValueSource m_target Field Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ReciprocalSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ReciprocalSingleFunction.html",
    "title": "Class ReciprocalSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReciprocalSingleFunction ReciprocalSingleFunction implements a reciprocal function f(x) = a/(mx+b) , based on the value of a field or function as exported by ValueSource . When a and b are equal, and x>=0 , this function has a maximum value of 1 that drops as x increases. Increasing the value of a and b together results in a movement of the entire function to a flatter part of the curve. These properties make this an idea function for boosting more recent documents. Example: recip(ms(NOW,mydatefield),3.16e-11,1,1) A multiplier of 3.16e-11 changes the units from milliseconds to years (since there are about 3.16e10 milliseconds per year). Thus, a very recent date will yield a value close to 1/(0+1) or 1, a date a year in the past will get a multiplier of about 1/(1+1) or 1/2, and date two years old will yield 1/(2+1) or 1/3. NOTE: This was ReciprocalFloatFunction in Lucene Inheritance System.Object ValueSource ReciprocalSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ReciprocalSingleFunction : ValueSource Constructors | Improve this Doc View Source ReciprocalSingleFunction(ValueSource, Single, Single, Single) f(source) = a/(m*float(source)+b) Declaration public ReciprocalSingleFunction(ValueSource source, float m, float a, float b) Parameters Type Name Description ValueSource source System.Single m System.Single a System.Single b Fields | Improve this Doc View Source m_a Declaration protected readonly float m_a Field Value Type Description System.Single | Improve this Doc View Source m_b Declaration protected readonly float m_b Field Value Type Description System.Single | Improve this Doc View Source m_m Declaration protected readonly float m_m Field Value Type Description System.Single | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext) See Also FunctionQuery"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ReverseOrdFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ReverseOrdFieldSource.html",
    "title": "Class ReverseOrdFieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReverseOrdFieldSource Obtains the ordinal of the field value from the default Lucene FieldCache using and reverses the order. The native lucene index order is used to assign an ordinal value for each field value. Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1. Example of reverse ordinal (rord): If there were only three field values: \"apple\",\"banana\",\"pear\" then rord(\"apple\")=3, rord(\"banana\")=2, ord(\"pear\")=1 WARNING: Ord depends on the position in an index and can thus change when other documents are inserted or deleted, or if a MultiSearcher is used. WARNING: as of Solr 1.4, ord() and rord() can cause excess memory use since they must use a FieldCache entry at the top level reader, while sorting and function queries now use entries at the segment level. Hence sorting or using a different function query, in addition to ord()/rord() will double memory use. Inheritance System.Object ValueSource ReverseOrdFieldSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ReverseOrdFieldSource : ValueSource Constructors | Improve this Doc View Source ReverseOrdFieldSource(String) Declaration public ReverseOrdFieldSource(string field) Parameters Type Name Description System.String field Properties | Improve this Doc View Source Field Declaration public string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ScaleSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ScaleSingleFunction.html",
    "title": "Class ScaleSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScaleSingleFunction Scales values to be between min and max . This implementation currently traverses all of the source values to obtain their min and max. This implementation currently cannot distinguish when documents have been deleted or documents that have no value, and 0.0 values will be used for these cases. This means that if values are normally all greater than 0.0, one can still end up with 0.0 as the min value to map from. In these cases, an appropriate map() function could be used as a workaround to change 0.0 to a value in the real range. NOTE: This was ScaleFloatFunction in Lucene Inheritance System.Object ValueSource ScaleSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ScaleSingleFunction : ValueSource Constructors | Improve this Doc View Source ScaleSingleFunction(ValueSource, Single, Single) Declaration public ScaleSingleFunction(ValueSource source, float min, float max) Parameters Type Name Description ValueSource source System.Single min System.Single max Fields | Improve this Doc View Source m_max Declaration protected readonly float m_max Field Value Type Description System.Single | Improve this Doc View Source m_min Declaration protected readonly float m_min Field Value Type Description System.Single | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SimpleBoolFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SimpleBoolFunction.html",
    "title": "Class SimpleBoolFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleBoolFunction BoolFunction implementation which applies an extendible function to the values of a single wrapped ValueSource . Functions this can be used for include whether a field has a value or not, or inverting the value of the wrapped ValueSource . Inheritance System.Object ValueSource BoolFunction SimpleBoolFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class SimpleBoolFunction : BoolFunction Constructors | Improve this Doc View Source SimpleBoolFunction(ValueSource) Declaration public SimpleBoolFunction(ValueSource source) Parameters Type Name Description ValueSource source Fields | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source Func(Int32, FunctionValues) Declaration protected abstract bool Func(int doc, FunctionValues vals) Parameters Type Name Description System.Int32 doc FunctionValues vals Returns Type Description System.Boolean | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SimpleSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SimpleSingleFunction.html",
    "title": "Class SimpleSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleSingleFunction A simple function with a single argument NOTE: This was SimpleFloatFunction in Lucene Inheritance System.Object ValueSource SingularFunction SimpleSingleFunction Inherited Members SingularFunction.m_source SingularFunction.Name SingularFunction.GetDescription() SingularFunction.GetHashCode() SingularFunction.Equals(Object) SingularFunction.CreateWeight(IDictionary, IndexSearcher) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class SimpleSingleFunction : SingularFunction Constructors | Improve this Doc View Source SimpleSingleFunction(ValueSource) Declaration public SimpleSingleFunction(ValueSource source) Parameters Type Name Description ValueSource source Methods | Improve this Doc View Source Func(Int32, FunctionValues) Declaration protected abstract float Func(int doc, FunctionValues vals) Parameters Type Name Description System.Int32 doc FunctionValues vals Returns Type Description System.Single | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SingleFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SingleFieldSource.html",
    "title": "Class SingleFieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleFieldSource Obtains field values from and makes those values available as other numeric types, casting as needed. NOTE: This was FloatFieldSource in Lucene Inheritance System.Object ValueSource FieldCacheSource SingleFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class SingleFieldSource : FieldCacheSource Constructors | Improve this Doc View Source SingleFieldSource(String) Declaration public SingleFieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source SingleFieldSource(String, FieldCache.ISingleParser) Declaration public SingleFieldSource(string field, FieldCache.ISingleParser parser) Parameters Type Name Description System.String field FieldCache.ISingleParser parser Fields | Improve this Doc View Source m_parser Declaration protected readonly FieldCache.ISingleParser m_parser Field Value Type Description FieldCache.ISingleParser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SingularFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SingularFunction.html",
    "title": "Class SingularFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingularFunction A function with a single (one) argument. NOTE: This was SingleFunction in Lucene, changed to avoid conusion with operations on the datatype . Inheritance System.Object ValueSource SingularFunction SimpleSingleFunction Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class SingularFunction : ValueSource Constructors | Improve this Doc View Source SingularFunction(ValueSource) Declaration public SingularFunction(ValueSource source) Parameters Type Name Description ValueSource source Fields | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SumSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SumSingleFunction.html",
    "title": "Class SumSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SumSingleFunction SumSingleFunction returns the sum of its components. NOTE: This was SumFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction SumSingleFunction Inherited Members MultiSingleFunction.m_sources MultiSingleFunction.GetDescription() MultiSingleFunction.GetValues(IDictionary, AtomicReaderContext) MultiSingleFunction.CreateWeight(IDictionary, IndexSearcher) MultiSingleFunction.GetHashCode() MultiSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class SumSingleFunction : MultiSingleFunction Constructors | Improve this Doc View Source SumSingleFunction(ValueSource[]) Declaration public SumSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected override float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single Overrides MultiSingleFunction.Func(Int32, FunctionValues[])"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SumTotalTermFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SumTotalTermFreqValueSource.html",
    "title": "Class SumTotalTermFreqValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SumTotalTermFreqValueSource SumTotalTermFreqValueSource returns the number of tokens. (sum of term freqs across all documents, across all terms). Returns -1 if frequencies were omitted for the field, or if the codec doesn't support this statistic. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource SumTotalTermFreqValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class SumTotalTermFreqValueSource : ValueSource Constructors | Improve this Doc View Source SumTotalTermFreqValueSource(String) Declaration public SumTotalTermFreqValueSource(string indexedField) Parameters Type Name Description System.String indexedField Fields | Improve this Doc View Source m_indexedField Declaration protected readonly string m_indexedField Field Value Type Description System.String Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TermFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TermFreqValueSource.html",
    "title": "Class TermFreqValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermFreqValueSource Function that returns Freq for the supplied term in every document. If the term does not exist in the document, returns 0. If frequencies are omitted, returns 1. Inheritance System.Object ValueSource DocFreqValueSource TermFreqValueSource TFValueSource Inherited Members DocFreqValueSource.m_field DocFreqValueSource.m_indexedField DocFreqValueSource.m_val DocFreqValueSource.m_indexedBytes DocFreqValueSource.GetDescription() DocFreqValueSource.CreateWeight(IDictionary, IndexSearcher) DocFreqValueSource.GetHashCode() DocFreqValueSource.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class TermFreqValueSource : DocFreqValueSource Constructors | Improve this Doc View Source TermFreqValueSource(String, String, String, BytesRef) Declaration public TermFreqValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Properties | Improve this Doc View Source Name Declaration public override string Name { get; } Property Value Type Description System.String Overrides DocFreqValueSource.Name Methods | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides DocFreqValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TFValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TFValueSource.html",
    "title": "Class TFValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TFValueSource Function that returns for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity @lucene.internal Inheritance System.Object ValueSource DocFreqValueSource TermFreqValueSource TFValueSource Inherited Members DocFreqValueSource.m_field DocFreqValueSource.m_indexedField DocFreqValueSource.m_val DocFreqValueSource.m_indexedBytes DocFreqValueSource.GetDescription() DocFreqValueSource.CreateWeight(IDictionary, IndexSearcher) DocFreqValueSource.GetHashCode() DocFreqValueSource.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class TFValueSource : TermFreqValueSource Constructors | Improve this Doc View Source TFValueSource(String, String, String, BytesRef) Declaration public TFValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Properties | Improve this Doc View Source Name Declaration public override string Name { get; } Property Value Type Description System.String Overrides TermFreqValueSource.Name Methods | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides TermFreqValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TotalTermFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TotalTermFreqValueSource.html",
    "title": "Class TotalTermFreqValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TotalTermFreqValueSource TotalTermFreqValueSource returns the total term freq (sum of term freqs across all documents). Returns -1 if frequencies were omitted for the field, or if the codec doesn't support this statistic. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource TotalTermFreqValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class TotalTermFreqValueSource : ValueSource Constructors | Improve this Doc View Source TotalTermFreqValueSource(String, String, String, BytesRef) Declaration public TotalTermFreqValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Fields | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_indexedBytes Declaration protected readonly BytesRef m_indexedBytes Field Value Type Description BytesRef | Improve this Doc View Source m_indexedField Declaration protected readonly string m_indexedField Field Value Type Description System.String | Improve this Doc View Source m_val Declaration protected readonly string m_val Field Value Type Description System.String Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.VectorValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.VectorValueSource.html",
    "title": "Class VectorValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VectorValueSource Converts individual ValueSource instances to leverage the FunctionValues *Val functions that work with multiple values, i.e. DoubleVal(Int32, Double[]) Inheritance System.Object ValueSource MultiValueSource VectorValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class VectorValueSource : MultiValueSource Constructors | Improve this Doc View Source VectorValueSource(IList<ValueSource>) Declaration public VectorValueSource(IList<ValueSource> sources) Parameters Type Name Description IList < ValueSource > sources Fields | Improve this Doc View Source m_sources Declaration protected readonly IList<ValueSource> m_sources Field Value Type Description IList < ValueSource > Properties | Improve this Doc View Source Dimension Declaration public override int Dimension { get; } Property Value Type Description System.Int32 Overrides MultiValueSource.Dimension | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source Sources Declaration public virtual IList<ValueSource> Sources { get; } Property Value Type Description IList < ValueSource > Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSourceScorer.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSourceScorer.html",
    "title": "Class ValueSourceScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ValueSourceScorer Scorer which returns the result of SingleVal(Int32) as the score for a document. Inheritance System.Object DocIdSetIterator DocsEnum Scorer ValueSourceScorer Inherited Members Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public class ValueSourceScorer : Scorer Constructors | Improve this Doc View Source ValueSourceScorer(IndexReader, FunctionValues) Declaration protected ValueSourceScorer(IndexReader reader, FunctionValues values) Parameters Type Name Description IndexReader reader FunctionValues values Fields | Improve this Doc View Source m_checkDeletes Declaration protected bool m_checkDeletes Field Value Type Description System.Boolean | Improve this Doc View Source m_maxDoc Declaration protected readonly int m_maxDoc Field Value Type Description System.Int32 | Improve this Doc View Source m_reader Declaration protected readonly IndexReader m_reader Field Value Type Description IndexReader | Improve this Doc View Source m_values Declaration protected readonly FunctionValues m_values Field Value Type Description FunctionValues Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source Reader Declaration public virtual IndexReader Reader { get; } Property Value Type Description IndexReader Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source Matches(Int32) Declaration public virtual bool Matches(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean | Improve this Doc View Source MatchesValue(Int32) Declaration public virtual bool MatchesValue(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source SetCheckDeletes(Boolean) Declaration public virtual void SetCheckDeletes(bool checkDeletes) Parameters Type Name Description System.Boolean checkDeletes"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.html",
    "title": "Namespace Lucene.Net.Queries | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Queries <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Filters and Queries that add to core Lucene. Classes BooleanFilter A container Filter that allows Boolean composition of Filter s. Filter s are allocated into one of three logical constructs; SHOULD, MUST NOT, MUST The results Filter BitSet is constructed as follows: SHOULD Filters are OR'd together The resulting Filter is NOT'd with the NOT Filter s The resulting Filter is AND'd with the MUST Filter s BoostingQuery The BoostingQuery class can be used to effectively demote results that match a given query. Unlike the \"NOT\" clause, this still selects documents that contain undesirable terms, but reduces their overall score: Query balancedQuery = new BoostingQuery(positiveQuery, negativeQuery, 0.01f); In this scenario the positiveQuery contains the mandatory, desirable criteria which is used to select all matching documents, and the negativeQuery contains the undesirable elements which are simply used to lessen the scores. Documents that match the negativeQuery have their score multiplied by the supplied \"boost\" parameter, so this should be less than 1 to achieve a demoting effect This code was originally made available here: [WWW] http://marc.theaimsgroup.com/?l=lucene-user&m=108058407130459&w=2 and is documented here: http://wiki.apache.org/lucene-java/CommunityContributions ChainedFilter Allows multiple Filter s to be chained. Logical operations such as NOT and XOR are applied between filters. One operation can be used for all filters, or a specific operation can be declared for each filter. Order in which filters are called depends on the position of the filter in the chain. It's probably more efficient to place the most restrictive filters/least computationally-intensive filters first. CommonTermsQuery A query that executes high-frequency terms in a optional sub-query to prevent slow queries due to \"common\" terms like stopwords. This query builds 2 queries off the Add(Term) added terms: low-frequency terms are added to a required boolean clause and high-frequency terms are added to an optional boolean clause. The optional clause is only executed if the required \"low-frequency\" clause matches. Scores produced by this query will be slightly different than plain BooleanQuery scorer mainly due to differences in the number of leaf queries in the required boolean clause. In most cases, high-frequency terms are unlikely to significantly contribute to the document score unless at least one of the low-frequency terms are matched. This query can improve query execution times significantly if applicable. CommonTermsQuery has several advantages over stopword filtering at index or query time since a term can be \"classified\" based on the actual document frequency in the index and can prevent slow queries even across domains without specialized stopword files. Note: if the query only contains high-frequency terms the query is rewritten into a plain conjunction query ie. all high-frequency terms need to match in order to match a document. Collection initializer note: To create and populate a CommonTermsQuery in a single statement, you can use the following example as a guide: var query = new CommonTermsQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; CustomScoreProvider An instance of this subclass should be returned by GetCustomScoreProvider(AtomicReaderContext) , if you want to modify the custom score calculation of a CustomScoreQuery . Since Lucene 2.9, queries operate on each segment of an index separately, so the protected m_context field can be used to resolve doc IDs, as the supplied doc ID is per-segment and without knowledge of the IndexReader you cannot access the document or IFieldCache . @lucene.experimental @since 2.9.2 CustomScoreQuery Query that sets document score as a programmatic function of several (sub) scores: the score of its subQuery (any query) (optional) the score of its FunctionQuery (or queries). Subclasses can modify the computation by overriding GetCustomScoreProvider(AtomicReaderContext) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FilterClause A Filter that wrapped with an indication of how that filter is used when composed with another filter. (Follows the boolean logic in BooleanClause for composition of queries.) TermFilter A filter that includes documents that match with a specific term. TermsFilter Constructs a filter for docs matching any of the terms added to this class. Unlike a RangeFilter this can be used for filtering on multiple terms that are not necessarily in a sequence. An example might be a collection of primary keys from a database query result or perhaps a choice of \"category\" labels picked by the end user. As a filter, this is much faster than the equivalent query (a BooleanQuery with many \"should\" TermQuery s)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.html",
    "title": "Namespace Lucene.Net.Queries.Mlt | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Queries.Mlt <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Document similarity query generators. Classes MoreLikeThis Generate \"more like this\" similarity queries. Based on this mail: Lucene does let you access the document frequency of terms, with DocFreq(Term) . Term frequencies can be computed by re-tokenizing the text, which, for a single document, is usually fast enough. But looking up the DocFreq(Term) of every term in the document is probably too slow. You can use some heuristics to prune the set of terms, to avoid calling DocFreq(Term) too much, or at all. Since you're trying to maximize a tf*idf score, you're probably most interested in terms with a high tf. Choosing a tf threshold even as low as two or three will radically reduce the number of terms under consideration. Another heuristic is that terms with a high idf (i.e., a low df) tend to be longer. So you could threshold the terms by the number of characters, not selecting anything less than, e.g., six or seven characters. With these sorts of heuristics you can usually find small set of, e.g., ten or fewer terms that do a pretty good job of characterizing a document. It all depends on what you're trying to do. If you're trying to eek out that last percent of precision and recall regardless of computational difficulty so that you can win a TREC competition, then the techniques I mention above are useless. But if you're trying to provide a \"more like this\" button on a search results page that does a decent job and has good performance, such techniques might be useful. An efficient, effective \"more-like-this\" query generator would be a great contribution, if anyone's interested. I'd imagine that it would take a Reader or a String (the document's text), analyzer Analyzer, and return a set of representative terms using heuristics like those above. The frequency and length thresholds could be parameters, etc. Doug Initial Usage This class has lots of options to try to make it efficient and flexible. The simplest possible usage is as follows. The bold fragment is specific to this class. IndexReader ir = ... IndexSearcher is = ... MoreLikeThis mlt = new MoreLikeThis(ir); TextReader target = ... // orig source of doc you want to find similarities to Query query = mlt.Like(target); Hits hits = is.Search(query); // now the usual iteration thru 'hits' - the only thing to watch for is to make sure //you ignore the doc if it matches your 'target' document, as it should be similar to itself Thus you: do your normal, Lucene setup for searching, create a MoreLikeThis, get the text of the doc you want to find similarities to then call one of the Like(TextReader, String) calls to generate a similarity query call the searcher to find the similar docs More Advanced Usage You may want to use the setter for FieldNames so you can examine multiple fields (e.g. body and title) for similarity. Depending on the size of your index and the size and makeup of your documents you may want to call the other set methods to control how the similarity queries are generated: MinTermFreq MinDocFreq MaxDocFreq SetMaxDocFreqPct(Int32) MinWordLen MaxWordLen MaxQueryTerms MaxNumTokensParsed StopWords MoreLikeThisQuery A simple wrapper for MoreLikeThis for use in scenarios where a Query object is required eg in custom QueryParser extensions. At query.Rewrite() time the reader is used to construct the actual MoreLikeThis object and obtain the real Query object."
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.MoreLikeThis.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.MoreLikeThis.html",
    "title": "Class MoreLikeThis | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MoreLikeThis Generate \"more like this\" similarity queries. Based on this mail: Lucene does let you access the document frequency of terms, with DocFreq(Term) . Term frequencies can be computed by re-tokenizing the text, which, for a single document, is usually fast enough. But looking up the DocFreq(Term) of every term in the document is probably too slow. You can use some heuristics to prune the set of terms, to avoid calling DocFreq(Term) too much, or at all. Since you're trying to maximize a tf*idf score, you're probably most interested in terms with a high tf. Choosing a tf threshold even as low as two or three will radically reduce the number of terms under consideration. Another heuristic is that terms with a high idf (i.e., a low df) tend to be longer. So you could threshold the terms by the number of characters, not selecting anything less than, e.g., six or seven characters. With these sorts of heuristics you can usually find small set of, e.g., ten or fewer terms that do a pretty good job of characterizing a document. It all depends on what you're trying to do. If you're trying to eek out that last percent of precision and recall regardless of computational difficulty so that you can win a TREC competition, then the techniques I mention above are useless. But if you're trying to provide a \"more like this\" button on a search results page that does a decent job and has good performance, such techniques might be useful. An efficient, effective \"more-like-this\" query generator would be a great contribution, if anyone's interested. I'd imagine that it would take a Reader or a String (the document's text), analyzer Analyzer, and return a set of representative terms using heuristics like those above. The frequency and length thresholds could be parameters, etc. Doug Initial Usage This class has lots of options to try to make it efficient and flexible. The simplest possible usage is as follows. The bold fragment is specific to this class. IndexReader ir = ... IndexSearcher is = ... MoreLikeThis mlt = new MoreLikeThis(ir); TextReader target = ... // orig source of doc you want to find similarities to Query query = mlt.Like(target); Hits hits = is.Search(query); // now the usual iteration thru 'hits' - the only thing to watch for is to make sure //you ignore the doc if it matches your 'target' document, as it should be similar to itself Thus you: do your normal, Lucene setup for searching, create a MoreLikeThis, get the text of the doc you want to find similarities to then call one of the Like(TextReader, String) calls to generate a similarity query call the searcher to find the similar docs More Advanced Usage You may want to use the setter for FieldNames so you can examine multiple fields (e.g. body and title) for similarity. Depending on the size of your index and the size and makeup of your documents you may want to call the other set methods to control how the similarity queries are generated: MinTermFreq MinDocFreq MaxDocFreq SetMaxDocFreqPct(Int32) MinWordLen MaxWordLen MaxQueryTerms MaxNumTokensParsed StopWords Inheritance System.Object MoreLikeThis Namespace : Lucene.Net.Queries.Mlt Assembly : Lucene.Net.Queries.dll Syntax public sealed class MoreLikeThis : object Remarks Changes: Mark Harwood 29/02/04 Some bugfixing, some refactoring, some optimisation. bugfix: retrieveTerms(int docNum) was not working for indexes without a termvector -added missing code bugfix: No significant terms being created for fields with a termvector - because was only counting one occurrence per term/field pair in calculations(ie not including frequency info from TermVector) refactor: moved common code into isNoiseWord() optimise: when no termvector support available - used maxNumTermsParsed to limit amount of tokenization Constructors | Improve this Doc View Source MoreLikeThis(IndexReader) Constructor requiring an IndexReader . Declaration public MoreLikeThis(IndexReader ir) Parameters Type Name Description IndexReader ir | Improve this Doc View Source MoreLikeThis(IndexReader, TFIDFSimilarity) Declaration public MoreLikeThis(IndexReader ir, TFIDFSimilarity sim) Parameters Type Name Description IndexReader ir TFIDFSimilarity sim Fields | Improve this Doc View Source DEFAULT_BOOST Boost terms in query based on score. Declaration public static readonly bool DEFAULT_BOOST Field Value Type Description System.Boolean See Also ApplyBoost | Improve this Doc View Source DEFAULT_FIELD_NAMES Default field names. Null is used to specify that the field names should be looked up at runtime from the provided reader. Declaration public static readonly string[] DEFAULT_FIELD_NAMES Field Value Type Description System.String [] | Improve this Doc View Source DEFAULT_MAX_DOC_FREQ Ignore words which occur in more than this many docs. Declaration public static readonly int DEFAULT_MAX_DOC_FREQ Field Value Type Description System.Int32 See Also MaxDocFreq SetMaxDocFreqPct(Int32) | Improve this Doc View Source DEFAULT_MAX_NUM_TOKENS_PARSED Default maximum number of tokens to parse in each example doc field that is not stored with TermVector support. Declaration public static readonly int DEFAULT_MAX_NUM_TOKENS_PARSED Field Value Type Description System.Int32 See Also MaxNumTokensParsed | Improve this Doc View Source DEFAULT_MAX_QUERY_TERMS Return a Query with no more than this many terms. Declaration public static readonly int DEFAULT_MAX_QUERY_TERMS Field Value Type Description System.Int32 See Also MaxClauseCount MaxQueryTerms | Improve this Doc View Source DEFAULT_MAX_WORD_LENGTH Ignore words greater than this length or if 0 then this has no effect. Declaration public static readonly int DEFAULT_MAX_WORD_LENGTH Field Value Type Description System.Int32 See Also MaxWordLen | Improve this Doc View Source DEFAULT_MIN_DOC_FREQ Ignore words which do not occur in at least this many docs. Declaration public static readonly int DEFAULT_MIN_DOC_FREQ Field Value Type Description System.Int32 See Also MinDocFreq | Improve this Doc View Source DEFAULT_MIN_TERM_FREQ Ignore terms with less than this frequency in the source doc. Declaration public static readonly int DEFAULT_MIN_TERM_FREQ Field Value Type Description System.Int32 See Also MinTermFreq | Improve this Doc View Source DEFAULT_MIN_WORD_LENGTH Ignore words less than this length or if 0 then this has no effect. Declaration public static readonly int DEFAULT_MIN_WORD_LENGTH Field Value Type Description System.Int32 See Also MinWordLen | Improve this Doc View Source DEFAULT_STOP_WORDS Default set of stopwords. If null means to allow stop words. Declaration public static readonly ISet<string> DEFAULT_STOP_WORDS Field Value Type Description ISet < System.String > See Also StopWords Properties | Improve this Doc View Source Analyzer Gets or Sets an analyzer that will be used to parse source doc with. The default analyzer is not set. An analyzer is not required for generating a query with the Like(Int32) method, all other 'like' methods require an analyzer. Declaration public Analyzer Analyzer { get; set; } Property Value Type Description Analyzer | Improve this Doc View Source ApplyBoost Gets or Sets whether to boost terms in query based on \"score\" or not. The default is DEFAULT_BOOST . Declaration public bool ApplyBoost { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source BoostFactor Gets or Sets the boost factor used when boosting terms Declaration public float BoostFactor { get; set; } Property Value Type Description System.Single | Improve this Doc View Source FieldNames Gets or Sets the field names that will be used when generating the 'More Like This' query. The default field names that will be used is DEFAULT_FIELD_NAMES . Set this to null for the field names to be determined at runtime from the IndexReader provided in the constructor. Declaration public string[] FieldNames { get; set; } Property Value Type Description System.String [] | Improve this Doc View Source MaxDocFreq Gets or Sets the maximum frequency in which words may still appear. Words that appear in more than this many docs will be ignored. The default frequency is DEFAULT_MAX_DOC_FREQ . Declaration public int MaxDocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxNumTokensParsed Declaration public int MaxNumTokensParsed { get; set; } Property Value Type Description System.Int32 Gets or Sets the maximum number of tokens to parse in each example doc field that is not stored with TermVector support See Also DEFAULT_MAX_NUM_TOKENS_PARSED | Improve this Doc View Source MaxQueryTerms Gets or Sets the maximum number of query terms that will be included in any generated query. The default is DEFAULT_MAX_QUERY_TERMS . Declaration public int MaxQueryTerms { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxWordLen Gets or Sets the maximum word length above which words will be ignored. Set this to 0 for no maximum word length. The default is DEFAULT_MAX_WORD_LENGTH . Declaration public int MaxWordLen { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinDocFreq Gets or Sets the frequency at which words will be ignored which do not occur in at least this many docs. The default frequency is DEFAULT_MIN_DOC_FREQ . Declaration public int MinDocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinTermFreq Gets or Sets the frequency below which terms will be ignored in the source doc. The default frequency is the DEFAULT_MIN_TERM_FREQ . Declaration public int MinTermFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinWordLen Gets or Sets the minimum word length below which words will be ignored. Set this to 0 for no minimum word length. The default is DEFAULT_MIN_WORD_LENGTH . Declaration public int MinWordLen { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Similarity For idf() calculations. Declaration public TFIDFSimilarity Similarity { get; set; } Property Value Type Description TFIDFSimilarity | Improve this Doc View Source StopWords Gets or Sets the set of stopwords. Any word in this set is considered \"uninteresting\" and ignored. Even if your Analyzer allows stopwords, you might want to tell the MoreLikeThis code to ignore them, as for the purposes of document similarity it seems reasonable to assume that \"a stop word is never interesting\". Declaration public ISet<string> StopWords { get; set; } Property Value Type Description ISet < System.String > Methods | Improve this Doc View Source DescribeParams() Describe the parameters that control how the \"more like this\" query is formed. Declaration public string DescribeParams() Returns Type Description System.String | Improve this Doc View Source Like(Int32) Return a query that will return docs like the passed lucene document ID. Declaration public Query Like(int docNum) Parameters Type Name Description System.Int32 docNum the documentID of the lucene doc to generate the 'More Like This\" query for. Returns Type Description Query a query that will return docs like the passed lucene document ID. | Improve this Doc View Source Like(TextReader, String) Return a query that will return docs like the passed . Declaration public Query Like(TextReader r, string fieldName) Parameters Type Name Description TextReader r System.String fieldName Returns Type Description Query a query that will return docs like the passed . | Improve this Doc View Source RetrieveInterestingTerms(Int32) Declaration public string[] RetrieveInterestingTerms(int docNum) Parameters Type Name Description System.Int32 docNum Returns Type Description System.String [] See Also RetrieveInterestingTerms(TextReader, String) | Improve this Doc View Source RetrieveInterestingTerms(TextReader, String) Convenience routine to make it easy to return the most interesting words in a document. More advanced users will call RetrieveTerms(TextReader, String) directly. Declaration public string[] RetrieveInterestingTerms(TextReader r, string fieldName) Parameters Type Name Description TextReader r the source document System.String fieldName field passed to analyzer to use when analyzing the content Returns Type Description System.String [] the most interesting words in the document See Also RetrieveTerms(TextReader, String) MaxQueryTerms | Improve this Doc View Source RetrieveTerms(Int32) Find words for a more-like-this query former. Declaration public PriorityQueue<object[]> RetrieveTerms(int docNum) Parameters Type Name Description System.Int32 docNum the id of the lucene document from which to find terms Returns Type Description PriorityQueue < System.Object []> | Improve this Doc View Source RetrieveTerms(TextReader, String) Find words for a more-like-this query former. The result is a priority queue of arrays with one entry for every word in the document. Each array has 6 elements. The elements are: The word ( ) The top field that this word comes from ( ) The score for this word ( ) The IDF value ( ) The frequency of this word in the index ( ) The frequency of this word in the source document ( ) This is a somewhat \"advanced\" routine, and in general only the 1st entry in the array is of interest. This method is exposed so that you can identify the \"interesting words\" in a document. For an easier method to call see RetrieveInterestingTerms(TextReader, String) . Declaration public PriorityQueue<object[]> RetrieveTerms(TextReader r, string fieldName) Parameters Type Name Description TextReader r the reader that has the content of the document System.String fieldName field passed to the analyzer to use when analyzing the content Returns Type Description PriorityQueue < System.Object []> the most interesting words in the document ordered by score, with the highest scoring, or best entry, first See Also RetrieveInterestingTerms(TextReader, String) | Improve this Doc View Source SetMaxDocFreqPct(Int32) Set the maximum percentage in which words may still appear. Words that appear in more than this many percent of all docs will be ignored. Declaration public void SetMaxDocFreqPct(int maxPercentage) Parameters Type Name Description System.Int32 maxPercentage the maximum percentage of documents (0-100) that a term may appear in to be still considered relevant"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.MoreLikeThisQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.MoreLikeThisQuery.html",
    "title": "Class MoreLikeThisQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MoreLikeThisQuery A simple wrapper for MoreLikeThis for use in scenarios where a Query object is required eg in custom QueryParser extensions. At query.Rewrite() time the reader is used to construct the actual MoreLikeThis object and obtain the real Query object. Inheritance System.Object Query MoreLikeThisQuery Inherited Members Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Lucene.Net.Search.Query.ExtractTerms(ISet<>) Query.Clone() Namespace : Lucene.Net.Queries.Mlt Assembly : Lucene.Net.Queries.dll Syntax public class MoreLikeThisQuery : Query Constructors | Improve this Doc View Source MoreLikeThisQuery(String, String[], Analyzer, String) Declaration public MoreLikeThisQuery(string likeText, string[] moreLikeFields, Analyzer analyzer, string fieldName) Parameters Type Name Description System.String likeText System.String [] moreLikeFields fields used for similarity measure Analyzer analyzer System.String fieldName Properties | Improve this Doc View Source Analyzer Declaration public virtual Analyzer Analyzer { get; set; } Property Value Type Description Analyzer | Improve this Doc View Source LikeText Declaration public virtual string LikeText { get; set; } Property Value Type Description System.String | Improve this Doc View Source MaxQueryTerms Declaration public virtual int MaxQueryTerms { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinDocFreq Declaration public virtual int MinDocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinTermFrequency Declaration public virtual int MinTermFrequency { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MoreLikeFields Declaration public virtual string[] MoreLikeFields { get; set; } Property Value Type Description System.String [] | Improve this Doc View Source PercentTermsToMatch Declaration public virtual float PercentTermsToMatch { get; set; } Property Value Type Description System.Single | Improve this Doc View Source StopWords Declaration public virtual ISet<string> StopWords { get; set; } Property Value Type Description ISet < System.String > Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.TermFilter.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.TermFilter.html",
    "title": "Class TermFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermFilter A filter that includes documents that match with a specific term. Inheritance System.Object Filter TermFilter Inherited Members Lucene.Net.Search.Filter.NewAnonymous(Func<, , >) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public sealed class TermFilter : Filter Constructors | Improve this Doc View Source TermFilter(Term) Declaration public TermFilter(Term term) Parameters Type Name Description Term term The term documents need to have in order to be a match for this filter. Properties | Improve this Doc View Source Term Gets the term this filter includes documents with. Declaration public Term Term { get; } Property Value Type Description Term Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.TermsFilter.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.TermsFilter.html",
    "title": "Class TermsFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsFilter Constructs a filter for docs matching any of the terms added to this class. Unlike a RangeFilter this can be used for filtering on multiple terms that are not necessarily in a sequence. An example might be a collection of primary keys from a database query result or perhaps a choice of \"category\" labels picked by the end user. As a filter, this is much faster than the equivalent query (a BooleanQuery with many \"should\" TermQuery s) Inheritance System.Object Filter TermsFilter Inherited Members Lucene.Net.Search.Filter.NewAnonymous(Func<, , >) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public sealed class TermsFilter : Filter Constructors | Improve this Doc View Source TermsFilter(IList<Term>) Creates a new TermsFilter from the given list. The list can contain duplicate terms and multiple fields. Declaration public TermsFilter(IList<Term> terms) Parameters Type Name Description IList < Term > terms | Improve this Doc View Source TermsFilter(Term[]) Creates a new TermsFilter from the given array. The array can contain duplicate terms and multiple fields. Declaration public TermsFilter(params Term[] terms) Parameters Type Name Description Term [] terms | Improve this Doc View Source TermsFilter(String, IList<BytesRef>) Creates a new TermsFilter from the given BytesRef list for a single field. Declaration public TermsFilter(string field, IList<BytesRef> terms) Parameters Type Name Description System.String field IList < BytesRef > terms | Improve this Doc View Source TermsFilter(String, BytesRef[]) Creates a new TermsFilter from the given BytesRef array for a single field. Declaration public TermsFilter(string field, params BytesRef[] terms) Parameters Type Name Description System.String field BytesRef [] terms Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Analyzing.AnalyzingQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Analyzing.AnalyzingQueryParser.html",
    "title": "Class AnalyzingQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnalyzingQueryParser Overrides Lucene's default QueryParser so that Fuzzy-, Prefix-, Range-, and WildcardQuerys are also passed through the given analyzer, but wildcard characters * and ? don't get removed from the search terms. Warning: This class should only be used with analyzers that do not use stopwords or that add tokens. Also, several stemming analyzers are inappropriate: for example, GermanAnalyzer will turn Häuser into hau , but H?user will become h?user when using this parser and thus no match would be found (i.e. using this parser will be no improvement over QueryParser in such cases). Inheritance System.Object QueryParserBase QueryParser AnalyzingQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParser.Conjunction() QueryParser.Modifiers() QueryParser.TopLevelQuery(String) QueryParser.Query(String) QueryParser.Clause(String) QueryParser.Term(String) QueryParser.TokenSource QueryParser.Token QueryParser.Jj_nt QueryParser.ReInit(ICharStream) QueryParser.ReInit(QueryParserTokenManager) QueryParser.GetNextToken() QueryParser.GetToken(Int32) QueryParser.GenerateParseException() QueryParser.Enable_tracing() QueryParser.Disable_tracing() QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Parse(String) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.GetFieldQuery(String, String, Boolean) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.GetFieldQuery(String, String, Int32) QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.GetRegexpQuery(String, String) QueryParserBase.Escape(String) Namespace : Lucene.Net.QueryParsers.Analyzing Assembly : Lucene.Net.QueryParser.dll Syntax public class AnalyzingQueryParser : QueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source AnalyzingQueryParser(LuceneVersion, String, Analyzer) Declaration public AnalyzingQueryParser(LuceneVersion matchVersion, string field, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion System.String field Analyzer analyzer Methods | Improve this Doc View Source AnalyzeSingleChunk(String, String, String) Returns the analyzed form for the given chunk. If the analyzer produces more than one output token from the given chunk, a ParseException is thrown. Declaration protected virtual string AnalyzeSingleChunk(string field, string termStr, string chunk) Parameters Type Name Description System.String field The target field System.String termStr The full term from which the given chunk is excerpted System.String chunk The portion of the given termStr to be analyzed Returns Type Description System.String The result of analyzing the given chunk Exceptions Type Condition ParseException ParseException when analysis returns other than one output token | Improve this Doc View Source GetFuzzyQuery(String, String, Single) Called when parser parses an input term that has the fuzzy suffix (~) appended. Depending on analyzer and settings, a fuzzy term may (most probably will) be lower-cased automatically. It will go through the default Analyzer. Overrides super class, by passing terms through analyzer. Declaration protected override Query GetFuzzyQuery(string field, string termStr, float minSimilarity) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term to use for building term for the query System.Single minSimilarity Returns Type Description Query Resulting built for the term Overrides QueryParserBase.GetFuzzyQuery(String, String, Single) | Improve this Doc View Source GetPrefixQuery(String, String) Called when parser parses an input term that uses prefix notation; that is, contains a single '*' wildcard character as its last character. Since this is a special case of generic wildcard term, and such a query can be optimized easily, this usually results in a different query object. Depending on analyzer and settings, a prefix term may (most probably will) be lower-cased automatically. It will go through the default Analyzer. Overrides super class, by passing terms through analyzer. Declaration protected override Query GetPrefixQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term to use for building term for the query ( without trailing '*' character!) Returns Type Description Query Resulting built for the term Overrides QueryParserBase.GetPrefixQuery(String, String) | Improve this Doc View Source GetWildcardQuery(String, String) Called when parser parses an input term that uses prefix notation; that is, contains a single '*' wildcard character as its last character. Since this is a special case of generic wildcard term, and such a query can be optimized easily, this usually results in a different query object. Depending on analyzer and settings, a prefix term may (most probably will) be lower-cased automatically. It will go through the default Analyzer. Overrides super class, by passing terms through analyzer. Declaration protected override Query GetWildcardQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term to use for building term for the query ( without trailing '*' character!) Returns Type Description Query Resulting built for the term Overrides QueryParserBase.GetWildcardQuery(String, String) Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Analyzing.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Analyzing.html",
    "title": "Namespace Lucene.Net.QueryParsers.Analyzing | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Analyzing <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> QueryParser that passes Fuzzy-, Prefix-, Range-, and WildcardQuerys through the given analyzer. Classes AnalyzingQueryParser Overrides Lucene's default QueryParser so that Fuzzy-, Prefix-, Range-, and WildcardQuerys are also passed through the given analyzer, but wildcard characters * and ? don't get removed from the search terms. Warning: This class should only be used with analyzers that do not use stopwords or that add tokens. Also, several stemming analyzers are inappropriate: for example, GermanAnalyzer will turn Häuser into hau , but H?user will become h?user when using this parser and thus no match would be found (i.e. using this parser will be no improvement over QueryParser in such cases)."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.FastCharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.FastCharStream.html",
    "title": "Class FastCharStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's API. Inheritance System.Object FastCharStream Implements ICharStream Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class FastCharStream : object, ICharStream Constructors | Improve this Doc View Source FastCharStream(System.IO.TextReader) Constructs from a . Declaration public FastCharStream(System.IO.TextReader r) Parameters Type Name Description System.IO.TextReader r Properties | Improve this Doc View Source BeginColumn Declaration public int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Declaration public int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Declaration public int Column { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn Declaration public int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Declaration public int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Image Declaration public string Image { get; } Property Value Type Description System.String | Improve this Doc View Source Line Declaration public int Line { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source BackUp(Int32) Declaration public void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Declaration public char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() Declaration public void Done() | Improve this Doc View Source GetSuffix(Int32) Declaration public char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Declaration public char ReadChar() Returns Type Description System.Char Implements ICharStream"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.html",
    "title": "Namespace Lucene.Net.QueryParsers.Classic | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Classic <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> A simple query parser implemented with JavaCC. Note that JavaCC defines lots of public classes, methods and fields that do not need to be public. These clutter the documentation. Sorry. Note that because JavaCC defines a class named Token , org.apache.lucene.analysis.Token must always be fully qualified in source code in this package. NOTE : Lucene.Net.QueryParsers.Flexible.Standard has an alternative queryparser that matches the syntax of this one, but is more modular, enabling substantial customization to how a query is created. Query Parser Syntax Overview Terms Fields Term Modifiers Wildcard Searches Regular expression Searches Fuzzy Searches Proximity Searches Range Searches Boosting a Term Boolean Operators OR AND + NOT - Grouping Field Grouping Escaping Special Characters Overview Although Lucene provides the ability to create your own queries through its API, it also provides a rich query language through the Query Parser, a lexer which interprets a string into a Lucene Query using JavaCC. Generally, the query parser syntax may change from release to release. This page describes the syntax as of the current release. If you are using a different version of Lucene, please consult the copy of docs/queryparsersyntax.html that was distributed with the version you are using. Before choosing to use the provided Query Parser, please consider the following: 1. If you are programmatically generating a query string and then parsing it with the query parser then you should seriously consider building your queries directly with the query API. In other words, the query parser is designed for human-entered text, not for program-generated text. 2. Untokenized fields are best added directly to queries, and not through the query parser. If a field's values are generated programmatically by the application, then so should query clauses for this field. An analyzer, which the query parser uses, is designed to convert human-entered text to terms. Program-generated values, like dates, keywords, etc., should be consistently program-generated. 3. In a query form, fields which are general text should use the query parser. All others, such as date ranges, keywords, etc. are better added directly through the query API. A field with a limit set of values, that can be specified with a pull-down menu should not be added to a query string which is subsequently parsed, but rather added as a TermQuery clause. Terms A query is broken up into terms and operators. There are two types of terms: Single Terms and Phrases. A Single Term is a single word such as \"test\" or \"hello\". A Phrase is a group of words surrounded by double quotes such as \"hello dolly\". Multiple terms can be combined together with Boolean operators to form a more complex query (see below). Note: The analyzer used to create the index will be used on the terms and phrases in the query string. So it is important to choose an analyzer that will not interfere with the terms used in the query string. Fields Lucene supports fielded data. When performing a search you can either specify a field, or use the default field. The field names and default field is implementation specific. You can search any field by typing the field name followed by a colon \":\" and then the term you are looking for. As an example, let's assume a Lucene index contains two fields, title and text and text is the default field. If you want to find the document entitled \"The Right Way\" which contains the text \"don't go this way\", you can enter: title:\"The Right Way\" AND text:go or title:\"The Right Way\" AND go Since text is the default field, the field indicator is not required. Note: The field is only valid for the term that it directly precedes, so the query title:The Right Way Will only find \"The\" in the title field. It will find \"Right\" and \"Way\" in the default field (in this case the text field). Term Modifiers Lucene supports modifying query terms to provide a wide range of searching options. Wildcard Searches Lucene supports single and multiple character wildcard searches within single terms (not within phrase queries). To perform a single character wildcard search use the \"?\" symbol. To perform a multiple character wildcard search use the \"*\" symbol. The single character wildcard search looks for terms that match that with the single character replaced. For example, to search for \"text\" or \"test\" you can use the search: te?t Multiple character wildcard searches looks for 0 or more characters. For example, to search for test, tests or tester, you can use the search: test* You can also use the wildcard searches in the middle of a term. te*t Note: You cannot use a * or ? symbol as the first character of a search. Regular Expression Searches Lucene supports regular expression searches matching a pattern between forward slashes \"/\". The syntax may change across releases, but the current supported syntax is documented in the RegExp class. For example to find documents containing \"moat\" or \"boat\": /[mb]oat/ Fuzzy Searches Lucene supports fuzzy searches based on Damerau-Levenshtein Distance. To do a fuzzy search use the tilde, \"~\", symbol at the end of a Single word Term. For example to search for a term similar in spelling to \"roam\" use the fuzzy search: roam~ This search will find terms like foam and roams. An additional (optional) parameter can specify the maximum number of edits allowed. The value is between 0 and 2, For example: roam~1 The default that is used if the parameter is not given is 2 edit distances. Previously, a floating point value was allowed here. This syntax is considered deprecated and will be removed in Lucene 5.0 Proximity Searches Lucene supports finding words are a within a specific distance away. To do a proximity search use the tilde, \"~\", symbol at the end of a Phrase. For example to search for a \"apache\" and \"jakarta\" within 10 words of each other in a document use the search: \"jakarta apache\"~10 Range Searches Range Queries allow one to match documents whose field(s) values are between the lower and upper bound specified by the Range Query. Range Queries can be inclusive or exclusive of the upper and lower bounds. Sorting is done lexicographically. mod_date:[20020101 TO 20030101] This will find documents whose mod_date fields have values between 20020101 and 20030101, inclusive. Note that Range Queries are not reserved for date fields. You could also use range queries with non-date fields: title:{Aida TO Carmen} This will find all documents whose titles are between Aida and Carmen, but not including Aida and Carmen. Inclusive range queries are denoted by square brackets. Exclusive range queries are denoted by curly brackets. Boosting a Term Lucene provides the relevance level of matching documents based on the terms found. To boost a term use the caret, \"^\", symbol with a boost factor (a number) at the end of the term you are searching. The higher the boost factor, the more relevant the term will be. Boosting allows you to control the relevance of a document by boosting its term. For example, if you are searching for jakarta apache and you want the term \"jakarta\" to be more relevant boost it using the ^ symbol along with the boost factor next to the term. You would type: jakarta^4 apache This will make documents with the term jakarta appear more relevant. You can also boost Phrase Terms as in the example: \"jakarta apache\"^4 \"Apache Lucene\" By default, the boost factor is 1. Although the boost factor must be positive, it can be less than 1 (e.g. 0.2) Boolean Operators Boolean operators allow terms to be combined through logic operators. Lucene supports AND, \"+\", OR, NOT and \"-\" as Boolean operators(Note: Boolean operators must be ALL CAPS). OR The OR operator is the default conjunction operator. This means that if there is no Boolean operator between two terms, the OR operator is used. The OR operator links two terms and finds a matching document if either of the terms exist in a document. This is equivalent to a union using sets. The symbol || can be used in place of the word OR. To search for documents that contain either \"jakarta apache\" or just \"jakarta\" use the query: \"jakarta apache\" jakarta or \"jakarta apache\" OR jakarta AND The AND operator matches documents where both terms exist anywhere in the text of a single document. This is equivalent to an intersection using sets. The symbol && can be used in place of the word AND. To search for documents that contain \"jakarta apache\" and \"Apache Lucene\" use the query: \"jakarta apache\" AND \"Apache Lucene\" + The \"+\" or required operator requires that the term after the \"+\" symbol exist somewhere in a the field of a single document. To search for documents that must contain \"jakarta\" and may contain \"lucene\" use the query: +jakarta lucene NOT The NOT operator excludes documents that contain the term after NOT. This is equivalent to a difference using sets. The symbol ! can be used in place of the word NOT. To search for documents that contain \"jakarta apache\" but not \"Apache Lucene\" use the query: \"jakarta apache\" NOT \"Apache Lucene\" Note: The NOT operator cannot be used with just one term. For example, the following search will return no results: NOT \"jakarta apache\" - The \"-\" or prohibit operator excludes documents that contain the term after the \"-\" symbol. To search for documents that contain \"jakarta apache\" but not \"Apache Lucene\" use the query: \"jakarta apache\" -\"Apache Lucene\" Grouping Lucene supports using parentheses to group clauses to form sub queries. This can be very useful if you want to control the boolean logic for a query. To search for either \"jakarta\" or \"apache\" and \"website\" use the query: (jakarta OR apache) AND website This eliminates any confusion and makes sure you that website must exist and either term jakarta or apache may exist. Field Grouping Lucene supports using parentheses to group multiple clauses to a single field. To search for a title that contains both the word \"return\" and the phrase \"pink panther\" use the query: title:(+return +\"pink panther\") Escaping Special Characters Lucene supports escaping special characters that are part of the query syntax. The current list special characters are && || ! ( ) { } [ ] ^ \" ~ * ? : \\ / To escape these character use the \\ before the character. For example to search for (1+1):2 use the query: (1+1):2 Classes FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's API. LexicalToken MultiFieldQueryParser A QueryParser which constructs queries to search multiple fields. ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method GenerateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. QueryParser This class is generated by JavaCC. The most important method is Parse(String) . The syntax for query strings is as follows: A Query is a series of clauses. A clause may be prefixed by: a plus ( + ) or a minus ( - ) sign, indicating that the clause is required or prohibited respectively; or a term followed by a colon, indicating the field to be searched. This enables one to construct queries which search multiple fields. A clause may be either: a term, indicating all the documents that contain this term; or a nested query, enclosed in parentheses. Note that this may be used with a + / - prefix to require any of a set of terms. Thus, in BNF, the query grammar is: Query ::= ( Clause )* Clause ::= [\"+\", \"-\"] [<TERM> \":\"] ( <TERM> | \"(\" Query \")\" ) Examples of appropriately formatted queries can be found in the query syntax documentation . In s, QueryParser tries to detect date values, e.g. date:[6/1/2005 TO 6/4/2005] produces a range query that searches for \"date\" fields between 2005-06-01 and 2005-06-04. Note that the format of the accepted input depends on the . A has to be set, if you want to use for date conversion. The date resolution that shall be used for RangeQueries can be set using or . The former sets the default date resolution for all fields, whereas the latter can be used to set field specific date resolutions. Field specific date resolutions take, if set, precedence over the default date resolution. If you don't use in your index, you can create your own query parser that inherits QueryParser and overwrites GetRangeQuery(String, String, String, Boolean, Boolean) to use a different method for date conversion. Note that QueryParser is not thread-safe. NOTE : there is a new QueryParser in contrib, which matches the same syntax as this class, but is more modular, enabling substantial customization to how a query is created. NOTE : You must specify the required compatibility when creating QueryParser: As of 3.1, AutoGeneratePhraseQueries is false by default. QueryParserBase This class is overridden by QueryParser . QueryParserBase.MethodRemovedUseAnother Do not catch this exception in your code, it means you are using methods that you should no longer use. QueryParserConstants Token literal values and constants. Generated by org.javacc.parser.OtherFilesGen#start() QueryParserTokenManager Token Manager. RegexpToken Token Describes the input token stream. TokenMgrError Token Manager Error. Interfaces ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation. Enums Operator The default operator for parsing queries. Use DefaultOperator to change it."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.ICharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.ICharStream.html",
    "title": "Interface ICharStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation. Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public interface ICharStream Properties | Improve this Doc View Source BeginColumn Returns the column number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Returns the line number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Returns the column position of the character last read. Declaration int Column { get; } Property Value Type Description System.Int32 See Also EndColumn | Improve this Doc View Source EndColumn Returns the column number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Returns the line number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Image Returns a string made up of characters from the marked token beginning to the current buffer position. Implementations have the choice of returning anything that they want to. For example, for efficiency, one might decide to just return null, which is a valid implementation. Declaration string Image { get; } Property Value Type Description System.String | Improve this Doc View Source Line Returns the line number of the character last read. Declaration int Line { get; } Property Value Type Description System.Int32 See Also EndLine Methods | Improve this Doc View Source BackUp(Int32) Backs up the input stream by amount steps. Lexer calls this method if it had already read some characters, but could not use them to match a (longer) token. So, they will be used again as the prefix of the next token and it is the implemetation's responsibility to do this right. Declaration void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Returns the next character that marks the beginning of the next token. All characters must remain in the buffer between two successive calls to this method to implement BackUp(Int32) correctly. Declaration char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() The lexer calls this function to indicate that it is done with the stream and hence implementations can free any resources held by this class. Again, the body of this function can be just empty and it will not affect the lexer's operation. Declaration void Done() | Improve this Doc View Source GetSuffix(Int32) Returns an array of characters that make up the suffix of length 'len' for the currently matched token. This is used to build up the matched string for use in actions in the case of MORE. A simple and inefficient implementation of this is as follows : { string t = Image; return t.Substring(t.Length - len, len).ToCharArray(); } Declaration char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Returns the next character from the selected input. The method of selecting the input is the responsibility of the class implementing this interface. Can throw any . Declaration char ReadChar() Returns Type Description System.Char"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.LexicalToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.LexicalToken.html",
    "title": "Class LexicalToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LexicalToken Inheritance System.Object LexicalToken Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public static class LexicalToken : object Fields | Improve this Doc View Source Boost Lexical state. Declaration public const int Boost = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT Lexical state. Declaration public const int DEFAULT = null Field Value Type Description System.Int32 | Improve this Doc View Source Range Lexical state. Declaration public const int Range = null Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.MultiFieldQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.MultiFieldQueryParser.html",
    "title": "Class MultiFieldQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiFieldQueryParser A QueryParser which constructs queries to search multiple fields. Inheritance System.Object QueryParserBase QueryParser MultiFieldQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParser.Conjunction() QueryParser.Modifiers() QueryParser.TopLevelQuery(String) QueryParser.Query(String) QueryParser.Clause(String) QueryParser.Term(String) QueryParser.TokenSource QueryParser.Token QueryParser.Jj_nt QueryParser.ReInit(ICharStream) QueryParser.ReInit(QueryParserTokenManager) QueryParser.GetNextToken() QueryParser.GetToken(Int32) QueryParser.GenerateParseException() QueryParser.Enable_tracing() QueryParser.Disable_tracing() QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Parse(String) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.Escape(String) Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiFieldQueryParser : QueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source MultiFieldQueryParser(LuceneVersion, String[], Analyzer) Creates a MultiFieldQueryParser. It will, when Parse(String) is called, construct a query like this (assuming the query consists of two terms and you specify the two fields title and body ): (title:term1 body:term1) (title:term2 body:term2) When DefaultOperator is set to AND_OPERATOR , the result will be: +(title:term1 body:term1) +(title:term2 body:term2) In other words, all the query's terms must appear, but it doesn't matter in what fields they appear. Declaration public MultiFieldQueryParser(LuceneVersion matchVersion, string[] fields, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion System.String [] fields Analyzer analyzer | Improve this Doc View Source MultiFieldQueryParser(LuceneVersion, String[], Analyzer, IDictionary<String, Single>) Creates a MultiFieldQueryParser . Allows passing of a map with term to Boost, and the boost to apply to each term. It will, when Parse(String) is called, construct a query like this (assuming the query consists of two terms and you specify the two fields title and body ): (title:term1 body:term1) (title:term2 body:term2) When DefaultOperator is set to AND_OPERATOR , the result will be: +(title:term1 body:term1) +(title:term2 body:term2) When you pass a boost (title=>5 body=>10) you can get +(title:term1^5.0 body:term1^10.0) +(title:term2^5.0 body:term2^10.0) In other words, all the query's terms must appear, but it doesn't matter in what fields they appear. Declaration public MultiFieldQueryParser(LuceneVersion matchVersion, string[] fields, Analyzer analyzer, IDictionary<string, float> boosts) Parameters Type Name Description LuceneVersion matchVersion System.String [] fields Analyzer analyzer IDictionary < System.String , System.Single > boosts Fields | Improve this Doc View Source m_boosts Declaration protected IDictionary<string, float> m_boosts Field Value Type Description IDictionary < System.String , System.Single > | Improve this Doc View Source m_fields Declaration protected string[] m_fields Field Value Type Description System.String [] Methods | Improve this Doc View Source GetFieldQuery(String, String, Boolean) Declaration protected override Query GetFieldQuery(string field, string queryText, bool quoted) Parameters Type Name Description System.String field System.String queryText System.Boolean quoted Returns Type Description Query Overrides QueryParserBase.GetFieldQuery(String, String, Boolean) | Improve this Doc View Source GetFieldQuery(String, String, Int32) Declaration protected override Query GetFieldQuery(string field, string queryText, int slop) Parameters Type Name Description System.String field System.String queryText System.Int32 slop Returns Type Description Query Overrides QueryParserBase.GetFieldQuery(String, String, Int32) | Improve this Doc View Source GetFuzzyQuery(String, String, Single) Declaration protected override Query GetFuzzyQuery(string field, string termStr, float minSimilarity) Parameters Type Name Description System.String field System.String termStr System.Single minSimilarity Returns Type Description Query Overrides QueryParserBase.GetFuzzyQuery(String, String, Single) | Improve this Doc View Source GetPrefixQuery(String, String) Declaration protected override Query GetPrefixQuery(string field, string termStr) Parameters Type Name Description System.String field System.String termStr Returns Type Description Query Overrides QueryParserBase.GetPrefixQuery(String, String) | Improve this Doc View Source GetRangeQuery(String, String, String, Boolean, Boolean) Declaration protected override Query GetRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field System.String part1 System.String part2 System.Boolean startInclusive System.Boolean endInclusive Returns Type Description Query Overrides QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) | Improve this Doc View Source GetRegexpQuery(String, String) Declaration protected override Query GetRegexpQuery(string field, string termStr) Parameters Type Name Description System.String field System.String termStr Returns Type Description Query Overrides QueryParserBase.GetRegexpQuery(String, String) | Improve this Doc View Source GetWildcardQuery(String, String) Declaration protected override Query GetWildcardQuery(string field, string termStr) Parameters Type Name Description System.String field System.String termStr Returns Type Description Query Overrides QueryParserBase.GetWildcardQuery(String, String) | Improve this Doc View Source Parse(LuceneVersion, String, String[], Occur[], Analyzer) Parses a query, searching on the fields specified. Use this if you need to specify certain fields as required, and others as prohibited. Usage: string[] fields = {\"filename\", \"contents\", \"description\"}; Occur[] flags = {Occur.SHOULD, Occur.MUST, Occur.MUST_NOT}; MultiFieldQueryParser.Parse(\"query\", fields, flags, analyzer); The code above would construct a query: (filename:query) +(contents:query) -(description:query) Declaration public static Query Parse(LuceneVersion matchVersion, string query, string[] fields, Occur[] flags, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match; this is passed through to QueryParser . System.String query Query string to parse System.String [] fields Fields to search on Occur [] flags Flags describing the fields Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition ParseException if query parsing fails | Improve this Doc View Source Parse(LuceneVersion, String[], String[], Analyzer) Parses a query which searches on the fields specified. If x fields are specified, this effectively constructs: (field1:query1) (field2:query2) (field3:query3)...(fieldx:queryx) Declaration public static Query Parse(LuceneVersion matchVersion, string[] queries, string[] fields, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match; this is passed through to QueryParser . System.String [] queries Queries strings to parse System.String [] fields Fields to search on Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition ParseException if query parsing fails | Improve this Doc View Source Parse(LuceneVersion, String[], String[], Occur[], Analyzer) Parses a query, searching on the fields specified. Use this if you need to specify certain fields as required, and others as prohibited. Usage: string[] query = {\"query1\", \"query2\", \"query3\"}; string[] fields = {\"filename\", \"contents\", \"description\"}; Occur[] flags = {Occur.SHOULD, Occur.MUST, Occur.MUST_NOT}; MultiFieldQueryParser.Parse(query, fields, flags, analyzer); The code above would construct a query: (filename:query1) +(contents:query2) -(description:query3) Declaration public static Query Parse(LuceneVersion matchVersion, string[] queries, string[] fields, Occur[] flags, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match; this is passed through to QueryParser . System.String [] queries Queries string to parse System.String [] fields Fields to search on Occur [] flags Flags describing the fields Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition ParseException if query parsing fails Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.Operator.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.Operator.html",
    "title": "Enum Operator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Operator The default operator for parsing queries. Use DefaultOperator to change it. Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public enum Operator : int Fields Name Description AND OR"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.ParseException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.ParseException.html",
    "title": "Class ParseException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method GenerateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. Inheritance System.Object ParseException Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class ParseException : Exception Constructors | Improve this Doc View Source ParseException() Declaration public ParseException() | Improve this Doc View Source ParseException(Token, Int32[][], String[]) This constructor is used by the method GenerateParseException() in the generated parser. Calling this constructor generates a new object of this type with the fields currentToken , expectedTokenSequences , and tokenImage set. Declaration public ParseException(Token currentToken, int[][] expectedTokenSequences, string[] tokenImage) Parameters Type Name Description Token currentToken System.Int32 [][] expectedTokenSequences System.String [] tokenImage | Improve this Doc View Source ParseException(String) Declaration public ParseException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source ParseException(String, Exception) Declaration public ParseException(string message, Exception innerException) Parameters Type Name Description System.String message Exception innerException Fields | Improve this Doc View Source eol The end of line string for this machine. Declaration protected static string eol Field Value Type Description System.String Properties | Improve this Doc View Source CurrentToken This is the last token that has been consumed successfully. If this object has been created due to a parse error, the token following this token will (therefore) be the first error token. Declaration public Token CurrentToken { get; set; } Property Value Type Description Token | Improve this Doc View Source ExpectedTokenSequences Each entry in this array is an array of integers. Each array of integers represents a sequence of tokens (by their ordinal values) that is expected at this point of the parse. Declaration public int[][] ExpectedTokenSequences { get; set; } Property Value Type Description System.Int32 [][] | Improve this Doc View Source TokenImage This is a reference to the \"tokenImage\" array of the generated parser within which the parse error occurred. This array is defined in the generated ...Constants interface. Declaration public string[] TokenImage { get; set; } Property Value Type Description System.String []"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParser.html",
    "title": "Class QueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParser This class is generated by JavaCC. The most important method is Parse(String) . The syntax for query strings is as follows: A Query is a series of clauses. A clause may be prefixed by: a plus ( + ) or a minus ( - ) sign, indicating that the clause is required or prohibited respectively; or a term followed by a colon, indicating the field to be searched. This enables one to construct queries which search multiple fields. A clause may be either: a term, indicating all the documents that contain this term; or a nested query, enclosed in parentheses. Note that this may be used with a + / - prefix to require any of a set of terms. Thus, in BNF, the query grammar is: Query ::= ( Clause )* Clause ::= [\"+\", \"-\"] [<TERM> \":\"] ( <TERM> | \"(\" Query \")\" ) Examples of appropriately formatted queries can be found in the query syntax documentation . In s, QueryParser tries to detect date values, e.g. date:[6/1/2005 TO 6/4/2005] produces a range query that searches for \"date\" fields between 2005-06-01 and 2005-06-04. Note that the format of the accepted input depends on the . A has to be set, if you want to use for date conversion. The date resolution that shall be used for RangeQueries can be set using or . The former sets the default date resolution for all fields, whereas the latter can be used to set field specific date resolutions. Field specific date resolutions take, if set, precedence over the default date resolution. If you don't use in your index, you can create your own query parser that inherits QueryParser and overwrites GetRangeQuery(String, String, String, Boolean, Boolean) to use a different method for date conversion. Note that QueryParser is not thread-safe. NOTE : there is a new QueryParser in contrib, which matches the same syntax as this class, but is more modular, enabling substantial customization to how a query is created. NOTE : You must specify the required compatibility when creating QueryParser: As of 3.1, AutoGeneratePhraseQueries is false by default. Inheritance System.Object QueryParserBase QueryParser AnalyzingQueryParser MultiFieldQueryParser ComplexPhraseQueryParser ExtendableQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Parse(String) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.GetFieldQuery(String, String, Boolean) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.GetFieldQuery(String, String, Int32) QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.GetWildcardQuery(String, String) QueryParserBase.GetRegexpQuery(String, String) QueryParserBase.GetPrefixQuery(String, String) QueryParserBase.GetFuzzyQuery(String, String, Single) QueryParserBase.Escape(String) Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParser : QueryParserBase, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source QueryParser(ICharStream) Constructor with user supplied ICharStream . Declaration protected QueryParser(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source QueryParser(QueryParserTokenManager) Constructor with generated Token Manager. Declaration protected QueryParser(QueryParserTokenManager tm) Parameters Type Name Description QueryParserTokenManager tm | Improve this Doc View Source QueryParser(LuceneVersion, String, Analyzer) Constructs a query parser. Declaration public QueryParser(LuceneVersion matchVersion, string f, Analyzer a) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match. System.String f the default field for query terms. Analyzer a used to find terms in the query text. Properties | Improve this Doc View Source Jj_nt Next token. Declaration public Token Jj_nt { get; set; } Property Value Type Description Token | Improve this Doc View Source Token Current token. Declaration public Token Token { get; set; } Property Value Type Description Token | Improve this Doc View Source TokenSource Generated Token Manager. Declaration public QueryParserTokenManager TokenSource { get; set; } Property Value Type Description QueryParserTokenManager Methods | Improve this Doc View Source Clause(String) Declaration public Query Clause(string field) Parameters Type Name Description System.String field Returns Type Description Query | Improve this Doc View Source Conjunction() Declaration public int Conjunction() Returns Type Description System.Int32 | Improve this Doc View Source Disable_tracing() Disable tracing. Declaration public void Disable_tracing() | Improve this Doc View Source Enable_tracing() Enable tracing. Declaration public void Enable_tracing() | Improve this Doc View Source GenerateParseException() Generate ParseException. Declaration public virtual ParseException GenerateParseException() Returns Type Description ParseException | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public Token GetNextToken() Returns Type Description Token | Improve this Doc View Source GetToken(Int32) Get the specific Token. Declaration public Token GetToken(int index) Parameters Type Name Description System.Int32 index Returns Type Description Token | Improve this Doc View Source Modifiers() Declaration public int Modifiers() Returns Type Description System.Int32 | Improve this Doc View Source Query(String) Declaration public Query Query(string field) Parameters Type Name Description System.String field Returns Type Description Query | Improve this Doc View Source ReInit(ICharStream) Reinitialize. Declaration public override void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream Overrides QueryParserBase.ReInit(ICharStream) | Improve this Doc View Source ReInit(QueryParserTokenManager) Reinitialize. Declaration public virtual void ReInit(QueryParserTokenManager tm) Parameters Type Name Description QueryParserTokenManager tm | Improve this Doc View Source Term(String) Declaration public Query Term(string field) Parameters Type Name Description System.String field Returns Type Description Query | Improve this Doc View Source TopLevelQuery(String) Declaration public override sealed Query TopLevelQuery(string field) Parameters Type Name Description System.String field Returns Type Description Query Overrides QueryParserBase.TopLevelQuery(String) Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserBase.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserBase.html",
    "title": "Class QueryParserBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserBase This class is overridden by QueryParser . Inheritance System.Object QueryParserBase QueryParser Implements ICommonQueryParserConfiguration Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryParserBase : QueryBuilder, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source QueryParserBase() So the generated QueryParser(CharStream) won't error out Declaration protected QueryParserBase() Fields | Improve this Doc View Source AND_OPERATOR Alternative form of AND Declaration public const Operator AND_OPERATOR = Operator.AND Field Value Type Description Operator | Improve this Doc View Source CONJ_AND Declaration protected const int CONJ_AND = null Field Value Type Description System.Int32 | Improve this Doc View Source CONJ_NONE Declaration protected const int CONJ_NONE = null Field Value Type Description System.Int32 | Improve this Doc View Source CONJ_OR Declaration protected const int CONJ_OR = null Field Value Type Description System.Int32 | Improve this Doc View Source m_field Declaration protected string m_field Field Value Type Description System.String | Improve this Doc View Source MOD_NONE Declaration protected const int MOD_NONE = null Field Value Type Description System.Int32 | Improve this Doc View Source MOD_NOT Declaration protected const int MOD_NOT = null Field Value Type Description System.Int32 | Improve this Doc View Source MOD_REQ Declaration protected const int MOD_REQ = null Field Value Type Description System.Int32 | Improve this Doc View Source OR_OPERATOR Alternative form of OR Declaration public const Operator OR_OPERATOR = Operator.OR Field Value Type Description Operator Properties | Improve this Doc View Source AllowLeadingWildcard Set to true to allow leading wildcard characters. When set, * or ? are allowed as the first character of a PrefixQuery and WildcardQuery. Note that this can produce very slow queries on big indexes. Default: false. Declaration public virtual bool AllowLeadingWildcard { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source AnalyzeRangeTerms Get or Set whether or not to analyze range terms when constructing s. For example, setting this to true can enable analyzing terms into collation keys for locale-sensitive . Declaration public virtual bool AnalyzeRangeTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source AutoGeneratePhraseQueries Set to true if phrase queries will be automatically generated when the analyzer returns more than one term from whitespace delimited text. NOTE: this behavior may not be suitable for all languages. Set to false if phrase queries should only be generated when surrounded by double quotes. Declaration public bool AutoGeneratePhraseQueries { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source DefaultOperator Gets or Sets the boolean operator of the QueryParser. In default mode ( OR_OPERATOR ) terms without any modifiers are considered optional: for example capital of Hungary is equal to capital OR of OR Hungary . In AND_OPERATOR mode terms are considered to be in conjunction: the above mentioned query is parsed as capital AND of AND Hungary Declaration public virtual Operator DefaultOperator { get; set; } Property Value Type Description Operator | Improve this Doc View Source Field Returns the default field. Declaration public virtual string Field { get; } Property Value Type Description System.String | Improve this Doc View Source FuzzyMinSim Get or Set the minimum similarity for fuzzy queries. Default is 2f. Declaration public virtual float FuzzyMinSim { get; set; } Property Value Type Description System.Single | Improve this Doc View Source FuzzyPrefixLength Get or Set the prefix length for fuzzy queries. Default is 0. Declaration public virtual int FuzzyPrefixLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Locale Get or Set locale used by date range parsing, lowercasing, and other locale-sensitive operations. By default, the culture is null , which indicates to read the culture on the fly from . This ensures if you change the culture on the current thread, QueryParser will utilize it. You can also explicitly set a culture. Setting the culture to null will restore the default behavior if you have explicitly set a culture. Declaration public virtual CultureInfo Locale { get; set; } Property Value Type Description CultureInfo | Improve this Doc View Source LowercaseExpandedTerms Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically lower-cased or not. Default is true . Declaration public virtual bool LowercaseExpandedTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MultiTermRewriteMethod By default QueryParser uses when creating a , or . This implementation is generally preferable because it a) Runs faster b) Does not have the scarcity of terms unduly influence score c) avoids any exception. However, if your application really needs to use the old-fashioned expansion rewriting and the above points are not relevant then use this to change the rewrite method. Declaration public virtual MultiTermQuery.RewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source PhraseSlop Gets or Sets the default slop for phrases. If zero, then exact phrase matches are required. Default value is zero. Declaration public virtual int PhraseSlop { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TimeZone Get or Set the current time zone for date and time parsing operations. By default, the time zone is null , which indicates to read the time zone on the fly from . This ensures if you change the time zone on the current system, QueryParser will utilize it. You can also explicitly set a time zone. Setting the time zone to null will restore the default behavior if you have explicitly set a time zone. Declaration public virtual TimeZoneInfo TimeZone { get; set; } Property Value Type Description TimeZoneInfo Methods | Improve this Doc View Source AddClause(IList<BooleanClause>, Int32, Int32, Query) Declaration protected virtual void AddClause(IList<BooleanClause> clauses, int conj, int mods, Query q) Parameters Type Name Description IList < BooleanClause > clauses System.Int32 conj System.Int32 mods Query q | Improve this Doc View Source AnalyzeMultitermTerm(String, String, Analyzer) Declaration protected virtual BytesRef AnalyzeMultitermTerm(string field, string part, Analyzer analyzerIn) Parameters Type Name Description System.String field System.String part Analyzer analyzerIn Returns Type Description BytesRef | Improve this Doc View Source Escape(String) Returns a string where those characters that QueryParser expects to be escaped are escaped by a preceding \\ . Declaration public static string Escape(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetBooleanQuery(IList<BooleanClause>) Factory method for generating query, given a set of clauses. By default creates a boolean query composed of clauses passed in. Can be overridden by extending classes, to modify query being returned. Declaration protected virtual Query GetBooleanQuery(IList<BooleanClause> clauses) Parameters Type Name Description IList < BooleanClause > clauses List that contains instances to join. Returns Type Description Query Resulting object. Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetBooleanQuery(IList<BooleanClause>, Boolean) Factory method for generating query, given a set of clauses. By default creates a boolean query composed of clauses passed in. Can be overridden by extending classes, to modify query being returned. Declaration protected virtual Query GetBooleanQuery(IList<BooleanClause> clauses, bool disableCoord) Parameters Type Name Description IList < BooleanClause > clauses List that contains instances to join. System.Boolean disableCoord true if coord scoring should be disabled. Returns Type Description Query Resulting object. Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetDateResolution(String) Returns the date resolution that is used by RangeQueries for the given field. Returns null, if no default or field specific date resolution has been set for the given field. Declaration public virtual DateTools.Resolution GetDateResolution(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description DateTools.Resolution | Improve this Doc View Source GetFieldQuery(String, String, Boolean) Declaration protected virtual Query GetFieldQuery(string field, string queryText, bool quoted) Parameters Type Name Description System.String field System.String queryText System.Boolean quoted Returns Type Description Query Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetFieldQuery(String, String, Int32) Base implementation delegates to GetFieldQuery(String, String, Boolean) . This method may be overridden, for example, to return a instead of a . Declaration protected virtual Query GetFieldQuery(string field, string queryText, int slop) Parameters Type Name Description System.String field System.String queryText System.Int32 slop Returns Type Description Query Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetFuzzyQuery(String, String, Single) Factory method for generating a query (similar to GetWildcardQuery(String, String) ). Called when parser parses an input term token that has the fuzzy suffix (~) appended. Declaration protected virtual Query GetFuzzyQuery(string field, string termStr, float minSimilarity) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term token to use for building term for the query System.Single minSimilarity minimum similarity Returns Type Description Query Resulting built for the term Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetPrefixQuery(String, String) Factory method for generating a query (similar to GetWildcardQuery(String, String) ). Called when parser parses an input term token that uses prefix notation; that is, contains a single '*' wildcard character as its last character. Since this is a special case of generic wildcard term, and such a query can be optimized easily, this usually results in a different query object. Depending on settings, a prefix term may be lower-cased automatically. It will not go through the default Analyzer, however, since normal Analyzers are unlikely to work properly with wildcard templates. Can be overridden by extending classes, to provide custom handling for wild card queries, which may be necessary due to missing analyzer calls. Declaration protected virtual Query GetPrefixQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term token to use for building term for the query Returns Type Description Query Resulting built for the term Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetRangeQuery(String, String, String, Boolean, Boolean) Declaration protected virtual Query GetRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field System.String part1 System.String part2 System.Boolean startInclusive System.Boolean endInclusive Returns Type Description Query | Improve this Doc View Source GetRegexpQuery(String, String) Factory method for generating a query. Called when parser parses an input term token that contains a regular expression query. Depending on settings, pattern term may be lower-cased automatically. It will not go through the default Analyzer, however, since normal Analyzers are unlikely to work properly with regular expression templates. Can be overridden by extending classes, to provide custom handling for regular expression queries, which may be necessary due to missing analyzer calls. Declaration protected virtual Query GetRegexpQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term token that contains a regular expression Returns Type Description Query Resulting built for the term Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetWildcardQuery(String, String) Factory method for generating a query. Called when parser parses an input term token that contains one or more wildcard characters (? and *), but is not a prefix term token (one that has just a single * character at the end) Depending on settings, prefix term may be lower-cased automatically. It will not go through the default Analyzer, however, since normal Analyzers are unlikely to work properly with wildcard templates. Can be overridden by extending classes, to provide custom handling for wildcard queries, which may be necessary due to missing analyzer calls. Declaration protected virtual Query GetWildcardQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term token that contains one or more wild card characters (? or *), but is not simple prefix term Returns Type Description Query Resulting built for the term Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source Init(LuceneVersion, String, Analyzer) Initializes a query parser. Called by the QueryParser constructor Declaration public virtual void Init(LuceneVersion matchVersion, string f, Analyzer a) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match. System.String f the default field for query terms. Analyzer a used to find terms in the query text. | Improve this Doc View Source NewBooleanClause(Query, Occur) Builds a new instance Declaration protected virtual BooleanClause NewBooleanClause(Query q, Occur occur) Parameters Type Name Description Query q sub query Occur occur how this clause should occur when matching documents Returns Type Description BooleanClause new instance | Improve this Doc View Source NewFieldQuery(Analyzer, String, String, Boolean) Declaration protected virtual Query NewFieldQuery(Analyzer analyzer, string field, string queryText, bool quoted) Parameters Type Name Description Analyzer analyzer System.String field System.String queryText System.Boolean quoted Returns Type Description Query Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source NewFuzzyQuery(Term, Single, Int32) Builds a new instance Declaration protected virtual Query NewFuzzyQuery(Term term, float minimumSimilarity, int prefixLength) Parameters Type Name Description Term term Term System.Single minimumSimilarity minimum similarity System.Int32 prefixLength prefix length Returns Type Description Query new Instance | Improve this Doc View Source NewMatchAllDocsQuery() Builds a new instance Declaration protected virtual Query NewMatchAllDocsQuery() Returns Type Description Query new instance | Improve this Doc View Source NewPrefixQuery(Term) Builds a new instance Declaration protected virtual Query NewPrefixQuery(Term prefix) Parameters Type Name Description Term prefix Prefix term Returns Type Description Query new instance | Improve this Doc View Source NewRangeQuery(String, String, String, Boolean, Boolean) Builds a new instance Declaration protected virtual Query NewRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field Field System.String part1 min System.String part2 max System.Boolean startInclusive true if the start of the range is inclusive System.Boolean endInclusive true if the end of the range is inclusive Returns Type Description Query new instance | Improve this Doc View Source NewRegexpQuery(Term) Builds a new instance Declaration protected virtual Query NewRegexpQuery(Term regexp) Parameters Type Name Description Term regexp Regexp term Returns Type Description Query new instance | Improve this Doc View Source NewWildcardQuery(Term) Builds a new instance Declaration protected virtual Query NewWildcardQuery(Term t) Parameters Type Name Description Term t wildcard term Returns Type Description Query new instance | Improve this Doc View Source Parse(String) Parses a query string, returning a . Declaration public virtual Query Parse(string query) Parameters Type Name Description System.String query the query string to be parsed. Returns Type Description Query Exceptions Type Condition ParseException if the parsing fails | Improve this Doc View Source ReInit(ICharStream) Declaration public abstract void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source SetDateResolution(DateTools.Resolution) Gets or Sets the default date resolution used by RangeQueries for fields for which no specific date resolutions has been set. Field specific resolutions can be set with SetDateResolution(String, DateTools.Resolution) . Declaration public virtual void SetDateResolution(DateTools.Resolution dateResolution) Parameters Type Name Description DateTools.Resolution dateResolution | Improve this Doc View Source SetDateResolution(String, DateTools.Resolution) Sets the date resolution used by RangeQueries for a specific field. Declaration public virtual void SetDateResolution(string fieldName, DateTools.Resolution dateResolution) Parameters Type Name Description System.String fieldName field for which the date resolution is to be set DateTools.Resolution dateResolution date resolution to set | Improve this Doc View Source TopLevelQuery(String) Declaration public abstract Query TopLevelQuery(string field) Parameters Type Name Description System.String field Returns Type Description Query Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserBase.MethodRemovedUseAnother.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserBase.MethodRemovedUseAnother.html",
    "title": "Class QueryParserBase.MethodRemovedUseAnother | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserBase.MethodRemovedUseAnother Do not catch this exception in your code, it means you are using methods that you should no longer use. Inheritance System.Object QueryParserBase.MethodRemovedUseAnother Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class MethodRemovedUseAnother : Exception Constructors | Improve this Doc View Source MethodRemovedUseAnother() Declaration public MethodRemovedUseAnother()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserConstants.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserConstants.html",
    "title": "Class QueryParserConstants | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserConstants Token literal values and constants. Generated by org.javacc.parser.OtherFilesGen#start() Inheritance System.Object QueryParserConstants Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public static class QueryParserConstants : object Fields | Improve this Doc View Source TokenImage Literal token values. Declaration public static string[] TokenImage Field Value Type Description System.String []"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserTokenManager.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserTokenManager.html",
    "title": "Class QueryParserTokenManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserTokenManager Token Manager. Inheritance System.Object QueryParserTokenManager Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParserTokenManager : object Constructors | Improve this Doc View Source QueryParserTokenManager(ICharStream) Constructor. Declaration public QueryParserTokenManager(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source QueryParserTokenManager(ICharStream, Int32) Constructor. Declaration public QueryParserTokenManager(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState Fields | Improve this Doc View Source jjnewLexState Lex State array. Declaration public static readonly int[] jjnewLexState Field Value Type Description System.Int32 [] | Improve this Doc View Source jjstrLiteralImages Token literal values. Declaration public static readonly string[] jjstrLiteralImages Field Value Type Description System.String [] | Improve this Doc View Source lexStateNames Lexer state names. Declaration public static readonly string[] lexStateNames Field Value Type Description System.String [] | Improve this Doc View Source m_curChar Declaration protected char m_curChar Field Value Type Description System.Char | Improve this Doc View Source m_input_stream Declaration protected ICharStream m_input_stream Field Value Type Description ICharStream Methods | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public virtual Token GetNextToken() Returns Type Description Token | Improve this Doc View Source JjFillToken() Declaration protected virtual Token JjFillToken() Returns Type Description Token | Improve this Doc View Source ReInit(ICharStream) Reinitialise parser. Declaration public virtual void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(ICharStream, Int32) Reinitialise parser. Declaration public virtual void ReInit(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState | Improve this Doc View Source SetDebugStream(TextWriter) Set debug output. Declaration public virtual void SetDebugStream(TextWriter ds) Parameters Type Name Description TextWriter ds | Improve this Doc View Source SwitchTo(Int32) Switch to specified lex state. Declaration public virtual void SwitchTo(int lexState) Parameters Type Name Description System.Int32 lexState"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.RegexpToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.RegexpToken.html",
    "title": "Class RegexpToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RegexpToken Inheritance System.Object RegexpToken Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public static class RegexpToken : object Fields | Improve this Doc View Source AND RegularExpression Id. Declaration public const int AND = null Field Value Type Description System.Int32 | Improve this Doc View Source BAREOPER RegularExpression Id. Declaration public const int BAREOPER = null Field Value Type Description System.Int32 | Improve this Doc View Source CARAT RegularExpression Id. Declaration public const int CARAT = null Field Value Type Description System.Int32 | Improve this Doc View Source COLON RegularExpression Id. Declaration public const int COLON = null Field Value Type Description System.Int32 | Improve this Doc View Source EOF End of File. Declaration public const int EOF = null Field Value Type Description System.Int32 | Improve this Doc View Source ESCAPED_CHAR RegularExpression Id. Declaration public const int ESCAPED_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source FUZZY_SLOP RegularExpression Id. Declaration public const int FUZZY_SLOP = null Field Value Type Description System.Int32 | Improve this Doc View Source LPAREN RegularExpression Id. Declaration public const int LPAREN = null Field Value Type Description System.Int32 | Improve this Doc View Source MINUS RegularExpression Id. Declaration public const int MINUS = null Field Value Type Description System.Int32 | Improve this Doc View Source NOT RegularExpression Id. Declaration public const int NOT = null Field Value Type Description System.Int32 | Improve this Doc View Source NUM_CHAR RegularExpression Id. Declaration public const int NUM_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source NUMBER RegularExpression Id. Declaration public const int NUMBER = null Field Value Type Description System.Int32 | Improve this Doc View Source OR RegularExpression Id. Declaration public const int OR = null Field Value Type Description System.Int32 | Improve this Doc View Source PLUS RegularExpression Id. Declaration public const int PLUS = null Field Value Type Description System.Int32 | Improve this Doc View Source PREFIXTERM RegularExpression Id. Declaration public const int PREFIXTERM = null Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED RegularExpression Id. Declaration public const int QUOTED = null Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED_CHAR RegularExpression Id. Declaration public const int QUOTED_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_GOOP RegularExpression Id. Declaration public const int RANGE_GOOP = null Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_QUOTED RegularExpression Id. Declaration public const int RANGE_QUOTED = null Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_TO RegularExpression Id. Declaration public const int RANGE_TO = null Field Value Type Description System.Int32 | Improve this Doc View Source RANGEEX_END RegularExpression Id. Declaration public const int RANGEEX_END = null Field Value Type Description System.Int32 | Improve this Doc View Source RANGEEX_START RegularExpression Id. Declaration public const int RANGEEX_START = null Field Value Type Description System.Int32 | Improve this Doc View Source RANGEIN_END RegularExpression Id. Declaration public const int RANGEIN_END = null Field Value Type Description System.Int32 | Improve this Doc View Source RANGEIN_START RegularExpression Id. Declaration public const int RANGEIN_START = null Field Value Type Description System.Int32 | Improve this Doc View Source REGEXPTERM RegularExpression Id. Declaration public const int REGEXPTERM = null Field Value Type Description System.Int32 | Improve this Doc View Source RPAREN RegularExpression Id. Declaration public const int RPAREN = null Field Value Type Description System.Int32 | Improve this Doc View Source STAR RegularExpression Id. Declaration public const int STAR = null Field Value Type Description System.Int32 | Improve this Doc View Source TERM RegularExpression Id. Declaration public const int TERM = null Field Value Type Description System.Int32 | Improve this Doc View Source TERM_CHAR RegularExpression Id. Declaration public const int TERM_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source TERM_START_CHAR RegularExpression Id. Declaration public const int TERM_START_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source WHITESPACE RegularExpression Id. Declaration public const int WHITESPACE = null Field Value Type Description System.Int32 | Improve this Doc View Source WILDTERM RegularExpression Id. Declaration public const int WILDTERM = null Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.Token.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Token Describes the input token stream. Inheritance System.Object Token Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class Token : object Constructors | Improve this Doc View Source Token() No-argument constructor Declaration public Token() | Improve this Doc View Source Token(Int32) Constructs a new token for the specified Image. Declaration public Token(int kind) Parameters Type Name Description System.Int32 kind | Improve this Doc View Source Token(Int32, String) Constructs a new token for the specified Image and Kind. Declaration public Token(int kind, string image) Parameters Type Name Description System.Int32 kind System.String image Properties | Improve this Doc View Source BeginColumn The column number of the first character of this Token. Declaration public int BeginColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine The line number of the first character of this Token. Declaration public int BeginLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn The column number of the last character of this Token. Declaration public int EndColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine The line number of the last character of this Token. Declaration public int EndLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Image The string image of the token. Declaration public string Image { get; set; } Property Value Type Description System.String | Improve this Doc View Source Kind An integer that describes the kind of this token. This numbering system is determined by JavaCCParser, and a table of these numbers is stored in the file ...Constants.java. Declaration public int Kind { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Next A reference to the next regular (non-special) token from the input stream. If this is the last token from the input stream, or if the token manager has not read tokens beyond this one, this field is set to null. This is true only if this token is also a regular token. Otherwise, see below for a description of the contents of this field. Declaration public Token Next { get; set; } Property Value Type Description Token | Improve this Doc View Source SpecialToken This field is used to access special tokens that occur prior to this token, but after the immediately preceding regular (non-special) token. If there are no such special tokens, this field is set to null. When there are more than one such special token, this field refers to the last of these special tokens, which in turn refers to the next previous special token through its specialToken field, and so on until the first special token (whose specialToken field is null). The next fields of special tokens refer to other special tokens that immediately follow it (without an intervening regular token). If there is no such token, this field is null. Declaration public Token SpecialToken { get; set; } Property Value Type Description Token | Improve this Doc View Source Value An optional attribute value of the Token. Tokens which are not used as syntactic sugar will often contain meaningful values that will be used later on by the compiler or interpreter. This attribute value is often different from the image. Any subclass of Token that actually wants to return a non-null value can override this method as appropriate. Declaration public virtual object Value { get; } Property Value Type Description System.Object Methods | Improve this Doc View Source NewToken(Int32) Declaration public static Token NewToken(int ofKind) Parameters Type Name Description System.Int32 ofKind Returns Type Description Token | Improve this Doc View Source NewToken(Int32, String) Returns a new Token object, by default. However, if you want, you can create and return subclass objects based on the value of ofKind. Simply add the cases to the switch for all those special cases. For example, if you have a subclass of Token called IDToken that you want to create if ofKind is ID, simply add something like : case MyParserConstants.ID : return new IDToken(ofKind, image); to the following switch statement. Then you can cast matchedToken variable to the appropriate type and use sit in your lexical actions. Declaration public static Token NewToken(int ofKind, string image) Parameters Type Name Description System.Int32 ofKind System.String image Returns Type Description Token | Improve this Doc View Source ToString() Returns the image. Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.TokenMgrError.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.TokenMgrError.html",
    "title": "Class TokenMgrError | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenMgrError Token Manager Error. Inheritance System.Object TokenMgrError Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class TokenMgrError : Exception Constructors | Improve this Doc View Source TokenMgrError() No arg constructor. Declaration public TokenMgrError() | Improve this Doc View Source TokenMgrError(Boolean, Int32, Int32, Int32, String, Char, Int32) Full Constructor. Declaration public TokenMgrError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar, int reason) Parameters Type Name Description System.Boolean eofSeen System.Int32 lexState System.Int32 errorLine System.Int32 errorColumn System.String errorAfter System.Char curChar System.Int32 reason | Improve this Doc View Source TokenMgrError(String, Int32) Constructor with message and reason. Declaration public TokenMgrError(string message, int reason) Parameters Type Name Description System.String message System.Int32 reason Properties | Improve this Doc View Source Message You can also modify the body of this method to customize your error messages. For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not of end-users concern, so you can return something like : \"Internal Error : Please file a bug report .... \" from this method for such cases in the release version of your parser. Declaration public override string Message { get; } Property Value Type Description System.String Methods | Improve this Doc View Source AddEscapes(String) Replaces unprintable characters by their escaped (or unicode escaped) equivalents in the given string Declaration protected static string AddEscapes(string str) Parameters Type Name Description System.String str Returns Type Description System.String | Improve this Doc View Source LexicalError(Boolean, Int32, Int32, Int32, String, Char) Returns a detailed message for the Error when it is thrown by the token manager to indicate a lexical error. Declaration protected static string LexicalError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar) Parameters Type Name Description System.Boolean eofSeen indicates if EOF caused the lexical error System.Int32 lexState lexical state in which this error occurred System.Int32 errorLine line number when the error occurred System.Int32 errorColumn column number when the error occurred System.String errorAfter prefix that was seen before this error occurred System.Char curChar the offending character Returns Type Description System.String Detailed error message Remarks You can customize the lexical error message by modifying this method."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.ComplexPhraseQueryParser.ComplexPhraseQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.ComplexPhraseQueryParser.ComplexPhraseQuery.html",
    "title": "Class ComplexPhraseQueryParser.ComplexPhraseQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ComplexPhraseQueryParser.ComplexPhraseQuery Used to handle the query content in between quotes and produced Span-based interpretations of the clauses. Inheritance System.Object ComplexPhraseQueryParser.ComplexPhraseQuery Namespace : Lucene.Net.QueryParsers.ComplexPhrase Assembly : Lucene.Net.QueryParser.dll Syntax public class ComplexPhraseQuery : Query Constructors | Improve this Doc View Source ComplexPhraseQuery(String, String, Int32, Boolean) Declaration public ComplexPhraseQuery(string field, string phrasedQueryStringContents, int slopFactor, bool inOrder) Parameters Type Name Description System.String field System.String phrasedQueryStringContents System.Int32 slopFactor System.Boolean inOrder Properties | Improve this Doc View Source Field Declaration public string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ParsePhraseElements(ComplexPhraseQueryParser) Declaration protected void ParsePhraseElements(ComplexPhraseQueryParser qp) Parameters Type Name Description ComplexPhraseQueryParser qp | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.ComplexPhraseQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.ComplexPhraseQueryParser.html",
    "title": "Class ComplexPhraseQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ComplexPhraseQueryParser QueryParser which permits complex phrase query syntax eg \"(john jon jonathan~) peters*\". Performs potentially multiple passes over Query text to parse any nested logic in PhraseQueries. - First pass takes any PhraseQuery content between quotes and stores for subsequent pass. All other query content is parsed as normal - Second pass parses any stored PhraseQuery content, checking all embedded clauses are referring to the same field and therefore can be rewritten as Span queries. All PhraseQuery clauses are expressed as ComplexPhraseQuery objects This could arguably be done in one pass using a new QueryParser but here I am working within the constraints of the existing parser as a base class. This currently simply feeds all phrase content through an analyzer to select phrase terms - any \"special\" syntax such as * ~ * etc are not given special status Inheritance System.Object QueryParserBase QueryParser ComplexPhraseQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParser.Conjunction() QueryParser.Modifiers() QueryParser.TopLevelQuery(String) QueryParser.Query(String) QueryParser.Clause(String) QueryParser.Term(String) QueryParser.TokenSource QueryParser.Token QueryParser.Jj_nt QueryParser.ReInit(ICharStream) QueryParser.ReInit(QueryParserTokenManager) QueryParser.GetNextToken() QueryParser.GetToken(Int32) QueryParser.GenerateParseException() QueryParser.Enable_tracing() QueryParser.Disable_tracing() QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.GetFieldQuery(String, String, Boolean) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.GetRegexpQuery(String, String) QueryParserBase.GetPrefixQuery(String, String) QueryParserBase.Escape(String) Namespace : Lucene.Net.QueryParsers.ComplexPhrase Assembly : Lucene.Net.QueryParser.dll Syntax public class ComplexPhraseQueryParser : QueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source ComplexPhraseQueryParser(LuceneVersion, String, Analyzer) Declaration public ComplexPhraseQueryParser(LuceneVersion matchVersion, string f, Analyzer a) Parameters Type Name Description LuceneVersion matchVersion System.String f Analyzer a Properties | Improve this Doc View Source InOrder When InOrder is true, the search terms must exists in the documents as the same order as in query. Choose between ordered (true) or un-ordered (false) proximity search. Declaration public virtual bool InOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source GetFieldQuery(String, String, Int32) Declaration protected override Query GetFieldQuery(string field, string queryText, int slop) Parameters Type Name Description System.String field System.String queryText System.Int32 slop Returns Type Description Query Overrides QueryParserBase.GetFieldQuery(String, String, Int32) | Improve this Doc View Source GetFuzzyQuery(String, String, Single) Declaration protected override Query GetFuzzyQuery(string field, string termStr, float minSimilarity) Parameters Type Name Description System.String field System.String termStr System.Single minSimilarity Returns Type Description Query Overrides QueryParserBase.GetFuzzyQuery(String, String, Single) | Improve this Doc View Source GetRangeQuery(String, String, String, Boolean, Boolean) Declaration protected override Query GetRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field System.String part1 System.String part2 System.Boolean startInclusive System.Boolean endInclusive Returns Type Description Query Overrides QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) | Improve this Doc View Source GetWildcardQuery(String, String) Declaration protected override Query GetWildcardQuery(string field, string termStr) Parameters Type Name Description System.String field System.String termStr Returns Type Description Query Overrides QueryParserBase.GetWildcardQuery(String, String) | Improve this Doc View Source NewRangeQuery(String, String, String, Boolean, Boolean) Declaration protected override Query NewRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field System.String part1 System.String part2 System.Boolean startInclusive System.Boolean endInclusive Returns Type Description Query Overrides QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) | Improve this Doc View Source NewTermQuery(Term) Declaration protected override Query NewTermQuery(Term term) Parameters Type Name Description Term term Returns Type Description Query | Improve this Doc View Source Parse(String) Declaration public override Query Parse(string query) Parameters Type Name Description System.String query Returns Type Description Query Overrides QueryParserBase.Parse(String) Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.html",
    "title": "Namespace Lucene.Net.QueryParsers.ComplexPhrase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.ComplexPhrase <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> QueryParser which permits complex phrase query syntax eg \"(john jon jonathan~) peters*\" Classes ComplexPhraseQueryParser QueryParser which permits complex phrase query syntax eg \"(john jon jonathan~) peters*\". Performs potentially multiple passes over Query text to parse any nested logic in PhraseQueries. - First pass takes any PhraseQuery content between quotes and stores for subsequent pass. All other query content is parsed as normal - Second pass parses any stored PhraseQuery content, checking all embedded clauses are referring to the same field and therefore can be rewritten as Span queries. All PhraseQuery clauses are expressed as ComplexPhraseQuery objects This could arguably be done in one pass using a new QueryParser but here I am working within the constraints of the existing parser as a base class. This currently simply feeds all phrase content through an analyzer to select phrase terms - any \"special\" syntax such as * ~ * etc are not given special status ComplexPhraseQueryParser.ComplexPhraseQuery Used to handle the query content in between quotes and produced Span-based interpretations of the clauses."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ExtendableQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ExtendableQueryParser.html",
    "title": "Class ExtendableQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExtendableQueryParser The ExtendableQueryParser enables arbitrary query parser extension based on a customizable field naming scheme. The lucene query syntax allows implicit and explicit field definitions as query prefix followed by a colon (':') character. The ExtendableQueryParser allows to encode extension keys into the field symbol associated with a registered instance of ParserExtension . A customizable separation character separates the extension key from the actual field symbol. The ExtendableQueryParser splits ( SplitExtensionField(String, String) ) the extension key from the field symbol and tries to resolve the associated ParserExtension . If the parser can't resolve the key or the field token does not contain a separation character, ExtendableQueryParser yields the same behavior as its super class QueryParser . Otherwise, if the key is associated with a ParserExtension instance, the parser builds an instance of ExtensionQuery to be processed by Parse(ExtensionQuery) .If a extension field does not contain a field part the default field for the query will be used. To guarantee that an extension field is processed with its associated extension, the extension query part must escape any special characters like '*' or '['. If the extension query contains any whitespace characters, the extension query part must be enclosed in quotes. Example ('_' used as separation character): title_customExt:\"Apache Lucene\\?\" OR content_customExt:prefix\\* Search on the default field: _customExt:\"Apache Lucene\\?\" OR _customExt:prefix\\* The ExtendableQueryParser itself does not implement the logic how field and extension key are separated or ordered. All logic regarding the extension key and field symbol parsing is located in Extensions . Customized extension schemes should be implemented by sub-classing Extensions . For details about the default encoding scheme see Extensions . Inheritance System.Object QueryParserBase QueryParser ExtendableQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParser.Conjunction() QueryParser.Modifiers() QueryParser.TopLevelQuery(String) QueryParser.Query(String) QueryParser.Clause(String) QueryParser.Term(String) QueryParser.TokenSource QueryParser.Token QueryParser.Jj_nt QueryParser.ReInit(ICharStream) QueryParser.ReInit(QueryParserTokenManager) QueryParser.GetNextToken() QueryParser.GetToken(Int32) QueryParser.GenerateParseException() QueryParser.Enable_tracing() QueryParser.Disable_tracing() QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Parse(String) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.GetFieldQuery(String, String, Int32) QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.GetWildcardQuery(String, String) QueryParserBase.GetRegexpQuery(String, String) QueryParserBase.GetPrefixQuery(String, String) QueryParserBase.GetFuzzyQuery(String, String, Single) QueryParserBase.Escape(String) Namespace : Lucene.Net.QueryParsers.Ext Assembly : Lucene.Net.QueryParser.dll Syntax public class ExtendableQueryParser : QueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source ExtendableQueryParser(LuceneVersion, String, Analyzer) Creates a new ExtendableQueryParser instance Declaration public ExtendableQueryParser(LuceneVersion matchVersion, string f, Analyzer a) Parameters Type Name Description LuceneVersion matchVersion the lucene version to use. System.String f the default query field Analyzer a the analyzer used to find terms in a query string | Improve this Doc View Source ExtendableQueryParser(LuceneVersion, String, Analyzer, Extensions) Creates a new ExtendableQueryParser instance Declaration public ExtendableQueryParser(LuceneVersion matchVersion, string f, Analyzer a, Extensions ext) Parameters Type Name Description LuceneVersion matchVersion the lucene version to use. System.String f the default query field Analyzer a the analyzer used to find terms in a query string Extensions ext the query parser extensions Properties | Improve this Doc View Source ExtensionFieldDelimiter Returns the extension field delimiter character. Declaration public virtual char ExtensionFieldDelimiter { get; } Property Value Type Description System.Char the extension field delimiter character. Methods | Improve this Doc View Source GetFieldQuery(String, String, Boolean) Declaration protected override Query GetFieldQuery(string field, string queryText, bool quoted) Parameters Type Name Description System.String field System.String queryText System.Boolean quoted Returns Type Description Query Overrides QueryParserBase.GetFieldQuery(String, String, Boolean) Implements ICommonQueryParserConfiguration See Also Extensions ParserExtension ExtensionQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ExtensionQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ExtensionQuery.html",
    "title": "Class ExtensionQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExtensionQuery ExtensionQuery holds all query components extracted from the original query string like the query field and the extension query string. Inheritance System.Object ExtensionQuery Namespace : Lucene.Net.QueryParsers.Ext Assembly : Lucene.Net.QueryParser.dll Syntax public class ExtensionQuery : object Constructors | Improve this Doc View Source ExtensionQuery(QueryParser, String, String) Creates a new ExtensionQuery Declaration public ExtensionQuery(QueryParser topLevelParser, string field, string rawQueryString) Parameters Type Name Description QueryParser topLevelParser System.String field the query field System.String rawQueryString the raw extension query string Properties | Improve this Doc View Source Field Returns the query field Declaration public virtual string Field { get; protected set; } Property Value Type Description System.String | Improve this Doc View Source RawQueryString Returns the raw extension query string Declaration public virtual string RawQueryString { get; protected set; } Property Value Type Description System.String | Improve this Doc View Source TopLevelParser Returns the top level parser which created this ExtensionQuery Declaration public virtual QueryParser TopLevelParser { get; protected set; } Property Value Type Description QueryParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.Extensions.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.Extensions.html",
    "title": "Class Extensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Extensions The Extensions class represents an extension mapping to associate ParserExtension instances with extension keys. An extension key is a string encoded into a Lucene standard query parser field symbol recognized by ExtendableQueryParser . The query parser passes each extension field token to SplitExtensionField(String, String) to separate the extension key from the field identifier. In addition to the key to extension mapping this class also defines the field name overloading scheme. ExtendableQueryParser uses the given extension to split the actual field name and extension key by calling SplitExtensionField(String, String) . To change the order or the key / field name encoding scheme users can subclass Extensions to implement their own. Inheritance System.Object Extensions Namespace : Lucene.Net.QueryParsers.Ext Assembly : Lucene.Net.QueryParser.dll Syntax public class Extensions : object Constructors | Improve this Doc View Source Extensions() Creates a new Extensions instance with the DEFAULT_EXTENSION_FIELD_DELIMITER as a delimiter character. Declaration public Extensions() | Improve this Doc View Source Extensions(Char) Creates a new Extensions instance Declaration public Extensions(char extensionFieldDelimiter) Parameters Type Name Description System.Char extensionFieldDelimiter the extensions field delimiter character Fields | Improve this Doc View Source DEFAULT_EXTENSION_FIELD_DELIMITER The default extension field delimiter character. This constant is set to ':' Declaration public static readonly char DEFAULT_EXTENSION_FIELD_DELIMITER Field Value Type Description System.Char Properties | Improve this Doc View Source ExtensionFieldDelimiter Returns the extension field delimiter Declaration public virtual char ExtensionFieldDelimiter { get; } Property Value Type Description System.Char Methods | Improve this Doc View Source Add(String, ParserExtension) Adds a new ParserExtension instance associated with the given key. Declaration public virtual void Add(string key, ParserExtension extension) Parameters Type Name Description System.String key the parser extension key ParserExtension extension the parser extension | Improve this Doc View Source BuildExtensionField(String) Builds an extension field string from a given extension key and the default query field. The default field and the key are delimited with the extension field delimiter character. This method makes no assumption about the order of the extension key and the field. By default the extension key is appended to the end of the returned string while the field is added to the beginning. Special Query characters are escaped in the result. Note: Extensions subclasses must maintain the contract between BuildExtensionField(String) and BuildExtensionField(String, String) where the latter inverts the former. Declaration public virtual string BuildExtensionField(string extensionKey) Parameters Type Name Description System.String extensionKey the extension key Returns Type Description System.String escaped extension field identifier | Improve this Doc View Source BuildExtensionField(String, String) Builds an extension field string from a given extension key and the default query field. The default field and the key are delimited with the extension field delimiter character. This method makes no assumption about the order of the extension key and the field. By default the extension key is appended to the end of the returned string while the field is added to the beginning. Special Query characters are escaped in the result. Note: Extensions subclasses must maintain the contract between BuildExtensionField(String) and BuildExtensionField(String, String) where the latter inverts the former. Declaration public virtual string BuildExtensionField(string extensionKey, string field) Parameters Type Name Description System.String extensionKey the extension key System.String field the field to apply the extension on. Returns Type Description System.String escaped extension field identifier Remarks See BuildExtensionField(String) to use the default query field | Improve this Doc View Source EscapeExtensionField(String) Escapes an extension field. The default implementation is equivalent to Escape(String) . Declaration public virtual string EscapeExtensionField(string extfield) Parameters Type Name Description System.String extfield the extension field identifier Returns Type Description System.String the extension field identifier with all special chars escaped with a backslash character. | Improve this Doc View Source GetExtension(String) Returns the ParserExtension instance for the given key or null if no extension can be found for the key. Declaration public ParserExtension GetExtension(string key) Parameters Type Name Description System.String key the extension key Returns Type Description ParserExtension the ParserExtension instance for the given key or null if no extension can be found for the key. | Improve this Doc View Source SplitExtensionField(String, String) Splits a extension field and returns the field / extension part as a Tuple{string,string} . This method tries to split on the first occurrence of the extension field delimiter, if the delimiter is not present in the string the result will contain a null value for the extension key and the given field string as the field value. If the given extension field string contains no field identifier the result pair will carry the given default field as the field value. Declaration public virtual Tuple<string, string> SplitExtensionField(string defaultField, string field) Parameters Type Name Description System.String defaultField the default query field System.String field the extension field string Returns Type Description Tuple < System.String , System.String > a { with the field name as the and the extension key as the See Also ExtendableQueryParser ParserExtension"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.html",
    "title": "Namespace Lucene.Net.QueryParsers.Ext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Ext <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Extendable QueryParser provides a simple and flexible extension mechanism by overloading query field names. Classes ExtendableQueryParser The ExtendableQueryParser enables arbitrary query parser extension based on a customizable field naming scheme. The lucene query syntax allows implicit and explicit field definitions as query prefix followed by a colon (':') character. The ExtendableQueryParser allows to encode extension keys into the field symbol associated with a registered instance of ParserExtension . A customizable separation character separates the extension key from the actual field symbol. The ExtendableQueryParser splits ( SplitExtensionField(String, String) ) the extension key from the field symbol and tries to resolve the associated ParserExtension . If the parser can't resolve the key or the field token does not contain a separation character, ExtendableQueryParser yields the same behavior as its super class QueryParser . Otherwise, if the key is associated with a ParserExtension instance, the parser builds an instance of ExtensionQuery to be processed by Parse(ExtensionQuery) .If a extension field does not contain a field part the default field for the query will be used. To guarantee that an extension field is processed with its associated extension, the extension query part must escape any special characters like '*' or '['. If the extension query contains any whitespace characters, the extension query part must be enclosed in quotes. Example ('_' used as separation character): title_customExt:\"Apache Lucene\\?\" OR content_customExt:prefix\\* Search on the default field: _customExt:\"Apache Lucene\\?\" OR _customExt:prefix\\* The ExtendableQueryParser itself does not implement the logic how field and extension key are separated or ordered. All logic regarding the extension key and field symbol parsing is located in Extensions . Customized extension schemes should be implemented by sub-classing Extensions . For details about the default encoding scheme see Extensions . ExtensionQuery ExtensionQuery holds all query components extracted from the original query string like the query field and the extension query string. Extensions The Extensions class represents an extension mapping to associate ParserExtension instances with extension keys. An extension key is a string encoded into a Lucene standard query parser field symbol recognized by ExtendableQueryParser . The query parser passes each extension field token to SplitExtensionField(String, String) to separate the extension key from the field identifier. In addition to the key to extension mapping this class also defines the field name overloading scheme. ExtendableQueryParser uses the given extension to split the actual field name and extension key by calling SplitExtensionField(String, String) . To change the order or the key / field name encoding scheme users can subclass Extensions to implement their own. ParserExtension This class represents an extension base class to the Lucene standard QueryParser . The QueryParser is generated by the JavaCC parser generator. Changing or adding functionality or syntax in the standard query parser requires changes to the JavaCC source file. To enable extending the standard query parser without changing the JavaCC sources and re-generate the parser the ParserExtension can be customized and plugged into an instance of ExtendableQueryParser , a direct subclass of QueryParser ."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ParserExtension.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ParserExtension.html",
    "title": "Class ParserExtension | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParserExtension This class represents an extension base class to the Lucene standard QueryParser . The QueryParser is generated by the JavaCC parser generator. Changing or adding functionality or syntax in the standard query parser requires changes to the JavaCC source file. To enable extending the standard query parser without changing the JavaCC sources and re-generate the parser the ParserExtension can be customized and plugged into an instance of ExtendableQueryParser , a direct subclass of QueryParser . Inheritance System.Object ParserExtension Namespace : Lucene.Net.QueryParsers.Ext Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class ParserExtension : object Methods | Improve this Doc View Source Parse(ExtensionQuery) Processes the given ExtensionQuery and returns a corresponding instance. Subclasses must either return a instance or raise a ParseException . This method must not return null . Declaration public abstract Query Parse(ExtensionQuery query) Parameters Type Name Description ExtensionQuery query the extension query Returns Type Description Query a new query instance Exceptions Type Condition ParseException if the query can not be parsed. See Also Extensions ExtendableQueryParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Builders | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Builders <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Necessary classes to implement query builders. Query Parser Builders The package org.apache.lucene.queryParser.builders contains the interface that builders must implement, it also contain a utility QueryTreeBuilder , which walks the tree and call the Builder for each node in the tree. Builder normally convert QueryNode Object into a Lucene Query Object, and normally it's a one-to-one mapping class. But other builders implementations can by written to convert QueryNode objects to other non lucene objects. Classes QueryTreeBuilder LUCENENET specific class for accessing static members of QueryTreeBuilder<TQuery> without referencing its generic closing type. QueryTreeBuilder<TQuery> This class should be used when there is a builder for each type of node. The type of node may be defined in 2 different ways: - by the field name, when the node implements the IFieldableNode interface - by its class, it keeps checking the class and all the interfaces and classes this class implements/extends until it finds a builder for that class/interface This class always check if there is a builder for the field name before it checks for the node class. So, field name builders have precedence over class builders. When a builder is found for a node, it's called and the node is passed to the builder. If the returned built object is not null , it's tagged on the node using the tag QUERY_TREE_BUILDER_TAGID . The children are usually built before the parent node. However, if a builder associated to a node is an instance of QueryTreeBuilder<TQuery> , the node is delegated to this builder and it's responsible to build the node and its children. IQueryBuilder<TQuery> Interfaces IQueryBuilder<TQuery> This interface is used by implementors classes that builds some kind of object from a query tree. QueryTreeBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.IQueryBuilder-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.IQueryBuilder-1.html",
    "title": "Interface IQueryBuilder<TQuery> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IQueryBuilder<TQuery> This interface is used by implementors classes that builds some kind of object from a query tree. QueryTreeBuilder Namespace : Lucene.Net.QueryParsers.Flexible.Core.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public interface IQueryBuilder<TQuery> Type Parameters Name Description TQuery Methods | Improve this Doc View Source Build(IQueryNode) Builds some kind of object from a query tree. Declaration TQuery Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode the query tree root node Returns Type Description TQuery some object generated from the query tree"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder.html",
    "title": "Class QueryTreeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryTreeBuilder LUCENENET specific class for accessing static members of QueryTreeBuilder<TQuery> without referencing its generic closing type. Inheritance System.Object QueryTreeBuilder QueryTreeBuilder <TQuery> Namespace : Lucene.Net.QueryParsers.Flexible.Core.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryTreeBuilder : object Fields | Improve this Doc View Source QUERY_TREE_BUILDER_TAGID This tag is used to tag the nodes in a query tree with the built objects produced from their own associated builder. Declaration public static readonly string QUERY_TREE_BUILDER_TAGID Field Value Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder-1.html",
    "title": "Class QueryTreeBuilder<TQuery> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryTreeBuilder<TQuery> This class should be used when there is a builder for each type of node. The type of node may be defined in 2 different ways: - by the field name, when the node implements the IFieldableNode interface - by its class, it keeps checking the class and all the interfaces and classes this class implements/extends until it finds a builder for that class/interface This class always check if there is a builder for the field name before it checks for the node class. So, field name builders have precedence over class builders. When a builder is found for a node, it's called and the node is passed to the builder. If the returned built object is not null , it's tagged on the node using the tag QUERY_TREE_BUILDER_TAGID . The children are usually built before the parent node. However, if a builder associated to a node is an instance of QueryTreeBuilder<TQuery> , the node is delegated to this builder and it's responsible to build the node and its children. IQueryBuilder<TQuery> Inheritance System.Object QueryTreeBuilder QueryTreeBuilder<TQuery> StandardQueryTreeBuilder Implements IQueryBuilder <TQuery> Inherited Members QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID Namespace : Lucene.Net.QueryParsers.Flexible.Core.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryTreeBuilder<TQuery> : QueryTreeBuilder, IQueryBuilder<TQuery> Type Parameters Name Description TQuery Constructors | Improve this Doc View Source QueryTreeBuilder() QueryTreeBuilder<TQuery> constructor. Declaration public QueryTreeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Builds some kind of object from a query tree. Each node in the query tree is built using an specific builder associated to it. Declaration public virtual TQuery Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode the query tree root node Returns Type Description TQuery the built object Exceptions Type Condition QueryNodeException if some node builder throws a QueryNodeException or if there is a node which had no builder associated to it | Improve this Doc View Source SetBuilder(String, IQueryBuilder<TQuery>) Associates a field name with a builder. Declaration public virtual void SetBuilder(string fieldName, IQueryBuilder<TQuery> builder) Parameters Type Name Description System.String fieldName the field name IQueryBuilder <TQuery> builder the builder to be associated | Improve this Doc View Source SetBuilder(Type, IQueryBuilder<TQuery>) Associates a class (that implements IQueryNode ) with a builder Declaration public virtual void SetBuilder(Type queryNodeClass, IQueryBuilder<TQuery> builder) Parameters Type Name Description Type queryNodeClass The type (a class that implements IQueryNode ) IQueryBuilder <TQuery> builder the builder to be associated Implements IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.AbstractQueryConfig.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.AbstractQueryConfig.html",
    "title": "Class AbstractQueryConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractQueryConfig This class is the base of QueryConfigHandler and FieldConfig . It has operations to set, unset and get configuration values. Each configuration is is a key->value pair. The key should be an unique ConfigurationKey<T> instance and it also holds the value's type. ConfigurationKey<T> Inheritance System.Object AbstractQueryConfig FieldConfig QueryConfigHandler Namespace : Lucene.Net.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class AbstractQueryConfig : object Methods | Improve this Doc View Source Get<T>(ConfigurationKey<T>) Returns the value held by the given key. Declaration public virtual T Get<T>(ConfigurationKey<T> key) Parameters Type Name Description ConfigurationKey <T> key the key, cannot be null Returns Type Description T the value held by the given key Type Parameters Name Description T the value's type | Improve this Doc View Source Has<T>(ConfigurationKey<T>) Returns true if there is a value set with the given key, otherwise false . Declaration public virtual bool Has<T>(ConfigurationKey<T> key) Parameters Type Name Description ConfigurationKey <T> key the key, cannot be null Returns Type Description System.Boolean true if there is a value set with the given key, otherwise false Type Parameters Name Description T the value's type | Improve this Doc View Source Set<T>(ConfigurationKey<T>, T) Sets a key and its value. Declaration public virtual void Set<T>(ConfigurationKey<T> key, T value) Parameters Type Name Description ConfigurationKey <T> key the key, cannot be null T value value to set Type Parameters Name Description T the value's type | Improve this Doc View Source Unset<T>(ConfigurationKey<T>) Unsets the given key and its value. Declaration public virtual bool Unset<T>(ConfigurationKey<T> key) Parameters Type Name Description ConfigurationKey <T> key the key Returns Type Description System.Boolean true if the key and value was set and removed, otherwise false Type Parameters Name Description T the value's type"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.ConfigurationKey.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.ConfigurationKey.html",
    "title": "Class ConfigurationKey | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConfigurationKey LUCENENET specific class used to access the NewInstance static method without referring to the ConfigurationKey{T}'s generic closing type. Inheritance System.Object ConfigurationKey ConfigurationKey <T> Namespace : Lucene.Net.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class ConfigurationKey : object Methods | Improve this Doc View Source NewInstance<T>() Creates a new instance. Declaration public static ConfigurationKey<T> NewInstance<T>() Returns Type Description ConfigurationKey <T> a new instance Type Parameters Name Description T the value's type"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.ConfigurationKey-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.ConfigurationKey-1.html",
    "title": "Class ConfigurationKey<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConfigurationKey<T> An instance of this class represents a key that is used to retrieve a value from AbstractQueryConfig . It also holds the value's type, which is defined in the generic argument. Inheritance System.Object ConfigurationKey ConfigurationKey<T> Inherited Members ConfigurationKey.NewInstance<T>() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class ConfigurationKey<T> : ConfigurationKey Type Parameters Name Description T the value's type See Also AbstractQueryConfig"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.FieldConfig.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.FieldConfig.html",
    "title": "Class FieldConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldConfig This class represents a field configuration. Inheritance System.Object AbstractQueryConfig FieldConfig Inherited Members AbstractQueryConfig.Get<T>(ConfigurationKey<T>) AbstractQueryConfig.Has<T>(ConfigurationKey<T>) AbstractQueryConfig.Set<T>(ConfigurationKey<T>, T) AbstractQueryConfig.Unset<T>(ConfigurationKey<T>) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldConfig : AbstractQueryConfig Constructors | Improve this Doc View Source FieldConfig(String) Constructs a FieldConfig Declaration public FieldConfig(string fieldName) Parameters Type Name Description System.String fieldName the field name, it cannot be null Properties | Improve this Doc View Source Field Gets the field name this configuration represents. Declaration public virtual string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Config | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Config <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Base classes used to configure the query processing. Query Configuration Interfaces The package org.apache.lucene.queryparser.flexible.config contains query configuration handler abstract class that all config handlers should extend. See StandardQueryConfigHandler for a reference implementation. The QueryConfigHandler and FieldConfig are used in the processors to access config information in a flexible and independent way. See TermRangeQueryNodeProcessor for a reference implementation. Classes AbstractQueryConfig This class is the base of QueryConfigHandler and FieldConfig . It has operations to set, unset and get configuration values. Each configuration is is a key->value pair. The key should be an unique ConfigurationKey<T> instance and it also holds the value's type. ConfigurationKey<T> ConfigurationKey LUCENENET specific class used to access the NewInstance static method without referring to the ConfigurationKey{T}'s generic closing type. ConfigurationKey<T> An instance of this class represents a key that is used to retrieve a value from AbstractQueryConfig . It also holds the value's type, which is defined in the generic argument. FieldConfig This class represents a field configuration. QueryConfigHandler This class can be used to hold any query configuration and no field configuration. For field configuration, it creates an empty FieldConfig object and delegate it to field config listeners, these are responsible for setting up all the field configuration. QueryConfigHandler should be extended by classes that intends to provide configuration to IQueryNodeProcessor objects. The class that extends QueryConfigHandler should also provide FieldConfig objects for each collection field. Interfaces IFieldConfigListener This interface should be implemented by classes that wants to listen for field configuration requests. The implementation receives a FieldConfig object and may add/change its configuration."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.IFieldConfigListener.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.IFieldConfigListener.html",
    "title": "Interface IFieldConfigListener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFieldConfigListener This interface should be implemented by classes that wants to listen for field configuration requests. The implementation receives a FieldConfig object and may add/change its configuration. Namespace : Lucene.Net.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public interface IFieldConfigListener Methods | Improve this Doc View Source BuildFieldConfig(FieldConfig) This method is called every time a field configuration is requested. Declaration void BuildFieldConfig(FieldConfig fieldConfig) Parameters Type Name Description FieldConfig fieldConfig the field configuration requested, should never be null See Also FieldConfig QueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.QueryConfigHandler.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.QueryConfigHandler.html",
    "title": "Class QueryConfigHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryConfigHandler This class can be used to hold any query configuration and no field configuration. For field configuration, it creates an empty FieldConfig object and delegate it to field config listeners, these are responsible for setting up all the field configuration. QueryConfigHandler should be extended by classes that intends to provide configuration to IQueryNodeProcessor objects. The class that extends QueryConfigHandler should also provide FieldConfig objects for each collection field. Inheritance System.Object AbstractQueryConfig QueryConfigHandler StandardQueryConfigHandler Inherited Members AbstractQueryConfig.Get<T>(ConfigurationKey<T>) AbstractQueryConfig.Has<T>(ConfigurationKey<T>) AbstractQueryConfig.Set<T>(ConfigurationKey<T>, T) AbstractQueryConfig.Unset<T>(ConfigurationKey<T>) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryConfigHandler : AbstractQueryConfig Methods | Improve this Doc View Source AddFieldConfigListener(IFieldConfigListener) Adds a listener. The added listeners are called in the order they are added. Declaration public virtual void AddFieldConfigListener(IFieldConfigListener listener) Parameters Type Name Description IFieldConfigListener listener the listener to be added | Improve this Doc View Source GetFieldConfig(String) Returns an implementation of FieldConfig for a specific field name. If the implemented QueryConfigHandler does not know a specific field name, it may return null , indicating there is no configuration for that field. Declaration public virtual FieldConfig GetFieldConfig(string fieldName) Parameters Type Name Description System.String fieldName the field name Returns Type Description FieldConfig A FieldConfig object containing the field name configuration or null , if the implemented QueryConfigHandler has no configuration for that field See Also FieldConfig IFieldConfigListener QueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Core classes of the flexible query parser framework. Flexible Query Parser This package contains the necessary classes to implement a query parser. A query parser is divided in at least 2 phases, text parsing and query building, and one optional phase called query processing. First Phase: Text Parsing The text parsing phase is performed by a text parser, which implements <xref:Lucene.Net.QueryParsers.Flexible.Core.Parser.SyntaxParser> interface. A text parser is responsible to get a query string and convert it to a QueryNode tree, which is an object structure that represents the elements defined in the query string. Second (optional) Phase: Query Processing The query processing phase is performed by a query processor, which implements QueryNodeProcessor . A query processor is responsible to perform any processing on a QueryNode tree. This phase is optional and is used only if an extra processing, validation, query expansion, etc needs to be performed in a QueryNode tree. The QueryNode tree can be either be generated by a text parser or programmatically created. Third Phase: Query Building The query building phase is performed by a query builder, which implements <xref:Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryBuilder>. A query builder is responsible to convert a QueryNode tree into an arbitrary object, which is usually used to be executed against a search index. Classes QueryNodeError Error class with NLS support QueryNodeException This exception should be thrown if something wrong happens when dealing with IQueryNode s. It also supports NLS messages. QueryNodeParseException This should be thrown when an exception happens during the query parsing from string to the query node tree. QueryParserHelper<TQuery> This class is a helper for the query parser framework, it does all the three query parser phrases at once: text parsing, query processing and query building. It contains methods that allows the user to change the implementation used on the three phases."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Messages.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Messages.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Messages | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Messages <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Messages usually used by query parser implementations. Query Parser Messages Messages for the Flexible Query Parser, they use org.apache.lucene.messages.NLS API. Classes QueryParserMessages Flexible Query Parser message bundle class"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Messages.QueryParserMessages.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Messages.QueryParserMessages.html",
    "title": "Class QueryParserMessages | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserMessages Flexible Query Parser message bundle class Inheritance System.Object NLS QueryParserMessages Inherited Members NLS.GetResourceManagerFactory() NLS.SetResourceManagerFactory(IResourceManagerFactory) NLS.GetLocalizedMessage(String) NLS.GetLocalizedMessage(String, CultureInfo) NLS.GetLocalizedMessage(String, CultureInfo, Object[]) NLS.GetLocalizedMessage(String, Object[]) NLS.InitializeMessages(String, Type) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Messages Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParserMessages : NLS Fields | Improve this Doc View Source COULD_NOT_PARSE_NUMBER Declaration public static string COULD_NOT_PARSE_NUMBER Field Value Type Description System.String | Improve this Doc View Source EMPTY_MESSAGE Declaration public static string EMPTY_MESSAGE Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX Declaration public static string INVALID_SYNTAX Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_CANNOT_PARSE Declaration public static string INVALID_SYNTAX_CANNOT_PARSE Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_ESCAPE_CHARACTER Declaration public static string INVALID_SYNTAX_ESCAPE_CHARACTER Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_ESCAPE_NONE_HEX_UNICODE Declaration public static string INVALID_SYNTAX_ESCAPE_NONE_HEX_UNICODE Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_ESCAPE_UNICODE_TRUNCATION Declaration public static string INVALID_SYNTAX_ESCAPE_UNICODE_TRUNCATION Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_FUZZY_EDITS Declaration public static string INVALID_SYNTAX_FUZZY_EDITS Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_FUZZY_LIMITS Declaration public static string INVALID_SYNTAX_FUZZY_LIMITS Field Value Type Description System.String | Improve this Doc View Source LEADING_WILDCARD_NOT_ALLOWED Declaration public static string LEADING_WILDCARD_NOT_ALLOWED Field Value Type Description System.String | Improve this Doc View Source LUCENE_QUERY_CONVERSION_ERROR Declaration public static string LUCENE_QUERY_CONVERSION_ERROR Field Value Type Description System.String | Improve this Doc View Source NODE_ACTION_NOT_SUPPORTED Declaration public static string NODE_ACTION_NOT_SUPPORTED Field Value Type Description System.String | Improve this Doc View Source NUMBER_CLASS_NOT_SUPPORTED_BY_NUMERIC_RANGE_QUERY Declaration public static string NUMBER_CLASS_NOT_SUPPORTED_BY_NUMERIC_RANGE_QUERY Field Value Type Description System.String | Improve this Doc View Source NUMERIC_CANNOT_BE_EMPTY Declaration public static string NUMERIC_CANNOT_BE_EMPTY Field Value Type Description System.String | Improve this Doc View Source PARAMETER_VALUE_NOT_SUPPORTED Declaration public static string PARAMETER_VALUE_NOT_SUPPORTED Field Value Type Description System.String | Improve this Doc View Source TOO_MANY_BOOLEAN_CLAUSES Declaration public static string TOO_MANY_BOOLEAN_CLAUSES Field Value Type Description System.String | Improve this Doc View Source UNSUPPORTED_NUMERIC_DATA_TYPE Declaration public static string UNSUPPORTED_NUMERIC_DATA_TYPE Field Value Type Description System.String | Improve this Doc View Source WILDCARD_NOT_SUPPORTED Declaration public static string WILDCARD_NOT_SUPPORTED Field Value Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.AndQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.AndQueryNode.html",
    "title": "Class AndQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AndQueryNode A AndQueryNode represents an AND boolean operation performed on a list of nodes. Inheritance System.Object QueryNode BooleanQueryNode AndQueryNode AnyQueryNode Implements IQueryNode Inherited Members BooleanQueryNode.CloneTree() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class AndQueryNode : BooleanQueryNode, IQueryNode Constructors | Improve this Doc View Source AndQueryNode(IList<IQueryNode>) Declaration public AndQueryNode(IList<IQueryNode> clauses) Parameters Type Name Description IList < IQueryNode > clauses the query nodes to be and'ed Methods | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides BooleanQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BooleanQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.AnyQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.AnyQueryNode.html",
    "title": "Class AnyQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnyQueryNode A AnyQueryNode represents an ANY operator performed on a list of nodes. Inheritance System.Object QueryNode BooleanQueryNode AndQueryNode AnyQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class AnyQueryNode : AndQueryNode, IQueryNode Constructors | Improve this Doc View Source AnyQueryNode(IList<IQueryNode>, String, Int32) Declaration public AnyQueryNode(IList<IQueryNode> clauses, string field, int minimumMatchingElements) Parameters Type Name Description IList < IQueryNode > clauses the query nodes to be or'ed System.String field System.Int32 minimumMatchingElements Properties | Improve this Doc View Source Field Gets or sets the field name. Returns null if the field was not specified. Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source MinimumMatchingElements Declaration public virtual int MinimumMatchingElements { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides BooleanQueryNode.CloneTree() | Improve this Doc View Source GetFieldAsString() null if the field was not specified Declaration public virtual string GetFieldAsString() Returns Type Description System.String the field as a | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides AndQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AndQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.BooleanQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.BooleanQueryNode.html",
    "title": "Class BooleanQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanQueryNode A BooleanQueryNode represents a list of elements which do not have an explicit boolean operator defined between them. It can be used to express a boolean query that intends to use the default boolean operator. Inheritance System.Object QueryNode BooleanQueryNode AndQueryNode OrQueryNode ProximityQueryNode StandardBooleanQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source BooleanQueryNode(IList<IQueryNode>) Declaration public BooleanQueryNode(IList<IQueryNode> clauses) Parameters Type Name Description IList < IQueryNode > clauses the query nodes to be and'ed Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.BoostQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.BoostQueryNode.html",
    "title": "Class BoostQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostQueryNode A BoostQueryNode boosts the QueryNode tree which is under this node. So, it must only and always have one child. The boost value may vary from 0.0 to 1.0. Inheritance System.Object QueryNode BoostQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source BoostQueryNode(IQueryNode, Single) Constructs a boost node Declaration public BoostQueryNode(IQueryNode query, float value) Parameters Type Name Description IQueryNode query the query to be boosted System.Single value the boost value, it may vary from 0.0 to 1.0 Properties | Improve this Doc View Source Child Gets the single child which this node boosts. Declaration public virtual IQueryNode Child { get; } Property Value Type Description IQueryNode | Improve this Doc View Source Value Gets the boost value. It may vary from 0.0 to 1.0. Declaration public virtual float Value { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.DeletedQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.DeletedQueryNode.html",
    "title": "Class DeletedQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DeletedQueryNode A DeletedQueryNode represents a node that was deleted from the query node tree. It can be removed from the tree using the RemoveDeletedQueryNodesProcessor processor. Inheritance System.Object QueryNode DeletedQueryNode MatchNoDocsQueryNode NoTokenFoundQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class DeletedQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source DeletedQueryNode() Declaration public DeletedQueryNode() Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.FieldQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.FieldQueryNode.html",
    "title": "Class FieldQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldQueryNode A FieldQueryNode represents a element that contains field/text tuple Inheritance System.Object QueryNode FieldQueryNode FuzzyQueryNode QuotedFieldQueryNode WildcardQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldQueryNode : QueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source FieldQueryNode(String, ICharSequence, Int32, Int32) Declaration public FieldQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name ICharSequence text value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source FieldQueryNode(String, StringBuilder, Int32, Int32) Declaration public FieldQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name StringBuilder text value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source FieldQueryNode(String, String, Int32, Int32) Declaration public FieldQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value System.Int32 begin position in the query string System.Int32 end position in the query string Fields | Improve this Doc View Source m_begin The term's begin position. Declaration protected int m_begin Field Value Type Description System.Int32 | Improve this Doc View Source m_end The term's end position. Declaration protected int m_end Field Value Type Description System.Int32 | Improve this Doc View Source m_field The term's field Declaration protected string m_field Field Value Type Description System.String | Improve this Doc View Source m_positionIncrement The term's position increment. Declaration protected int m_positionIncrement Field Value Type Description System.Int32 | Improve this Doc View Source m_text The term's text. Declaration protected ICharSequence m_text Field Value Type Description ICharSequence Properties | Improve this Doc View Source Begin Declaration public virtual int Begin { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source End Declaration public virtual int End { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source PositionIncrement Declaration public virtual int PositionIncrement { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Gets or Sets the \"original\" form of the term. Declaration public virtual ICharSequence Text { get; set; } Property Value Type Description ICharSequence | Improve this Doc View Source Value Declaration public virtual string Value { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetFieldAsString() null if the field was not specified in the query string Declaration public virtual string GetFieldAsString() Returns Type Description System.String the field | Improve this Doc View Source GetTermEscaped(IEscapeQuerySyntax) Declaration protected virtual string GetTermEscaped(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String | Improve this Doc View Source GetTermEscapeQuoted(IEscapeQuerySyntax) Declaration protected virtual string GetTermEscapeQuoted(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String | Improve this Doc View Source GetTextAsString() Declaration public virtual string GetTextAsString() Returns Type Description System.String the term | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.FuzzyQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.FuzzyQueryNode.html",
    "title": "Class FuzzyQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyQueryNode A FuzzyQueryNode represents a element that contains field/text/similarity tuple Inheritance System.Object QueryNode FieldQueryNode FuzzyQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members FieldQueryNode.m_field FieldQueryNode.m_text FieldQueryNode.m_begin FieldQueryNode.m_end FieldQueryNode.m_positionIncrement FieldQueryNode.GetTermEscaped(IEscapeQuerySyntax) FieldQueryNode.GetTermEscapeQuoted(IEscapeQuerySyntax) FieldQueryNode.GetTextAsString() FieldQueryNode.GetFieldAsString() FieldQueryNode.Begin FieldQueryNode.End FieldQueryNode.Field FieldQueryNode.PositionIncrement FieldQueryNode.Text FieldQueryNode.Value QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyQueryNode : FieldQueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source FuzzyQueryNode(String, ICharSequence, Single, Int32, Int32) Declaration public FuzzyQueryNode(string field, ICharSequence term, float minSimilarity, int begin, int end) Parameters Type Name Description System.String field Name of the field query will use. ICharSequence term Term token to use for building term for the query System.Single minSimilarity similarity value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source FuzzyQueryNode(String, StringBuilder, Single, Int32, Int32) Declaration public FuzzyQueryNode(string field, StringBuilder term, float minSimilarity, int begin, int end) Parameters Type Name Description System.String field Name of the field query will use. StringBuilder term Term token to use for building term for the query System.Single minSimilarity similarity value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source FuzzyQueryNode(String, String, Single, Int32, Int32) Declaration public FuzzyQueryNode(string field, string term, float minSimilarity, int begin, int end) Parameters Type Name Description System.String field Name of the field query will use. System.String term Term token to use for building term for the query System.Single minSimilarity similarity value System.Int32 begin position in the query string System.Int32 end position in the query string Properties | Improve this Doc View Source PrefixLength Declaration public virtual int PrefixLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Similarity Gets or Sets the similarity Declaration public virtual float Similarity { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides FieldQueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides FieldQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides FieldQueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.GroupQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.GroupQueryNode.html",
    "title": "Class GroupQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GroupQueryNode A GroupQueryNode represents a location where the original user typed real parenthesis on the query string. This class is useful for queries like: a) a AND b OR c b) ( a AND b) OR c Parenthesis might be used to define the boolean operation precedence. Inheritance System.Object QueryNode GroupQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class GroupQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source GroupQueryNode(IQueryNode) This IQueryNode is used to identify parenthesis on the original query string Declaration public GroupQueryNode(IQueryNode query) Parameters Type Name Description IQueryNode query Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetChild() Declaration public virtual IQueryNode GetChild() Returns Type Description IQueryNode | Improve this Doc View Source SetChild(IQueryNode) Declaration public virtual void SetChild(IQueryNode child) Parameters Type Name Description IQueryNode child | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Nodes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Nodes <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Query nodes commonly used by query parser implementations. Query Nodes The package org.apache.lucene.queryParser.nodes contains all the basic query nodes. The interface that represents a query node is QueryNode . QueryNode s are used by the text parser to create a syntax tree. These nodes are designed to be used by UI or other text parsers. The default Lucene text parser is StandardSyntaxParser , it implements Lucene's standard syntax. QueryNode interface should be implemented by all query nodes, the class <xref:Lucene.Net.QueryParsers.Flexible.Core.Nodes.QueryNodeImpl> implements QueryNode and is extended by all current query node implementations. A query node tree can be printed to the a stream, and it generates a pseudo XML representation with all the nodes. A query node tree can also generate a query string that can be parsed back by the original text parser, at this point only the standard lucene syntax is supported. Grouping nodes: * AndQueryNode - used for AND operator * AnyQueryNode - used for ANY operator * OrQueryNode - used for OR operator * BooleanQueryNode - used when no operator is specified * ModifierQueryNode - used for modifier operator * GroupQueryNode - used for parenthesis * BoostQueryNode - used for boost operator * SlopQueryNode - phrase slop * FuzzyQueryNode - fuzzy node * TermRangeQueryNode - used for parametric field:[low_value TO high_value] * ProximityQueryNode - used for proximity search * NumericRangeQueryNode - used for numeric range search * TokenizedPhraseQueryNode - used by tokenizers/lemmatizers/analyzers for phrases/autophrases Leaf Nodes: * FieldQueryNode - field/value node * NumericQueryNode - used for numeric search * PathQueryNode - QueryNode object used with path-like queries * OpaqueQueryNode - Used as for part of the query that can be parsed by other parsers. schema/value * PrefixWildcardQueryNode - non-phrase wildcard query * QuotedFieldQUeryNode - regular phrase node * WildcardQueryNode - non-phrase wildcard query Utility Nodes: * DeletedQueryNode - used by processors on optimizations * MatchAllDocsQueryNode - used by processors on optimizations * MatchNoDocsQueryNode - used by processors on optimizations * NoTokenFoundQueryNode - used by tokenizers/lemmatizers/analyzers Classes AndQueryNode A AndQueryNode represents an AND boolean operation performed on a list of nodes. AnyQueryNode A AnyQueryNode represents an ANY operator performed on a list of nodes. BooleanQueryNode A BooleanQueryNode represents a list of elements which do not have an explicit boolean operator defined between them. It can be used to express a boolean query that intends to use the default boolean operator. BoostQueryNode A BoostQueryNode boosts the QueryNode tree which is under this node. So, it must only and always have one child. The boost value may vary from 0.0 to 1.0. DeletedQueryNode A DeletedQueryNode represents a node that was deleted from the query node tree. It can be removed from the tree using the RemoveDeletedQueryNodesProcessor processor. FieldQueryNode A FieldQueryNode represents a element that contains field/text tuple FuzzyQueryNode A FuzzyQueryNode represents a element that contains field/text/similarity tuple GroupQueryNode A GroupQueryNode represents a location where the original user typed real parenthesis on the query string. This class is useful for queries like: a) a AND b OR c b) ( a AND b) OR c Parenthesis might be used to define the boolean operation precedence. MatchAllDocsQueryNode A MatchAllDocsQueryNode indicates that a query node tree or subtree will match all documents if executed in the index. MatchNoDocsQueryNode A MatchNoDocsQueryNode indicates that a query node tree or subtree will not match any documents if executed in the index. ModifierExtensions ModifierQueryNode A ModifierQueryNode indicates the modifier value (+,-,?,NONE) for each term on the query string. For example \"+t1 -t2 t3\" will have a tree of: <BooleanQueryNode> <ModifierQueryNode modifier=\"MOD_REQ\"> <t1/> </ModifierQueryNode> <ModifierQueryNode modifier=\"MOD_NOT\"> <t2/> </ModifierQueryNode> <t3/> </BooleanQueryNode> NoTokenFoundQueryNode A NoTokenFoundQueryNode is used if a term is convert into no tokens by the tokenizer/lemmatizer/analyzer (null). OpaqueQueryNode A OpaqueQueryNode is used for specify values that are not supposed to be parsed by the parser. For example: and XPATH query in the middle of a query string a b @xpath:&apos;/bookstore/book[1]/title&apos; c d OrQueryNode A OrQueryNode represents an OR boolean operation performed on a list of nodes. PathQueryNode A PathQueryNode is used to store queries like /company/USA/California /product/shoes/brown. QueryText are objects that contain the text, begin position and end position in the query. Example how the text parser creates these objects: IList<PathQueryNode.QueryText> values = new List<PathQueryNode.QueryText>(); values.Add(new PathQueryNode.QueryText(\"company\", 1, 7)); values.Add(new PathQueryNode.QueryText(\"USA\", 9, 12)); values.Add(new PathQueryNode.QueryText(\"California\", 14, 23)); QueryNode q = new PathQueryNode(values); PathQueryNode.QueryText Term text with a beginning and end position PhraseSlopQueryNode Query node for 's slop factor. ProximityQueryNode A ProximityQueryNode represents a query where the terms should meet specific distance conditions. (a b c) WITHIN [SENTENCE|PARAGRAPH|NUMBER] [INORDER] (\"a\" \"b\" \"c\") WITHIN [SENTENCE|PARAGRAPH|NUMBER] [INORDER] TODO: Add this to the future standard Lucene parser/processor/builder ProximityQueryNode_TypeExtensions ProximityType utility class containing the distance condition and number QueryNode A QueryNode is the default implementation of the interface IQueryNode QuotedFieldQueryNode A QuotedFieldQueryNode represents phrase query. Example: \"life is great\" SlopQueryNode A SlopQueryNode represents phrase query with a slop. From Lucene FAQ: Is there a way to use a proximity operator (like near or within) with Lucene? There is a variable called slop that allows you to perform NEAR/WITHIN-like queries. By default, slop is set to 0 so that only exact phrases will match. When using TextParser you can use this syntax to specify the slop: \"doug cutting\"~2 will find documents that contain \"doug cutting\" as well as ones that contain \"cutting doug\". TokenizedPhraseQueryNode A TokenizedPhraseQueryNode represents a node created by a code that tokenizes/lemmatizes/analyzes. Interfaces IFieldableNode A query node implements IFieldableNode interface to indicate that its children and itself are associated to a specific field. If it has any children which also implements this interface, it must ensure the children are associated to the same field. IFieldValuePairQueryNode<T> This interface should be implemented by IQueryNode that holds a field and an arbitrary value. IQueryNode A IQueryNode is a interface implemented by all nodes on a IQueryNode tree. IRangeQueryNode LUCENENET specific interface for identifying a RangeQueryNode without specifying its generic closing type IRangeQueryNode<T> This interface should be implemented by an IQueryNode that represents some kind of range query. ITextableQueryNode Interface for a node that has text as a IValueQueryNode<T> This interface should be implemented by IQueryNode that holds an arbitrary value. Enums Modifier Modifier type: such as required (REQ), prohibited (NOT) ProximityQueryNode.Type Distance condition: PARAGRAPH, SENTENCE, or NUMBER"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IFieldableNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IFieldableNode.html",
    "title": "Interface IFieldableNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFieldableNode A query node implements IFieldableNode interface to indicate that its children and itself are associated to a specific field. If it has any children which also implements this interface, it must ensure the children are associated to the same field. Inherited Members IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IFieldableNode : IQueryNode Properties | Improve this Doc View Source Field Gets or Sets the field name associated to the node and every node under it. Declaration string Field { get; set; } Property Value Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IFieldValuePairQueryNode-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IFieldValuePairQueryNode-1.html",
    "title": "Interface IFieldValuePairQueryNode<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFieldValuePairQueryNode<T> This interface should be implemented by IQueryNode that holds a field and an arbitrary value. Inherited Members IFieldableNode.Field IValueQueryNode<T>.Value IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IFieldValuePairQueryNode<T> : IFieldableNode, IValueQueryNode<T>, IQueryNode Type Parameters Name Description T See Also IFieldableNode IValueQueryNode <T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IQueryNode.html",
    "title": "Interface IQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IQueryNode A IQueryNode is a interface implemented by all nodes on a IQueryNode tree. Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IQueryNode Properties | Improve this Doc View Source IsLeaf verify if a node is a Leaf node Declaration bool IsLeaf { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Parent Declaration IQueryNode Parent { get; } Property Value Type Description IQueryNode | Improve this Doc View Source TagMap Gets a map containing all tags attached to this query node. Declaration IDictionary<string, object> TagMap { get; } Property Value Type Description IDictionary < System.String , System.Object > Methods | Improve this Doc View Source Add(IList<IQueryNode>) Declaration void Add(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children | Improve this Doc View Source Add(IQueryNode) add a new child to a non Leaf node Declaration void Add(IQueryNode child) Parameters Type Name Description IQueryNode child | Improve this Doc View Source CloneTree() Recursive clone the IQueryNode tree. The tags are not copied to the new tree when you call the CloneTree() method. Declaration IQueryNode CloneTree() Returns Type Description IQueryNode the cloned tree | Improve this Doc View Source ContainsTag(String) verify if a node contains a tag Declaration bool ContainsTag(string tagName) Parameters Type Name Description System.String tagName Returns Type Description System.Boolean | Improve this Doc View Source GetChildren() get Children nodes Declaration IList<IQueryNode> GetChildren() Returns Type Description IList < IQueryNode > | Improve this Doc View Source GetTag(String) Returns object stored under that tag name Declaration object GetTag(string tagName) Parameters Type Name Description System.String tagName Returns Type Description System.Object | Improve this Doc View Source RemoveFromParent() Removes this query node from its parent. Declaration void RemoveFromParent() | Improve this Doc View Source Set(IList<IQueryNode>) reset the children of a node Declaration void Set(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children | Improve this Doc View Source SetTag(String, Object) Associate the specified value with the specified tagName . If the tagName already exists, the old value is replaced. The tagName and value cannot be null. tagName will be converted to lowercase. Declaration void SetTag(string tagName, object value) Parameters Type Name Description System.String tagName System.Object value | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) convert to a query string understood by the query parser Declaration string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String | Improve this Doc View Source ToString() for printing Declaration string ToString() Returns Type Description System.String | Improve this Doc View Source UnsetTag(String) Unset a tag. tagName will be converted to lowercase. Declaration void UnsetTag(string tagName) Parameters Type Name Description System.String tagName"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IRangeQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IRangeQueryNode.html",
    "title": "Interface IRangeQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IRangeQueryNode LUCENENET specific interface for identifying a RangeQueryNode without specifying its generic closing type Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IRangeQueryNode Properties | Improve this Doc View Source IsLowerInclusive Declaration bool IsLowerInclusive { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsUpperInclusive Declaration bool IsUpperInclusive { get; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IRangeQueryNode-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IRangeQueryNode-1.html",
    "title": "Interface IRangeQueryNode<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IRangeQueryNode<T> This interface should be implemented by an IQueryNode that represents some kind of range query. Inherited Members IRangeQueryNode.IsLowerInclusive IRangeQueryNode.IsUpperInclusive IFieldableNode.Field IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IRangeQueryNode<T> : IRangeQueryNode, IFieldableNode, IQueryNode where T : IFieldableNode Type Parameters Name Description T Properties | Improve this Doc View Source LowerBound Declaration T LowerBound { get; } Property Value Type Description T | Improve this Doc View Source UpperBound Declaration T UpperBound { get; } Property Value Type Description T"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ITextableQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ITextableQueryNode.html",
    "title": "Interface ITextableQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITextableQueryNode Interface for a node that has text as a Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface ITextableQueryNode Properties | Improve this Doc View Source Text Declaration ICharSequence Text { get; set; } Property Value Type Description ICharSequence"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IValueQueryNode-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IValueQueryNode-1.html",
    "title": "Interface IValueQueryNode<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IValueQueryNode<T> This interface should be implemented by IQueryNode that holds an arbitrary value. Inherited Members IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IValueQueryNode<T> : IQueryNode Type Parameters Name Description T the value's type Properties | Improve this Doc View Source Value Declaration T Value { get; set; } Property Value Type Description T"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.MatchAllDocsQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.MatchAllDocsQueryNode.html",
    "title": "Class MatchAllDocsQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchAllDocsQueryNode A MatchAllDocsQueryNode indicates that a query node tree or subtree will match all documents if executed in the index. Inheritance System.Object QueryNode MatchAllDocsQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchAllDocsQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source MatchAllDocsQueryNode() Declaration public MatchAllDocsQueryNode() Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.MatchNoDocsQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.MatchNoDocsQueryNode.html",
    "title": "Class MatchNoDocsQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchNoDocsQueryNode A MatchNoDocsQueryNode indicates that a query node tree or subtree will not match any documents if executed in the index. Inheritance System.Object QueryNode DeletedQueryNode MatchNoDocsQueryNode Implements IQueryNode Inherited Members DeletedQueryNode.ToQueryString(IEscapeQuerySyntax) DeletedQueryNode.CloneTree() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchNoDocsQueryNode : DeletedQueryNode, IQueryNode Constructors | Improve this Doc View Source MatchNoDocsQueryNode() Declaration public MatchNoDocsQueryNode() Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides DeletedQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.Modifier.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.Modifier.html",
    "title": "Enum Modifier | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Modifier Modifier type: such as required (REQ), prohibited (NOT) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public enum Modifier : int Fields Name Description MOD_NONE MOD_NOT MOD_REQ Extension Methods ModifierExtensions.ToDigitString() ModifierExtensions.ToLargeString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ModifierExtensions.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ModifierExtensions.html",
    "title": "Class ModifierExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ModifierExtensions Inheritance System.Object ModifierExtensions Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public static class ModifierExtensions : object Methods | Improve this Doc View Source ToDigitString(Modifier) Declaration public static string ToDigitString(this Modifier modifier) Parameters Type Name Description Modifier modifier Returns Type Description System.String | Improve this Doc View Source ToLargeString(Modifier) Declaration public static string ToLargeString(this Modifier modifier) Parameters Type Name Description Modifier modifier Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ModifierQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ModifierQueryNode.html",
    "title": "Class ModifierQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ModifierQueryNode A ModifierQueryNode indicates the modifier value (+,-,?,NONE) for each term on the query string. For example \"+t1 -t2 t3\" will have a tree of: <BooleanQueryNode> <ModifierQueryNode modifier=\"MOD_REQ\"> <t1/> </ModifierQueryNode> <ModifierQueryNode modifier=\"MOD_NOT\"> <t2/> </ModifierQueryNode> <t3/> </BooleanQueryNode> Inheritance System.Object QueryNode ModifierQueryNode BooleanModifierNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class ModifierQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source ModifierQueryNode(IQueryNode, Modifier) Used to store the modifier value on the original query string Declaration public ModifierQueryNode(IQueryNode query, Modifier mod) Parameters Type Name Description IQueryNode query QueryNode subtree Modifier mod Modifier Value Properties | Improve this Doc View Source Modifier Declaration public virtual Modifier Modifier { get; } Property Value Type Description Modifier Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetChild() Declaration public virtual IQueryNode GetChild() Returns Type Description IQueryNode | Improve this Doc View Source SetChild(IQueryNode) Declaration public virtual void SetChild(IQueryNode child) Parameters Type Name Description IQueryNode child | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.NoTokenFoundQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.NoTokenFoundQueryNode.html",
    "title": "Class NoTokenFoundQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoTokenFoundQueryNode A NoTokenFoundQueryNode is used if a term is convert into no tokens by the tokenizer/lemmatizer/analyzer (null). Inheritance System.Object QueryNode DeletedQueryNode NoTokenFoundQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class NoTokenFoundQueryNode : DeletedQueryNode, IQueryNode Constructors | Improve this Doc View Source NoTokenFoundQueryNode() Declaration public NoTokenFoundQueryNode() Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides DeletedQueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides DeletedQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides DeletedQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.OpaqueQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.OpaqueQueryNode.html",
    "title": "Class OpaqueQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpaqueQueryNode A OpaqueQueryNode is used for specify values that are not supposed to be parsed by the parser. For example: and XPATH query in the middle of a query string a b @xpath:&apos;/bookstore/book[1]/title&apos; c d Inheritance System.Object QueryNode OpaqueQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class OpaqueQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source OpaqueQueryNode(String, String) Declaration public OpaqueQueryNode(string schema, string value) Parameters Type Name Description System.String schema schema identifier System.String value value that was not parsed Properties | Improve this Doc View Source Schema Gets the schema Declaration public virtual string Schema { get; } Property Value Type Description System.String | Improve this Doc View Source Value Gets the value Declaration public virtual string Value { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.OrQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.OrQueryNode.html",
    "title": "Class OrQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OrQueryNode A OrQueryNode represents an OR boolean operation performed on a list of nodes. Inheritance System.Object QueryNode BooleanQueryNode OrQueryNode Implements IQueryNode Inherited Members BooleanQueryNode.CloneTree() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class OrQueryNode : BooleanQueryNode, IQueryNode Constructors | Improve this Doc View Source OrQueryNode(IList<IQueryNode>) Declaration public OrQueryNode(IList<IQueryNode> clauses) Parameters Type Name Description IList < IQueryNode > clauses the query nodes to be or'ed Methods | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides BooleanQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BooleanQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PathQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PathQueryNode.html",
    "title": "Class PathQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PathQueryNode A PathQueryNode is used to store queries like /company/USA/California /product/shoes/brown. QueryText are objects that contain the text, begin position and end position in the query. Example how the text parser creates these objects: IList<PathQueryNode.QueryText> values = new List<PathQueryNode.QueryText>(); values.Add(new PathQueryNode.QueryText(\"company\", 1, 7)); values.Add(new PathQueryNode.QueryText(\"USA\", 9, 12)); values.Add(new PathQueryNode.QueryText(\"California\", 14, 23)); QueryNode q = new PathQueryNode(values); Inheritance System.Object QueryNode PathQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class PathQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source PathQueryNode(IList<PathQueryNode.QueryText>) Declaration public PathQueryNode(IList<PathQueryNode.QueryText> pathElements) Parameters Type Name Description IList < PathQueryNode.QueryText > pathElements List of QueryText objects Properties | Improve this Doc View Source PathElements Gets or Sets the a List with all QueryText elements Declaration public virtual IList<PathQueryNode.QueryText> PathElements { get; set; } Property Value Type Description IList < PathQueryNode.QueryText > QueryText List size Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetFirstPathElement() Returns the value of a specific QueryText element Declaration public virtual string GetFirstPathElement() Returns Type Description System.String The for a specific QueryText element | Improve this Doc View Source GetPathElement(Int32) Returns the a specific QueryText element Declaration public virtual PathQueryNode.QueryText GetPathElement(int index) Parameters Type Name Description System.Int32 index Returns Type Description PathQueryNode.QueryText QueryText List size | Improve this Doc View Source GetPathElements(Int32) Returns a List QueryText element from position startIndex Declaration public virtual IList<PathQueryNode.QueryText> GetPathElements(int startIndex) Parameters Type Name Description System.Int32 startIndex Returns Type Description IList < PathQueryNode.QueryText > a List QueryText element from position startIndex | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PathQueryNode.QueryText.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PathQueryNode.QueryText.html",
    "title": "Class PathQueryNode.QueryText | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PathQueryNode.QueryText Term text with a beginning and end position Inheritance System.Object PathQueryNode.QueryText Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryText : object Constructors | Improve this Doc View Source QueryText(String, Int32, Int32) Declaration public QueryText(string value, int begin, int end) Parameters Type Name Description System.String value text value System.Int32 begin position in the query string System.Int32 end position in the query string Properties | Improve this Doc View Source Begin Gets the begin Declaration public virtual int Begin { get; } Property Value Type Description System.Int32 | Improve this Doc View Source End Gets the end Declaration public virtual int End { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Value Gets the value Declaration public virtual string Value { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PhraseSlopQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PhraseSlopQueryNode.html",
    "title": "Class PhraseSlopQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhraseSlopQueryNode Query node for 's slop factor. Inheritance System.Object QueryNode PhraseSlopQueryNode Implements IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class PhraseSlopQueryNode : QueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source PhraseSlopQueryNode(IQueryNode, Int32) Declaration public PhraseSlopQueryNode(IQueryNode query, int value) Parameters Type Name Description IQueryNode query System.Int32 value Exceptions Type Condition QueryNodeError throw in overridden method to disallow Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source Value Declaration public virtual int Value { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetChild() Declaration public virtual IQueryNode GetChild() Returns Type Description IQueryNode | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode.html",
    "title": "Class ProximityQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ProximityQueryNode A ProximityQueryNode represents a query where the terms should meet specific distance conditions. (a b c) WITHIN [SENTENCE|PARAGRAPH|NUMBER] [INORDER] (\"a\" \"b\" \"c\") WITHIN [SENTENCE|PARAGRAPH|NUMBER] [INORDER] TODO: Add this to the future standard Lucene parser/processor/builder Inheritance System.Object QueryNode BooleanQueryNode ProximityQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class ProximityQueryNode : BooleanQueryNode, IQueryNode Constructors | Improve this Doc View Source ProximityQueryNode(IList<IQueryNode>, String, ProximityQueryNode.Type, Boolean) Declaration public ProximityQueryNode(IList<IQueryNode> clauses, string field, ProximityQueryNode.Type type, bool inorder) Parameters Type Name Description IList < IQueryNode > clauses QueryNode children System.String field field name ProximityQueryNode.Type type type of proximity query System.Boolean inorder true, if the tokens should be matched in the order of the clauses | Improve this Doc View Source ProximityQueryNode(IList<IQueryNode>, String, ProximityQueryNode.Type, Int32, Boolean) Declaration public ProximityQueryNode(IList<IQueryNode> clauses, string field, ProximityQueryNode.Type type, int distance, bool inorder) Parameters Type Name Description IList < IQueryNode > clauses QueryNode children System.String field field name ProximityQueryNode.Type type type of proximity query System.Int32 distance positive integer that specifies the distance System.Boolean inorder true, if the tokens should be matched in the order of the clauses Properties | Improve this Doc View Source Distance Gets the distance Declaration public virtual int Distance { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Field Gets or Sets the field. Returns null if the field was not specified in the query string. Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source IsInOrder terms must be matched in the specified order Declaration public virtual bool IsInOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source ProximityType Declaration public virtual ProximityQueryNode.Type ProximityType { get; } Property Value Type Description ProximityQueryNode.Type Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides BooleanQueryNode.CloneTree() | Improve this Doc View Source GetFieldAsString() Gets the field as a string. Returns null if the field was not specified in the query string. Declaration public virtual string GetFieldAsString() Returns Type Description System.String | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides BooleanQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BooleanQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode.Type.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode.Type.html",
    "title": "Enum ProximityQueryNode.Type | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum ProximityQueryNode.Type Distance condition: PARAGRAPH, SENTENCE, or NUMBER Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public enum Type : int Fields Name Description NUMBER PARAGRAPH SENTENCE Extension Methods ProximityQueryNode_TypeExtensions.ToQueryString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode_TypeExtensions.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode_TypeExtensions.html",
    "title": "Class ProximityQueryNode_TypeExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ProximityQueryNode_TypeExtensions Inheritance System.Object ProximityQueryNode_TypeExtensions Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public static class ProximityQueryNode_TypeExtensions : object Methods | Improve this Doc View Source ToQueryString(ProximityQueryNode.Type) Declaration public static string ToQueryString(this ProximityQueryNode.Type type) Parameters Type Name Description ProximityQueryNode.Type type Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityType.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityType.html",
    "title": "Class ProximityType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ProximityType utility class containing the distance condition and number Inheritance System.Object ProximityType Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class ProximityType : object Constructors | Improve this Doc View Source ProximityType(ProximityQueryNode.Type) Declaration public ProximityType(ProximityQueryNode.Type type) Parameters Type Name Description ProximityQueryNode.Type type | Improve this Doc View Source ProximityType(ProximityQueryNode.Type, Int32) Declaration public ProximityType(ProximityQueryNode.Type type, int distance) Parameters Type Name Description ProximityQueryNode.Type type System.Int32 distance"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.QueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.QueryNode.html",
    "title": "Class QueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryNode A QueryNode is the default implementation of the interface IQueryNode Inheritance System.Object QueryNode BooleanQueryNode BoostQueryNode DeletedQueryNode FieldQueryNode GroupQueryNode MatchAllDocsQueryNode ModifierQueryNode OpaqueQueryNode PathQueryNode PhraseSlopQueryNode SlopQueryNode TokenizedPhraseQueryNode AbstractRangeQueryNode<T> MultiPhraseQueryNode NumericQueryNode RegexpQueryNode Implements IQueryNode Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryNode : object, IQueryNode Fields | Improve this Doc View Source m_toQueryStringIgnoreFields If set to true the the method toQueryString will not write field names Declaration protected bool m_toQueryStringIgnoreFields Field Value Type Description System.Boolean | Improve this Doc View Source PLAINTEXT_FIELD_NAME index default field Declaration public static readonly string PLAINTEXT_FIELD_NAME Field Value Type Description System.String Properties | Improve this Doc View Source IsLeaf Declaration public virtual bool IsLeaf { get; protected set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsRoot Declaration protected virtual bool IsRoot { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Parent Declaration public virtual IQueryNode Parent { get; } Property Value Type Description IQueryNode | Improve this Doc View Source TagMap Gets a map containing all tags attached to this query node. Declaration public virtual IDictionary<string, object> TagMap { get; } Property Value Type Description IDictionary < System.String , System.Object > Methods | Improve this Doc View Source Add(IList<IQueryNode>) Declaration public void Add(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children | Improve this Doc View Source Add(IQueryNode) Declaration public void Add(IQueryNode child) Parameters Type Name Description IQueryNode child | Improve this Doc View Source Allocate() Declaration protected virtual void Allocate() | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source CloneTree() Declaration public virtual IQueryNode CloneTree() Returns Type Description IQueryNode | Improve this Doc View Source ContainsTag(String) verify if a node contains a tag Declaration public virtual bool ContainsTag(string tagName) Parameters Type Name Description System.String tagName Returns Type Description System.Boolean | Improve this Doc View Source GetChildren() a List for QueryNode object. Returns null, for nodes that do not contain children. All leaf Nodes return null. Declaration public IList<IQueryNode> GetChildren() Returns Type Description IList < IQueryNode > | Improve this Doc View Source GetTag(String) Declaration public virtual object GetTag(string tagName) Parameters Type Name Description System.String tagName Returns Type Description System.Object | Improve this Doc View Source IsDefaultField(String) This method is use toQueryString to detect if fld is the default field Declaration protected virtual bool IsDefaultField(string fld) Parameters Type Name Description System.String fld field name Returns Type Description System.Boolean true if fld is the default field | Improve this Doc View Source RemoveFromParent() Declaration public virtual void RemoveFromParent() | Improve this Doc View Source Set(IList<IQueryNode>) Declaration public void Set(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children | Improve this Doc View Source SetTag(String, Object) Declaration public virtual void SetTag(string tagName, object value) Parameters Type Name Description System.String tagName System.Object value | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public abstract string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String | Improve this Doc View Source ToString() Every implementation of this class should return pseudo xml like this: For FieldQueryNode: <field start='1' end='2' field='subject' text='foo'/> Declaration public override string ToString() Returns Type Description System.String See Also ToString () | Improve this Doc View Source UnsetTag(String) Declaration public virtual void UnsetTag(string tagName) Parameters Type Name Description System.String tagName Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.QuotedFieldQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.QuotedFieldQueryNode.html",
    "title": "Class QuotedFieldQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QuotedFieldQueryNode A QuotedFieldQueryNode represents phrase query. Example: \"life is great\" Inheritance System.Object QueryNode FieldQueryNode QuotedFieldQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members FieldQueryNode.m_field FieldQueryNode.m_text FieldQueryNode.m_begin FieldQueryNode.m_end FieldQueryNode.m_positionIncrement FieldQueryNode.GetTermEscaped(IEscapeQuerySyntax) FieldQueryNode.GetTermEscapeQuoted(IEscapeQuerySyntax) FieldQueryNode.GetTextAsString() FieldQueryNode.GetFieldAsString() FieldQueryNode.Begin FieldQueryNode.End FieldQueryNode.Field FieldQueryNode.PositionIncrement FieldQueryNode.Text FieldQueryNode.Value QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class QuotedFieldQueryNode : FieldQueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source QuotedFieldQueryNode(String, ICharSequence, Int32, Int32) Declaration public QuotedFieldQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name ICharSequence text value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source QuotedFieldQueryNode(String, StringBuilder, Int32, Int32) Declaration public QuotedFieldQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name StringBuilder text value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source QuotedFieldQueryNode(String, String, Int32, Int32) Declaration public QuotedFieldQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value System.Int32 begin position in the query string System.Int32 end position in the query string Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides FieldQueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides FieldQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides FieldQueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.SlopQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.SlopQueryNode.html",
    "title": "Class SlopQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SlopQueryNode A SlopQueryNode represents phrase query with a slop. From Lucene FAQ: Is there a way to use a proximity operator (like near or within) with Lucene? There is a variable called slop that allows you to perform NEAR/WITHIN-like queries. By default, slop is set to 0 so that only exact phrases will match. When using TextParser you can use this syntax to specify the slop: \"doug cutting\"~2 will find documents that contain \"doug cutting\" as well as ones that contain \"cutting doug\". Inheritance System.Object QueryNode SlopQueryNode Implements IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class SlopQueryNode : QueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source SlopQueryNode(IQueryNode, Int32) Declaration public SlopQueryNode(IQueryNode query, int value) Parameters Type Name Description IQueryNode query QueryNode Tree with the phrase System.Int32 value slop value Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source Value Declaration public virtual int Value { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetChild() Declaration public virtual IQueryNode GetChild() Returns Type Description IQueryNode | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.TokenizedPhraseQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.TokenizedPhraseQueryNode.html",
    "title": "Class TokenizedPhraseQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenizedPhraseQueryNode A TokenizedPhraseQueryNode represents a node created by a code that tokenizes/lemmatizes/analyzes. Inheritance System.Object QueryNode TokenizedPhraseQueryNode Implements IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class TokenizedPhraseQueryNode : QueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source TokenizedPhraseQueryNode() Declaration public TokenizedPhraseQueryNode() Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.EscapeQuerySyntaxType.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.EscapeQuerySyntaxType.html",
    "title": "Enum EscapeQuerySyntaxType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum EscapeQuerySyntaxType Type of escaping: String for escaping syntax, NORMAL for escaping reserved words (like AND) in terms Namespace : Lucene.Net.QueryParsers.Flexible.Core.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public enum EscapeQuerySyntaxType : int Remarks Renamed from Type in Lucene to prevent collisions with System.Type. Fields Name Description NORMAL STRING"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Parser <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Necessary interfaces to implement text parsers. Parser The package org.apache.lucene.queryparser.flexible.parser contains interfaces that should be implemented by the parsers. Parsers produce QueryNode Trees from a string object. These package still needs some work to add support to for multiple parsers. Features that should be supported for the future, related with the parser: - QueryNode tree should be able convertible to any parser syntax. - The query syntax should support calling other parsers. - QueryNode tree created by multiple parsers. Interfaces IEscapeQuerySyntax A parser needs to implement IEscapeQuerySyntax to allow the IQueryNode to escape the queries, when the ToQueryString method is called. ISyntaxParser A parser needs to implement ISyntaxParser interface Enums EscapeQuerySyntaxType Type of escaping: String for escaping syntax, NORMAL for escaping reserved words (like AND) in terms"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.IEscapeQuerySyntax.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.IEscapeQuerySyntax.html",
    "title": "Interface IEscapeQuerySyntax | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IEscapeQuerySyntax A parser needs to implement IEscapeQuerySyntax to allow the IQueryNode to escape the queries, when the ToQueryString method is called. Namespace : Lucene.Net.QueryParsers.Flexible.Core.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public interface IEscapeQuerySyntax Methods | Improve this Doc View Source Escape(ICharSequence, CultureInfo, EscapeQuerySyntaxType) Declaration ICharSequence Escape(ICharSequence text, CultureInfo locale, EscapeQuerySyntaxType type) Parameters Type Name Description ICharSequence text text to be escaped CultureInfo locale locale for the current query EscapeQuerySyntaxType type select the type of escape operation to use Returns Type Description ICharSequence escaped text | Improve this Doc View Source Escape(String, CultureInfo, EscapeQuerySyntaxType) Declaration string Escape(string text, CultureInfo locale, EscapeQuerySyntaxType type) Parameters Type Name Description System.String text text to be escaped CultureInfo locale locale for the current query EscapeQuerySyntaxType type select the type of escape operation to use Returns Type Description System.String escaped text"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.ISyntaxParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.ISyntaxParser.html",
    "title": "Interface ISyntaxParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISyntaxParser A parser needs to implement ISyntaxParser interface Namespace : Lucene.Net.QueryParsers.Flexible.Core.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public interface ISyntaxParser Methods | Improve this Doc View Source Parse(String, String) Declaration IQueryNode Parse(string query, string field) Parameters Type Name Description System.String query query data to be parsed System.String field default field name Returns Type Description IQueryNode QueryNode tree"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Processors | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Processors <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Interfaces and implementations used by query node processors Query Node Processors The package org.apache.lucene.queryParser.processors contains interfaces that should be implemented by every query node processor. The interface that every query node processor should implement is QueryNodeProcessor . A query node processor should be used to process a QueryNode tree. QueryNode trees can be programmatically created or generated by a text parser. See Lucene.Net.QueryParsers.Flexible.Core.Parser for more details about text parsers. A query node processor should be used to process a QueryNode tree. QueryNode trees can be programmatically created or generated by a text parser. See Lucene.Net.QueryParsers.Flexible.Core.Parser for more details about text parsers. A pipeline of processors can be assembled using QueryNodeProcessorPipeline . Implementors may want to extend <xref:Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorImpl>, which simplifies the implementation, because it walks automatically the QueryNode . See <xref:Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorImpl> for more details. Classes NoChildOptimizationQueryNodeProcessor A NoChildOptimizationQueryNodeProcessor removes every BooleanQueryNode, BoostQueryNode, TokenizedPhraseQueryNode or ModifierQueryNode that do not have a valid children. Example: When the children of these nodes are removed for any reason then the nodes may become invalid. QueryNodeProcessor This is a default implementation for the IQueryNodeProcessor interface, it's an abstract class, so it should be extended by classes that want to process a IQueryNode tree. This class process IQueryNode s from left to right in the tree. While it's walking down the tree, for every node, PreProcessNode(IQueryNode) is invoked. After a node's children are processed, PostProcessNode(IQueryNode) is invoked for that node. SetChildrenOrder(IList<IQueryNode>) is invoked before PostProcessNode(IQueryNode) only if the node has at least one child, in SetChildrenOrder(IList<IQueryNode>) the implementor might redefine the children order or remove any children from the children list. Here is an example about how it process the nodes: a / \\ b e / \\ c d Here is the order the methods would be invoked for the tree described above: PreProcessNode( a ); PreProcessNode( b ); PreProcessNode( c ); PostProcessNode( c ); PreProcessNode( d ); PostProcessNode( d ); SetChildrenOrder( bChildrenList ); PostProcessNode( b ); PreProcessNode( e ); PostProcessNode( e ); SetChildrenOrder( aChildrenList ); PostProcessNode( a ) QueryNodeProcessorPipeline A QueryNodeProcessorPipeline class should be used to build a query node processor pipeline. When a query node tree is processed using this class, it passes the query node tree to each processor on the pipeline and the result from each processor is passed to the next one, always following the order the processors were on the pipeline. When a QueryConfigHandler object is set on a QueryNodeProcessorPipeline , it also takes care of setting this QueryConfigHandler on all processor on pipeline. RemoveDeletedQueryNodesProcessor A QueryNodeProcessorPipeline class removes every instance of DeletedQueryNode from a query node tree. If the resulting root node is a DeletedQueryNode , MatchNoDocsQueryNode is returned. Interfaces IQueryNodeProcessor An IQueryNodeProcessor is an interface for classes that process a IQueryNode tree. The implementor of this class should perform some operation on a query node tree and return the same or another query node tree. It also may carry a QueryConfigHandler object that contains configuration about the query represented by the query tree or the collection/index where it's intended to be executed. In case there is any QueryConfigHandler associated to the query tree to be processed, it should be set using SetQueryConfigHandler(QueryConfigHandler) before Process(IQueryNode) is invoked."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.IQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.IQueryNodeProcessor.html",
    "title": "Interface IQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IQueryNodeProcessor An IQueryNodeProcessor is an interface for classes that process a IQueryNode tree. The implementor of this class should perform some operation on a query node tree and return the same or another query node tree. It also may carry a QueryConfigHandler object that contains configuration about the query represented by the query tree or the collection/index where it's intended to be executed. In case there is any QueryConfigHandler associated to the query tree to be processed, it should be set using SetQueryConfigHandler(QueryConfigHandler) before Process(IQueryNode) is invoked. Namespace : Lucene.Net.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public interface IQueryNodeProcessor Methods | Improve this Doc View Source GetQueryConfigHandler() Returns the QueryConfigHandler associated to the query tree if any, otherwise it returns null Declaration QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler the QueryConfigHandler associated to the query tree if any, otherwise it returns null | Improve this Doc View Source Process(IQueryNode) Processes a query node tree. It may return the same or another query tree. I should never return null . Declaration IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree tree root node Returns Type Description IQueryNode the processed query tree | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) Sets the QueryConfigHandler associated to the query tree. Declaration void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler See Also IQueryNode IQueryNodeProcessor QueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.NoChildOptimizationQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.NoChildOptimizationQueryNodeProcessor.html",
    "title": "Class NoChildOptimizationQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoChildOptimizationQueryNodeProcessor A NoChildOptimizationQueryNodeProcessor removes every BooleanQueryNode, BoostQueryNode, TokenizedPhraseQueryNode or ModifierQueryNode that do not have a valid children. Example: When the children of these nodes are removed for any reason then the nodes may become invalid. Inheritance System.Object QueryNodeProcessor NoChildOptimizationQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class NoChildOptimizationQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source NoChildOptimizationQueryNodeProcessor() Declaration public NoChildOptimizationQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessor.html",
    "title": "Class QueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryNodeProcessor This is a default implementation for the IQueryNodeProcessor interface, it's an abstract class, so it should be extended by classes that want to process a IQueryNode tree. This class process IQueryNode s from left to right in the tree. While it's walking down the tree, for every node, PreProcessNode(IQueryNode) is invoked. After a node's children are processed, PostProcessNode(IQueryNode) is invoked for that node. SetChildrenOrder(IList<IQueryNode>) is invoked before PostProcessNode(IQueryNode) only if the node has at least one child, in SetChildrenOrder(IList<IQueryNode>) the implementor might redefine the children order or remove any children from the children list. Here is an example about how it process the nodes: a / \\ b e / \\ c d Here is the order the methods would be invoked for the tree described above: PreProcessNode( a ); PreProcessNode( b ); PreProcessNode( c ); PostProcessNode( c ); PreProcessNode( d ); PostProcessNode( d ); SetChildrenOrder( bChildrenList ); PostProcessNode( b ); PreProcessNode( e ); PostProcessNode( e ); SetChildrenOrder( aChildrenList ); PostProcessNode( a ) Inheritance System.Object QueryNodeProcessor NoChildOptimizationQueryNodeProcessor RemoveDeletedQueryNodesProcessor BooleanModifiersQueryNodeProcessor AllowLeadingWildcardProcessor AnalyzerQueryNodeProcessor BooleanSingleChildOptimizationQueryNodeProcessor BoostQueryNodeProcessor DefaultPhraseSlopQueryNodeProcessor FuzzyQueryNodeProcessor LowercaseExpandedTermsQueryNodeProcessor MatchAllDocsQueryNodeProcessor MultiFieldQueryNodeProcessor MultiTermRewriteMethodProcessor NumericQueryNodeProcessor NumericRangeQueryNodeProcessor OpenRangeQueryNodeProcessor PhraseSlopQueryNodeProcessor RemoveEmptyNonLeafQueryNodeProcessor TermRangeQueryNodeProcessor WildcardQueryNodeProcessor Implements IQueryNodeProcessor Namespace : Lucene.Net.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryNodeProcessor : object, IQueryNodeProcessor Constructors | Improve this Doc View Source QueryNodeProcessor() Declaration public QueryNodeProcessor() | Improve this Doc View Source QueryNodeProcessor(QueryConfigHandler) Declaration public QueryNodeProcessor(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler Methods | Improve this Doc View Source GetQueryConfigHandler() For reference about this method check: GetQueryConfigHandler() . Declaration public virtual QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler QueryConfigHandler the query configuration handler to be set. See Also SetQueryConfigHandler ( QueryConfigHandler ) QueryConfigHandler | Improve this Doc View Source PostProcessNode(IQueryNode) This method is invoked for every node when walking up the tree. Declaration protected abstract IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node node the query node to be post-processed Returns Type Description IQueryNode a query node Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing | Improve this Doc View Source PreProcessNode(IQueryNode) This method is invoked for every node when walking down the tree. Declaration protected abstract IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node the query node to be pre-processed Returns Type Description IQueryNode a query node Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing | Improve this Doc View Source Process(IQueryNode) Declaration public virtual IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode | Improve this Doc View Source ProcessChildren(IQueryNode) This method is called every time a child is processed. Declaration protected virtual void ProcessChildren(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree the query node child to be processed Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) This method is invoked for every node that has at least on child. It's invoked right before PostProcessNode(IQueryNode) is invoked. Declaration protected abstract IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children the list containing all current node's children Returns Type Description IList < IQueryNode > a new list containing all children that should be set to the current node Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) For reference about this method check: SetQueryConfigHandler(QueryConfigHandler) . Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler the query configuration handler to be set. See Also SetQueryConfigHandler ( QueryConfigHandler ) QueryConfigHandler Implements IQueryNodeProcessor See Also IQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorPipeline.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorPipeline.html",
    "title": "Class QueryNodeProcessorPipeline | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryNodeProcessorPipeline A QueryNodeProcessorPipeline class should be used to build a query node processor pipeline. When a query node tree is processed using this class, it passes the query node tree to each processor on the pipeline and the result from each processor is passed to the next one, always following the order the processors were on the pipeline. When a QueryConfigHandler object is set on a QueryNodeProcessorPipeline , it also takes care of setting this QueryConfigHandler on all processor on pipeline. Inheritance System.Object QueryNodeProcessorPipeline StandardQueryNodeProcessorPipeline Implements IQueryNodeProcessor IList < IQueryNodeProcessor > Namespace : Lucene.Net.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryNodeProcessorPipeline : object, IQueryNodeProcessor, IList<IQueryNodeProcessor> Constructors | Improve this Doc View Source QueryNodeProcessorPipeline() Constructs an empty query node processor pipeline. Declaration public QueryNodeProcessorPipeline() | Improve this Doc View Source QueryNodeProcessorPipeline(QueryConfigHandler) Constructs with a QueryConfigHandler object. Declaration public QueryNodeProcessorPipeline(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler Properties | Improve this Doc View Source Count Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[Int32] Declaration public virtual IQueryNodeProcessor this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description IQueryNodeProcessor Methods | Improve this Doc View Source Add(IQueryNodeProcessor) Declaration public virtual bool Add(IQueryNodeProcessor processor) Parameters Type Name Description IQueryNodeProcessor processor Returns Type Description System.Boolean | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source Contains(IQueryNodeProcessor) Declaration public virtual bool Contains(IQueryNodeProcessor item) Parameters Type Name Description IQueryNodeProcessor item Returns Type Description System.Boolean | Improve this Doc View Source Contains(Object) Declaration public virtual bool Contains(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(IQueryNodeProcessor[], Int32) Declaration public virtual void CopyTo(IQueryNodeProcessor[] array, int arrayIndex) Parameters Type Name Description IQueryNodeProcessor [] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() Declaration public virtual IEnumerator<IQueryNodeProcessor> GetEnumerator() Returns Type Description IEnumerator < IQueryNodeProcessor > | Improve this Doc View Source GetQueryConfigHandler() For reference about this method check: GetQueryConfigHandler() . Declaration public virtual QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler QueryConfigHandler the query configuration handler to be set. See Also SetQueryConfigHandler ( QueryConfigHandler ) QueryConfigHandler | Improve this Doc View Source GetRange(Int32, Int32) Declaration public virtual IList<IQueryNodeProcessor> GetRange(int index, int count) Parameters Type Name Description System.Int32 index System.Int32 count Returns Type Description IList < IQueryNodeProcessor > | Improve this Doc View Source IndexOf(IQueryNodeProcessor) Declaration public virtual int IndexOf(IQueryNodeProcessor o) Parameters Type Name Description IQueryNodeProcessor o Returns Type Description System.Int32 | Improve this Doc View Source Insert(Int32, IQueryNodeProcessor) Declaration public virtual void Insert(int index, IQueryNodeProcessor item) Parameters Type Name Description System.Int32 index IQueryNodeProcessor item | Improve this Doc View Source Process(IQueryNode) For reference about this method check: Process(IQueryNode) . Declaration public virtual IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree the query node tree to be processed Returns Type Description IQueryNode Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing See Also IQueryNode | Improve this Doc View Source Remove(IQueryNodeProcessor) Declaration public virtual bool Remove(IQueryNodeProcessor o) Parameters Type Name Description IQueryNodeProcessor o Returns Type Description System.Boolean | Improve this Doc View Source RemoveAt(Int32) Declaration public virtual void RemoveAt(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source RemoveRange(Int32, Int32) Declaration public virtual void RemoveRange(int index, int count) Parameters Type Name Description System.Int32 index System.Int32 count | Improve this Doc View Source Set(Int32, IQueryNodeProcessor) Declaration public virtual IQueryNodeProcessor Set(int index, IQueryNodeProcessor processor) Parameters Type Name Description System.Int32 index IQueryNodeProcessor processor Returns Type Description IQueryNodeProcessor | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) For reference about this method check: SetQueryConfigHandler(QueryConfigHandler) . Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler the query configuration handler to be set. See Also GetQueryConfigHandler () QueryConfigHandler Implements IQueryNodeProcessor IList<>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.RemoveDeletedQueryNodesProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.RemoveDeletedQueryNodesProcessor.html",
    "title": "Class RemoveDeletedQueryNodesProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RemoveDeletedQueryNodesProcessor A QueryNodeProcessorPipeline class removes every instance of DeletedQueryNode from a query node tree. If the resulting root node is a DeletedQueryNode , MatchNoDocsQueryNode is returned. Inheritance System.Object QueryNodeProcessor RemoveDeletedQueryNodesProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class RemoveDeletedQueryNodesProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source RemoveDeletedQueryNodesProcessor() Declaration public RemoveDeletedQueryNodesProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeError.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeError.html",
    "title": "Class QueryNodeError | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryNodeError Error class with NLS support Inheritance System.Object QueryNodeError Implements INLSException Namespace : Lucene.Net.QueryParsers.Flexible.Core Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryNodeError : Exception, INLSException Constructors | Improve this Doc View Source QueryNodeError(Exception) Declaration public QueryNodeError(Exception throwable) Parameters Type Name Description Exception throwable An exception instance to wrap | Improve this Doc View Source QueryNodeError(IMessage) Declaration public QueryNodeError(IMessage message) Parameters Type Name Description IMessage message NLS Message Object | Improve this Doc View Source QueryNodeError(IMessage, Exception) Declaration public QueryNodeError(IMessage message, Exception throwable) Parameters Type Name Description IMessage message NLS Message Object Exception throwable An exception instance to wrap Properties | Improve this Doc View Source MessageObject MessageObject Declaration public virtual IMessage MessageObject { get; } Property Value Type Description IMessage Implements INLSException See Also NLS IMessage"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeException.html",
    "title": "Class QueryNodeException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryNodeException This exception should be thrown if something wrong happens when dealing with IQueryNode s. It also supports NLS messages. Inheritance System.Object QueryNodeException QueryNodeParseException Implements INLSException Namespace : Lucene.Net.QueryParsers.Flexible.Core Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryNodeException : Exception, INLSException Constructors | Improve this Doc View Source QueryNodeException(Exception) Declaration public QueryNodeException(Exception throwable) Parameters Type Name Description Exception throwable | Improve this Doc View Source QueryNodeException(IMessage) Declaration public QueryNodeException(IMessage message) Parameters Type Name Description IMessage message | Improve this Doc View Source QueryNodeException(IMessage, Exception) Declaration public QueryNodeException(IMessage message, Exception throwable) Parameters Type Name Description IMessage message Exception throwable Fields | Improve this Doc View Source m_message Declaration protected IMessage m_message Field Value Type Description IMessage Properties | Improve this Doc View Source Message Declaration public override string Message { get; } Property Value Type Description System.String | Improve this Doc View Source MessageObject Declaration public virtual IMessage MessageObject { get; } Property Value Type Description IMessage Methods | Improve this Doc View Source GetLocalizedMessage() Declaration public virtual string GetLocalizedMessage() Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(CultureInfo) Declaration public virtual string GetLocalizedMessage(CultureInfo locale) Parameters Type Name Description CultureInfo locale Returns Type Description System.String | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Implements INLSException See Also IMessage NLS INLSException IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeParseException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeParseException.html",
    "title": "Class QueryNodeParseException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryNodeParseException This should be thrown when an exception happens during the query parsing from string to the query node tree. Inheritance System.Object QueryNodeException QueryNodeParseException ParseException Implements INLSException Inherited Members QueryNodeException.m_message QueryNodeException.MessageObject QueryNodeException.Message QueryNodeException.GetLocalizedMessage() QueryNodeException.GetLocalizedMessage(CultureInfo) QueryNodeException.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryNodeParseException : QueryNodeException, INLSException Constructors | Improve this Doc View Source QueryNodeParseException(Exception) Declaration public QueryNodeParseException(Exception throwable) Parameters Type Name Description Exception throwable | Improve this Doc View Source QueryNodeParseException(IMessage) Declaration public QueryNodeParseException(IMessage message) Parameters Type Name Description IMessage message | Improve this Doc View Source QueryNodeParseException(IMessage, Exception) Declaration public QueryNodeParseException(IMessage message, Exception throwable) Parameters Type Name Description IMessage message Exception throwable Properties | Improve this Doc View Source BeginColumn For EndOfLine and EndOfFile (\"<EOF>\") parsing problems the last char in the string is returned. For the case where the parser is not able to figure out the line and column number -1 will be returned. Returns column of the first char where the problem was found. Declaration public virtual int BeginColumn { get; protected set; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine For EndOfLine and EndOfFile (\"<EOF>\") parsing problems the last char in the string is returned. For the case where the parser is not able to figure out the line and column number -1 will be returned. Returns line where the problem was found. Declaration public virtual int BeginLine { get; protected set; } Property Value Type Description System.Int32 | Improve this Doc View Source ErrorToken The errorToken in the query Declaration public virtual string ErrorToken { get; protected set; } Property Value Type Description System.String | Improve this Doc View Source Query Declaration public virtual string Query { get; } Property Value Type Description System.String Methods | Improve this Doc View Source SetNonLocalizedMessage(IMessage) Declaration public virtual void SetNonLocalizedMessage(IMessage message) Parameters Type Name Description IMessage message | Improve this Doc View Source SetQuery(String) Declaration public virtual void SetQuery(string query) Parameters Type Name Description System.String query Implements INLSException See Also QueryNodeException ISyntaxParser IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryParserHelper-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryParserHelper-1.html",
    "title": "Class QueryParserHelper<TQuery> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserHelper<TQuery> This class is a helper for the query parser framework, it does all the three query parser phrases at once: text parsing, query processing and query building. It contains methods that allows the user to change the implementation used on the three phases. Inheritance System.Object QueryParserHelper<TQuery> StandardQueryParser Namespace : Lucene.Net.QueryParsers.Flexible.Core Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParserHelper<TQuery> : object Type Parameters Name Description TQuery Constructors | Improve this Doc View Source QueryParserHelper(QueryConfigHandler, ISyntaxParser, IQueryNodeProcessor, IQueryBuilder<TQuery>) Creates a query parser helper object using the specified configuration, text parser, processor and builder. Declaration public QueryParserHelper(QueryConfigHandler queryConfigHandler, ISyntaxParser syntaxParser, IQueryNodeProcessor processor, IQueryBuilder<TQuery> builder) Parameters Type Name Description QueryConfigHandler queryConfigHandler the query configuration handler that will be initially set to this helper ISyntaxParser syntaxParser the text parser that will be initially set to this helper IQueryNodeProcessor processor the query processor that will be initially set to this helper IQueryBuilder <TQuery> builder the query builder that will be initially set to this helper See Also IQueryNodeProcessor ISyntaxParser IQueryBuilder <TQuery> QueryConfigHandler Properties | Improve this Doc View Source QueryBuilder Returns the query builder used to build a object from the query node tree. The object produced by this builder is returned by Parse(String, String) . Declaration public virtual IQueryBuilder<TQuery> QueryBuilder { get; } Property Value Type Description IQueryBuilder <TQuery> See Also SetQueryBuilder(IQueryBuilder<TQuery>) IQueryBuilder <TQuery> | Improve this Doc View Source QueryConfigHandler Returns the query configuration handler, which is used during the query node tree processing. It can be null . Declaration public virtual QueryConfigHandler QueryConfigHandler { get; } Property Value Type Description QueryConfigHandler See Also QueryConfigHandler SetQueryConfigHandler(QueryConfigHandler) | Improve this Doc View Source QueryNodeProcessor Gets the processor object used to process the query node tree, it returns null if no processor is used. Declaration public virtual IQueryNodeProcessor QueryNodeProcessor { get; } Property Value Type Description IQueryNodeProcessor See Also IQueryNodeProcessor SetQueryNodeProcessor(IQueryNodeProcessor) | Improve this Doc View Source SyntaxParser Returns the text parser used to build a query node tree from a query string. The default text parser instance returned by this method is a ISyntaxParser . Declaration public virtual ISyntaxParser SyntaxParser { get; } Property Value Type Description ISyntaxParser See Also ISyntaxParser SetSyntaxParser(ISyntaxParser) Methods | Improve this Doc View Source Parse(String, String) Parses a query string to an object, usually some query object. In this method the three phases are executed: the query string is parsed using the text parser returned by SyntaxParser , the result is a query node tree. the query node tree is processed by the processor returned by QueryNodeProcessor . a object is built from the query node tree using the builder returned by QueryBuilder . Declaration public virtual TQuery Parse(string query, string defaultField) Parameters Type Name Description System.String query the query string System.String defaultField the default field used by the text parser Returns Type Description TQuery the object built from the query Exceptions Type Condition QueryNodeException if something wrong happens along the three phases | Improve this Doc View Source SetQueryBuilder(IQueryBuilder<TQuery>) The query builder that will be used to build an object from the query node tree. It cannot be null . Declaration public virtual void SetQueryBuilder(IQueryBuilder<TQuery> queryBuilder) Parameters Type Name Description IQueryBuilder <TQuery> queryBuilder the query builder used to build something from the query node tree See Also QueryBuilder IQueryBuilder <TQuery> | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) Sets the query configuration handler that will be used during query processing. It can be null . It's also set to the processor returned by QueryNodeProcessor . Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler config) Parameters Type Name Description QueryConfigHandler config the query configuration handler used during query processing, it can be null See Also QueryConfigHandler QueryConfigHandler | Improve this Doc View Source SetQueryNodeProcessor(IQueryNodeProcessor) Sets the processor that will be used to process the query node tree. If there is any QueryConfigHandler returned by QueryConfigHandler , it will be set on the processor. The argument can be null , which means that no processor will be used to process the query node tree. Declaration public virtual void SetQueryNodeProcessor(IQueryNodeProcessor processor) Parameters Type Name Description IQueryNodeProcessor processor the processor that will be used to process the query node tree, this argument can be null See Also QueryNodeProcessor IQueryNodeProcessor | Improve this Doc View Source SetSyntaxParser(ISyntaxParser) Sets the text parser that will be used to parse the query string, it cannot be null . Declaration public virtual void SetSyntaxParser(ISyntaxParser syntaxParser) Parameters Type Name Description ISyntaxParser syntaxParser the text parser that will be used to parse the query string See Also SyntaxParser ISyntaxParser See Also IQueryNodeProcessor ISyntaxParser IQueryBuilder <TQuery> QueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Util <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Utility classes to used with the Query Parser. Utility classes to used with the Query Parser This package contains utility classes used with the query parsers. Classes QueryNodeOperation Allow joining 2 QueryNode Trees, into one. StringUtils String manipulation routines UnescapedCharSequence with escaped chars information."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.QueryNodeOperation.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.QueryNodeOperation.html",
    "title": "Class QueryNodeOperation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryNodeOperation Allow joining 2 QueryNode Trees, into one. Inheritance System.Object QueryNodeOperation Namespace : Lucene.Net.QueryParsers.Flexible.Core.Util Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class QueryNodeOperation : object Methods | Improve this Doc View Source LogicalAnd(IQueryNode, IQueryNode) perform a logical and of 2 QueryNode trees. if q1 and q2 are ANDQueryNode nodes it uses head Node from q1 and adds the children of q2 to q1 if q1 is a AND node and q2 is not, add q2 as a child of the head node of q1 if q2 is a AND node and q1 is not, add q1 as a child of the head node of q2 if q1 and q2 are not ANDQueryNode nodes, create a AND node and make q1 and q2 children of that node if q1 or q2 is null it returns the not null node if q1 = q2 = null it returns null Declaration public static IQueryNode LogicalAnd(IQueryNode q1, IQueryNode q2) Parameters Type Name Description IQueryNode q1 IQueryNode q2 Returns Type Description IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.StringUtils.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.StringUtils.html",
    "title": "Class StringUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringUtils String manipulation routines Inheritance System.Object StringUtils Namespace : Lucene.Net.QueryParsers.Flexible.Core.Util Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class StringUtils : object Methods | Improve this Doc View Source ToString(Object) Declaration public static string ToString(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.UnescapedCharSequence.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.UnescapedCharSequence.html",
    "title": "Class UnescapedCharSequence | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnescapedCharSequence with escaped chars information. Inheritance System.Object UnescapedCharSequence Namespace : Lucene.Net.QueryParsers.Flexible.Core.Util Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class UnescapedCharSequence : ICharSequence Constructors | Improve this Doc View Source UnescapedCharSequence(ICharSequence) Create a non-escaped Declaration public UnescapedCharSequence(ICharSequence text) Parameters Type Name Description ICharSequence text | Improve this Doc View Source UnescapedCharSequence(StringBuilder) Create a non-escaped Declaration public UnescapedCharSequence(StringBuilder text) Parameters Type Name Description StringBuilder text | Improve this Doc View Source UnescapedCharSequence(Char[], Boolean[], Int32, Int32) Create a escaped Declaration public UnescapedCharSequence(char[] chars, bool[] wasEscaped, int offset, int length) Parameters Type Name Description System.Char [] chars System.Boolean [] wasEscaped System.Int32 offset System.Int32 length | Improve this Doc View Source UnescapedCharSequence(String) Create a non-escaped Declaration public UnescapedCharSequence(string text) Parameters Type Name Description System.String text Properties | Improve this Doc View Source Item[Int32] Declaration public char this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source SubSequence(Int32, Int32) Declaration public ICharSequence SubSequence(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Returns Type Description ICharSequence | Improve this Doc View Source ToLower(ICharSequence, CultureInfo) Declaration public static ICharSequence ToLower(ICharSequence text, CultureInfo locale) Parameters Type Name Description ICharSequence text CultureInfo locale Returns Type Description ICharSequence | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source ToStringEscaped() Return an escaped Declaration public string ToStringEscaped() Returns Type Description System.String an escaped | Improve this Doc View Source ToStringEscaped(Char[]) Return an escaped Declaration public ICharSequence ToStringEscaped(char[] enabledChars) Parameters Type Name Description System.Char [] enabledChars array of chars to be escaped Returns Type Description ICharSequence an escaped | Improve this Doc View Source WasEscaped(ICharSequence, Int32) Declaration public static bool WasEscaped(ICharSequence text, int index) Parameters Type Name Description ICharSequence text System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source WasEscaped(Int32) Declaration public bool WasEscaped(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Messages | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Messages <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> For Native Language Support (NLS), system of software internationalization. NLS message API This utility API, adds support for NLS messages in the apache code. It is currently used by the lucene \"New Flexible Query PArser\". Features: 1. Message reference in the code, using static Strings 2. Message resource validation at class load time, for easier debugging 3. Allows for message IDs to be re-factored using eclipse or other code re-factor tools 4. Allows for reference count on messages, just like code 5. Lazy loading of Message Strings 6. Normal loading Message Strings Lazy loading of Message Strings public class MessagesTestBundle extends NLS { private static final String BUNDLE_NAME = MessagesTestBundle.class.getName(); private MessagesTestBundle() { // should never be instantiated } static { // register all string ids with NLS class and initialize static string // values NLS.initializeMessages(BUNDLE_NAME, MessagesTestBundle.class); } // static string must match the strings in the property files. public static String Q0001E_INVALID_SYNTAX; public static String Q0004E_INVALID_SYNTAX_ESCAPE_UNICODE_TRUNCATION; // this message is missing from the properties file public static String Q0005E_MESSAGE_NOT_IN_BUNDLE; } // Create a message reference Message invalidSyntax = new MessageImpl(MessagesTestBundle.Q0001E_INVALID_SYNTAX, \"XXX\"); // Do other stuff in the code... // when is time to display the message to the user or log the message on a file // the message is loaded from the correct bundle String message1 = invalidSyntax.getLocalizedMessage(); String message2 = invalidSyntax.getLocalizedMessage(Locale.JAPANESE); Normal loading of Message Strings String message1 = NLS.getLocalizedMessage(MessagesTestBundle.Q0004E_INVALID_SYNTAX_ESCAPE_UNICODE_TRUNCATION); String message2 = NLS.getLocalizedMessage(MessagesTestBundle.Q0004E_INVALID_SYNTAX_ESCAPE_UNICODE_TRUNCATION, Locale.JAPANESE); The org.apache.lucene.messages.TestNLS junit contains several other examples. The TestNLS java code is available from the Apache Lucene code repository. Classes Message Default implementation of Message interface. For Native Language Support (NLS), system of software internationalization. NLS MessageBundles classes extend this class, to implement a bundle. For Native Language Support (NLS), system of software internationalization. This interface is similar to the NLS class in eclipse.osgi.util.NLS class - initializeMessages() method resets the values of all static strings, should only be called by classes that extend from NLS (see TestMessages.java for reference) - performs validation of all message in a bundle, at class load time - performs per message validation at runtime - see NLSTest.java for usage reference MessageBundle classes may subclass this type. Interfaces IMessage Message Interface for a lazy loading. For Native Language Support (NLS), system of software internationalization. INLSException Interface that exceptions should implement to support lazy loading of messages. For Native Language Support (NLS), system of software internationalization. This Interface should be implemented by all exceptions that require translation"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.IMessage.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.IMessage.html",
    "title": "Interface IMessage | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IMessage Message Interface for a lazy loading. For Native Language Support (NLS), system of software internationalization. Namespace : Lucene.Net.QueryParsers.Flexible.Messages Assembly : Lucene.Net.QueryParser.dll Syntax public interface IMessage Properties | Improve this Doc View Source Key Declaration string Key { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetArguments() Declaration object[] GetArguments() Returns Type Description System.Object [] | Improve this Doc View Source GetLocalizedMessage() Declaration string GetLocalizedMessage() Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(CultureInfo) Declaration string GetLocalizedMessage(CultureInfo locale) Parameters Type Name Description CultureInfo locale Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.INLSException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.INLSException.html",
    "title": "Interface INLSException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface INLSException Interface that exceptions should implement to support lazy loading of messages. For Native Language Support (NLS), system of software internationalization. This Interface should be implemented by all exceptions that require translation Namespace : Lucene.Net.QueryParsers.Flexible.Messages Assembly : Lucene.Net.QueryParser.dll Syntax public interface INLSException Properties | Improve this Doc View Source MessageObject an instance of a class that implements the Message interface Declaration IMessage MessageObject { get; } Property Value Type Description IMessage"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.Message.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.Message.html",
    "title": "Class Message | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Message Default implementation of Message interface. For Native Language Support (NLS), system of software internationalization. Inheritance System.Object Message Implements IMessage Namespace : Lucene.Net.QueryParsers.Flexible.Messages Assembly : Lucene.Net.QueryParser.dll Syntax public class Message : object, IMessage Constructors | Improve this Doc View Source Message(String) Declaration public Message(string key) Parameters Type Name Description System.String key | Improve this Doc View Source Message(String, Object[]) Declaration public Message(string key, params object[] args) Parameters Type Name Description System.String key System.Object [] args Properties | Improve this Doc View Source Key Declaration public virtual string Key { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetArguments() Declaration public virtual object[] GetArguments() Returns Type Description System.Object [] | Improve this Doc View Source GetLocalizedMessage() Declaration public virtual string GetLocalizedMessage() Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(CultureInfo) Declaration public virtual string GetLocalizedMessage(CultureInfo locale) Parameters Type Name Description CultureInfo locale Returns Type Description System.String | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Implements IMessage"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.NLS.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.NLS.html",
    "title": "Class NLS | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NLS MessageBundles classes extend this class, to implement a bundle. For Native Language Support (NLS), system of software internationalization. This interface is similar to the NLS class in eclipse.osgi.util.NLS class - initializeMessages() method resets the values of all static strings, should only be called by classes that extend from NLS (see TestMessages.java for reference) - performs validation of all message in a bundle, at class load time - performs per message validation at runtime - see NLSTest.java for usage reference MessageBundle classes may subclass this type. Inheritance System.Object NLS QueryParserMessages Namespace : Lucene.Net.QueryParsers.Flexible.Messages Assembly : Lucene.Net.QueryParser.dll Syntax public class NLS : object Constructors | Improve this Doc View Source NLS() Declaration protected NLS() Methods | Improve this Doc View Source GetLocalizedMessage(String) Declaration public static string GetLocalizedMessage(string key) Parameters Type Name Description System.String key Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(String, CultureInfo) Declaration public static string GetLocalizedMessage(string key, CultureInfo locale) Parameters Type Name Description System.String key CultureInfo locale Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(String, CultureInfo, Object[]) Declaration public static string GetLocalizedMessage(string key, CultureInfo locale, params object[] args) Parameters Type Name Description System.String key CultureInfo locale System.Object [] args Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(String, Object[]) Declaration public static string GetLocalizedMessage(string key, params object[] args) Parameters Type Name Description System.String key System.Object [] args Returns Type Description System.String | Improve this Doc View Source GetResourceManagerFactory() Gets the static instance responsible for creating instances in this class. LUCENENET specific. Declaration public static IResourceManagerFactory GetResourceManagerFactory() Returns Type Description IResourceManagerFactory | Improve this Doc View Source InitializeMessages(String, Type) Initialize a given class with the message bundle Keys Should be called from a class that extends NLS in a static block at class load time. Declaration protected static void InitializeMessages(string bundleName, Type clazz) Parameters Type Name Description System.String bundleName Property file with that contains the message bundle Type clazz where constants will reside | Improve this Doc View Source SetResourceManagerFactory(IResourceManagerFactory) Sets the used to create instances of for retrieving localized resources. Defaults to if not set. LUCENENET specific. Declaration public static void SetResourceManagerFactory(IResourceManagerFactory resourceManagerFactory) Parameters Type Name Description IResourceManagerFactory resourceManagerFactory The instance. Cannot be null ."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Precedence | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Precedence <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Precedence Query Parser Implementation Lucene Precedence Query Parser The Precedence Query Parser extends the Standard Query Parser and enables the boolean precedence. So, the query is parsed to <(+a +b) (+c +d)> instead of <+a +b +c +d>. Check StandardQueryParser for more details about the supported syntax and query parser functionalities. Classes PrecedenceQueryParser This query parser works exactly as the standard query parser ( StandardQueryParser ), except that it respect the boolean precedence, so <a AND b OR c AND d> is parsed to <(+a +b) (+c +d)> instead of <+a +b +c +d>. EXPERT: This class extends StandardQueryParser , but uses PrecedenceQueryNodeProcessorPipeline instead of StandardQueryNodeProcessorPipeline to process the query tree."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.PrecedenceQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.PrecedenceQueryParser.html",
    "title": "Class PrecedenceQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrecedenceQueryParser This query parser works exactly as the standard query parser ( StandardQueryParser ), except that it respect the boolean precedence, so <a AND b OR c AND d> is parsed to <(+a +b) (+c +d)> instead of <+a +b +c +d>. EXPERT: This class extends StandardQueryParser , but uses PrecedenceQueryNodeProcessorPipeline instead of StandardQueryNodeProcessorPipeline to process the query tree. Inheritance System.Object QueryParserHelper < Query > StandardQueryParser PrecedenceQueryParser Implements ICommonQueryParserConfiguration Inherited Members StandardQueryParser.ToString() StandardQueryParser.Parse(String, String) StandardQueryParser.DefaultOperator StandardQueryParser.LowercaseExpandedTerms StandardQueryParser.AllowLeadingWildcard StandardQueryParser.EnablePositionIncrements StandardQueryParser.MultiTermRewriteMethod StandardQueryParser.SetMultiFields(String[]) StandardQueryParser.GetMultiFields() StandardQueryParser.FuzzyPrefixLength StandardQueryParser.NumericConfigMap StandardQueryParser.Locale StandardQueryParser.TimeZone StandardQueryParser.SetDefaultPhraseSlop(Int32) StandardQueryParser.Analyzer StandardQueryParser.PhraseSlop StandardQueryParser.FuzzyMinSim StandardQueryParser.FieldsBoost StandardQueryParser.SetDateResolution(DateTools.Resolution) StandardQueryParser.DateResolution StandardQueryParser.SetDateResolution(IDictionary<String, Nullable<DateTools.Resolution>>) StandardQueryParser.DateResolutionMap QueryParserHelper<Query>.QueryNodeProcessor QueryParserHelper<Query>.SetQueryNodeProcessor(IQueryNodeProcessor) QueryParserHelper<Query>.SetSyntaxParser(ISyntaxParser) QueryParserHelper<Query>.SetQueryBuilder(IQueryBuilder<Query>) QueryParserHelper<Query>.QueryConfigHandler QueryParserHelper<Query>.QueryBuilder QueryParserHelper<Query>.SyntaxParser QueryParserHelper<Query>.SetQueryConfigHandler(QueryConfigHandler) Namespace : Lucene.Net.QueryParsers.Flexible.Precedence Assembly : Lucene.Net.QueryParser.dll Syntax public class PrecedenceQueryParser : StandardQueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source PrecedenceQueryParser() StandardQueryParser() Declaration public PrecedenceQueryParser() | Improve this Doc View Source PrecedenceQueryParser(Analyzer) StandardQueryParser(Analyzer) Declaration public PrecedenceQueryParser(Analyzer analyer) Parameters Type Name Description Analyzer analyer Implements ICommonQueryParserConfiguration See Also StandardQueryParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.BooleanModifiersQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.BooleanModifiersQueryNodeProcessor.html",
    "title": "Class BooleanModifiersQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanModifiersQueryNodeProcessor This processor is used to apply the correct ModifierQueryNode to BooleanQueryNode s children. It walks through the query node tree looking for BooleanQueryNode s. If an AndQueryNode is found, every child, which is not a ModifierQueryNode or the ModifierQueryNode is MOD_NONE , becomes a MOD_REQ . For any other BooleanQueryNode which is not an OrQueryNode , it checks the default operator is AND , if it is, the same operation when an AndQueryNode is found is applied to it. Inheritance System.Object QueryNodeProcessor BooleanModifiersQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Precedence.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanModifiersQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source BooleanModifiersQueryNodeProcessor() Declaration public BooleanModifiersQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also DEFAULT_OPERATOR"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Precedence.Processors | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Precedence.Processors <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Processors used by Precedence Query Parser Lucene Precedence Query Parser Processors This package contains the 2 QueryNodeProcessor s used by PrecedenceQueryParser . BooleanModifiersQueryNodeProcessor : this processor is used to apply ModifierQueryNode s on BooleanQueryNode children according to the boolean type or the default operator. PrecedenceQueryNodeProcessorPipeline : this processor pipeline is used by PrecedenceQueryParser . It extends StandardQueryNodeProcessorPipeline and rearrange the pipeline so the boolean precedence is processed correctly. Check PrecedenceQueryNodeProcessorPipeline for more details. Classes BooleanModifiersQueryNodeProcessor This processor is used to apply the correct ModifierQueryNode to BooleanQueryNode s children. It walks through the query node tree looking for BooleanQueryNode s. If an AndQueryNode is found, every child, which is not a ModifierQueryNode or the ModifierQueryNode is MOD_NONE , becomes a MOD_REQ . For any other BooleanQueryNode which is not an OrQueryNode , it checks the default operator is AND , if it is, the same operation when an AndQueryNode is found is applied to it. PrecedenceQueryNodeProcessorPipeline This processor pipeline extends StandardQueryNodeProcessorPipeline and enables boolean precedence on it. EXPERT: the precedence is enabled by removing GroupQueryNodeProcessor from the StandardQueryNodeProcessorPipeline and appending BooleanModifiersQueryNodeProcessor to the pipeline."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.PrecedenceQueryNodeProcessorPipeline.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.PrecedenceQueryNodeProcessorPipeline.html",
    "title": "Class PrecedenceQueryNodeProcessorPipeline | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrecedenceQueryNodeProcessorPipeline This processor pipeline extends StandardQueryNodeProcessorPipeline and enables boolean precedence on it. EXPERT: the precedence is enabled by removing GroupQueryNodeProcessor from the StandardQueryNodeProcessorPipeline and appending BooleanModifiersQueryNodeProcessor to the pipeline. Inheritance System.Object QueryNodeProcessorPipeline StandardQueryNodeProcessorPipeline PrecedenceQueryNodeProcessorPipeline Implements IQueryNodeProcessor IList < IQueryNodeProcessor > Inherited Members QueryNodeProcessorPipeline.GetQueryConfigHandler() QueryNodeProcessorPipeline.Process(IQueryNode) QueryNodeProcessorPipeline.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessorPipeline.Add(IQueryNodeProcessor) QueryNodeProcessorPipeline.Clear() QueryNodeProcessorPipeline.Contains(Object) QueryNodeProcessorPipeline.Item[Int32] QueryNodeProcessorPipeline.IndexOf(IQueryNodeProcessor) QueryNodeProcessorPipeline.GetEnumerator() QueryNodeProcessorPipeline.Remove(IQueryNodeProcessor) QueryNodeProcessorPipeline.RemoveAt(Int32) QueryNodeProcessorPipeline.RemoveRange(Int32, Int32) QueryNodeProcessorPipeline.Set(Int32, IQueryNodeProcessor) QueryNodeProcessorPipeline.Count QueryNodeProcessorPipeline.IsReadOnly QueryNodeProcessorPipeline.GetRange(Int32, Int32) QueryNodeProcessorPipeline.Insert(Int32, IQueryNodeProcessor) QueryNodeProcessorPipeline.Contains(IQueryNodeProcessor) QueryNodeProcessorPipeline.CopyTo(IQueryNodeProcessor[], Int32) Namespace : Lucene.Net.QueryParsers.Flexible.Precedence.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class PrecedenceQueryNodeProcessorPipeline : StandardQueryNodeProcessorPipeline, IQueryNodeProcessor, IList<IQueryNodeProcessor> Constructors | Improve this Doc View Source PrecedenceQueryNodeProcessorPipeline(QueryConfigHandler) StandardQueryNodeProcessorPipeline(QueryConfigHandler) Declaration public PrecedenceQueryNodeProcessorPipeline(QueryConfigHandler queryConfig) Parameters Type Name Description QueryConfigHandler queryConfig Implements IQueryNodeProcessor IList<> See Also PrecedenceQueryParser StandardQueryNodeProcessorPipeline"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.AnyQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.AnyQueryNodeBuilder.html",
    "title": "Class AnyQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnyQueryNodeBuilder Builds a of SHOULD clauses, possibly with some minimum number to match. Inheritance System.Object AnyQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class AnyQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source AnyQueryNodeBuilder() Declaration public AnyQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.BooleanQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.BooleanQueryNodeBuilder.html",
    "title": "Class BooleanQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanQueryNodeBuilder Builds a object from a BooleanQueryNode object. Every children in the BooleanQueryNode object must be already tagged using QUERY_TREE_BUILDER_TAGID with a object. It takes in consideration if the children is a ModifierQueryNode to define the . Inheritance System.Object BooleanQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source BooleanQueryNodeBuilder() Declaration public BooleanQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.BoostQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.BoostQueryNodeBuilder.html",
    "title": "Class BoostQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostQueryNodeBuilder This builder basically reads the object set on the BoostQueryNode child using QUERY_TREE_BUILDER_TAGID and applies the boost value defined in the BoostQueryNode . Inheritance System.Object BoostQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source BoostQueryNodeBuilder() Declaration public BoostQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.DummyQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.DummyQueryNodeBuilder.html",
    "title": "Class DummyQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DummyQueryNodeBuilder This builder does nothing. Commonly used for IQueryNode objects that are built by its parent's builder. Inheritance System.Object DummyQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class DummyQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source DummyQueryNodeBuilder() Constructs a DummyQueryNodeBuilder object. Declaration public DummyQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Always return null . Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query null Implements IStandardQueryBuilder IQueryBuilder<TQuery> See Also IStandardQueryBuilder QueryTreeBuilder <TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.FieldQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.FieldQueryNodeBuilder.html",
    "title": "Class FieldQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldQueryNodeBuilder Builds a object from a FieldQueryNode object. Inheritance System.Object FieldQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source FieldQueryNodeBuilder() Declaration public FieldQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.FuzzyQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.FuzzyQueryNodeBuilder.html",
    "title": "Class FuzzyQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyQueryNodeBuilder Builds a object from a FuzzyQueryNode object. Inheritance System.Object FuzzyQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source FuzzyQueryNodeBuilder() Declaration public FuzzyQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.GroupQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.GroupQueryNodeBuilder.html",
    "title": "Class GroupQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GroupQueryNodeBuilder Builds no object, it only returns the object set on the GroupQueryNode object using a QUERY_TREE_BUILDER_TAGID tag. Inheritance System.Object GroupQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class GroupQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source GroupQueryNodeBuilder() Declaration public GroupQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Builders | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Builders <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Standard Lucene Query Node Builders. Standard Lucene Query Node Builders The package org.apache.lucene.queryparser.flexible.standard.builders contains all the builders needed to build a Lucene Query object from a query node tree. These builders expect the query node tree was already processed by the StandardQueryNodeProcessorPipeline . StandardQueryTreeBuilder is a builder that already contains a defined map that maps each QueryNode object with its respective builder. Classes AnyQueryNodeBuilder Builds a of SHOULD clauses, possibly with some minimum number to match. BooleanQueryNodeBuilder Builds a object from a BooleanQueryNode object. Every children in the BooleanQueryNode object must be already tagged using QUERY_TREE_BUILDER_TAGID with a object. It takes in consideration if the children is a ModifierQueryNode to define the . BoostQueryNodeBuilder This builder basically reads the object set on the BoostQueryNode child using QUERY_TREE_BUILDER_TAGID and applies the boost value defined in the BoostQueryNode . DummyQueryNodeBuilder This builder does nothing. Commonly used for IQueryNode objects that are built by its parent's builder. FieldQueryNodeBuilder Builds a object from a FieldQueryNode object. FuzzyQueryNodeBuilder Builds a object from a FuzzyQueryNode object. GroupQueryNodeBuilder Builds no object, it only returns the object set on the GroupQueryNode object using a QUERY_TREE_BUILDER_TAGID tag. MatchAllDocsQueryNodeBuilder Builds a object from a MatchAllDocsQueryNode object. MatchNoDocsQueryNodeBuilder Builds an empty object from a MatchNoDocsQueryNode object. ModifierQueryNodeBuilder Builds no object, it only returns the object set on the ModifierQueryNode object using a QUERY_TREE_BUILDER_TAGID tag. MultiPhraseQueryNodeBuilder Builds a object from a MultiPhraseQueryNode object. NumericRangeQueryNodeBuilder Builds s out of NumericRangeQueryNode s. PhraseQueryNodeBuilder Builds a object from a TokenizedPhraseQueryNode object. PrefixWildcardQueryNodeBuilder Builds a object from a PrefixWildcardQueryNode object. RegexpQueryNodeBuilder Builds a object from a RegexpQueryNode object. SlopQueryNodeBuilder This builder basically reads the object set on the SlopQueryNode child using QUERY_TREE_BUILDER_TAGID and applies the slop value defined in the SlopQueryNode . StandardBooleanQueryNodeBuilder This builder does the same as the BooleanQueryNodeBuilder , but this considers if the built should have its coord disabled or not. StandardQueryTreeBuilder This query tree builder only defines the necessary map to build a tree object. It should be used to generate a tree object from a query node tree processed by a StandardQueryNodeProcessorPipeline . TermRangeQueryNodeBuilder Builds a object from a TermRangeQueryNode object. WildcardQueryNodeBuilder Builds a object from a WildcardQueryNode object. Interfaces IStandardQueryBuilder This interface should be implemented by every class that wants to build objects from IQueryNode objects."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.IStandardQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.IStandardQueryBuilder.html",
    "title": "Interface IStandardQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IStandardQueryBuilder This interface should be implemented by every class that wants to build objects from IQueryNode objects. Inherited Members IQueryBuilder<Query>.Build(IQueryNode) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public interface IStandardQueryBuilder : IQueryBuilder<Query> See Also IQueryBuilder <TQuery> QueryTreeBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MatchAllDocsQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MatchAllDocsQueryNodeBuilder.html",
    "title": "Class MatchAllDocsQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchAllDocsQueryNodeBuilder Builds a object from a MatchAllDocsQueryNode object. Inheritance System.Object MatchAllDocsQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchAllDocsQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source MatchAllDocsQueryNodeBuilder() Declaration public MatchAllDocsQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MatchNoDocsQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MatchNoDocsQueryNodeBuilder.html",
    "title": "Class MatchNoDocsQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchNoDocsQueryNodeBuilder Builds an empty object from a MatchNoDocsQueryNode object. Inheritance System.Object MatchNoDocsQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchNoDocsQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source MatchNoDocsQueryNodeBuilder() Declaration public MatchNoDocsQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.ModifierQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.ModifierQueryNodeBuilder.html",
    "title": "Class ModifierQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ModifierQueryNodeBuilder Builds no object, it only returns the object set on the ModifierQueryNode object using a QUERY_TREE_BUILDER_TAGID tag. Inheritance System.Object ModifierQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class ModifierQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source ModifierQueryNodeBuilder() Declaration public ModifierQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MultiPhraseQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MultiPhraseQueryNodeBuilder.html",
    "title": "Class MultiPhraseQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiPhraseQueryNodeBuilder Builds a object from a MultiPhraseQueryNode object. Inheritance System.Object MultiPhraseQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiPhraseQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source MultiPhraseQueryNodeBuilder() Declaration public MultiPhraseQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.NumericRangeQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.NumericRangeQueryNodeBuilder.html",
    "title": "Class NumericRangeQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeQueryNodeBuilder Builds s out of NumericRangeQueryNode s. Inheritance System.Object NumericRangeQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source NumericRangeQueryNodeBuilder() Constructs a NumericRangeQueryNodeBuilder object. Declaration public NumericRangeQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery> See Also NumericRangeQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.PhraseQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.PhraseQueryNodeBuilder.html",
    "title": "Class PhraseQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhraseQueryNodeBuilder Builds a object from a TokenizedPhraseQueryNode object. Inheritance System.Object PhraseQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class PhraseQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source PhraseQueryNodeBuilder() Declaration public PhraseQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.PrefixWildcardQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.PrefixWildcardQueryNodeBuilder.html",
    "title": "Class PrefixWildcardQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixWildcardQueryNodeBuilder Builds a object from a PrefixWildcardQueryNode object. Inheritance System.Object PrefixWildcardQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class PrefixWildcardQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source PrefixWildcardQueryNodeBuilder() Declaration public PrefixWildcardQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.RegexpQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.RegexpQueryNodeBuilder.html",
    "title": "Class RegexpQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RegexpQueryNodeBuilder Builds a object from a RegexpQueryNode object. Inheritance System.Object RegexpQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class RegexpQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source RegexpQueryNodeBuilder() Declaration public RegexpQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.SlopQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.SlopQueryNodeBuilder.html",
    "title": "Class SlopQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SlopQueryNodeBuilder This builder basically reads the object set on the SlopQueryNode child using QUERY_TREE_BUILDER_TAGID and applies the slop value defined in the SlopQueryNode . Inheritance System.Object SlopQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SlopQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source SlopQueryNodeBuilder() Declaration public SlopQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.StandardBooleanQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.StandardBooleanQueryNodeBuilder.html",
    "title": "Class StandardBooleanQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardBooleanQueryNodeBuilder This builder does the same as the BooleanQueryNodeBuilder , but this considers if the built should have its coord disabled or not. Inheritance System.Object StandardBooleanQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardBooleanQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source StandardBooleanQueryNodeBuilder() Declaration public StandardBooleanQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery> See Also BooleanQueryNodeBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.StandardQueryTreeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.StandardQueryTreeBuilder.html",
    "title": "Class StandardQueryTreeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardQueryTreeBuilder This query tree builder only defines the necessary map to build a tree object. It should be used to generate a tree object from a query node tree processed by a StandardQueryNodeProcessorPipeline . Inheritance System.Object QueryTreeBuilder QueryTreeBuilder < Query > StandardQueryTreeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members QueryTreeBuilder<Query>.SetBuilder(String, IQueryBuilder<Query>) QueryTreeBuilder<Query>.SetBuilder(Type, IQueryBuilder<Query>) QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardQueryTreeBuilder : QueryTreeBuilder<Query>, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source StandardQueryTreeBuilder() Declaration public StandardQueryTreeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public override Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Overrides Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder<Query>.Build(Lucene.Net.QueryParsers.Flexible.Core.Nodes.IQueryNode) Implements IStandardQueryBuilder IQueryBuilder<TQuery> See Also QueryTreeBuilder StandardQueryNodeProcessorPipeline"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.TermRangeQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.TermRangeQueryNodeBuilder.html",
    "title": "Class TermRangeQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermRangeQueryNodeBuilder Builds a object from a TermRangeQueryNode object. Inheritance System.Object TermRangeQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class TermRangeQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source TermRangeQueryNodeBuilder() Declaration public TermRangeQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.WildcardQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.WildcardQueryNodeBuilder.html",
    "title": "Class WildcardQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WildcardQueryNodeBuilder Builds a object from a WildcardQueryNode object. Inheritance System.Object WildcardQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class WildcardQueryNodeBuilder : object, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source WildcardQueryNodeBuilder() Declaration public WildcardQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.ConfigurationKeys.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.ConfigurationKeys.html",
    "title": "Class ConfigurationKeys | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConfigurationKeys Class holding keys for StandardQueryNodeProcessorPipeline options. Inheritance System.Object ConfigurationKeys Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class ConfigurationKeys : object Fields | Improve this Doc View Source ALLOW_LEADING_WILDCARD Key used to set whether leading wildcards are supported Declaration public static readonly ConfigurationKey<bool?> ALLOW_LEADING_WILDCARD Field Value Type Description ConfigurationKey < System.Nullable < System.Boolean >> See Also AllowLeadingWildcard | Improve this Doc View Source ANALYZER Key used to set the used for terms found in the query Declaration public static readonly ConfigurationKey<Analyzer> ANALYZER Field Value Type Description ConfigurationKey < Analyzer > See Also Analyzer | Improve this Doc View Source BOOST Key used to set the boost value in FieldConfig objects. Declaration public static readonly ConfigurationKey<float?> BOOST Field Value Type Description ConfigurationKey < System.Nullable < System.Single >> See Also FieldsBoost | Improve this Doc View Source DATE_RESOLUTION Key used to set default . Declaration public static readonly ConfigurationKey<DateTools.Resolution> DATE_RESOLUTION Field Value Type Description ConfigurationKey < DateTools.Resolution > See Also SetDateResolution ( DateTools.Resolution ) DateResolution | Improve this Doc View Source DEFAULT_OPERATOR Key used to set the default boolean operator Declaration public static readonly ConfigurationKey<StandardQueryConfigHandler.Operator> DEFAULT_OPERATOR Field Value Type Description ConfigurationKey < StandardQueryConfigHandler.Operator > See Also DefaultOperator | Improve this Doc View Source ENABLE_POSITION_INCREMENTS Key used to set whether position increments is enabled Declaration public static readonly ConfigurationKey<bool?> ENABLE_POSITION_INCREMENTS Field Value Type Description ConfigurationKey < System.Nullable < System.Boolean >> See Also EnablePositionIncrements | Improve this Doc View Source FIELD_BOOST_MAP Key used to set a field to boost map that is used to set the boost for each field Declaration public static readonly ConfigurationKey<IDictionary<string, float?>> FIELD_BOOST_MAP Field Value Type Description ConfigurationKey < IDictionary < System.String , System.Nullable < System.Single >>> See Also FieldsBoost | Improve this Doc View Source FIELD_DATE_RESOLUTION_MAP Key used to set a field to map that is used to normalize each date field value. Declaration public static readonly ConfigurationKey<IDictionary<string, DateTools.Resolution?>> FIELD_DATE_RESOLUTION_MAP Field Value Type Description ConfigurationKey < IDictionary < System.String , System.Nullable < DateTools.Resolution >>> See Also DateResolutionMap | Improve this Doc View Source FUZZY_CONFIG Key used to set the FuzzyConfig used to create fuzzy queries. Declaration public static readonly ConfigurationKey<FuzzyConfig> FUZZY_CONFIG Field Value Type Description ConfigurationKey < FuzzyConfig > See Also FuzzyMinSim FuzzyPrefixLength | Improve this Doc View Source LOCALE Key used to set the locale used when parsing the query Declaration public static readonly ConfigurationKey<CultureInfo> LOCALE Field Value Type Description ConfigurationKey < CultureInfo > See Also Locale | Improve this Doc View Source LOWERCASE_EXPANDED_TERMS Key used to set whether expanded terms should be lower-cased Declaration public static readonly ConfigurationKey<bool?> LOWERCASE_EXPANDED_TERMS Field Value Type Description ConfigurationKey < System.Nullable < System.Boolean >> See Also LowercaseExpandedTerms | Improve this Doc View Source MULTI_FIELDS Key used to set the fields a query should be expanded to when the field is null Declaration public static readonly ConfigurationKey<string[]> MULTI_FIELDS Field Value Type Description ConfigurationKey < System.String []> See Also SetMultiFields ( System.String []) GetMultiFields () | Improve this Doc View Source MULTI_TERM_REWRITE_METHOD Key used to set the used when creating queries Declaration public static readonly ConfigurationKey<MultiTermQuery.RewriteMethod> MULTI_TERM_REWRITE_METHOD Field Value Type Description ConfigurationKey < MultiTermQuery.RewriteMethod > See Also MultiTermRewriteMethod | Improve this Doc View Source NUMERIC_CONFIG Key used to set a field to its NumericConfig . Declaration public static readonly ConfigurationKey<NumericConfig> NUMERIC_CONFIG Field Value Type Description ConfigurationKey < NumericConfig > See Also NumericConfigMap | Improve this Doc View Source NUMERIC_CONFIG_MAP Key used to set the NumericConfig in FieldConfig for numeric fields. Declaration public static readonly ConfigurationKey<IDictionary<string, NumericConfig>> NUMERIC_CONFIG_MAP Field Value Type Description ConfigurationKey < IDictionary < System.String , NumericConfig >> See Also NumericConfigMap | Improve this Doc View Source PHRASE_SLOP Key used to set the default phrase slop Declaration public static readonly ConfigurationKey<int?> PHRASE_SLOP Field Value Type Description ConfigurationKey < System.Nullable < System.Int32 >> See Also PhraseSlop | Improve this Doc View Source TIMEZONE Declaration public static readonly ConfigurationKey<TimeZoneInfo> TIMEZONE Field Value Type Description ConfigurationKey < TimeZoneInfo >"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.DateFormat.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.DateFormat.html",
    "title": "Enum DateFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DateFormat LUCENENET specific enum for mimicking the Java DateFormat Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public enum DateFormat : int Fields Name Description FULL LONG MEDIUM SHORT"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FieldBoostMapFCListener.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FieldBoostMapFCListener.html",
    "title": "Class FieldBoostMapFCListener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldBoostMapFCListener This listener listens for every field configuration request and assign a BOOST to the equivalent FieldConfig based on a defined map: fieldName -> boostValue stored in FIELD_BOOST_MAP . Inheritance System.Object FieldBoostMapFCListener Implements IFieldConfigListener Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldBoostMapFCListener : object, IFieldConfigListener Constructors | Improve this Doc View Source FieldBoostMapFCListener(QueryConfigHandler) Declaration public FieldBoostMapFCListener(QueryConfigHandler config) Parameters Type Name Description QueryConfigHandler config Methods | Improve this Doc View Source BuildFieldConfig(FieldConfig) Declaration public virtual void BuildFieldConfig(FieldConfig fieldConfig) Parameters Type Name Description FieldConfig fieldConfig Implements IFieldConfigListener See Also FIELD_BOOST_MAP BOOST FieldConfig IFieldConfigListener"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FieldDateResolutionFCListener.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FieldDateResolutionFCListener.html",
    "title": "Class FieldDateResolutionFCListener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldDateResolutionFCListener This listener listens for every field configuration request and assign a DATE_RESOLUTION to the equivalent FieldConfig based on a defined map: fieldName -> stored in FIELD_DATE_RESOLUTION_MAP . Inheritance System.Object FieldDateResolutionFCListener Implements IFieldConfigListener Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldDateResolutionFCListener : object, IFieldConfigListener Constructors | Improve this Doc View Source FieldDateResolutionFCListener(QueryConfigHandler) Declaration public FieldDateResolutionFCListener(QueryConfigHandler config) Parameters Type Name Description QueryConfigHandler config Methods | Improve this Doc View Source BuildFieldConfig(FieldConfig) Declaration public virtual void BuildFieldConfig(FieldConfig fieldConfig) Parameters Type Name Description FieldConfig fieldConfig Implements IFieldConfigListener See Also DATE_RESOLUTION FIELD_DATE_RESOLUTION_MAP FieldConfig IFieldConfigListener"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FuzzyConfig.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FuzzyConfig.html",
    "title": "Class FuzzyConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyConfig Configuration parameters for s Inheritance System.Object FuzzyConfig Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyConfig : object Constructors | Improve this Doc View Source FuzzyConfig() Declaration public FuzzyConfig() Properties | Improve this Doc View Source MinSimilarity Declaration public virtual float MinSimilarity { get; set; } Property Value Type Description System.Single | Improve this Doc View Source PrefixLength Declaration public virtual int PrefixLength { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Config | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Config <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Standard Lucene Query Configuration. Standard Lucene Query Configuration The package org.apache.lucene.queryparser.flexible.standard.config contains the Lucene query configuration handler (StandardQueryConfigHandler). This configuration handler reproduces almost everything that could be set on the old query parser. StandardQueryConfigHandler is the class that should be used to configure the StandardQueryNodeProcessorPipeline. Classes ConfigurationKeys Class holding keys for StandardQueryNodeProcessorPipeline options. FieldBoostMapFCListener This listener listens for every field configuration request and assign a BOOST to the equivalent FieldConfig based on a defined map: fieldName -> boostValue stored in FIELD_BOOST_MAP . FieldDateResolutionFCListener This listener listens for every field configuration request and assign a DATE_RESOLUTION to the equivalent FieldConfig based on a defined map: fieldName -> stored in FIELD_DATE_RESOLUTION_MAP . FuzzyConfig Configuration parameters for s NumberDateFormat This parses into date strings and vice-versa. It uses the given dateFormat and locale to parse and format dates, but before, it converts to objects or vice-versa. Note that the value the dates are parsed into and out of represent the number of milliseconds since January 1, 1970 0:00:00, also known as the \"epoch\". NumericConfig This class holds the configuration used to parse numeric queries and create s. NumericFieldConfigListener This listener is used to listen to FieldConfig requests in QueryConfigHandler and add NUMERIC_CONFIG based on the NUMERIC_CONFIG_MAP set in the QueryConfigHandler . StandardQueryConfigHandler This query configuration handler is used for almost every processor defined in the StandardQueryNodeProcessorPipeline processor pipeline. It holds configuration methods that reproduce the configuration methods that could be set on the old lucene 2.4 QueryParser class. Enums DateFormat LUCENENET specific enum for mimicking the Java DateFormat StandardQueryConfigHandler.Operator Boolean Operator: AND or OR"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumberDateFormat.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumberDateFormat.html",
    "title": "Class NumberDateFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumberDateFormat This parses into date strings and vice-versa. It uses the given dateFormat and locale to parse and format dates, but before, it converts to objects or vice-versa. Note that the value the dates are parsed into and out of represent the number of milliseconds since January 1, 1970 0:00:00, also known as the \"epoch\". Inheritance System.Object NumberDateFormat Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class NumberDateFormat : NumberFormat Constructors | Improve this Doc View Source NumberDateFormat(DateFormat, DateFormat, CultureInfo) Constructs a NumberDateFormat object using the given dateStyle , timeStyle , and locale . Declaration public NumberDateFormat(DateFormat dateStyle, DateFormat timeStyle, CultureInfo locale) Parameters Type Name Description DateFormat dateStyle DateFormat timeStyle CultureInfo locale | Improve this Doc View Source NumberDateFormat(String, CultureInfo) Constructs a NumberDateFormat object using the given dateFormat and locale . Declaration public NumberDateFormat(string dateFormat, CultureInfo locale) Parameters Type Name Description System.String dateFormat Date format used to parse and format dates CultureInfo locale Fields | Improve this Doc View Source EPOCH Declaration public const long EPOCH = null Field Value Type Description System.Int64 Properties | Improve this Doc View Source TimeZone Declaration public virtual TimeZoneInfo TimeZone { get; set; } Property Value Type Description TimeZoneInfo Methods | Improve this Doc View Source Format(Double) Declaration public override string Format(double number) Parameters Type Name Description System.Double number Returns Type Description System.String | Improve this Doc View Source Format(Int64) Declaration public override string Format(long number) Parameters Type Name Description System.Int64 number Returns Type Description System.String | Improve this Doc View Source Format(Object) Declaration public override string Format(object number) Parameters Type Name Description System.Object number Returns Type Description System.String | Improve this Doc View Source GetDateFormat() Returns the .NET date format that will be used to Format the date. Note that parsing the date uses . Declaration public string GetDateFormat() Returns Type Description System.String | Improve this Doc View Source GetDateFormat(DateFormat, DateFormat, CultureInfo) Declaration public static string GetDateFormat(DateFormat dateStyle, DateFormat timeStyle, CultureInfo locale) Parameters Type Name Description DateFormat dateStyle DateFormat timeStyle CultureInfo locale Returns Type Description System.String | Improve this Doc View Source Parse(String) Declaration public override object Parse(string source) Parameters Type Name Description System.String source Returns Type Description System.Object | Improve this Doc View Source SetDateFormat(String) Declaration public void SetDateFormat(string dateFormat) Parameters Type Name Description System.String dateFormat"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumericConfig.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumericConfig.html",
    "title": "Class NumericConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericConfig This class holds the configuration used to parse numeric queries and create s. Inheritance System.Object NumericConfig Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericConfig : object Constructors | Improve this Doc View Source NumericConfig(Int32, NumberFormat, NumericType) Constructs a NumericConfig object. Declaration public NumericConfig(int precisionStep, NumberFormat format, NumericType type) Parameters Type Name Description System.Int32 precisionStep the precision used to index the numeric values NumberFormat format the NumberFormat used to parse a to an representing a .NET numeric type. NumericType type the numeric type used to index the numeric values See Also PrecisionStep NumberFormat Type Properties | Improve this Doc View Source NumberFormat Gets or Sets the used to parse a to representing a .NET numeric type, cannot be null Declaration public virtual NumberFormat NumberFormat { get; set; } Property Value Type Description NumberFormat | Improve this Doc View Source PrecisionStep Gets or sets the precision used to index the numeric values Declaration public virtual int PrecisionStep { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Type Gets or Sets the numeric type used to index the numeric values Declaration public virtual NumericType Type { get; set; } Property Value Type Description NumericType Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() LUCENENET specific - Visual Studio provides a compiler warning if Equals(Object) is overridden without GetHashCode() , so we provide an implementation that mirrors Equals(Object) . Declaration public override int GetHashCode() Returns Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumericFieldConfigListener.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumericFieldConfigListener.html",
    "title": "Class NumericFieldConfigListener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericFieldConfigListener This listener is used to listen to FieldConfig requests in QueryConfigHandler and add NUMERIC_CONFIG based on the NUMERIC_CONFIG_MAP set in the QueryConfigHandler . Inheritance System.Object NumericFieldConfigListener Implements IFieldConfigListener Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericFieldConfigListener : object, IFieldConfigListener Constructors | Improve this Doc View Source NumericFieldConfigListener(QueryConfigHandler) Constructs a NumericFieldConfigListener object using the given QueryConfigHandler . Declaration public NumericFieldConfigListener(QueryConfigHandler config) Parameters Type Name Description QueryConfigHandler config the QueryConfigHandler it will listen too Methods | Improve this Doc View Source BuildFieldConfig(FieldConfig) Declaration public virtual void BuildFieldConfig(FieldConfig fieldConfig) Parameters Type Name Description FieldConfig fieldConfig Implements IFieldConfigListener See Also NumericConfig QueryConfigHandler NUMERIC_CONFIG NUMERIC_CONFIG_MAP"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.StandardQueryConfigHandler.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.StandardQueryConfigHandler.html",
    "title": "Class StandardQueryConfigHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardQueryConfigHandler This query configuration handler is used for almost every processor defined in the StandardQueryNodeProcessorPipeline processor pipeline. It holds configuration methods that reproduce the configuration methods that could be set on the old lucene 2.4 QueryParser class. Inheritance System.Object AbstractQueryConfig QueryConfigHandler StandardQueryConfigHandler Inherited Members QueryConfigHandler.GetFieldConfig(String) QueryConfigHandler.AddFieldConfigListener(IFieldConfigListener) AbstractQueryConfig.Get<T>(ConfigurationKey<T>) AbstractQueryConfig.Has<T>(ConfigurationKey<T>) AbstractQueryConfig.Set<T>(ConfigurationKey<T>, T) AbstractQueryConfig.Unset<T>(ConfigurationKey<T>) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardQueryConfigHandler : QueryConfigHandler Constructors | Improve this Doc View Source StandardQueryConfigHandler() Declaration public StandardQueryConfigHandler() See Also StandardQueryNodeProcessorPipeline"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.StandardQueryConfigHandler.Operator.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.StandardQueryConfigHandler.Operator.html",
    "title": "Enum StandardQueryConfigHandler.Operator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum StandardQueryConfigHandler.Operator Boolean Operator: AND or OR Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public enum Operator : int Fields Name Description AND OR"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Implementation of the {@linkplain org.apache.lucene.queryparser.classic Lucene classic query parser} using the flexible query parser frameworks Lucene Flexible Query Parser Implementation The old Lucene query parser used to have only one class that performed all the parsing operations. In the new query parser structure, the parsing was divided in 3 steps: parsing (syntax), processing (semantic) and building. The classes contained in the package org.apache.lucene.queryParser.standard are used to reproduce the same behavior as the old query parser. Check StandardQueryParser to quick start using the Lucene query parser. Classes QueryParserUtil This class defines utility methods to (help) parse query strings into objects. StandardQueryParser This class is a helper that enables users to easily use the Lucene query parser. To construct a Query object from a query string, use the Parse(String, String) method: StandardQueryParser queryParserHelper = new StandardQueryParser(); Query query = queryParserHelper.Parse(\"a AND b\", \"defaultField\"); To change any configuration before parsing the query string do, for example: // the query config handler returned by StandardQueryParser is a // StandardQueryConfigHandler queryParserHelper.QueryConfigHandler.Analyzer = new WhitespaceAnalyzer(); The syntax for query strings is as follows (copied from the old QueryParser javadoc): A Query is a series of clauses. A clause may be prefixed by: a plus ( + ) or a minus ( - ) sign, indicating that the clause is required or prohibited respectively; or a term followed by a colon, indicating the field to be searched. This enables one to construct queries which search multiple fields. A clause may be either: a term, indicating all the documents that contain this term; or a nested query, enclosed in parentheses. Note that this may be used with a + / - prefix to require any of a set of terms. Thus, in BNF, the query grammar is: Query ::= ( Clause )* Clause ::= [\"+\", \"-\"] [<TERM> \":\"] ( <TERM> | \"(\" Query \")\" ) Examples of appropriately formatted queries can be found in the query syntax documentation. The text parser used by this helper is a StandardSyntaxParser . The query node processor used by this helper is a StandardQueryNodeProcessorPipeline . The builder used by this helper is a StandardQueryTreeBuilder . Interfaces ICommonQueryParserConfiguration Configuration options common across queryparser implementations."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.ICommonQueryParserConfiguration.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.ICommonQueryParserConfiguration.html",
    "title": "Interface ICommonQueryParserConfiguration | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICommonQueryParserConfiguration Configuration options common across queryparser implementations. Namespace : Lucene.Net.QueryParsers.Flexible.Standard Assembly : Lucene.Net.QueryParser.dll Syntax public interface ICommonQueryParserConfiguration Properties | Improve this Doc View Source AllowLeadingWildcard Set to true to allow leading wildcard characters. When set, * or ? are allowed as the first character of a and . Note that this can produce very slow queries on big indexes. Default: false. Declaration bool AllowLeadingWildcard { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Analyzer Declaration Analyzer Analyzer { get; } Property Value Type Description Analyzer | Improve this Doc View Source EnablePositionIncrements Set to true to enable position increments in result query. When set, result phrase and multi-phrase queries will be aware of position increments. Useful when e.g. a StopFilter increases the position increment of the token that follows an omitted token. Default: false. Declaration bool EnablePositionIncrements { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source FuzzyMinSim Get the minimal similarity for fuzzy queries. Declaration float FuzzyMinSim { get; set; } Property Value Type Description System.Single | Improve this Doc View Source FuzzyPrefixLength Get or Set the prefix length for fuzzy queries. Default is 0. Declaration int FuzzyPrefixLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Locale Get or Set locale used by date range parsing. Declaration CultureInfo Locale { get; set; } Property Value Type Description CultureInfo | Improve this Doc View Source LowercaseExpandedTerms Whether terms of multi-term queries (e.g., wildcard, prefix, fuzzy and range) should be automatically lower-cased or not. Default is true . Declaration bool LowercaseExpandedTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MultiTermRewriteMethod By default, it uses when creating a prefix, wildcard and range queries. This implementation is generally preferable because it a) Runs faster b) Does not have the scarcity of terms unduly influence score c) avoids any exception due to too many listeners. However, if your application really needs to use the old-fashioned boolean queries expansion rewriting and the above points are not relevant then use this change the rewrite method. Declaration MultiTermQuery.RewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source PhraseSlop Gets or Sets the default slop for phrases. If zero, then exact phrase matches are required. Default value is zero. Declaration int PhraseSlop { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TimeZone Gets or Sets the time zone. Declaration TimeZoneInfo TimeZone { get; set; } Property Value Type Description TimeZoneInfo Methods | Improve this Doc View Source SetDateResolution(DateTools.Resolution) Sets the default used for certain field when no is defined for this field. Declaration void SetDateResolution(DateTools.Resolution dateResolution) Parameters Type Name Description DateTools.Resolution dateResolution"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.AbstractRangeQueryNode-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.AbstractRangeQueryNode-1.html",
    "title": "Class AbstractRangeQueryNode<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractRangeQueryNode<T> This class should be extended by nodes intending to represent range queries. Inheritance System.Object QueryNode AbstractRangeQueryNode<T> NumericRangeQueryNode TermRangeQueryNode Implements IAbstractRangeQueryNode IRangeQueryNode < IFieldableNode > IRangeQueryNode IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.CloneTree() QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class AbstractRangeQueryNode<T> : QueryNode, IAbstractRangeQueryNode, IRangeQueryNode<IFieldableNode>, IRangeQueryNode, IFieldableNode, IQueryNode where T : IFieldableNode Type Parameters Name Description T the type of the range query bounds (lower and upper) Constructors | Improve this Doc View Source AbstractRangeQueryNode() Constructs an AbstractRangeQueryNode<T> , it should be invoked only by its extenders. Declaration protected AbstractRangeQueryNode() Properties | Improve this Doc View Source Field Gets or Sets the field associated with this node. Declaration public virtual string Field { get; set; } Property Value Type Description System.String See Also IFieldableNode | Improve this Doc View Source IsLowerInclusive Gets whether the lower bound is inclusive or exclusive. Declaration public virtual bool IsLowerInclusive { get; } Property Value Type Description System.Boolean Remarks true if the lower bound is inclusive, otherwise, false | Improve this Doc View Source IsUpperInclusive Gets whether the upper bound is inclusive or exclusive. Declaration public virtual bool IsUpperInclusive { get; } Property Value Type Description System.Boolean Remarks true if the upper bound is inclusive, otherwise, false | Improve this Doc View Source LowerBound Gets the lower bound node. Declaration public virtual IFieldableNode LowerBound { get; } Property Value Type Description IFieldableNode | Improve this Doc View Source UpperBound Gets the upper bound node. Declaration public virtual IFieldableNode UpperBound { get; } Property Value Type Description IFieldableNode Methods | Improve this Doc View Source SetBounds(T, T, Boolean, Boolean) Sets the lower and upper bounds. Declaration public virtual void SetBounds(T lower, T upper, bool lowerInclusive, bool upperInclusive) Parameters Type Name Description T lower the lower bound, null if lower bound is open T upper the upper bound, null if upper bound is open System.Boolean lowerInclusive true if the lower bound is inclusive, otherwise, false System.Boolean upperInclusive true if the upper bound is inclusive, otherwise, false See Also LowerBound UpperBound IsLowerInclusive IsUpperInclusive | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IAbstractRangeQueryNode IRangeQueryNode<T> IRangeQueryNode IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.BooleanModifierNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.BooleanModifierNode.html",
    "title": "Class BooleanModifierNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanModifierNode A BooleanModifierNode has the same behaviour as ModifierQueryNode , it only indicates that this modifier was added by GroupQueryNodeProcessor and not by the user. Inheritance System.Object QueryNode ModifierQueryNode BooleanModifierNode Implements IQueryNode Inherited Members ModifierQueryNode.GetChild() ModifierQueryNode.Modifier ModifierQueryNode.ToString() ModifierQueryNode.ToQueryString(IEscapeQuerySyntax) ModifierQueryNode.CloneTree() ModifierQueryNode.SetChild(IQueryNode) QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanModifierNode : ModifierQueryNode, IQueryNode Constructors | Improve this Doc View Source BooleanModifierNode(IQueryNode, Modifier) Declaration public BooleanModifierNode(IQueryNode node, Modifier mod) Parameters Type Name Description IQueryNode node Modifier mod Implements IQueryNode See Also ModifierQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Nodes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Nodes <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Standard Lucene Query Nodes. Standard Lucene Query Nodes The package org.apache.lucene.queryparser.flexible.standard.nodes contains QueryNode classes that are used specifically for Lucene query node tree. Any other generic QueryNode is defined under org.apache.lucene.queryParser.nodes. Classes AbstractRangeQueryNode<T> This class should be extended by nodes intending to represent range queries. BooleanModifierNode A BooleanModifierNode has the same behaviour as ModifierQueryNode , it only indicates that this modifier was added by GroupQueryNodeProcessor and not by the user. MultiPhraseQueryNode A MultiPhraseQueryNode indicates that its children should be used to build a instead of . NumericQueryNode This query node represents a field query that holds a numeric value. It is similar to FieldQueryNode , however the Value returns an representing a .NET numeric type. NumericRangeQueryNode This query node represents a range query composed by NumericQueryNode bounds, which means the bound values are s representing a .NET numeric type. PrefixWildcardQueryNode A PrefixWildcardQueryNode represents wildcardquery that matches abc* or *. This does not apply to phrases, this is a special case on the original lucene parser. TODO: refactor the code to remove this special case from the parser. and probably do it on a Processor RegexpQueryNode A RegexpQueryNode represents query Examples: /[a-z]|[0-9]/ StandardBooleanQueryNode A StandardBooleanQueryNode has the same behavior as BooleanQueryNode . It only indicates if the coord should be enabled or not for this boolean query. TermRangeQueryNode This query node represents a range query composed by FieldQueryNode bounds, which means the bound values are strings. WildcardQueryNode A WildcardQueryNode represents wildcard query This does not apply to phrases. Examples: a b c Fl?w? m?ke*g Interfaces IAbstractRangeQueryNode LUCENENET specific interface used to identify an AbstractRangeQueryNode without referring to its generic closing type"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.IAbstractRangeQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.IAbstractRangeQueryNode.html",
    "title": "Interface IAbstractRangeQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAbstractRangeQueryNode LUCENENET specific interface used to identify an AbstractRangeQueryNode without referring to its generic closing type Inherited Members IRangeQueryNode<IFieldableNode>.LowerBound IRangeQueryNode<IFieldableNode>.UpperBound IRangeQueryNode.IsLowerInclusive IRangeQueryNode.IsUpperInclusive IFieldableNode.Field IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IAbstractRangeQueryNode : IRangeQueryNode<IFieldableNode>, IRangeQueryNode, IFieldableNode, IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.MultiPhraseQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.MultiPhraseQueryNode.html",
    "title": "Class MultiPhraseQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiPhraseQueryNode A MultiPhraseQueryNode indicates that its children should be used to build a instead of . Inheritance System.Object QueryNode MultiPhraseQueryNode Implements IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiPhraseQueryNode : QueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source MultiPhraseQueryNode() Declaration public MultiPhraseQueryNode() Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericQueryNode.html",
    "title": "Class NumericQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericQueryNode This query node represents a field query that holds a numeric value. It is similar to FieldQueryNode , however the Value returns an representing a .NET numeric type. Inheritance System.Object QueryNode NumericQueryNode Implements IFieldValuePairQueryNode < System.Object > IFieldableNode IValueQueryNode < System.Object > IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.CloneTree() QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericQueryNode : QueryNode, IFieldValuePairQueryNode<object>, IFieldableNode, IValueQueryNode<object>, IQueryNode Constructors | Improve this Doc View Source NumericQueryNode(String, Object, NumberFormat) Creates a NumericQueryNode object using the given field, (representing a .NET numeric type) value and used to convert the value to . Declaration public NumericQueryNode(string field, object value, NumberFormat numberFormat) Parameters Type Name Description System.String field the field associated with this query node System.Object value the value hold by this node NumberFormat numberFormat the used to convert the value to Properties | Improve this Doc View Source Field Gets or Sets the field associated with this node. Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source NumberFormat Gets or Sets the used to convert the value to . Declaration public virtual NumberFormat NumberFormat { get; set; } Property Value Type Description NumberFormat | Improve this Doc View Source Value Gets or Sets the numeric value as representing a .NET numeric type. Declaration public virtual object Value { get; set; } Property Value Type Description System.Object Methods | Improve this Doc View Source GetTermEscaped(IEscapeQuerySyntax) This method is used to get the value converted to and escaped using the given IEscapeQuerySyntax . Declaration protected string GetTermEscaped(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper The IEscapeQuerySyntax used to escape the value Returns Type Description System.String The value converted to and escaped | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode See Also NumericConfig"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericRangeQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericRangeQueryNode.html",
    "title": "Class NumericRangeQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeQueryNode This query node represents a range query composed by NumericQueryNode bounds, which means the bound values are s representing a .NET numeric type. Inheritance System.Object QueryNode AbstractRangeQueryNode < NumericQueryNode > NumericRangeQueryNode Implements IAbstractRangeQueryNode IRangeQueryNode < IFieldableNode > IRangeQueryNode IFieldableNode IQueryNode Inherited Members AbstractRangeQueryNode<NumericQueryNode>.Field AbstractRangeQueryNode<NumericQueryNode>.LowerBound AbstractRangeQueryNode<NumericQueryNode>.UpperBound AbstractRangeQueryNode<NumericQueryNode>.IsLowerInclusive AbstractRangeQueryNode<NumericQueryNode>.IsUpperInclusive AbstractRangeQueryNode<NumericQueryNode>.SetBounds(NumericQueryNode, NumericQueryNode, Boolean, Boolean) AbstractRangeQueryNode<NumericQueryNode>.ToQueryString(IEscapeQuerySyntax) QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.CloneTree() QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeQueryNode : AbstractRangeQueryNode<NumericQueryNode>, IAbstractRangeQueryNode, IRangeQueryNode<IFieldableNode>, IRangeQueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source NumericRangeQueryNode(NumericQueryNode, NumericQueryNode, Boolean, Boolean, NumericConfig) Constructs a NumericRangeQueryNode object using the given NumericQueryNode as its bounds and NumericConfig . Declaration public NumericRangeQueryNode(NumericQueryNode lower, NumericQueryNode upper, bool lowerInclusive, bool upperInclusive, NumericConfig numericConfig) Parameters Type Name Description NumericQueryNode lower the lower bound NumericQueryNode upper the upper bound System.Boolean lowerInclusive true if the lower bound is inclusive, otherwise, false System.Boolean upperInclusive true if the upper bound is inclusive, otherwise, false NumericConfig numericConfig the NumericConfig that represents associated with the upper and lower bounds See Also SetBounds(NumericQueryNode, NumericQueryNode, Boolean, Boolean, NumericConfig) Properties | Improve this Doc View Source NumericConfig Gets the NumericConfig associated with the lower and upper bounds. Declaration public virtual NumericConfig NumericConfig { get; set; } Property Value Type Description NumericConfig Methods | Improve this Doc View Source SetBounds(NumericQueryNode, NumericQueryNode, Boolean, Boolean, NumericConfig) Sets the upper and lower bounds of this range query node and the NumericConfig associated with these bounds. Declaration public virtual void SetBounds(NumericQueryNode lower, NumericQueryNode upper, bool lowerInclusive, bool upperInclusive, NumericConfig numericConfig) Parameters Type Name Description NumericQueryNode lower the lower bound NumericQueryNode upper the upper bound System.Boolean lowerInclusive true if the lower bound is inclusive, otherwise, false System.Boolean upperInclusive true if the upper bound is inclusive, otherwise, false NumericConfig numericConfig the NumericConfig that represents associated with the upper and lower bounds | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lucene.Net.QueryParsers.Flexible.Standard.Nodes.AbstractRangeQueryNode<Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericQueryNode>.ToString() Implements IAbstractRangeQueryNode IRangeQueryNode<T> IRangeQueryNode IFieldableNode IQueryNode See Also NumericQueryNode AbstractRangeQueryNode <T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.PrefixWildcardQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.PrefixWildcardQueryNode.html",
    "title": "Class PrefixWildcardQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixWildcardQueryNode A PrefixWildcardQueryNode represents wildcardquery that matches abc* or *. This does not apply to phrases, this is a special case on the original lucene parser. TODO: refactor the code to remove this special case from the parser. and probably do it on a Processor Inheritance System.Object QueryNode FieldQueryNode WildcardQueryNode PrefixWildcardQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members WildcardQueryNode.ToQueryString(IEscapeQuerySyntax) FieldQueryNode.m_field FieldQueryNode.m_text FieldQueryNode.m_begin FieldQueryNode.m_end FieldQueryNode.m_positionIncrement FieldQueryNode.GetTermEscaped(IEscapeQuerySyntax) FieldQueryNode.GetTermEscapeQuoted(IEscapeQuerySyntax) FieldQueryNode.GetTextAsString() FieldQueryNode.GetFieldAsString() FieldQueryNode.Begin FieldQueryNode.End FieldQueryNode.Field FieldQueryNode.PositionIncrement FieldQueryNode.Text FieldQueryNode.Value QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class PrefixWildcardQueryNode : WildcardQueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source PrefixWildcardQueryNode(FieldQueryNode) Declaration public PrefixWildcardQueryNode(FieldQueryNode fqn) Parameters Type Name Description FieldQueryNode fqn | Improve this Doc View Source PrefixWildcardQueryNode(String, ICharSequence, Int32, Int32) Declaration public PrefixWildcardQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name ICharSequence text value including the wildcard System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source PrefixWildcardQueryNode(String, StringBuilder, Int32, Int32) Declaration public PrefixWildcardQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name StringBuilder text value including the wildcard System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source PrefixWildcardQueryNode(String, String, Int32, Int32) Declaration public PrefixWildcardQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value including the wildcard System.Int32 begin position in the query string System.Int32 end position in the query string Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides WildcardQueryNode.CloneTree() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides WildcardQueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.RegexpQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.RegexpQueryNode.html",
    "title": "Class RegexpQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RegexpQueryNode A RegexpQueryNode represents query Examples: /[a-z]|[0-9]/ Inheritance System.Object QueryNode RegexpQueryNode Implements ITextableQueryNode IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class RegexpQueryNode : QueryNode, ITextableQueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source RegexpQueryNode(String, ICharSequence, Int32, Int32) Declaration public RegexpQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name ICharSequence text value that contains a regular expression System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source RegexpQueryNode(String, StringBuilder, Int32, Int32) Declaration public RegexpQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name StringBuilder text value that contains a regular expression System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source RegexpQueryNode(String, String, Int32, Int32) Declaration public RegexpQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value that contains a regular expression System.Int32 begin position in the query string System.Int32 end position in the query string Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source Text Declaration public virtual ICharSequence Text { get; set; } Property Value Type Description ICharSequence Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetFieldAsString() Declaration public virtual string GetFieldAsString() Returns Type Description System.String | Improve this Doc View Source TextToBytesRef() Declaration public virtual BytesRef TextToBytesRef() Returns Type Description BytesRef | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements ITextableQueryNode IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.StandardBooleanQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.StandardBooleanQueryNode.html",
    "title": "Class StandardBooleanQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardBooleanQueryNode A StandardBooleanQueryNode has the same behavior as BooleanQueryNode . It only indicates if the coord should be enabled or not for this boolean query. Inheritance System.Object QueryNode BooleanQueryNode StandardBooleanQueryNode Implements IQueryNode Inherited Members BooleanQueryNode.ToString() BooleanQueryNode.ToQueryString(IEscapeQuerySyntax) BooleanQueryNode.CloneTree() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardBooleanQueryNode : BooleanQueryNode, IQueryNode Constructors | Improve this Doc View Source StandardBooleanQueryNode(IList<IQueryNode>, Boolean) Declaration public StandardBooleanQueryNode(IList<IQueryNode> clauses, bool disableCoord) Parameters Type Name Description IList < IQueryNode > clauses System.Boolean disableCoord Properties | Improve this Doc View Source DisableCoord Declaration public virtual bool DisableCoord { get; } Property Value Type Description System.Boolean Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.TermRangeQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.TermRangeQueryNode.html",
    "title": "Class TermRangeQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermRangeQueryNode This query node represents a range query composed by FieldQueryNode bounds, which means the bound values are strings. Inheritance System.Object QueryNode AbstractRangeQueryNode < FieldQueryNode > TermRangeQueryNode Implements IAbstractRangeQueryNode IRangeQueryNode < IFieldableNode > IRangeQueryNode IFieldableNode IQueryNode Inherited Members AbstractRangeQueryNode<FieldQueryNode>.Field AbstractRangeQueryNode<FieldQueryNode>.LowerBound AbstractRangeQueryNode<FieldQueryNode>.UpperBound AbstractRangeQueryNode<FieldQueryNode>.IsLowerInclusive AbstractRangeQueryNode<FieldQueryNode>.IsUpperInclusive AbstractRangeQueryNode<FieldQueryNode>.SetBounds(FieldQueryNode, FieldQueryNode, Boolean, Boolean) AbstractRangeQueryNode<FieldQueryNode>.ToQueryString(IEscapeQuerySyntax) AbstractRangeQueryNode<FieldQueryNode>.ToString() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.CloneTree() QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class TermRangeQueryNode : AbstractRangeQueryNode<FieldQueryNode>, IAbstractRangeQueryNode, IRangeQueryNode<IFieldableNode>, IRangeQueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source TermRangeQueryNode(FieldQueryNode, FieldQueryNode, Boolean, Boolean) Constructs a TermRangeQueryNode object using the given FieldQueryNode as its bounds. Declaration public TermRangeQueryNode(FieldQueryNode lower, FieldQueryNode upper, bool lowerInclusive, bool upperInclusive) Parameters Type Name Description FieldQueryNode lower the lower bound FieldQueryNode upper the upper bound System.Boolean lowerInclusive true if the lower bound is inclusive, otherwise, false System.Boolean upperInclusive true if the upper bound is inclusive, otherwise, false Implements IAbstractRangeQueryNode IRangeQueryNode<T> IRangeQueryNode IFieldableNode IQueryNode See Also FieldQueryNode AbstractRangeQueryNode <T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.WildcardQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.WildcardQueryNode.html",
    "title": "Class WildcardQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WildcardQueryNode A WildcardQueryNode represents wildcard query This does not apply to phrases. Examples: a b c Fl?w? m?ke*g Inheritance System.Object QueryNode FieldQueryNode WildcardQueryNode PrefixWildcardQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members FieldQueryNode.m_field FieldQueryNode.m_text FieldQueryNode.m_begin FieldQueryNode.m_end FieldQueryNode.m_positionIncrement FieldQueryNode.GetTermEscaped(IEscapeQuerySyntax) FieldQueryNode.GetTermEscapeQuoted(IEscapeQuerySyntax) FieldQueryNode.GetTextAsString() FieldQueryNode.GetFieldAsString() FieldQueryNode.Begin FieldQueryNode.End FieldQueryNode.Field FieldQueryNode.PositionIncrement FieldQueryNode.Text FieldQueryNode.Value QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class WildcardQueryNode : FieldQueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source WildcardQueryNode(FieldQueryNode) Declaration public WildcardQueryNode(FieldQueryNode fqn) Parameters Type Name Description FieldQueryNode fqn | Improve this Doc View Source WildcardQueryNode(String, ICharSequence, Int32, Int32) Declaration public WildcardQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name ICharSequence text value that contains one or more wild card characters (? or *) System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source WildcardQueryNode(String, StringBuilder, Int32, Int32) Declaration public WildcardQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name StringBuilder text value that contains one or more wild card characters (? or *) System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source WildcardQueryNode(String, String, Int32, Int32) Declaration public WildcardQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value that contains one or more wild card characters (? or *) System.Int32 begin position in the query string System.Int32 end position in the query string Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides FieldQueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides FieldQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides FieldQueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.EscapeQuerySyntax.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.EscapeQuerySyntax.html",
    "title": "Class EscapeQuerySyntax | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EscapeQuerySyntax Implementation of IEscapeQuerySyntax for the standard lucene syntax. Inheritance System.Object EscapeQuerySyntax Implements IEscapeQuerySyntax Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class EscapeQuerySyntax : object, IEscapeQuerySyntax Methods | Improve this Doc View Source DiscardEscapeChar(String) Returns a string where the escape char has been removed, or kept only once if there was a double escape. Supports escaped unicode characters, e. g. translates A to A . Declaration public static UnescapedCharSequence DiscardEscapeChar(string input) Parameters Type Name Description System.String input Returns Type Description UnescapedCharSequence | Improve this Doc View Source Escape(ICharSequence, CultureInfo, EscapeQuerySyntaxType) Declaration public virtual ICharSequence Escape(ICharSequence text, CultureInfo locale, EscapeQuerySyntaxType type) Parameters Type Name Description ICharSequence text CultureInfo locale EscapeQuerySyntaxType type Returns Type Description ICharSequence | Improve this Doc View Source Escape(String, CultureInfo, EscapeQuerySyntaxType) Declaration public virtual string Escape(string text, CultureInfo locale, EscapeQuerySyntaxType type) Parameters Type Name Description System.String text CultureInfo locale EscapeQuerySyntaxType type Returns Type Description System.String Implements IEscapeQuerySyntax"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.FastCharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.FastCharStream.html",
    "title": "Class FastCharStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's Token API. Inheritance System.Object FastCharStream Implements ICharStream Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class FastCharStream : object, ICharStream Constructors | Improve this Doc View Source FastCharStream(TextReader) Constructs from a . Declaration public FastCharStream(TextReader r) Parameters Type Name Description TextReader r Properties | Improve this Doc View Source BeginColumn Declaration public int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Declaration public int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Declaration public int Column { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn Declaration public int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Declaration public int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Line Declaration public int Line { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source BackUp(Int32) Declaration public void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Declaration public char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() Declaration public void Done() | Improve this Doc View Source GetImage() Declaration public string GetImage() Returns Type Description System.String | Improve this Doc View Source GetSuffix(Int32) Declaration public char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Declaration public char ReadChar() Returns Type Description System.Char Implements ICharStream"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Parser <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene Query Parser. Lucene Query Parser The package org.apache.lucene.queryparser.flexible.standard.parser contains the query parser. This text parser only performs the syntax validation and creates an QueryNode tree from a query string. Classes EscapeQuerySyntax Implementation of IEscapeQuerySyntax for the standard lucene syntax. FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's Token API. LexicalToken ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method generateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. RegexpToken StandardSyntaxParser Parser for the standard Lucene syntax StandardSyntaxParserConstants Token literal values and constants. StandardSyntaxParserTokenManager Token Manager. Token Describes the input token stream. TokenMgrError Token Manager Error. Interfaces ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.ICharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.ICharStream.html",
    "title": "Interface ICharStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation. Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public interface ICharStream Properties | Improve this Doc View Source BeginColumn Returns the column number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Returns the line number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Gets the column position of the character last read. Declaration int Column { get; } Property Value Type Description System.Int32 See Also EndColumn | Improve this Doc View Source EndColumn Returns the column number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Returns the line number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Line Gets the line number of the character last read. Declaration int Line { get; } Property Value Type Description System.Int32 See Also EndLine Methods | Improve this Doc View Source BackUp(Int32) Backs up the input stream by amount steps. Lexer calls this method if it had already read some characters, but could not use them to match a (longer) token. So, they will be used again as the prefix of the next token and it is the implemetation's responsibility to do this right. Declaration void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Returns the next character that marks the beginning of the next token. All characters must remain in the buffer between two successive calls to this method to implement BackUp(Int32) correctly. Declaration char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() The lexer calls this function to indicate that it is done with the stream and hence implementations can free any resources held by this class. Again, the body of this function can be just empty and it will not affect the lexer's operation. Declaration void Done() | Improve this Doc View Source GetImage() Returns a string made up of characters from the marked token beginning to the current buffer position. Implementations have the choice of returning anything that they want to. For example, for efficiency, one might decide to just return null, which is a valid implementation. Declaration string GetImage() Returns Type Description System.String | Improve this Doc View Source GetSuffix(Int32) Returns an array of characters that make up the suffix of length 'len' for the currently matched token. This is used to build up the matched string for use in actions in the case of MORE. A simple and inefficient implementation of this is as follows : { string t = GetImage(); return t.Substring(t.Length - len, len).ToCharArray(); } Declaration char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Returns the next character from the selected input. The method of selecting the input is the responsibility of the class implementing this interface. Can throw any . Declaration char ReadChar() Returns Type Description System.Char the next character from the selected input."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.LexicalToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.LexicalToken.html",
    "title": "Class LexicalToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LexicalToken Inheritance System.Object LexicalToken Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class LexicalToken : object Fields | Improve this Doc View Source Boost Lexical state. Declaration public const int Boost = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT Lexical state. Declaration public const int DEFAULT = null Field Value Type Description System.Int32 | Improve this Doc View Source Range Lexical state. Declaration public const int Range = null Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.ParseException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.ParseException.html",
    "title": "Class ParseException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method generateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. Inheritance System.Object QueryNodeException QueryNodeParseException ParseException Implements INLSException Inherited Members QueryNodeParseException.SetQuery(String) QueryNodeParseException.Query QueryNodeParseException.ErrorToken QueryNodeParseException.SetNonLocalizedMessage(IMessage) QueryNodeParseException.BeginLine QueryNodeParseException.BeginColumn QueryNodeException.m_message QueryNodeException.MessageObject QueryNodeException.Message QueryNodeException.GetLocalizedMessage() QueryNodeException.GetLocalizedMessage(CultureInfo) QueryNodeException.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class ParseException : QueryNodeParseException, INLSException Constructors | Improve this Doc View Source ParseException() The following constructors are for use by you for whatever purpose you can think of. Constructing the exception in this manner makes the exception behave in the normal way - i.e., as documented in the class \"Throwable\". The fields \"errorToken\", \"expectedTokenSequences\", and \"tokenImage\" do not contain relevant information. The JavaCC generated code does not use these constructors. Declaration public ParseException() | Improve this Doc View Source ParseException(IMessage) Constructor with message. Declaration public ParseException(IMessage message) Parameters Type Name Description IMessage message | Improve this Doc View Source ParseException(Token, Int32[][], String[]) This constructor is used by the method \"generateParseException\" in the generated parser. Calling this constructor generates a new object of this type with the fields \"currentToken\", \"expectedTokenSequences\", and \"tokenImage\" set. Declaration public ParseException(Token currentTokenVal, int[][] expectedTokenSequencesVal, string[] tokenImageVal) Parameters Type Name Description Token currentTokenVal System.Int32 [][] expectedTokenSequencesVal System.String [] tokenImageVal Fields | Improve this Doc View Source m_eol The end of line string for this machine. Declaration protected string m_eol Field Value Type Description System.String Properties | Improve this Doc View Source CurrentToken This is the last token that has been consumed successfully. If this object has been created due to a parse error, the token followng this token will (therefore) be the first error token. Declaration public Token CurrentToken { get; set; } Property Value Type Description Token | Improve this Doc View Source ExpectedTokenSequences Each entry in this array is an array of integers. Each array of integers represents a sequence of tokens (by their ordinal values) that is expected at this point of the parse. Declaration public int[][] ExpectedTokenSequences { get; set; } Property Value Type Description System.Int32 [][] | Improve this Doc View Source TokenImage This is a reference to the \"tokenImage\" array of the generated parser within which the parse error occurred. This array is defined in the generated ...Constants interface. Declaration public string[] TokenImage { get; set; } Property Value Type Description System.String [] Implements INLSException"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.RegexpToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.RegexpToken.html",
    "title": "Class RegexpToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RegexpToken Inheritance System.Object RegexpToken Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class RegexpToken : object Fields | Improve this Doc View Source AND RegularExpression Id. Declaration public const int AND = null Field Value Type Description System.Int32 | Improve this Doc View Source CARAT RegularExpression Id. Declaration public const int CARAT = null Field Value Type Description System.Int32 | Improve this Doc View Source EOF End of File. Declaration public const int EOF = null Field Value Type Description System.Int32 | Improve this Doc View Source ESCAPED_CHAR RegularExpression Id. Declaration public const int ESCAPED_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source FUZZY_SLOP RegularExpression Id. Declaration public const int FUZZY_SLOP = null Field Value Type Description System.Int32 | Improve this Doc View Source LPAREN RegularExpression Id. Declaration public const int LPAREN = null Field Value Type Description System.Int32 | Improve this Doc View Source MINUS RegularExpression Id. Declaration public const int MINUS = null Field Value Type Description System.Int32 | Improve this Doc View Source NOT RegularExpression Id. Declaration public const int NOT = null Field Value Type Description System.Int32 | Improve this Doc View Source NUM_CHAR RegularExpression Id. Declaration public const int NUM_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source NUMBER RegularExpression Id. Declaration public const int NUMBER = null Field Value Type Description System.Int32 | Improve this Doc View Source OP_COLON RegularExpression Id. Declaration public const int OP_COLON = null Field Value Type Description System.Int32 | Improve this Doc View Source OP_EQUAL RegularExpression Id. Declaration public const int OP_EQUAL = null Field Value Type Description System.Int32 | Improve this Doc View Source OP_LESSTHAN RegularExpression Id. Declaration public const int OP_LESSTHAN = null Field Value Type Description System.Int32 | Improve this Doc View Source OP_LESSTHANEQ RegularExpression Id. Declaration public const int OP_LESSTHANEQ = null Field Value Type Description System.Int32 | Improve this Doc View Source OP_MORETHAN RegularExpression Id. Declaration public const int OP_MORETHAN = null Field Value Type Description System.Int32 | Improve this Doc View Source OP_MORETHANEQ RegularExpression Id. Declaration public const int OP_MORETHANEQ = null Field Value Type Description System.Int32 | Improve this Doc View Source OR RegularExpression Id. Declaration public const int OR = null Field Value Type Description System.Int32 | Improve this Doc View Source PLUS RegularExpression Id. Declaration public const int PLUS = null Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED RegularExpression Id. Declaration public const int QUOTED = null Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED_CHAR RegularExpression Id. Declaration public const int QUOTED_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_GOOP RegularExpression Id. Declaration public const int RANGE_GOOP = null Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_QUOTED RegularExpression Id. Declaration public const int RANGE_QUOTED = null Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_TO RegularExpression Id. Declaration public const int RANGE_TO = null Field Value Type Description System.Int32 | Improve this Doc View Source RANGEEX_END RegularExpression Id. Declaration public const int RANGEEX_END = null Field Value Type Description System.Int32 | Improve this Doc View Source RANGEEX_START RegularExpression Id. Declaration public const int RANGEEX_START = null Field Value Type Description System.Int32 | Improve this Doc View Source RANGEIN_END RegularExpression Id. Declaration public const int RANGEIN_END = null Field Value Type Description System.Int32 | Improve this Doc View Source RANGEIN_START RegularExpression Id. Declaration public const int RANGEIN_START = null Field Value Type Description System.Int32 | Improve this Doc View Source REGEXPTERM RegularExpression Id. Declaration public const int REGEXPTERM = null Field Value Type Description System.Int32 | Improve this Doc View Source RPAREN RegularExpression Id. Declaration public const int RPAREN = null Field Value Type Description System.Int32 | Improve this Doc View Source TERM RegularExpression Id. Declaration public const int TERM = null Field Value Type Description System.Int32 | Improve this Doc View Source TERM_CHAR RegularExpression Id. Declaration public const int TERM_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source TERM_START_CHAR RegularExpression Id. Declaration public const int TERM_START_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source WHITESPACE RegularExpression Id. Declaration public const int WHITESPACE = null Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParser.html",
    "title": "Class StandardSyntaxParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardSyntaxParser Parser for the standard Lucene syntax Inheritance System.Object StandardSyntaxParser Implements ISyntaxParser Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardSyntaxParser : object, ISyntaxParser Constructors | Improve this Doc View Source StandardSyntaxParser() Declaration public StandardSyntaxParser() | Improve this Doc View Source StandardSyntaxParser(ICharStream) Constructor with user supplied ICharStream . Declaration public StandardSyntaxParser(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source StandardSyntaxParser(StandardSyntaxParserTokenManager) Constructor with generated Token Manager. Declaration public StandardSyntaxParser(StandardSyntaxParserTokenManager tm) Parameters Type Name Description StandardSyntaxParserTokenManager tm Properties | Improve this Doc View Source Jj_nt Next token. Declaration public Token Jj_nt { get; set; } Property Value Type Description Token | Improve this Doc View Source Token Current token. Declaration public Token Token { get; set; } Property Value Type Description Token | Improve this Doc View Source TokenSource Generated Token Manager. Declaration public StandardSyntaxParserTokenManager TokenSource { get; set; } Property Value Type Description StandardSyntaxParserTokenManager Methods | Improve this Doc View Source Clause(String) Declaration public IQueryNode Clause(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source ConjQuery(String) Declaration public IQueryNode ConjQuery(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source Conjunction() Declaration public int Conjunction() Returns Type Description System.Int32 | Improve this Doc View Source Disable_tracing() Disable tracing. Declaration public void Disable_tracing() | Improve this Doc View Source DisjQuery(String) Declaration public IQueryNode DisjQuery(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source Enable_tracing() Enable tracing. Declaration public void Enable_tracing() | Improve this Doc View Source GenerateParseException() Generate ParseException. Declaration public virtual ParseException GenerateParseException() Returns Type Description ParseException | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public Token GetNextToken() Returns Type Description Token | Improve this Doc View Source GetToken(Int32) Get the specific Token. Declaration public Token GetToken(int index) Parameters Type Name Description System.Int32 index Returns Type Description Token | Improve this Doc View Source ModClause(String) Declaration public IQueryNode ModClause(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source Modifiers() Declaration public Modifier Modifiers() Returns Type Description Modifier | Improve this Doc View Source Parse(String, String) Parses a query string, returning a IQueryNode . Declaration public IQueryNode Parse(string query, string field) Parameters Type Name Description System.String query the query string to be parsed. System.String field Returns Type Description IQueryNode Exceptions Type Condition ParseException if the parsing fails | Improve this Doc View Source Query(String) Declaration public IQueryNode Query(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source ReInit(ICharStream) Reinitialize. Declaration public void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(StandardSyntaxParserTokenManager) Reinitialize. Declaration public void ReInit(StandardSyntaxParserTokenManager tm) Parameters Type Name Description StandardSyntaxParserTokenManager tm | Improve this Doc View Source Term(String) Declaration public IQueryNode Term(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source TopLevelQuery(String) Declaration public IQueryNode TopLevelQuery(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode Implements ISyntaxParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParserConstants.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParserConstants.html",
    "title": "Class StandardSyntaxParserConstants | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardSyntaxParserConstants Token literal values and constants. Inheritance System.Object StandardSyntaxParserConstants Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class StandardSyntaxParserConstants : object Fields | Improve this Doc View Source TokenImage Literal token values. Declaration public static string[] TokenImage Field Value Type Description System.String []"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParserTokenManager.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParserTokenManager.html",
    "title": "Class StandardSyntaxParserTokenManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardSyntaxParserTokenManager Token Manager. Inheritance System.Object StandardSyntaxParserTokenManager Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardSyntaxParserTokenManager : object Constructors | Improve this Doc View Source StandardSyntaxParserTokenManager(ICharStream) Constructor. Declaration public StandardSyntaxParserTokenManager(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source StandardSyntaxParserTokenManager(ICharStream, Int32) Constructor. Declaration public StandardSyntaxParserTokenManager(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState Fields | Improve this Doc View Source jjnewLexState Lex State array. Declaration public static readonly int[] jjnewLexState Field Value Type Description System.Int32 [] | Improve this Doc View Source jjstrLiteralImages Token literal values. Declaration public static readonly string[] jjstrLiteralImages Field Value Type Description System.String [] | Improve this Doc View Source lexStateNames Lexer state names. Declaration public static readonly string[] lexStateNames Field Value Type Description System.String [] | Improve this Doc View Source m_curChar Declaration protected char m_curChar Field Value Type Description System.Char | Improve this Doc View Source m_input_stream Declaration protected ICharStream m_input_stream Field Value Type Description ICharStream Methods | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public virtual Token GetNextToken() Returns Type Description Token | Improve this Doc View Source JjFillToken() Declaration protected Token JjFillToken() Returns Type Description Token | Improve this Doc View Source ReInit(ICharStream) Reinitialize parser. Declaration public void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(ICharStream, Int32) Reinitialize parser. Declaration public void ReInit(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState | Improve this Doc View Source SetDebugStream(TextWriter) Set debug output. Declaration public void SetDebugStream(TextWriter ds) Parameters Type Name Description TextWriter ds | Improve this Doc View Source SwitchTo(Int32) Switch to specified lex state. Declaration public void SwitchTo(int lexState) Parameters Type Name Description System.Int32 lexState"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.Token.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Token Describes the input token stream. Inheritance System.Object Token Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class Token : object Constructors | Improve this Doc View Source Token() No-argument constructor Declaration public Token() | Improve this Doc View Source Token(Int32) Constructs a new token for the specified Image. Declaration public Token(int kind) Parameters Type Name Description System.Int32 kind | Improve this Doc View Source Token(Int32, String) Constructs a new token for the specified Image and Kind. Declaration public Token(int kind, string image) Parameters Type Name Description System.Int32 kind System.String image Properties | Improve this Doc View Source BeginColumn The column number of the first character of this Token. Declaration public int BeginColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine The line number of the first character of this Token. Declaration public int BeginLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn The column number of the last character of this Token. Declaration public int EndColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine The line number of the last character of this Token. Declaration public int EndLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Image The string image of the token. Declaration public string Image { get; set; } Property Value Type Description System.String | Improve this Doc View Source Kind An integer that describes the kind of this token. This numbering system is determined by JavaCCParser, and a table of these numbers is stored in the file ...Constants.java. Declaration public int Kind { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Next A reference to the next regular (non-special) token from the input stream. If this is the last token from the input stream, or if the token manager has not read tokens beyond this one, this field is set to null. This is true only if this token is also a regular token. Otherwise, see below for a description of the contents of this field. Declaration public Token Next { get; set; } Property Value Type Description Token | Improve this Doc View Source SpecialToken This field is used to access special tokens that occur prior to this token, but after the immediately preceding regular (non-special) token. If there are no such special tokens, this field is set to null. When there are more than one such special token, this field refers to the last of these special tokens, which in turn refers to the next previous special token through its specialToken field, and so on until the first special token (whose specialToken field is null). The next fields of special tokens refer to other special tokens that immediately follow it (without an intervening regular token). If there is no such token, this field is null. Declaration public Token SpecialToken { get; set; } Property Value Type Description Token | Improve this Doc View Source Value An optional attribute value of the Token. Tokens which are not used as syntactic sugar will often contain meaningful values that will be used later on by the compiler or interpreter. This attribute value is often different from the image. Any subclass of Token that actually wants to return a non-null value can override this method as appropriate. Declaration public virtual object Value { get; } Property Value Type Description System.Object Methods | Improve this Doc View Source NewToken(Int32) Declaration public static Token NewToken(int ofKind) Parameters Type Name Description System.Int32 ofKind Returns Type Description Token | Improve this Doc View Source NewToken(Int32, String) Returns a new Token object, by default. However, if you want, you can create and return subclass objects based on the value of ofKind . Simply add the cases to the switch for all those special cases. For example, if you have a subclass of Token called IDToken that you want to create if ofKind is ID, simply add something like : case MyParserConstants.ID : return new IDToken(ofKind, image); to the following switch statement. Then you can cast matchedToken variable to the appropriate type and use sit in your lexical actions. Declaration public static Token NewToken(int ofKind, string image) Parameters Type Name Description System.Int32 ofKind System.String image Returns Type Description Token | Improve this Doc View Source ToString() Returns the image. Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.TokenMgrError.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.TokenMgrError.html",
    "title": "Class TokenMgrError | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenMgrError Token Manager Error. Inheritance System.Object TokenMgrError Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class TokenMgrError : Exception Constructors | Improve this Doc View Source TokenMgrError() No arg constructor. Declaration public TokenMgrError() | Improve this Doc View Source TokenMgrError(Boolean, Int32, Int32, Int32, String, Char, Int32) Full Constructor. Declaration public TokenMgrError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar, int reason) Parameters Type Name Description System.Boolean eofSeen indicates if EOF caused the lexical error System.Int32 lexState lexical state in which this error occurred System.Int32 errorLine line number when the error occurred System.Int32 errorColumn column number when the error occurred System.String errorAfter prefix that was seen before this error occurred System.Char curChar the offending character System.Int32 reason | Improve this Doc View Source TokenMgrError(String, Int32) Constructor with message and reason. Declaration public TokenMgrError(string message, int reason) Parameters Type Name Description System.String message System.Int32 reason Properties | Improve this Doc View Source Message You can also modify the body of this method to customize your error messages. For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not of end-users concern, so you can return something like : \"Internal Error : Please file a bug report .... \" from this method for such cases in the release version of your parser. Declaration public override string Message { get; } Property Value Type Description System.String Methods | Improve this Doc View Source AddEscapes(String) Replaces unprintable characters by their escaped (or unicode escaped) equivalents in the given string Declaration protected static string AddEscapes(string str) Parameters Type Name Description System.String str Returns Type Description System.String | Improve this Doc View Source LexicalError(Boolean, Int32, Int32, Int32, String, Char) Returns a detailed message for the Error when it is thrown by the token manager to indicate a lexical error. Declaration protected static string LexicalError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar) Parameters Type Name Description System.Boolean eofSeen indicates if EOF caused the lexical error System.Int32 lexState lexical state in which this error occurred System.Int32 errorLine line number when the error occurred System.Int32 errorColumn column number when the error occurred System.String errorAfter prefix that was seen before this error occurred System.Char curChar the offending character Returns Type Description System.String Remarks Note: You can customize the lexical error message by modifying this method."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.AllowLeadingWildcardProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.AllowLeadingWildcardProcessor.html",
    "title": "Class AllowLeadingWildcardProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AllowLeadingWildcardProcessor This processor verifies if ALLOW_LEADING_WILDCARD is defined in the QueryConfigHandler . If it is and leading wildcard is not allowed, it looks for every WildcardQueryNode contained in the query node tree and throws an exception if any of them has a leading wildcard ('*' or '?'). Inheritance System.Object QueryNodeProcessor AllowLeadingWildcardProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class AllowLeadingWildcardProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source AllowLeadingWildcardProcessor() Declaration public AllowLeadingWildcardProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also ALLOW_LEADING_WILDCARD"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.AnalyzerQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.AnalyzerQueryNodeProcessor.html",
    "title": "Class AnalyzerQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnalyzerQueryNodeProcessor This processor verifies if ANALYZER is defined in the QueryConfigHandler . If it is and the analyzer is not null , it looks for every FieldQueryNode that is not WildcardQueryNode , FuzzyQueryNode or IRangeQueryNode contained in the query node tree, then it applies the analyzer to that FieldQueryNode object. If the analyzer return only one term, the returned term is set to the FieldQueryNode and it's returned. If the analyzer return more than one term, a TokenizedPhraseQueryNode or MultiPhraseQueryNode is created, whether there is one or more terms at the same position, and it's returned. If no term is returned by the analyzer a NoTokenFoundQueryNode object is returned. Inheritance System.Object QueryNodeProcessor AnalyzerQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class AnalyzerQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source AnalyzerQueryNodeProcessor() Declaration public AnalyzerQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also ANALYZER"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BooleanQuery2ModifierNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BooleanQuery2ModifierNodeProcessor.html",
    "title": "Class BooleanQuery2ModifierNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanQuery2ModifierNodeProcessor This processor is used to apply the correct ModifierQueryNode to BooleanQueryNode s children. This is a variant of BooleanModifiersQueryNodeProcessor which ignores precedence. The StandardSyntaxParser knows the rules of precedence, but lucene does not. e.g. (A AND B OR C AND D) ist treated like (+A +B +C +D) . This processor walks through the query node tree looking for BooleanQueryNode s. If an AndQueryNode is found, every child, which is not a ModifierQueryNode or the ModifierQueryNode is MOD_NONE , becomes a MOD_REQ . For default BooleanQueryNode , it checks the default operator is AND , if it is, the same operation when an AndQueryNode is found is applied to it. Each BooleanQueryNode which direct parent is also a BooleanQueryNode is removed (to ignore the rules of precedence). Inheritance System.Object BooleanQuery2ModifierNodeProcessor Implements IQueryNodeProcessor Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanQuery2ModifierNodeProcessor : object, IQueryNodeProcessor Constructors | Improve this Doc View Source BooleanQuery2ModifierNodeProcessor() Declaration public BooleanQuery2ModifierNodeProcessor() Methods | Improve this Doc View Source FillChildrenBufferAndApplyModifiery(IQueryNode) Declaration protected virtual void FillChildrenBufferAndApplyModifiery(IQueryNode parent) Parameters Type Name Description IQueryNode parent | Improve this Doc View Source GetQueryConfigHandler() Declaration public virtual QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler | Improve this Doc View Source IsDefaultBooleanQueryNode(IQueryNode) Declaration protected virtual bool IsDefaultBooleanQueryNode(IQueryNode toTest) Parameters Type Name Description IQueryNode toTest Returns Type Description System.Boolean | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected virtual IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected virtual IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode | Improve this Doc View Source Process(IQueryNode) Declaration public virtual IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode | Improve this Doc View Source ProcessChildren(IQueryNode) Declaration protected virtual void ProcessChildren(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler | Improve this Doc View Source TagModifierButDoNotOverride(IQueryNode, Modifier) Declaration protected virtual void TagModifierButDoNotOverride(IQueryNode node, Modifier mod) Parameters Type Name Description IQueryNode node Modifier mod Implements IQueryNodeProcessor See Also DEFAULT_OPERATOR BooleanModifiersQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BooleanSingleChildOptimizationQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BooleanSingleChildOptimizationQueryNodeProcessor.html",
    "title": "Class BooleanSingleChildOptimizationQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanSingleChildOptimizationQueryNodeProcessor This processor removes every BooleanQueryNode that contains only one child and returns this child. If this child is ModifierQueryNode that was defined by the user. A modifier is not defined by the user when it's a BooleanModifierNode Inheritance System.Object QueryNodeProcessor BooleanSingleChildOptimizationQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanSingleChildOptimizationQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source BooleanSingleChildOptimizationQueryNodeProcessor() Declaration public BooleanSingleChildOptimizationQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also ModifierQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BoostQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BoostQueryNodeProcessor.html",
    "title": "Class BoostQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostQueryNodeProcessor This processor iterates the query node tree looking for every IFieldableNode that has BOOST in its config. If there is, the boost is applied to that IFieldableNode . Inheritance System.Object QueryNodeProcessor BoostQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also BOOST QueryConfigHandler IFieldableNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.DefaultPhraseSlopQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.DefaultPhraseSlopQueryNodeProcessor.html",
    "title": "Class DefaultPhraseSlopQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultPhraseSlopQueryNodeProcessor This processor verifies if PHRASE_SLOP is defined in the QueryConfigHandler . If it is, it looks for every TokenizedPhraseQueryNode and MultiPhraseQueryNode that does not have any SlopQueryNode applied to it and creates an SlopQueryNode and apply to it. The new SlopQueryNode has the same slop value defined in the configuration. Inheritance System.Object QueryNodeProcessor DefaultPhraseSlopQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class DefaultPhraseSlopQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source DefaultPhraseSlopQueryNodeProcessor() Declaration public DefaultPhraseSlopQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source ProcessChildren(IQueryNode) Declaration protected override void ProcessChildren(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Overrides QueryNodeProcessor.ProcessChildren(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also SlopQueryNode PHRASE_SLOP"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.FuzzyQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.FuzzyQueryNodeProcessor.html",
    "title": "Class FuzzyQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyQueryNodeProcessor This processor iterates the query node tree looking for every FuzzyQueryNode , when this kind of node is found, it checks on the query configuration for FUZZY_CONFIG , gets the fuzzy prefix length and default similarity from it and set to the fuzzy node. For more information about fuzzy prefix length check: . Inheritance System.Object QueryNodeProcessor FuzzyQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also FUZZY_CONFIG FuzzyQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.GroupQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.GroupQueryNodeProcessor.html",
    "title": "Class GroupQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GroupQueryNodeProcessor The ISyntaxParser generates query node trees that consider the boolean operator precedence, but Lucene current syntax does not support boolean precedence, so this processor remove all the precedence and apply the equivalent modifier according to the boolean operation defined on an specific query node. If there is a GroupQueryNode in the query node tree, the query node tree is not merged with the one above it. Example: TODO: describe a good example to show how this processor works Inheritance System.Object GroupQueryNodeProcessor Implements IQueryNodeProcessor Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class GroupQueryNodeProcessor : object, IQueryNodeProcessor Constructors | Improve this Doc View Source GroupQueryNodeProcessor() Declaration public GroupQueryNodeProcessor() Methods | Improve this Doc View Source GetQueryConfigHandler() Declaration public virtual QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler | Improve this Doc View Source Process(IQueryNode) Declaration public virtual IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler Implements IQueryNodeProcessor See Also StandardQueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Processors | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Processors <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene Query Node Processors. Lucene Query Node Processors The package org.apache.lucene.queryparser.flexible.standard.processors contains every processor needed to assembly a pipeline that modifies the query node tree according to the actual Lucene queries. These processors are already assembled correctly in the StandardQueryNodeProcessorPipeline. Classes AllowLeadingWildcardProcessor This processor verifies if ALLOW_LEADING_WILDCARD is defined in the QueryConfigHandler . If it is and leading wildcard is not allowed, it looks for every WildcardQueryNode contained in the query node tree and throws an exception if any of them has a leading wildcard ('*' or '?'). AnalyzerQueryNodeProcessor This processor verifies if ANALYZER is defined in the QueryConfigHandler . If it is and the analyzer is not null , it looks for every FieldQueryNode that is not WildcardQueryNode , FuzzyQueryNode or IRangeQueryNode contained in the query node tree, then it applies the analyzer to that FieldQueryNode object. If the analyzer return only one term, the returned term is set to the FieldQueryNode and it's returned. If the analyzer return more than one term, a TokenizedPhraseQueryNode or MultiPhraseQueryNode is created, whether there is one or more terms at the same position, and it's returned. If no term is returned by the analyzer a NoTokenFoundQueryNode object is returned. BooleanQuery2ModifierNodeProcessor This processor is used to apply the correct ModifierQueryNode to BooleanQueryNode s children. This is a variant of BooleanModifiersQueryNodeProcessor which ignores precedence. The StandardSyntaxParser knows the rules of precedence, but lucene does not. e.g. (A AND B OR C AND D) ist treated like (+A +B +C +D) . This processor walks through the query node tree looking for BooleanQueryNode s. If an AndQueryNode is found, every child, which is not a ModifierQueryNode or the ModifierQueryNode is MOD_NONE , becomes a MOD_REQ . For default BooleanQueryNode , it checks the default operator is AND , if it is, the same operation when an AndQueryNode is found is applied to it. Each BooleanQueryNode which direct parent is also a BooleanQueryNode is removed (to ignore the rules of precedence). BooleanSingleChildOptimizationQueryNodeProcessor This processor removes every BooleanQueryNode that contains only one child and returns this child. If this child is ModifierQueryNode that was defined by the user. A modifier is not defined by the user when it's a BooleanModifierNode BoostQueryNodeProcessor This processor iterates the query node tree looking for every IFieldableNode that has BOOST in its config. If there is, the boost is applied to that IFieldableNode . DefaultPhraseSlopQueryNodeProcessor This processor verifies if PHRASE_SLOP is defined in the QueryConfigHandler . If it is, it looks for every TokenizedPhraseQueryNode and MultiPhraseQueryNode that does not have any SlopQueryNode applied to it and creates an SlopQueryNode and apply to it. The new SlopQueryNode has the same slop value defined in the configuration. FuzzyQueryNodeProcessor This processor iterates the query node tree looking for every FuzzyQueryNode , when this kind of node is found, it checks on the query configuration for FUZZY_CONFIG , gets the fuzzy prefix length and default similarity from it and set to the fuzzy node. For more information about fuzzy prefix length check: . GroupQueryNodeProcessor The ISyntaxParser generates query node trees that consider the boolean operator precedence, but Lucene current syntax does not support boolean precedence, so this processor remove all the precedence and apply the equivalent modifier according to the boolean operation defined on an specific query node. If there is a GroupQueryNode in the query node tree, the query node tree is not merged with the one above it. Example: TODO: describe a good example to show how this processor works LowercaseExpandedTermsQueryNodeProcessor This processor verifies if LOWERCASE_EXPANDED_TERMS is defined in the QueryConfigHandler . If it is and the expanded terms should be lower-cased, it looks for every WildcardQueryNode , FuzzyQueryNode and children of a IRangeQueryNode and lower-case its term. MatchAllDocsQueryNodeProcessor This processor converts every WildcardQueryNode that is \" : \" to MatchAllDocsQueryNode . MultiFieldQueryNodeProcessor This processor is used to expand terms so the query looks for the same term in different fields. It also boosts a query based on its field. This processor looks for every IFieldableNode contained in the query node tree. If a IFieldableNode is found, it checks if there is a MULTI_FIELDS defined in the QueryConfigHandler . If there is, the IFieldableNode is cloned N times and the clones are added to a BooleanQueryNode together with the original node. N is defined by the number of fields that it will be expanded to. The BooleanQueryNode is returned. MultiTermRewriteMethodProcessor This processor instates the default , , for multi-term query nodes. NumericQueryNodeProcessor This processor is used to convert FieldQueryNode s to NumericRangeQueryNode s. It looks for NUMERIC_CONFIG set in the FieldConfig of every FieldQueryNode found. If NUMERIC_CONFIG is found, it considers that FieldQueryNode to be a numeric query and convert it to NumericRangeQueryNode with upper and lower inclusive and lower and upper equals to the value represented by the FieldQueryNode converted to representing a .NET numeric type. It means that field:1 is converted to field:[1 TO 1] . Note that FieldQueryNode s children of a IRangeQueryNode are ignored. NumericRangeQueryNodeProcessor This processor is used to convert TermRangeQueryNode s to NumericRangeQueryNode s. It looks for NUMERIC_CONFIG set in the FieldConfig of every TermRangeQueryNode found. If NUMERIC_CONFIG is found, it considers that TermRangeQueryNode to be a numeric range query and convert it to NumericRangeQueryNode . OpenRangeQueryNodeProcessor Processes s with open ranges. PhraseSlopQueryNodeProcessor This processor removes invalid SlopQueryNode objects in the query node tree. A SlopQueryNode is invalid if its child is neither a TokenizedPhraseQueryNode nor a MultiPhraseQueryNode . RemoveEmptyNonLeafQueryNodeProcessor This processor removes every IQueryNode that is not a leaf and has not children. If after processing the entire tree the root node is not a leaf and has no children, a MatchNoDocsQueryNode object is returned. This processor is used at the end of a pipeline to avoid invalid query node tree structures like a GroupQueryNode or ModifierQueryNode with no children. StandardQueryNodeProcessorPipeline This pipeline has all the processors needed to process a query node tree, generated by StandardSyntaxParser , already assembled. The order they are assembled affects the results. This processor pipeline was designed to work with StandardQueryConfigHandler . The result query node tree can be used to build a object using StandardQueryTreeBuilder . TermRangeQueryNodeProcessor This processors process TermRangeQueryNode s. It reads the lower and upper bounds value from the TermRangeQueryNode object and try to parse their values using a dateFormat . If the values cannot be parsed to a date value, it will only create the TermRangeQueryNode using the non-parsed values. If a LOCALE is defined in the QueryConfigHandler it will be used to parse the date, otherwise will be used. If a DATE_RESOLUTION is defined and the is not null it will also be used to parse the date value. WildcardQueryNodeProcessor The StandardSyntaxParser creates PrefixWildcardQueryNode nodes which have values containing the prefixed wildcard. However, Lucene cannot contain the prefixed wildcard. So, this processor basically removed the prefixed wildcard from the PrefixWildcardQueryNode value."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.LowercaseExpandedTermsQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.LowercaseExpandedTermsQueryNodeProcessor.html",
    "title": "Class LowercaseExpandedTermsQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LowercaseExpandedTermsQueryNodeProcessor This processor verifies if LOWERCASE_EXPANDED_TERMS is defined in the QueryConfigHandler . If it is and the expanded terms should be lower-cased, it looks for every WildcardQueryNode , FuzzyQueryNode and children of a IRangeQueryNode and lower-case its term. Inheritance System.Object QueryNodeProcessor LowercaseExpandedTermsQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class LowercaseExpandedTermsQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source LowercaseExpandedTermsQueryNodeProcessor() Declaration public LowercaseExpandedTermsQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also LOWERCASE_EXPANDED_TERMS"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MatchAllDocsQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MatchAllDocsQueryNodeProcessor.html",
    "title": "Class MatchAllDocsQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchAllDocsQueryNodeProcessor This processor converts every WildcardQueryNode that is \" : \" to MatchAllDocsQueryNode . Inheritance System.Object QueryNodeProcessor MatchAllDocsQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchAllDocsQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source MatchAllDocsQueryNodeProcessor() Declaration public MatchAllDocsQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also MatchAllDocsQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MultiFieldQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MultiFieldQueryNodeProcessor.html",
    "title": "Class MultiFieldQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiFieldQueryNodeProcessor This processor is used to expand terms so the query looks for the same term in different fields. It also boosts a query based on its field. This processor looks for every IFieldableNode contained in the query node tree. If a IFieldableNode is found, it checks if there is a MULTI_FIELDS defined in the QueryConfigHandler . If there is, the IFieldableNode is cloned N times and the clones are added to a BooleanQueryNode together with the original node. N is defined by the number of fields that it will be expanded to. The BooleanQueryNode is returned. Inheritance System.Object QueryNodeProcessor MultiFieldQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiFieldQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source MultiFieldQueryNodeProcessor() Declaration public MultiFieldQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source ProcessChildren(IQueryNode) Declaration protected override void ProcessChildren(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Overrides QueryNodeProcessor.ProcessChildren(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also MULTI_FIELDS"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MultiTermRewriteMethodProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MultiTermRewriteMethodProcessor.html",
    "title": "Class MultiTermRewriteMethodProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermRewriteMethodProcessor This processor instates the default , , for multi-term query nodes. Inheritance System.Object QueryNodeProcessor MultiTermRewriteMethodProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiTermRewriteMethodProcessor : QueryNodeProcessor, IQueryNodeProcessor Fields | Improve this Doc View Source TAG_ID Declaration public static readonly string TAG_ID Field Value Type Description System.String Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.NumericQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.NumericQueryNodeProcessor.html",
    "title": "Class NumericQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericQueryNodeProcessor This processor is used to convert FieldQueryNode s to NumericRangeQueryNode s. It looks for NUMERIC_CONFIG set in the FieldConfig of every FieldQueryNode found. If NUMERIC_CONFIG is found, it considers that FieldQueryNode to be a numeric query and convert it to NumericRangeQueryNode with upper and lower inclusive and lower and upper equals to the value represented by the FieldQueryNode converted to representing a .NET numeric type. It means that field:1 is converted to field:[1 TO 1] . Note that FieldQueryNode s children of a IRangeQueryNode are ignored. Inheritance System.Object QueryNodeProcessor NumericQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source NumericQueryNodeProcessor() Constructs a NumericQueryNodeProcessor object. Declaration public NumericQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also NUMERIC_CONFIG FieldQueryNode NumericConfig NumericQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.NumericRangeQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.NumericRangeQueryNodeProcessor.html",
    "title": "Class NumericRangeQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeQueryNodeProcessor This processor is used to convert TermRangeQueryNode s to NumericRangeQueryNode s. It looks for NUMERIC_CONFIG set in the FieldConfig of every TermRangeQueryNode found. If NUMERIC_CONFIG is found, it considers that TermRangeQueryNode to be a numeric range query and convert it to NumericRangeQueryNode . Inheritance System.Object QueryNodeProcessor NumericRangeQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source NumericRangeQueryNodeProcessor() Constructs an empty NumericRangeQueryNode object. Declaration public NumericRangeQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also NUMERIC_CONFIG TermRangeQueryNode NumericConfig NumericRangeQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.OpenRangeQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.OpenRangeQueryNodeProcessor.html",
    "title": "Class OpenRangeQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenRangeQueryNodeProcessor Processes s with open ranges. Inheritance System.Object QueryNodeProcessor OpenRangeQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class OpenRangeQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source OpenRangeQueryNodeProcessor() Declaration public OpenRangeQueryNodeProcessor() Fields | Improve this Doc View Source OPEN_RANGE_TOKEN Declaration public static readonly string OPEN_RANGE_TOKEN Field Value Type Description System.String Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.PhraseSlopQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.PhraseSlopQueryNodeProcessor.html",
    "title": "Class PhraseSlopQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhraseSlopQueryNodeProcessor This processor removes invalid SlopQueryNode objects in the query node tree. A SlopQueryNode is invalid if its child is neither a TokenizedPhraseQueryNode nor a MultiPhraseQueryNode . Inheritance System.Object QueryNodeProcessor PhraseSlopQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class PhraseSlopQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source PhraseSlopQueryNodeProcessor() Declaration public PhraseSlopQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also SlopQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.RemoveEmptyNonLeafQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.RemoveEmptyNonLeafQueryNodeProcessor.html",
    "title": "Class RemoveEmptyNonLeafQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RemoveEmptyNonLeafQueryNodeProcessor This processor removes every IQueryNode that is not a leaf and has not children. If after processing the entire tree the root node is not a leaf and has no children, a MatchNoDocsQueryNode object is returned. This processor is used at the end of a pipeline to avoid invalid query node tree structures like a GroupQueryNode or ModifierQueryNode with no children. Inheritance System.Object QueryNodeProcessor RemoveEmptyNonLeafQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class RemoveEmptyNonLeafQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source RemoveEmptyNonLeafQueryNodeProcessor() Declaration public RemoveEmptyNonLeafQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also IQueryNode MatchNoDocsQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.StandardQueryNodeProcessorPipeline.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.StandardQueryNodeProcessorPipeline.html",
    "title": "Class StandardQueryNodeProcessorPipeline | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardQueryNodeProcessorPipeline This pipeline has all the processors needed to process a query node tree, generated by StandardSyntaxParser , already assembled. The order they are assembled affects the results. This processor pipeline was designed to work with StandardQueryConfigHandler . The result query node tree can be used to build a object using StandardQueryTreeBuilder . Inheritance System.Object QueryNodeProcessorPipeline StandardQueryNodeProcessorPipeline PrecedenceQueryNodeProcessorPipeline Implements IQueryNodeProcessor IList < IQueryNodeProcessor > Inherited Members QueryNodeProcessorPipeline.GetQueryConfigHandler() QueryNodeProcessorPipeline.Process(IQueryNode) QueryNodeProcessorPipeline.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessorPipeline.Add(IQueryNodeProcessor) QueryNodeProcessorPipeline.Clear() QueryNodeProcessorPipeline.Contains(Object) QueryNodeProcessorPipeline.Item[Int32] QueryNodeProcessorPipeline.IndexOf(IQueryNodeProcessor) QueryNodeProcessorPipeline.GetEnumerator() QueryNodeProcessorPipeline.Remove(IQueryNodeProcessor) QueryNodeProcessorPipeline.RemoveAt(Int32) QueryNodeProcessorPipeline.RemoveRange(Int32, Int32) QueryNodeProcessorPipeline.Set(Int32, IQueryNodeProcessor) QueryNodeProcessorPipeline.Count QueryNodeProcessorPipeline.IsReadOnly QueryNodeProcessorPipeline.GetRange(Int32, Int32) QueryNodeProcessorPipeline.Insert(Int32, IQueryNodeProcessor) QueryNodeProcessorPipeline.Contains(IQueryNodeProcessor) QueryNodeProcessorPipeline.CopyTo(IQueryNodeProcessor[], Int32) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardQueryNodeProcessorPipeline : QueryNodeProcessorPipeline, IQueryNodeProcessor, IList<IQueryNodeProcessor> Constructors | Improve this Doc View Source StandardQueryNodeProcessorPipeline(QueryConfigHandler) Declaration public StandardQueryNodeProcessorPipeline(QueryConfigHandler queryConfig) Parameters Type Name Description QueryConfigHandler queryConfig Implements IQueryNodeProcessor IList<> See Also StandardQueryTreeBuilder StandardQueryConfigHandler StandardSyntaxParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.TermRangeQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.TermRangeQueryNodeProcessor.html",
    "title": "Class TermRangeQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermRangeQueryNodeProcessor This processors process TermRangeQueryNode s. It reads the lower and upper bounds value from the TermRangeQueryNode object and try to parse their values using a dateFormat . If the values cannot be parsed to a date value, it will only create the TermRangeQueryNode using the non-parsed values. If a LOCALE is defined in the QueryConfigHandler it will be used to parse the date, otherwise will be used. If a DATE_RESOLUTION is defined and the is not null it will also be used to parse the date value. Inheritance System.Object QueryNodeProcessor TermRangeQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class TermRangeQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source TermRangeQueryNodeProcessor() Declaration public TermRangeQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also DATE_RESOLUTION LOCALE TermRangeQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.WildcardQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.WildcardQueryNodeProcessor.html",
    "title": "Class WildcardQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WildcardQueryNodeProcessor The StandardSyntaxParser creates PrefixWildcardQueryNode nodes which have values containing the prefixed wildcard. However, Lucene cannot contain the prefixed wildcard. So, this processor basically removed the prefixed wildcard from the PrefixWildcardQueryNode value. Inheritance System.Object QueryNodeProcessor WildcardQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class WildcardQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source WildcardQueryNodeProcessor() Declaration public WildcardQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description IList < IQueryNode > children Returns Type Description IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also PrefixWildcardQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.QueryParserUtil.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.QueryParserUtil.html",
    "title": "Class QueryParserUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserUtil This class defines utility methods to (help) parse query strings into objects. Inheritance System.Object QueryParserUtil Namespace : Lucene.Net.QueryParsers.Flexible.Standard Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class QueryParserUtil : object Methods | Improve this Doc View Source Escape(String) Returns a string where those characters that TextParser expects to be escaped are escaped by a preceding </code>. Declaration public static string Escape(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source Parse(String, String[], Occur[], Analyzer) Parses a query, searching on the fields specified. Use this if you need to specify certain fields as required, and others as prohibited. Usage: string[] fields = {\"filename\", \"contents\", \"description\"}; Occur[] flags = {Occur.SHOULD, Occur.MUST, Occur.MUST_NOT}; MultiFieldQueryParser.Parse(\"query\", fields, flags, analyzer); The code above would construct a query: (filename:query) +(contents:query) -(description:query) Declaration public static Query Parse(string query, string[] fields, Occur[] flags, Analyzer analyzer) Parameters Type Name Description System.String query Query string to parse System.String [] fields Fields to search on Occur [] flags Flags describing the fields Analyzer analyzer Analyzer to use Returns Type Description Query | Improve this Doc View Source Parse(String[], String[], Analyzer) Parses a query which searches on the fields specified. If x fields are specified, this effectively constructs: (field1:query1) (field2:query2) (field3:query3)...(fieldx:queryx) Declaration public static Query Parse(string[] queries, string[] fields, Analyzer analyzer) Parameters Type Name Description System.String [] queries Queries strings to parse System.String [] fields Fields to search on Analyzer analyzer Analyzer to use Returns Type Description Query | Improve this Doc View Source Parse(String[], String[], Occur[], Analyzer) Parses a query, searching on the fields specified. Use this if you need to specify certain fields as required, and others as prohibited. Usage: string[] query = {\"query1\", \"query2\", \"query3\"}; string[] fields = {\"filename\", \"contents\", \"description\"}; Occur[] flags = {Occur.SHOULD, Occur.MUST, Occur.MUST_NOT}; MultiFieldQueryParser.Parse(query, fields, flags, analyzer); The code above would construct a query: (filename:query1) +(contents:query2) -(description:query3) Declaration public static Query Parse(string[] queries, string[] fields, Occur[] flags, Analyzer analyzer) Parameters Type Name Description System.String [] queries Queries string to parse System.String [] fields Fields to search on Occur [] flags Flags describing the fields Analyzer analyzer Analyzer to use Returns Type Description Query"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.StandardQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.StandardQueryParser.html",
    "title": "Class StandardQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardQueryParser This class is a helper that enables users to easily use the Lucene query parser. To construct a Query object from a query string, use the Parse(String, String) method: StandardQueryParser queryParserHelper = new StandardQueryParser(); Query query = queryParserHelper.Parse(\"a AND b\", \"defaultField\"); To change any configuration before parsing the query string do, for example: // the query config handler returned by StandardQueryParser is a // StandardQueryConfigHandler queryParserHelper.QueryConfigHandler.Analyzer = new WhitespaceAnalyzer(); The syntax for query strings is as follows (copied from the old QueryParser javadoc): A Query is a series of clauses. A clause may be prefixed by: a plus ( + ) or a minus ( - ) sign, indicating that the clause is required or prohibited respectively; or a term followed by a colon, indicating the field to be searched. This enables one to construct queries which search multiple fields. A clause may be either: a term, indicating all the documents that contain this term; or a nested query, enclosed in parentheses. Note that this may be used with a + / - prefix to require any of a set of terms. Thus, in BNF, the query grammar is: Query ::= ( Clause )* Clause ::= [\"+\", \"-\"] [<TERM> \":\"] ( <TERM> | \"(\" Query \")\" ) Examples of appropriately formatted queries can be found in the query syntax documentation. The text parser used by this helper is a StandardSyntaxParser . The query node processor used by this helper is a StandardQueryNodeProcessorPipeline . The builder used by this helper is a StandardQueryTreeBuilder . Inheritance System.Object QueryParserHelper < Query > StandardQueryParser PrecedenceQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParserHelper<Query>.QueryNodeProcessor QueryParserHelper<Query>.SetQueryNodeProcessor(IQueryNodeProcessor) QueryParserHelper<Query>.SetSyntaxParser(ISyntaxParser) QueryParserHelper<Query>.SetQueryBuilder(IQueryBuilder<Query>) QueryParserHelper<Query>.QueryConfigHandler QueryParserHelper<Query>.QueryBuilder QueryParserHelper<Query>.SyntaxParser QueryParserHelper<Query>.SetQueryConfigHandler(QueryConfigHandler) Namespace : Lucene.Net.QueryParsers.Flexible.Standard Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardQueryParser : QueryParserHelper<Query>, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source StandardQueryParser() Constructs a StandardQueryParser object. Declaration public StandardQueryParser() | Improve this Doc View Source StandardQueryParser(Analyzer) Constructs a StandardQueryParser object and sets an to it. The same as: StandardQueryParser qp = new StandardQueryParser(); qp.QueryConfigHandler.Analyzer = analyzer; Declaration public StandardQueryParser(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer the analyzer to be used by this query parser helper Properties | Improve this Doc View Source AllowLeadingWildcard Set to true to allow leading wildcard characters. When set, * or ? are allowed as the first character of a and . Note that this can produce very slow queries on big indexes. Default: false. Declaration public virtual bool AllowLeadingWildcard { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Analyzer Declaration public virtual Analyzer Analyzer { get; set; } Property Value Type Description Analyzer | Improve this Doc View Source DateResolution Gets the default used for certain field when no is defined for this field. Declaration public virtual DateTools.Resolution DateResolution { get; } Property Value Type Description DateTools.Resolution | Improve this Doc View Source DateResolutionMap Gets or Sets the field to map used to normalize each date field. Declaration public virtual IDictionary<string, DateTools.Resolution?> DateResolutionMap { get; set; } Property Value Type Description IDictionary < System.String , System.Nullable < DateTools.Resolution >> | Improve this Doc View Source DefaultOperator Gets or Sets the boolean operator of the QueryParser. In default mode ( OR ) terms without any modifiers are considered optional: for example capital of Hungary is equal to capital OR of OR Hungary . In AND mode terms are considered to be in conjunction: the above mentioned query is parsed as capital AND of AND Hungary Declaration public virtual StandardQueryConfigHandler.Operator DefaultOperator { get; set; } Property Value Type Description StandardQueryConfigHandler.Operator | Improve this Doc View Source EnablePositionIncrements Set to true to enable position increments in result query. When set, result phrase and multi-phrase queries will be aware of position increments. Useful when e.g. a StopFilter increases the position increment of the token that follows an omitted token. Default: false. Declaration public virtual bool EnablePositionIncrements { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source FieldsBoost Gets or Sets the field to boost map used to set boost for each field. Declaration public virtual IDictionary<string, float?> FieldsBoost { get; set; } Property Value Type Description IDictionary < System.String , System.Nullable < System.Single >> | Improve this Doc View Source FuzzyMinSim Gets or Sets the minimum similarity for fuzzy queries. Default is defined on . Declaration public virtual float FuzzyMinSim { get; set; } Property Value Type Description System.Single | Improve this Doc View Source FuzzyPrefixLength Gets or Sets the prefix length for fuzzy queries. Default is 0. Declaration public virtual int FuzzyPrefixLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Locale Gets or Sets current locale, allowing access by subclasses. Used by date range parsing Declaration public virtual CultureInfo Locale { get; set; } Property Value Type Description CultureInfo | Improve this Doc View Source LowercaseExpandedTerms Set to true to allow leading wildcard characters. When set, * or ? are allowed as the first character of a and . Note that this can produce very slow queries on big indexes. Default: false. Declaration public virtual bool LowercaseExpandedTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MultiTermRewriteMethod By default, it uses when creating a prefix, wildcard and range queries. This implementation is generally preferable because it a) Runs faster b) Does not have the scarcity of terms unduly influence score c) avoids any Exception due to too many listeners. However, if your application really needs to use the old-fashioned boolean queries expansion rewriting and the above points are not relevant then use this change the rewrite method. Declaration public virtual MultiTermQuery.RewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source NumericConfigMap Declaration public virtual IDictionary<string, NumericConfig> NumericConfigMap { get; set; } Property Value Type Description IDictionary < System.String , NumericConfig > | Improve this Doc View Source PhraseSlop Gets or Sets the default slop for phrases. If zero, then exact phrase matches are required. Default value is zero. NOTE: Setter is deprecated. Declaration public virtual int PhraseSlop { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TimeZone Declaration public virtual TimeZoneInfo TimeZone { get; set; } Property Value Type Description TimeZoneInfo Methods | Improve this Doc View Source GetMultiFields() Returns the fields used to expand the query when the field for a certain query is null Declaration public virtual string[] GetMultiFields() Returns Type Description System.String [] the fields used to expand the query | Improve this Doc View Source Parse(String, String) Overrides Parse(String, String) so it casts the return object to . For more reference about this method, check Parse(String, String) . Declaration public override Query Parse(string query, string defaultField) Parameters Type Name Description System.String query the query string System.String defaultField the default field used by the text parser Returns Type Description Query the object built from the query Overrides Lucene.Net.QueryParsers.Flexible.Core.QueryParserHelper<Query>.Parse(System.String, System.String) Exceptions Type Condition QueryNodeException if something wrong happens along the three phases | Improve this Doc View Source SetDateResolution(DateTools.Resolution) Sets the default used for certain field when no is defined for this field. Declaration public virtual void SetDateResolution(DateTools.Resolution dateResolution) Parameters Type Name Description DateTools.Resolution dateResolution the default | Improve this Doc View Source SetDateResolution(IDictionary<String, Nullable<DateTools.Resolution>>) Sets the used for each field Declaration public virtual void SetDateResolution(IDictionary<string, DateTools.Resolution?> dateRes) Parameters Type Name Description IDictionary < System.String , System.Nullable < DateTools.Resolution >> dateRes a collection that maps a field to its | Improve this Doc View Source SetDefaultPhraseSlop(Int32) Sets the default slop for phrases. If zero, then exact phrase matches are required. Default value is zero. Declaration public virtual void SetDefaultPhraseSlop(int defaultPhraseSlop) Parameters Type Name Description System.Int32 defaultPhraseSlop | Improve this Doc View Source SetMultiFields(String[]) Set the fields a query should be expanded to when the field is null Declaration public virtual void SetMultiFields(string[] fields) Parameters Type Name Description System.String [] fields the fields used to expand the query | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Implements ICommonQueryParserConfiguration See Also StandardQueryParser StandardQueryConfigHandler StandardSyntaxParser StandardQueryNodeProcessorPipeline StandardQueryTreeBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.html",
    "title": "Namespace Lucene.Net.QueryParsers.Simple | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Simple <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> A simple query parser for human-entered queries. Classes SimpleQueryParser SimpleQueryParser is used to parse human readable query syntax. The main idea behind this parser is that a person should be able to type whatever they want to represent a query, and this parser will do its best to interpret what to search for no matter how poorly composed the request may be. Tokens are considered to be any of a term, phrase, or subquery for the operations described below. Whitespace including ' ' '\\n' '\\r' and '\\t' and certain operators may be used to delimit tokens ( ) + | \" . Any errors in query syntax will be ignored and the parser will attempt to decipher what it can; however, this may mean odd or unexpected results. Query Operators ' + ' specifies AND operation: token1+token2 ' | ' specifies OR operation: token1|token2 ' - ' negates a single token: -token0 ' \" ' creates phrases of terms: \"term1 term2 ...\" ' ' at the end of terms specifies prefix query: term ' ~ N' at the end of terms specifies fuzzy query: term~1 ' ~ N' at the end of phrases specifies near query: \"term1 term2\"~5 ' ( ' and ' ) ' specifies precedence: token1 + (token2 | token3) The default operator is OR if no other operator is specified. For example, the following will OR token1 and token2 together: token1 token2 Normal operator precedence will be simple order from right to left. For example, the following will evaluate token1 OR token2 first, then AND with token3 : token1 | token2 + token3 Escaping An individual term may contain any possible character with certain characters requiring escaping using a ' </code>'. The following characters will need to be escaped in terms and phrases: + | \" ( ) ' </code> The ' - ' operator is a special case. On individual terms (not phrases) the first character of a term that is - must be escaped; however, any ' - ' characters beyond the first character do not need to be escaped. For example: -term1 -- Specifies NOT operation against term1 -term1 -- Searches for the term -term1 . term-1 -- Searches for the term term-1 . term-1 -- Searches for the term term-1 . The ' ' operator is a special case. On individual terms (not phrases) the last character of a term that is ' ' must be escaped; however, any ' ' characters before the last character do not need to be escaped: term1 -- Searches for the prefix term1 term1* -- Searches for the term term1 term1 -- Searches for the term term 1 term*1 -- Searches for the term term1 Note that above examples consider the terms before text processing. Enums Operator"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.Operator.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.Operator.html",
    "title": "Enum Operator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Operator Namespace : Lucene.Net.QueryParsers.Simple Assembly : Lucene.Net.QueryParser.dll Syntax public enum Operator : int Fields Name Description AND_OPERATOR Enables AND operator (+) ESCAPE_OPERATOR Enables ESCAPE operator () FUZZY_OPERATOR Enables FUZZY operators: (~) on single terms NEAR_OPERATOR Enables NEAR operators: (~) on phrases NOT_OPERATOR Enables NOT operator (-) OR_OPERATOR Enables OR operator (|) PHRASE_OPERATOR Enables PHRASE operator (\") PRECEDENCE_OPERATORS Enables PRECEDENCE operators: ( and ) PREFIX_OPERATOR Enables PREFIX operator (*) WHITESPACE_OPERATOR Enables WHITESPACE operators: ' ' '\\n' '\\r' '\\t'"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.SimpleQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.SimpleQueryParser.html",
    "title": "Class SimpleQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleQueryParser SimpleQueryParser is used to parse human readable query syntax. The main idea behind this parser is that a person should be able to type whatever they want to represent a query, and this parser will do its best to interpret what to search for no matter how poorly composed the request may be. Tokens are considered to be any of a term, phrase, or subquery for the operations described below. Whitespace including ' ' '\\n' '\\r' and '\\t' and certain operators may be used to delimit tokens ( ) + | \" . Any errors in query syntax will be ignored and the parser will attempt to decipher what it can; however, this may mean odd or unexpected results. Query Operators ' + ' specifies AND operation: token1+token2 ' | ' specifies OR operation: token1|token2 ' - ' negates a single token: -token0 ' \" ' creates phrases of terms: \"term1 term2 ...\" ' ' at the end of terms specifies prefix query: term ' ~ N' at the end of terms specifies fuzzy query: term~1 ' ~ N' at the end of phrases specifies near query: \"term1 term2\"~5 ' ( ' and ' ) ' specifies precedence: token1 + (token2 | token3) The default operator is OR if no other operator is specified. For example, the following will OR token1 and token2 together: token1 token2 Normal operator precedence will be simple order from right to left. For example, the following will evaluate token1 OR token2 first, then AND with token3 : token1 | token2 + token3 Escaping An individual term may contain any possible character with certain characters requiring escaping using a ' </code>'. The following characters will need to be escaped in terms and phrases: + | \" ( ) ' </code> The ' - ' operator is a special case. On individual terms (not phrases) the first character of a term that is - must be escaped; however, any ' - ' characters beyond the first character do not need to be escaped. For example: -term1 -- Specifies NOT operation against term1 -term1 -- Searches for the term -term1 . term-1 -- Searches for the term term-1 . term-1 -- Searches for the term term-1 . The ' ' operator is a special case. On individual terms (not phrases) the last character of a term that is ' ' must be escaped; however, any ' ' characters before the last character do not need to be escaped: term1 -- Searches for the prefix term1 term1* -- Searches for the term term1 term1 -- Searches for the term term 1 term*1 -- Searches for the term term1 Note that above examples consider the terms before text processing. Inheritance System.Object SimpleQueryParser Namespace : Lucene.Net.QueryParsers.Simple Assembly : Lucene.Net.QueryParser.dll Syntax public class SimpleQueryParser : QueryBuilder Constructors | Improve this Doc View Source SimpleQueryParser(Analyzer, IDictionary<String, Single>) Creates a new parser searching over multiple fields with different weights. Declaration public SimpleQueryParser(Analyzer analyzer, IDictionary<string, float> weights) Parameters Type Name Description Analyzer analyzer IDictionary < System.String , System.Single > weights | Improve this Doc View Source SimpleQueryParser(Analyzer, IDictionary<String, Single>, Operator) Creates a new parser with custom flags used to enable/disable certain features. Declaration public SimpleQueryParser(Analyzer analyzer, IDictionary<string, float> weights, Operator flags) Parameters Type Name Description Analyzer analyzer IDictionary < System.String , System.Single > weights Operator flags | Improve this Doc View Source SimpleQueryParser(Analyzer, String) Creates a new parser searching over a single field. Declaration public SimpleQueryParser(Analyzer analyzer, string field) Parameters Type Name Description Analyzer analyzer System.String field Fields | Improve this Doc View Source m_flags flags to the parser (to turn features on/off) Declaration protected readonly Operator m_flags Field Value Type Description Operator | Improve this Doc View Source m_weights Map of fields to query against with their weights Declaration protected readonly IDictionary<string, float> m_weights Field Value Type Description IDictionary < System.String , System.Single > Properties | Improve this Doc View Source DefaultOperator Gets or Sets the implicit operator setting, which will be either or . Declaration public virtual Occur DefaultOperator { get; set; } Property Value Type Description Occur Methods | Improve this Doc View Source NewDefaultQuery(String) Factory method to generate a standard query (no phrase or prefix operators). Declaration protected virtual Query NewDefaultQuery(string text) Parameters Type Name Description System.String text Returns Type Description Query | Improve this Doc View Source NewFuzzyQuery(String, Int32) Factory method to generate a fuzzy query. Declaration protected virtual Query NewFuzzyQuery(string text, int fuzziness) Parameters Type Name Description System.String text System.Int32 fuzziness Returns Type Description Query | Improve this Doc View Source NewPhraseQuery(String, Int32) Factory method to generate a phrase query with slop. Declaration protected virtual Query NewPhraseQuery(string text, int slop) Parameters Type Name Description System.String text System.Int32 slop Returns Type Description Query | Improve this Doc View Source NewPrefixQuery(String) Factory method to generate a prefix query. Declaration protected virtual Query NewPrefixQuery(string text) Parameters Type Name Description System.String text Returns Type Description Query | Improve this Doc View Source Parse(String) Parses the query text and returns parsed query (or null if empty) Declaration public Query Parse(string queryText) Parameters Type Name Description System.String queryText Returns Type Description Query | Improve this Doc View Source Simplify(BooleanQuery) Helper to simplify boolean queries with 0 or 1 clause Declaration protected virtual Query Simplify(BooleanQuery bq) Parameters Type Name Description BooleanQuery bq Returns Type Description Query"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.FastCharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.FastCharStream.html",
    "title": "Class FastCharStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's API. Inheritance System.Object FastCharStream Implements ICharStream Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class FastCharStream : object, ICharStream Constructors | Improve this Doc View Source FastCharStream(System.IO.TextReader) Constructs from a . Declaration public FastCharStream(System.IO.TextReader r) Parameters Type Name Description System.IO.TextReader r Properties | Improve this Doc View Source BeginColumn Declaration public int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Declaration public int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Declaration public int Column { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn Declaration public int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Declaration public int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Image Declaration public string Image { get; } Property Value Type Description System.String | Improve this Doc View Source Line Declaration public int Line { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source BackUp(Int32) Declaration public void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Declaration public char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() Declaration public void Done() | Improve this Doc View Source GetSuffix(Int32) Declaration public char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Declaration public char ReadChar() Returns Type Description System.Char Implements ICharStream"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.html",
    "title": "Namespace Lucene.Net.QueryParsers.Surround.Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Surround.Parser <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> This package contains the QueryParser.jj source file for the Surround parser. Parsing the text of a query results in a SrndQuery in the org.apache.lucene.queryparser.surround.query package. Classes FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's API. LexicalToken ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method GenerateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. QueryParser This class is generated by JavaCC. The only method that clients should need to call is Parse(String) . This parser generates queries that make use of position information (Span queries). It provides positional operators ( w and n ) that accept a numeric distance, as well as boolean operators ( and , or , and not , wildcards ( /// and ? ), quoting (with \" ), and boosting (via ^ ). The operators (W, N, AND, OR, NOT) can be expressed lower-cased or upper-cased, and the non-unary operators (everything but NOT) support both infix (a AND b AND c) and prefix AND(a, b, c) notation. The W and N operators express a positional relationship among their operands. N is ordered, and W is unordered. The distance is 1 by default, meaning the operands are adjacent, or may be provided as a prefix from 2-99. So, for example, 3W(a, b) means that terms a and b must appear within three positions of each other, or in other words, up to two terms may appear between a and b. QueryParserConstants Token literal values and constants. Generated by org.javacc.parser.OtherFilesGen#start() QueryParserTokenManager Token Manager. RegexpToken Token Describes the input token stream. TokenMgrError Token Manager Error. Interfaces ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.ICharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.ICharStream.html",
    "title": "Interface ICharStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation. Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public interface ICharStream Properties | Improve this Doc View Source BeginColumn Returns the column number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Returns the line number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Returns the column position of the character last read. Declaration int Column { get; } Property Value Type Description System.Int32 See Also EndColumn | Improve this Doc View Source EndColumn Returns the column number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Returns the line number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Image Returns a string made up of characters from the marked token beginning to the current buffer position. Implementations have the choice of returning anything that they want to. For example, for efficiency, one might decide to just return null, which is a valid implementation. Declaration string Image { get; } Property Value Type Description System.String | Improve this Doc View Source Line Returns the line number of the character last read. Declaration int Line { get; } Property Value Type Description System.Int32 See Also EndLine Methods | Improve this Doc View Source BackUp(Int32) Backs up the input stream by amount steps. Lexer calls this method if it had already read some characters, but could not use them to match a (longer) token. So, they will be used again as the prefix of the next token and it is the implemetation's responsibility to do this right. Declaration void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Returns the next character that marks the beginning of the next token. All characters must remain in the buffer between two successive calls to this method to implement BackUp(Int32) correctly. Declaration char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() The lexer calls this function to indicate that it is done with the stream and hence implementations can free any resources held by this class. Again, the body of this function can be just empty and it will not affect the lexer's operation. Declaration void Done() | Improve this Doc View Source GetSuffix(Int32) Returns an array of characters that make up the suffix of length 'len' for the currently matched token. This is used to build up the matched string for use in actions in the case of MORE. A simple and inefficient implementation of this is as follows : { string t = Image; return t.Substring(t.Length - len, len).ToCharArray(); } Declaration char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Returns the next character from the selected input. The method of selecting the input is the responsibility of the class implementing this interface. Can throw any . Declaration char ReadChar() Returns Type Description System.Char"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.LexicalToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.LexicalToken.html",
    "title": "Class LexicalToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LexicalToken Inheritance System.Object LexicalToken Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class LexicalToken : object Fields | Improve this Doc View Source Boost Lexical state. Declaration public const int Boost = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT Lexical state. Declaration public const int DEFAULT = null Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.ParseException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.ParseException.html",
    "title": "Class ParseException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method GenerateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. Inheritance System.Object ParseException Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class ParseException : Exception Constructors | Improve this Doc View Source ParseException() Declaration public ParseException() | Improve this Doc View Source ParseException(Token, Int32[][], String[]) This constructor is used by the method \"GenerateParseException\" in the generated parser. Calling this constructor generates a new object of this type with the fields currentToken , expectedTokenSequences , and tokenImage set. Declaration public ParseException(Token currentToken, int[][] expectedTokenSequences, string[] tokenImage) Parameters Type Name Description Token currentToken System.Int32 [][] expectedTokenSequences System.String [] tokenImage | Improve this Doc View Source ParseException(String) Declaration public ParseException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source ParseException(String, Exception) Declaration public ParseException(string message, Exception innerException) Parameters Type Name Description System.String message Exception innerException Fields | Improve this Doc View Source eol The end of line string for this machine. Declaration protected static string eol Field Value Type Description System.String Properties | Improve this Doc View Source CurrentToken This is the last token that has been consumed successfully. If this object has been created due to a parse error, the token following this token will (therefore) be the first error token. Declaration public Token CurrentToken { get; set; } Property Value Type Description Token | Improve this Doc View Source ExpectedTokenSequences Each entry in this array is an array of integers. Each array of integers represents a sequence of tokens (by their ordinal values) that is expected at this point of the parse. Declaration public int[][] ExpectedTokenSequences { get; set; } Property Value Type Description System.Int32 [][] | Improve this Doc View Source TokenImage This is a reference to the \"tokenImage\" array of the generated parser within which the parse error occurred. This array is defined in the generated ...Constants interface. Declaration public string[] TokenImage { get; set; } Property Value Type Description System.String []"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParser.html",
    "title": "Class QueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParser This class is generated by JavaCC. The only method that clients should need to call is Parse(String) . This parser generates queries that make use of position information (Span queries). It provides positional operators ( w and n ) that accept a numeric distance, as well as boolean operators ( and , or , and not , wildcards ( /// and ? ), quoting (with \" ), and boosting (via ^ ). The operators (W, N, AND, OR, NOT) can be expressed lower-cased or upper-cased, and the non-unary operators (everything but NOT) support both infix (a AND b AND c) and prefix AND(a, b, c) notation. The W and N operators express a positional relationship among their operands. N is ordered, and W is unordered. The distance is 1 by default, meaning the operands are adjacent, or may be provided as a prefix from 2-99. So, for example, 3W(a, b) means that terms a and b must appear within three positions of each other, or in other words, up to two terms may appear between a and b. Inheritance System.Object QueryParser Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParser : object Constructors | Improve this Doc View Source QueryParser() Declaration public QueryParser() | Improve this Doc View Source QueryParser(ICharStream) Constructor with user supplied ICharStream . Declaration public QueryParser(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source QueryParser(QueryParserTokenManager) Constructor with generated Token Manager. Declaration public QueryParser(QueryParserTokenManager tm) Parameters Type Name Description QueryParserTokenManager tm Properties | Improve this Doc View Source Jj_nt Next token. Declaration public Token Jj_nt { get; set; } Property Value Type Description Token | Improve this Doc View Source Token Current token. Declaration public Token Token { get; set; } Property Value Type Description Token | Improve this Doc View Source TokenSource Generated Token Manager. Declaration public QueryParserTokenManager TokenSource { get; set; } Property Value Type Description QueryParserTokenManager Methods | Improve this Doc View Source AllowedSuffix(String) Declaration protected virtual bool AllowedSuffix(string suffixed) Parameters Type Name Description System.String suffixed Returns Type Description System.Boolean | Improve this Doc View Source AllowedTruncation(String) Declaration protected virtual bool AllowedTruncation(string truncated) Parameters Type Name Description System.String truncated Returns Type Description System.Boolean | Improve this Doc View Source AndQuery() Declaration public SrndQuery AndQuery() Returns Type Description SrndQuery | Improve this Doc View Source CheckDistanceSubQueries(DistanceQuery, String) Declaration protected static void CheckDistanceSubQueries(DistanceQuery distq, string opName) Parameters Type Name Description DistanceQuery distq System.String opName | Improve this Doc View Source Disable_tracing() Disable tracing. Declaration public void Disable_tracing() | Improve this Doc View Source Enable_tracing() Enable tracing. Declaration public void Enable_tracing() | Improve this Doc View Source FieldsQuery() Declaration public SrndQuery FieldsQuery() Returns Type Description SrndQuery | Improve this Doc View Source FieldsQueryList() Declaration public IList<SrndQuery> FieldsQueryList() Returns Type Description IList < SrndQuery > | Improve this Doc View Source GenerateParseException() Generate ParseException. Declaration public virtual ParseException GenerateParseException() Returns Type Description ParseException | Improve this Doc View Source GetAndQuery(IList<SrndQuery>, Boolean, Token) Declaration protected virtual SrndQuery GetAndQuery(IList<SrndQuery> queries, bool infix, Token andToken) Parameters Type Name Description IList < SrndQuery > queries System.Boolean infix Token andToken Returns Type Description SrndQuery | Improve this Doc View Source GetDistanceQuery(IList<SrndQuery>, Boolean, Token, Boolean) Declaration protected virtual SrndQuery GetDistanceQuery(IList<SrndQuery> queries, bool infix, Token dToken, bool ordered) Parameters Type Name Description IList < SrndQuery > queries System.Boolean infix Token dToken System.Boolean ordered Returns Type Description SrndQuery | Improve this Doc View Source GetFieldsQuery(SrndQuery, IList<String>) Declaration protected virtual SrndQuery GetFieldsQuery(SrndQuery q, IList<string> fieldNames) Parameters Type Name Description SrndQuery q IList < System.String > fieldNames Returns Type Description SrndQuery | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public Token GetNextToken() Returns Type Description Token | Improve this Doc View Source GetNotQuery(IList<SrndQuery>, Token) Declaration protected virtual SrndQuery GetNotQuery(IList<SrndQuery> queries, Token notToken) Parameters Type Name Description IList < SrndQuery > queries Token notToken Returns Type Description SrndQuery | Improve this Doc View Source GetOpDistance(String) Declaration protected static int GetOpDistance(string distanceOp) Parameters Type Name Description System.String distanceOp Returns Type Description System.Int32 | Improve this Doc View Source GetOrQuery(IList<SrndQuery>, Boolean, Token) Declaration protected virtual SrndQuery GetOrQuery(IList<SrndQuery> queries, bool infix, Token orToken) Parameters Type Name Description IList < SrndQuery > queries System.Boolean infix Token orToken Returns Type Description SrndQuery | Improve this Doc View Source GetPrefixQuery(String, Boolean) Declaration protected virtual SrndQuery GetPrefixQuery(string prefix, bool quoted) Parameters Type Name Description System.String prefix System.Boolean quoted Returns Type Description SrndQuery | Improve this Doc View Source GetTermQuery(String, Boolean) Declaration protected virtual SrndQuery GetTermQuery(string term, bool quoted) Parameters Type Name Description System.String term System.Boolean quoted Returns Type Description SrndQuery | Improve this Doc View Source GetToken(Int32) Get the specific Token. Declaration public Token GetToken(int index) Parameters Type Name Description System.Int32 index Returns Type Description Token | Improve this Doc View Source GetTruncQuery(String) Declaration protected virtual SrndQuery GetTruncQuery(string truncated) Parameters Type Name Description System.String truncated Returns Type Description SrndQuery | Improve this Doc View Source NotQuery() Declaration public SrndQuery NotQuery() Returns Type Description SrndQuery | Improve this Doc View Source NQuery() Declaration public SrndQuery NQuery() Returns Type Description SrndQuery | Improve this Doc View Source OptionalFields() Declaration public IList<string> OptionalFields() Returns Type Description IList < System.String > | Improve this Doc View Source OptionalWeights(SrndQuery) Declaration public void OptionalWeights(SrndQuery q) Parameters Type Name Description SrndQuery q | Improve this Doc View Source OrQuery() Declaration public SrndQuery OrQuery() Returns Type Description SrndQuery | Improve this Doc View Source Parse(String) Declaration public static SrndQuery Parse(string query) Parameters Type Name Description System.String query Returns Type Description SrndQuery | Improve this Doc View Source Parse2(String) Declaration public virtual SrndQuery Parse2(string query) Parameters Type Name Description System.String query Returns Type Description SrndQuery | Improve this Doc View Source PrefixOperatorQuery() Declaration public SrndQuery PrefixOperatorQuery() Returns Type Description SrndQuery | Improve this Doc View Source PrimaryQuery() Declaration public SrndQuery PrimaryQuery() Returns Type Description SrndQuery | Improve this Doc View Source ReInit(ICharStream) Reinitialize. Declaration public virtual void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(QueryParserTokenManager) Reinitialize. Declaration public virtual void ReInit(QueryParserTokenManager tm) Parameters Type Name Description QueryParserTokenManager tm | Improve this Doc View Source SimpleTerm() Declaration public SrndQuery SimpleTerm() Returns Type Description SrndQuery | Improve this Doc View Source TopSrndQuery() Declaration public SrndQuery TopSrndQuery() Returns Type Description SrndQuery | Improve this Doc View Source WQuery() Declaration public SrndQuery WQuery() Returns Type Description SrndQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParserConstants.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParserConstants.html",
    "title": "Class QueryParserConstants | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserConstants Token literal values and constants. Generated by org.javacc.parser.OtherFilesGen#start() Inheritance System.Object QueryParserConstants Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class QueryParserConstants : object Fields | Improve this Doc View Source TokenImage Literal token values. Declaration public static string[] TokenImage Field Value Type Description System.String []"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParserTokenManager.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParserTokenManager.html",
    "title": "Class QueryParserTokenManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserTokenManager Token Manager. Inheritance System.Object QueryParserTokenManager Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParserTokenManager : object Constructors | Improve this Doc View Source QueryParserTokenManager(ICharStream) Constructor. Declaration public QueryParserTokenManager(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source QueryParserTokenManager(ICharStream, Int32) Constructor. Declaration public QueryParserTokenManager(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState Fields | Improve this Doc View Source jjnewLexState Lex State array. Declaration public static readonly int[] jjnewLexState Field Value Type Description System.Int32 [] | Improve this Doc View Source jjstrLiteralImages Token literal values. Declaration public static readonly string[] jjstrLiteralImages Field Value Type Description System.String [] | Improve this Doc View Source lexStateNames Lexer state names. Declaration public static readonly string[] lexStateNames Field Value Type Description System.String [] | Improve this Doc View Source m_curChar Declaration protected char m_curChar Field Value Type Description System.Char | Improve this Doc View Source m_input_stream Declaration protected ICharStream m_input_stream Field Value Type Description ICharStream Methods | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public virtual Token GetNextToken() Returns Type Description Token | Improve this Doc View Source JjFillToken() Declaration protected Token JjFillToken() Returns Type Description Token | Improve this Doc View Source ReInit(ICharStream) Reinitialize parser. Declaration public void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(ICharStream, Int32) Reinitialize parser. Declaration public void ReInit(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState | Improve this Doc View Source SetDebugStream(TextWriter) Set debug output. Declaration public virtual void SetDebugStream(TextWriter ds) Parameters Type Name Description TextWriter ds | Improve this Doc View Source SwitchTo(Int32) Switch to specified lex state. Declaration public void SwitchTo(int lexState) Parameters Type Name Description System.Int32 lexState"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.RegexpToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.RegexpToken.html",
    "title": "Class RegexpToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RegexpToken Inheritance System.Object RegexpToken Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class RegexpToken : object Fields | Improve this Doc View Source AND RegularExpression Id. Declaration public const int AND = null Field Value Type Description System.Int32 | Improve this Doc View Source CARAT RegularExpression Id. Declaration public const int CARAT = null Field Value Type Description System.Int32 | Improve this Doc View Source COLON RegularExpression Id. Declaration public const int COLON = null Field Value Type Description System.Int32 | Improve this Doc View Source COMMA RegularExpression Id. Declaration public const int COMMA = null Field Value Type Description System.Int32 | Improve this Doc View Source DISTOP_NUM RegularExpression Id. Declaration public const int DISTOP_NUM = null Field Value Type Description System.Int32 | Improve this Doc View Source EOF End of File. Declaration public const int EOF = null Field Value Type Description System.Int32 | Improve this Doc View Source LPAREN RegularExpression Id. Declaration public const int LPAREN = null Field Value Type Description System.Int32 | Improve this Doc View Source N RegularExpression Id. Declaration public const int N = null Field Value Type Description System.Int32 | Improve this Doc View Source NOT RegularExpression Id. Declaration public const int NOT = null Field Value Type Description System.Int32 | Improve this Doc View Source NUM_CHAR RegularExpression Id. Declaration public const int NUM_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source NUMBER RegularExpression Id. Declaration public const int NUMBER = null Field Value Type Description System.Int32 | Improve this Doc View Source ONE_CHAR RegularExpression Id. Declaration public const int ONE_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source OR RegularExpression Id. Declaration public const int OR = null Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED RegularExpression Id. Declaration public const int QUOTED = null Field Value Type Description System.Int32 | Improve this Doc View Source RPAREN RegularExpression Id. Declaration public const int RPAREN = null Field Value Type Description System.Int32 | Improve this Doc View Source STAR RegularExpression Id. Declaration public const int STAR = null Field Value Type Description System.Int32 | Improve this Doc View Source SUFFIXTERM RegularExpression Id. Declaration public const int SUFFIXTERM = null Field Value Type Description System.Int32 | Improve this Doc View Source TERM RegularExpression Id. Declaration public const int TERM = null Field Value Type Description System.Int32 | Improve this Doc View Source TERM_CHAR RegularExpression Id. Declaration public const int TERM_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source TRUNCQUOTED RegularExpression Id. Declaration public const int TRUNCQUOTED = null Field Value Type Description System.Int32 | Improve this Doc View Source TRUNCTERM RegularExpression Id. Declaration public const int TRUNCTERM = null Field Value Type Description System.Int32 | Improve this Doc View Source W RegularExpression Id. Declaration public const int W = null Field Value Type Description System.Int32 | Improve this Doc View Source WHITESPACE RegularExpression Id. Declaration public const int WHITESPACE = null Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.Token.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Token Describes the input token stream. Inheritance System.Object Token Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class Token : object Constructors | Improve this Doc View Source Token() No-argument constructor Declaration public Token() | Improve this Doc View Source Token(Int32) Constructs a new token for the specified Image. Declaration public Token(int kind) Parameters Type Name Description System.Int32 kind | Improve this Doc View Source Token(Int32, String) Constructs a new token for the specified Image and Kind. Declaration public Token(int kind, string image) Parameters Type Name Description System.Int32 kind System.String image Properties | Improve this Doc View Source BeginColumn The column number of the first character of this Token. Declaration public int BeginColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine The line number of the first character of this Token. Declaration public int BeginLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn The column number of the last character of this Token. Declaration public int EndColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine The line number of the last character of this Token. Declaration public int EndLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Image The string image of the token. Declaration public string Image { get; set; } Property Value Type Description System.String | Improve this Doc View Source Kind An integer that describes the kind of this token. This numbering system is determined by JavaCCParser, and a table of these numbers is stored in the file ...Constants.java. Declaration public int Kind { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Next A reference to the next regular (non-special) token from the input stream. If this is the last token from the input stream, or if the token manager has not read tokens beyond this one, this field is set to null. This is true only if this token is also a regular token. Otherwise, see below for a description of the contents of this field. Declaration public Token Next { get; set; } Property Value Type Description Token | Improve this Doc View Source SpecialToken This field is used to access special tokens that occur prior to this token, but after the immediately preceding regular (non-special) token. If there are no such special tokens, this field is set to null. When there are more than one such special token, this field refers to the last of these special tokens, which in turn refers to the next previous special token through its specialToken field, and so on until the first special token (whose specialToken field is null). The next fields of special tokens refer to other special tokens that immediately follow it (without an intervening regular token). If there is no such token, this field is null. Declaration public Token SpecialToken { get; set; } Property Value Type Description Token | Improve this Doc View Source Value An optional attribute value of the Token. Tokens which are not used as syntactic sugar will often contain meaningful values that will be used later on by the compiler or interpreter. This attribute value is often different from the image. Any subclass of Token that actually wants to return a non-null value can override this method as appropriate. Declaration public virtual object Value { get; } Property Value Type Description System.Object Methods | Improve this Doc View Source NewToken(Int32) Declaration public static Token NewToken(int ofKind) Parameters Type Name Description System.Int32 ofKind Returns Type Description Token | Improve this Doc View Source NewToken(Int32, String) Returns a new Token object, by default. However, if you want, you can create and return subclass objects based on the value of ofKind. Simply add the cases to the switch for all those special cases. For example, if you have a subclass of Token called IDToken that you want to create if ofKind is ID, simply add something like : case MyParserConstants.ID : return new IDToken(ofKind, image); to the following switch statement. Then you can cast matchedToken variable to the appropriate type and use sit in your lexical actions. Declaration public static Token NewToken(int ofKind, string image) Parameters Type Name Description System.Int32 ofKind System.String image Returns Type Description Token | Improve this Doc View Source ToString() Returns the image. Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.TokenMgrError.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.TokenMgrError.html",
    "title": "Class TokenMgrError | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenMgrError Token Manager Error. Inheritance System.Object TokenMgrError Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class TokenMgrError : Exception Constructors | Improve this Doc View Source TokenMgrError() No arg constructor. Declaration public TokenMgrError() | Improve this Doc View Source TokenMgrError(Boolean, Int32, Int32, Int32, String, Char, Int32) Full Constructor. Declaration public TokenMgrError(bool EOFSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar, int reason) Parameters Type Name Description System.Boolean EOFSeen System.Int32 lexState System.Int32 errorLine System.Int32 errorColumn System.String errorAfter System.Char curChar System.Int32 reason | Improve this Doc View Source TokenMgrError(String, Int32) Constructor with message and reason. Declaration public TokenMgrError(string message, int reason) Parameters Type Name Description System.String message System.Int32 reason Properties | Improve this Doc View Source Message You can also modify the body of this method to customize your error messages. For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not of end-users concern, so you can return something like : \"Internal Error : Please file a bug report .... \" from this method for such cases in the release version of your parser. Declaration public override string Message { get; } Property Value Type Description System.String Methods | Improve this Doc View Source AddEscapes(String) Replaces unprintable characters by their escaped (or unicode escaped) equivalents in the given string Declaration protected static string AddEscapes(string str) Parameters Type Name Description System.String str Returns Type Description System.String | Improve this Doc View Source LexicalError(Boolean, Int32, Int32, Int32, String, Char) Returns a detailed message for the Error when it is thrown by the token manager to indicate a lexical error. Declaration protected static string LexicalError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar) Parameters Type Name Description System.Boolean eofSeen indicates if EOF caused the lexical error System.Int32 lexState lexical state in which this error occurred System.Int32 errorLine line number when the error occurred System.Int32 errorColumn column number when the error occurred System.String errorAfter prefix that was seen before this error occurred System.Char curChar the offending character Returns Type Description System.String Detailed error message Remarks You can customize the lexical error message by modifying this method."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.AndQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.AndQuery.html",
    "title": "Class AndQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AndQuery Factory for conjunctions Inheritance System.Object SrndQuery ComposedQuery AndQuery Inherited Members ComposedQuery.Recompose(IList<SrndQuery>) ComposedQuery.m_opName ComposedQuery.OperatorName ComposedQuery.m_queries ComposedQuery.GetSubQueriesEnumerator() ComposedQuery.NrSubQueries ComposedQuery.GetSubQuery(Int32) ComposedQuery.IsOperatorInfix ComposedQuery.MakeLuceneSubQueriesField(String, BasicQueryFactory) ComposedQuery.ToString() ComposedQuery.PrefixSeparator ComposedQuery.BracketOpen ComposedQuery.BracketClose ComposedQuery.InfixToString(StringBuilder) ComposedQuery.PrefixToString(StringBuilder) ComposedQuery.IsFieldsSubQueryAcceptable SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class AndQuery : ComposedQuery Constructors | Improve this Doc View Source AndQuery(IList<SrndQuery>, Boolean, String) Declaration public AndQuery(IList<SrndQuery> queries, bool inf, string opName) Parameters Type Name Description IList < SrndQuery > queries System.Boolean inf System.String opName Methods | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Search.Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Search.Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.BasicQueryFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.BasicQueryFactory.html",
    "title": "Class BasicQueryFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicQueryFactory Factory for creating basic term queries Inheritance System.Object BasicQueryFactory Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class BasicQueryFactory : object Constructors | Improve this Doc View Source BasicQueryFactory() Declaration public BasicQueryFactory() | Improve this Doc View Source BasicQueryFactory(Int32) Declaration public BasicQueryFactory(int maxBasicQueries) Parameters Type Name Description System.Int32 maxBasicQueries Properties | Improve this Doc View Source MaxBasicQueries Declaration public virtual int MaxBasicQueries { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NrQueriesMade Declaration public virtual int NrQueriesMade { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CheckMax() Declaration protected virtual void CheckMax() | Improve this Doc View Source Equals(Object) Two BasicQueryFactory's are equal when they generate the same types of basic queries, or both cannot generate queries anymore. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source NewSpanTermQuery(Term) Declaration public virtual SpanTermQuery NewSpanTermQuery(Term term) Parameters Type Name Description Term term Returns Type Description SpanTermQuery | Improve this Doc View Source NewTermQuery(Term) Declaration public virtual TermQuery NewTermQuery(Term term) Parameters Type Name Description Term term Returns Type Description TermQuery | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.ComposedQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.ComposedQuery.html",
    "title": "Class ComposedQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ComposedQuery Base class for composite queries (such as AND/OR/NOT) Inheritance System.Object SrndQuery ComposedQuery AndQuery DistanceQuery NotQuery OrQuery Inherited Members SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class ComposedQuery : SrndQuery Constructors | Improve this Doc View Source ComposedQuery(IList<SrndQuery>, Boolean, String) Declaration public ComposedQuery(IList<SrndQuery> qs, bool operatorInfix, string opName) Parameters Type Name Description IList < SrndQuery > qs System.Boolean operatorInfix System.String opName Fields | Improve this Doc View Source m_opName Declaration protected string m_opName Field Value Type Description System.String | Improve this Doc View Source m_queries Declaration protected IList<SrndQuery> m_queries Field Value Type Description IList < SrndQuery > Properties | Improve this Doc View Source BracketClose Declaration protected virtual string BracketClose { get; } Property Value Type Description System.String | Improve this Doc View Source BracketOpen Declaration protected virtual string BracketOpen { get; } Property Value Type Description System.String | Improve this Doc View Source IsFieldsSubQueryAcceptable Declaration public override bool IsFieldsSubQueryAcceptable { get; } Property Value Type Description System.Boolean Overrides SrndQuery.IsFieldsSubQueryAcceptable | Improve this Doc View Source IsOperatorInfix Declaration public virtual bool IsOperatorInfix { get; } Property Value Type Description System.Boolean | Improve this Doc View Source NrSubQueries Declaration public virtual int NrSubQueries { get; } Property Value Type Description System.Int32 | Improve this Doc View Source OperatorName Declaration public virtual string OperatorName { get; } Property Value Type Description System.String | Improve this Doc View Source PrefixSeparator Declaration protected virtual string PrefixSeparator { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetSubQueriesEnumerator() Declaration public virtual IEnumerator<SrndQuery> GetSubQueriesEnumerator() Returns Type Description IEnumerator < SrndQuery > | Improve this Doc View Source GetSubQuery(Int32) Declaration public virtual SrndQuery GetSubQuery(int qn) Parameters Type Name Description System.Int32 qn Returns Type Description SrndQuery | Improve this Doc View Source InfixToString(StringBuilder) Declaration protected virtual void InfixToString(StringBuilder r) Parameters Type Name Description StringBuilder r | Improve this Doc View Source MakeLuceneSubQueriesField(String, BasicQueryFactory) Declaration public virtual IList<Search.Query> MakeLuceneSubQueriesField(string fn, BasicQueryFactory qf) Parameters Type Name Description System.String fn BasicQueryFactory qf Returns Type Description IList < Search.Query > | Improve this Doc View Source PrefixToString(StringBuilder) Declaration protected virtual void PrefixToString(StringBuilder r) Parameters Type Name Description StringBuilder r | Improve this Doc View Source Recompose(IList<SrndQuery>) Declaration protected virtual void Recompose(IList<SrndQuery> queries) Parameters Type Name Description IList < SrndQuery > queries | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SrndQuery.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.DistanceQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.DistanceQuery.html",
    "title": "Class DistanceQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DistanceQuery Factory for NEAR queries Inheritance System.Object SrndQuery ComposedQuery DistanceQuery Implements IDistanceSubQuery Inherited Members ComposedQuery.Recompose(IList<SrndQuery>) ComposedQuery.m_opName ComposedQuery.OperatorName ComposedQuery.m_queries ComposedQuery.GetSubQueriesEnumerator() ComposedQuery.NrSubQueries ComposedQuery.GetSubQuery(Int32) ComposedQuery.IsOperatorInfix ComposedQuery.MakeLuceneSubQueriesField(String, BasicQueryFactory) ComposedQuery.ToString() ComposedQuery.PrefixSeparator ComposedQuery.BracketOpen ComposedQuery.BracketClose ComposedQuery.InfixToString(StringBuilder) ComposedQuery.PrefixToString(StringBuilder) ComposedQuery.IsFieldsSubQueryAcceptable SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class DistanceQuery : ComposedQuery, IDistanceSubQuery Constructors | Improve this Doc View Source DistanceQuery(IList<SrndQuery>, Boolean, Int32, String, Boolean) Declaration public DistanceQuery(IList<SrndQuery> queries, bool infix, int opDistance, string opName, bool ordered) Parameters Type Name Description IList < SrndQuery > queries System.Boolean infix System.Int32 opDistance System.String opName System.Boolean ordered Properties | Improve this Doc View Source OpDistance Declaration public virtual int OpDistance { get; } Property Value Type Description System.Int32 | Improve this Doc View Source QueriesOrdered Declaration public virtual bool QueriesOrdered { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source AddSpanQueries(SpanNearClauseFactory) Declaration public virtual void AddSpanQueries(SpanNearClauseFactory sncf) Parameters Type Name Description SpanNearClauseFactory sncf | Improve this Doc View Source DistanceSubQueryNotAllowed() Declaration public virtual string DistanceSubQueryNotAllowed() Returns Type Description System.String | Improve this Doc View Source GetSpanNearQuery(IndexReader, String, Single, BasicQueryFactory) Declaration public virtual Search.Query GetSpanNearQuery(IndexReader reader, string fieldName, float boost, BasicQueryFactory qf) Parameters Type Name Description IndexReader reader System.String fieldName System.Single boost BasicQueryFactory qf Returns Type Description Search.Query | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Search.Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Search.Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Implements IDistanceSubQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.FieldsQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.FieldsQuery.html",
    "title": "Class FieldsQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldsQuery Forms an OR query of the provided query across multiple fields. Inheritance System.Object SrndQuery FieldsQuery Inherited Members SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldsQuery : SrndQuery Constructors | Improve this Doc View Source FieldsQuery(SrndQuery, IList<String>, Char) Declaration public FieldsQuery(SrndQuery q, IList<string> fieldNames, char fieldOp) Parameters Type Name Description SrndQuery q IList < System.String > fieldNames System.Char fieldOp | Improve this Doc View Source FieldsQuery(SrndQuery, String, Char) Declaration public FieldsQuery(SrndQuery q, string fieldName, char fieldOp) Parameters Type Name Description SrndQuery q System.String fieldName System.Char fieldOp Properties | Improve this Doc View Source FieldNames Declaration public virtual IList<string> FieldNames { get; } Property Value Type Description IList < System.String > | Improve this Doc View Source FieldOperator Declaration public virtual char FieldOperator { get; } Property Value Type Description System.Char | Improve this Doc View Source IsFieldsSubQueryAcceptable Declaration public override bool IsFieldsSubQueryAcceptable { get; } Property Value Type Description System.Boolean Overrides SrndQuery.IsFieldsSubQueryAcceptable Methods | Improve this Doc View Source FieldNamesToString(StringBuilder) Declaration protected virtual void FieldNamesToString(StringBuilder r) Parameters Type Name Description StringBuilder r | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Search.Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Search.Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) | Improve this Doc View Source MakeLuceneQueryNoBoost(BasicQueryFactory) Declaration public virtual Search.Query MakeLuceneQueryNoBoost(BasicQueryFactory qf) Parameters Type Name Description BasicQueryFactory qf Returns Type Description Search.Query | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SrndQuery.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.html",
    "title": "Namespace Lucene.Net.QueryParsers.Surround.Query | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Surround.Query <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> This package contains SrndQuery and its subclasses. The parser in the org.apache.lucene.queryparser.surround.parser package normally generates a SrndQuery. For searching an org.apache.lucene.search.Query is provided by the SrndQuery.makeLuceneQueryField method. For this, TermQuery, BooleanQuery and SpanQuery are used from Lucene. Classes AndQuery Factory for conjunctions BasicQueryFactory Factory for creating basic term queries ComposedQuery Base class for composite queries (such as AND/OR/NOT) DistanceQuery Factory for NEAR queries FieldsQuery Forms an OR query of the provided query across multiple fields. NotQuery Factory for prohibited clauses OrQuery Factory for disjunctions SimpleTerm Base class for queries that expand to sets of simple terms. SpanNearClauseFactory SpanNearClauseFactory: Operations: create for a field name and an indexreader. add a weighted Term - this should add a corresponding SpanTermQuery, or increase the weight of an existing one. add a weighted subquery SpanNearQuery create a clause for SpanNearQuery from the things added above. For this, create an array of SpanQuery's from the added ones. The clause normally is a SpanOrQuery over the added subquery SpanNearQuery the SpanTermQuery's for the added Term's When it is necessary to suppress double subqueries as much as possible: GetHashCode() and Equals() on unweighted SpanQuery are needed (possibly via GetTerms(), the terms are individually hashable). Idem SpanNearQuery: hash on the subqueries and the slop. Evt. merge SpanNearQuery's by adding the weights of the corresponding subqueries. To be determined: Are SpanQuery weights handled correctly during search by Lucene? Should the resulting SpanOrQuery be sorted? Could other SpanQueries be added for use in this factory: SpanOrQuery: in principle yes, but it only has access to it's terms via getTerms(); are the corresponding weights available? SpanFirstQuery: treat similar to subquery SpanNearQuery. (ok?) SpanNotQuery: treat similar to subquery SpanNearQuery. (ok?) Factory for SrndPrefixQuery Query that matches string prefixes SrndQuery Lowest level base class for surround queries SrndTermQuery Simple single-term clause SrndTruncQuery Query that matches wildcards TooManyBasicQueries Exception thrown when BasicQueryFactory would exceed the limit of query clauses. Interfaces IDistanceSubQuery Interface for queries that can be nested as subqueries into a span near. SimpleTerm.IMatchingTermVisitor Callback to visit each matching term during \"rewrite\" in VisitMatchingTerm(Term)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.IDistanceSubQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.IDistanceSubQuery.html",
    "title": "Interface IDistanceSubQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDistanceSubQuery Interface for queries that can be nested as subqueries into a span near. Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public interface IDistanceSubQuery Methods | Improve this Doc View Source AddSpanQueries(SpanNearClauseFactory) Declaration void AddSpanQueries(SpanNearClauseFactory sncf) Parameters Type Name Description SpanNearClauseFactory sncf | Improve this Doc View Source DistanceSubQueryNotAllowed() When DistanceSubQueryNotAllowed() returns non null, the reason why the subquery is not allowed as a distance subquery is returned. When DistanceSubQueryNotAllowed() returns null AddSpanQueries(SpanNearClauseFactory) can be used in the creation of the span near clause for the subquery. Declaration string DistanceSubQueryNotAllowed() Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.NotQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.NotQuery.html",
    "title": "Class NotQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NotQuery Factory for prohibited clauses Inheritance System.Object SrndQuery ComposedQuery NotQuery Inherited Members ComposedQuery.Recompose(IList<SrndQuery>) ComposedQuery.m_opName ComposedQuery.OperatorName ComposedQuery.m_queries ComposedQuery.GetSubQueriesEnumerator() ComposedQuery.NrSubQueries ComposedQuery.GetSubQuery(Int32) ComposedQuery.IsOperatorInfix ComposedQuery.MakeLuceneSubQueriesField(String, BasicQueryFactory) ComposedQuery.ToString() ComposedQuery.PrefixSeparator ComposedQuery.BracketOpen ComposedQuery.BracketClose ComposedQuery.InfixToString(StringBuilder) ComposedQuery.PrefixToString(StringBuilder) ComposedQuery.IsFieldsSubQueryAcceptable SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class NotQuery : ComposedQuery Constructors | Improve this Doc View Source NotQuery(IList<SrndQuery>, String) Declaration public NotQuery(IList<SrndQuery> queries, string opName) Parameters Type Name Description IList < SrndQuery > queries System.String opName Methods | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Search.Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Search.Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.OrQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.OrQuery.html",
    "title": "Class OrQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OrQuery Factory for disjunctions Inheritance System.Object SrndQuery ComposedQuery OrQuery Implements IDistanceSubQuery Inherited Members ComposedQuery.Recompose(IList<SrndQuery>) ComposedQuery.m_opName ComposedQuery.OperatorName ComposedQuery.m_queries ComposedQuery.GetSubQueriesEnumerator() ComposedQuery.NrSubQueries ComposedQuery.GetSubQuery(Int32) ComposedQuery.IsOperatorInfix ComposedQuery.MakeLuceneSubQueriesField(String, BasicQueryFactory) ComposedQuery.ToString() ComposedQuery.PrefixSeparator ComposedQuery.BracketOpen ComposedQuery.BracketClose ComposedQuery.InfixToString(StringBuilder) ComposedQuery.PrefixToString(StringBuilder) ComposedQuery.IsFieldsSubQueryAcceptable SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class OrQuery : ComposedQuery, IDistanceSubQuery Constructors | Improve this Doc View Source OrQuery(IList<SrndQuery>, Boolean, String) Declaration public OrQuery(IList<SrndQuery> queries, bool infix, string opName) Parameters Type Name Description IList < SrndQuery > queries System.Boolean infix System.String opName Methods | Improve this Doc View Source AddSpanQueries(SpanNearClauseFactory) Declaration public virtual void AddSpanQueries(SpanNearClauseFactory sncf) Parameters Type Name Description SpanNearClauseFactory sncf | Improve this Doc View Source DistanceSubQueryNotAllowed() Declaration public virtual string DistanceSubQueryNotAllowed() Returns Type Description System.String | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Search.Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Search.Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Implements IDistanceSubQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SimpleTerm.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SimpleTerm.html",
    "title": "Class SimpleTerm | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTerm Base class for queries that expand to sets of simple terms. Inheritance System.Object SrndQuery SimpleTerm SrndPrefixQuery SrndTermQuery SrndTruncQuery Implements IDistanceSubQuery IComparable < SimpleTerm > Inherited Members SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.IsFieldsSubQueryAcceptable SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class SimpleTerm : SrndQuery, IDistanceSubQuery, IComparable<SimpleTerm> Constructors | Improve this Doc View Source SimpleTerm(Boolean) Declaration public SimpleTerm(bool q) Parameters Type Name Description System.Boolean q Properties | Improve this Doc View Source FieldOperator Declaration public virtual string FieldOperator { get; } Property Value Type Description System.String | Improve this Doc View Source Quote Declaration public virtual string Quote { get; } Property Value Type Description System.String Methods | Improve this Doc View Source AddSpanQueries(SpanNearClauseFactory) Declaration public virtual void AddSpanQueries(SpanNearClauseFactory sncf) Parameters Type Name Description SpanNearClauseFactory sncf | Improve this Doc View Source CompareTo(SimpleTerm) Declaration public int CompareTo(SimpleTerm ost) Parameters Type Name Description SimpleTerm ost Returns Type Description System.Int32 | Improve this Doc View Source DistanceSubQueryNotAllowed() Declaration public virtual string DistanceSubQueryNotAllowed() Returns Type Description System.String | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Search.Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Search.Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) | Improve this Doc View Source SuffixToString(StringBuilder) Declaration protected virtual void SuffixToString(StringBuilder r) Parameters Type Name Description StringBuilder r | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SrndQuery.ToString() | Improve this Doc View Source ToStringUnquoted() Declaration public abstract string ToStringUnquoted() Returns Type Description System.String | Improve this Doc View Source VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Declaration public abstract void VisitMatchingTerms(IndexReader reader, string fieldName, SimpleTerm.IMatchingTermVisitor mtv) Parameters Type Name Description IndexReader reader System.String fieldName SimpleTerm.IMatchingTermVisitor mtv Implements IDistanceSubQuery IComparable<>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SimpleTerm.IMatchingTermVisitor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SimpleTerm.IMatchingTermVisitor.html",
    "title": "Interface SimpleTerm.IMatchingTermVisitor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface SimpleTerm.IMatchingTermVisitor Callback to visit each matching term during \"rewrite\" in VisitMatchingTerm(Term) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public interface IMatchingTermVisitor Methods | Improve this Doc View Source VisitMatchingTerm(Term) Declaration void VisitMatchingTerm(Term t) Parameters Type Name Description Term t"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SpanNearClauseFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SpanNearClauseFactory.html",
    "title": "Class SpanNearClauseFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanNearClauseFactory SpanNearClauseFactory: Operations: create for a field name and an indexreader. add a weighted Term - this should add a corresponding SpanTermQuery, or increase the weight of an existing one. add a weighted subquery SpanNearQuery create a clause for SpanNearQuery from the things added above. For this, create an array of SpanQuery's from the added ones. The clause normally is a SpanOrQuery over the added subquery SpanNearQuery the SpanTermQuery's for the added Term's When it is necessary to suppress double subqueries as much as possible: GetHashCode() and Equals() on unweighted SpanQuery are needed (possibly via GetTerms(), the terms are individually hashable). Idem SpanNearQuery: hash on the subqueries and the slop. Evt. merge SpanNearQuery's by adding the weights of the corresponding subqueries. To be determined: Are SpanQuery weights handled correctly during search by Lucene? Should the resulting SpanOrQuery be sorted? Could other SpanQueries be added for use in this factory: SpanOrQuery: in principle yes, but it only has access to it's terms via getTerms(); are the corresponding weights available? SpanFirstQuery: treat similar to subquery SpanNearQuery. (ok?) SpanNotQuery: treat similar to subquery SpanNearQuery. (ok?) Factory for Inheritance System.Object SpanNearClauseFactory Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanNearClauseFactory : object Constructors | Improve this Doc View Source SpanNearClauseFactory(IndexReader, String, BasicQueryFactory) Declaration public SpanNearClauseFactory(IndexReader reader, string fieldName, BasicQueryFactory qf) Parameters Type Name Description IndexReader reader System.String fieldName BasicQueryFactory qf Properties | Improve this Doc View Source BasicQueryFactory Declaration public virtual BasicQueryFactory BasicQueryFactory { get; } Property Value Type Description BasicQueryFactory | Improve this Doc View Source Count Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source FieldName Declaration public virtual string FieldName { get; } Property Value Type Description System.String | Improve this Doc View Source IndexReader Declaration public virtual IndexReader IndexReader { get; } Property Value Type Description IndexReader Methods | Improve this Doc View Source AddSpanQuery(Search.Query) Declaration public virtual void AddSpanQuery(Search.Query q) Parameters Type Name Description Search.Query q | Improve this Doc View Source AddSpanQueryWeighted(SpanQuery, Single) Declaration protected virtual void AddSpanQueryWeighted(SpanQuery sq, float weight) Parameters Type Name Description SpanQuery sq System.Single weight | Improve this Doc View Source AddTermWeighted(Term, Single) Declaration public virtual void AddTermWeighted(Term t, float weight) Parameters Type Name Description Term t System.Single weight | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source MakeSpanClause() Declaration public virtual SpanQuery MakeSpanClause() Returns Type Description SpanQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndPrefixQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndPrefixQuery.html",
    "title": "Class SrndPrefixQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SrndPrefixQuery Query that matches string prefixes Inheritance System.Object SrndQuery SimpleTerm SrndPrefixQuery Implements IDistanceSubQuery IComparable < SimpleTerm > Inherited Members SimpleTerm.Quote SimpleTerm.FieldOperator SimpleTerm.CompareTo(SimpleTerm) SimpleTerm.ToString() SimpleTerm.DistanceSubQueryNotAllowed() SimpleTerm.AddSpanQueries(SpanNearClauseFactory) SimpleTerm.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.IsFieldsSubQueryAcceptable SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class SrndPrefixQuery : SimpleTerm, IDistanceSubQuery, IComparable<SimpleTerm> Constructors | Improve this Doc View Source SrndPrefixQuery(String, Boolean, Char) Declaration public SrndPrefixQuery(string prefix, bool quoted, char truncator) Parameters Type Name Description System.String prefix System.Boolean quoted System.Char truncator Properties | Improve this Doc View Source Prefix Declaration public virtual string Prefix { get; } Property Value Type Description System.String | Improve this Doc View Source SuffixOperator Declaration public virtual char SuffixOperator { get; } Property Value Type Description System.Char Methods | Improve this Doc View Source GetLucenePrefixTerm(String) Declaration public virtual Term GetLucenePrefixTerm(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Term | Improve this Doc View Source SuffixToString(StringBuilder) Declaration protected override void SuffixToString(StringBuilder r) Parameters Type Name Description StringBuilder r Overrides SimpleTerm.SuffixToString(StringBuilder) | Improve this Doc View Source ToStringUnquoted() Declaration public override string ToStringUnquoted() Returns Type Description System.String Overrides SimpleTerm.ToStringUnquoted() | Improve this Doc View Source VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Declaration public override void VisitMatchingTerms(IndexReader reader, string fieldName, SimpleTerm.IMatchingTermVisitor mtv) Parameters Type Name Description IndexReader reader System.String fieldName SimpleTerm.IMatchingTermVisitor mtv Overrides SimpleTerm.VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Implements IDistanceSubQuery IComparable<>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndQuery.html",
    "title": "Class SrndQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SrndQuery Lowest level base class for surround queries Inheritance System.Object SrndQuery ComposedQuery FieldsQuery SimpleTerm Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class SrndQuery : object Fields | Improve this Doc View Source TheEmptyLcnQuery An empty Lucene query Declaration public static readonly Search.Query TheEmptyLcnQuery Field Value Type Description Search.Query Properties | Improve this Doc View Source IsFieldsSubQueryAcceptable Declaration public virtual bool IsFieldsSubQueryAcceptable { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsWeighted Declaration public virtual bool IsWeighted { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Weight Declaration public virtual float Weight { get; set; } Property Value Type Description System.Single | Improve this Doc View Source WeightOperator Declaration public virtual string WeightOperator { get; } Property Value Type Description System.String | Improve this Doc View Source WeightString Declaration public virtual string WeightString { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Clone() Shallow clone. Subclasses must override this if they need to clone any members deeply, Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Equals(Object) For subclasses of SrndQuery within the namespace Lucene.Net.QueryParsers.Surround.Query it is not necessary to override this method, ToString() Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() For subclasses of SrndQuery within the namespace Lucene.Net.QueryParsers.Surround.Query it is not necessary to override this method, ToString() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source MakeLuceneQueryField(String, BasicQueryFactory) Declaration public virtual Search.Query MakeLuceneQueryField(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Search.Query | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public abstract Search.Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Search.Query | Improve this Doc View Source ToString() This method is used by GetHashCode() and , see LUCENE-2945. Declaration public abstract override string ToString() Returns Type Description System.String | Improve this Doc View Source WeightToString(StringBuilder) Declaration protected virtual void WeightToString(StringBuilder r) Parameters Type Name Description StringBuilder r"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndTermQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndTermQuery.html",
    "title": "Class SrndTermQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SrndTermQuery Simple single-term clause Inheritance System.Object SrndQuery SimpleTerm SrndTermQuery Implements IDistanceSubQuery IComparable < SimpleTerm > Inherited Members SimpleTerm.Quote SimpleTerm.FieldOperator SimpleTerm.CompareTo(SimpleTerm) SimpleTerm.SuffixToString(StringBuilder) SimpleTerm.ToString() SimpleTerm.DistanceSubQueryNotAllowed() SimpleTerm.AddSpanQueries(SpanNearClauseFactory) SimpleTerm.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.IsFieldsSubQueryAcceptable SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class SrndTermQuery : SimpleTerm, IDistanceSubQuery, IComparable<SimpleTerm> Constructors | Improve this Doc View Source SrndTermQuery(String, Boolean) Declaration public SrndTermQuery(string termText, bool quoted) Parameters Type Name Description System.String termText System.Boolean quoted Properties | Improve this Doc View Source TermText Declaration public virtual string TermText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetLuceneTerm(String) Declaration public virtual Term GetLuceneTerm(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Term | Improve this Doc View Source ToStringUnquoted() Declaration public override string ToStringUnquoted() Returns Type Description System.String Overrides SimpleTerm.ToStringUnquoted() | Improve this Doc View Source VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Declaration public override void VisitMatchingTerms(IndexReader reader, string fieldName, SimpleTerm.IMatchingTermVisitor mtv) Parameters Type Name Description IndexReader reader System.String fieldName SimpleTerm.IMatchingTermVisitor mtv Overrides SimpleTerm.VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Implements IDistanceSubQuery IComparable<>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndTruncQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndTruncQuery.html",
    "title": "Class SrndTruncQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SrndTruncQuery Query that matches wildcards Inheritance System.Object SrndQuery SimpleTerm SrndTruncQuery Implements IDistanceSubQuery IComparable < SimpleTerm > Inherited Members SimpleTerm.Quote SimpleTerm.FieldOperator SimpleTerm.CompareTo(SimpleTerm) SimpleTerm.SuffixToString(StringBuilder) SimpleTerm.ToString() SimpleTerm.DistanceSubQueryNotAllowed() SimpleTerm.AddSpanQueries(SpanNearClauseFactory) SimpleTerm.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.IsFieldsSubQueryAcceptable SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class SrndTruncQuery : SimpleTerm, IDistanceSubQuery, IComparable<SimpleTerm> Constructors | Improve this Doc View Source SrndTruncQuery(String, Char, Char) Declaration public SrndTruncQuery(string truncated, char unlimited, char mask) Parameters Type Name Description System.String truncated System.Char unlimited System.Char mask Properties | Improve this Doc View Source Truncated Declaration public virtual string Truncated { get; } Property Value Type Description System.String Methods | Improve this Doc View Source AppendRegExpForChar(Char, StringBuilder) Declaration protected virtual void AppendRegExpForChar(char c, StringBuilder re) Parameters Type Name Description System.Char c StringBuilder re | Improve this Doc View Source MatchingChar(Char) Declaration protected virtual bool MatchingChar(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source ToStringUnquoted() Declaration public override string ToStringUnquoted() Returns Type Description System.String Overrides SimpleTerm.ToStringUnquoted() | Improve this Doc View Source TruncatedToPrefixAndPattern() Declaration protected virtual void TruncatedToPrefixAndPattern() | Improve this Doc View Source VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Declaration public override void VisitMatchingTerms(IndexReader reader, string fieldName, SimpleTerm.IMatchingTermVisitor mtv) Parameters Type Name Description IndexReader reader System.String fieldName SimpleTerm.IMatchingTermVisitor mtv Overrides SimpleTerm.VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Implements IDistanceSubQuery IComparable<>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.TooManyBasicQueries.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.TooManyBasicQueries.html",
    "title": "Class TooManyBasicQueries | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TooManyBasicQueries Exception thrown when BasicQueryFactory would exceed the limit of query clauses. Inheritance System.Object TooManyBasicQueries Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class TooManyBasicQueries : System.IO.IOException Constructors | Improve this Doc View Source TooManyBasicQueries(Int32) Declaration public TooManyBasicQueries(int maxBasicQueries) Parameters Type Name Description System.Int32 maxBasicQueries"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BooleanFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BooleanFilterBuilder.html",
    "title": "Class BooleanFilterBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanFilterBuilder Builder for BooleanFilter Inheritance System.Object BooleanFilterBuilder Implements IFilterBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanFilterBuilder : object, IFilterBuilder Constructors | Improve this Doc View Source BooleanFilterBuilder(IFilterBuilder) Declaration public BooleanFilterBuilder(IFilterBuilder factory) Parameters Type Name Description IFilterBuilder factory Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BooleanQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BooleanQueryBuilder.html",
    "title": "Class BooleanQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanQueryBuilder Builder for Inheritance System.Object BooleanQueryBuilder Implements IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanQueryBuilder : object, IQueryBuilder Constructors | Improve this Doc View Source BooleanQueryBuilder(IQueryBuilder) Declaration public BooleanQueryBuilder(IQueryBuilder factory) Parameters Type Name Description IQueryBuilder factory Methods | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BoostingQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BoostingQueryBuilder.html",
    "title": "Class BoostingQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostingQueryBuilder Builder for BoostingQuery Inheritance System.Object BoostingQueryBuilder Implements IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostingQueryBuilder : object, IQueryBuilder Constructors | Improve this Doc View Source BoostingQueryBuilder(IQueryBuilder) Declaration public BoostingQueryBuilder(IQueryBuilder factory) Parameters Type Name Description IQueryBuilder factory Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BoostingTermBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BoostingTermBuilder.html",
    "title": "Class BoostingTermBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostingTermBuilder Builder for Inheritance System.Object SpanBuilderBase BoostingTermBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostingTermBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.CachedFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.CachedFilterBuilder.html",
    "title": "Class CachedFilterBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CachedFilterBuilder Filters are cached in an LRU Cache keyed on the contained query or filter object. Using this will speed up overall performance for repeated uses of the same expensive query/filter. The sorts of queries/filters likely to benefit from caching need not necessarily be complex - e.g. simple TermQuerys with a large DF (document frequency) can be expensive on large indexes. A good example of this might be a term query on a field with only 2 possible values - \"true\" or \"false\". In a large index, querying or filtering on this field requires reading millions of document ids from disk which can more usefully be cached as a filter bitset. For Queries/Filters to be cached and reused the object must implement hashcode and equals methods correctly so that duplicate queries/filters can be detected in the cache. The CoreParser.maxNumCachedFilters property can be used to control the size of the LRU Cache established during the construction of CoreParser instances. Inheritance System.Object CachedFilterBuilder Implements IFilterBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class CachedFilterBuilder : object, IFilterBuilder Constructors | Improve this Doc View Source CachedFilterBuilder(QueryBuilderFactory, FilterBuilderFactory, Int32) Declaration public CachedFilterBuilder(QueryBuilderFactory queryFactory, FilterBuilderFactory filterFactory, int cacheSize) Parameters Type Name Description QueryBuilderFactory queryFactory FilterBuilderFactory filterFactory System.Int32 cacheSize Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.ConstantScoreQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.ConstantScoreQueryBuilder.html",
    "title": "Class ConstantScoreQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstantScoreQueryBuilder Builder for Inheritance System.Object ConstantScoreQueryBuilder Implements IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class ConstantScoreQueryBuilder : object, IQueryBuilder Constructors | Improve this Doc View Source ConstantScoreQueryBuilder(FilterBuilderFactory) Declaration public ConstantScoreQueryBuilder(FilterBuilderFactory filterFactory) Parameters Type Name Description FilterBuilderFactory filterFactory Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.DisjunctionMaxQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.DisjunctionMaxQueryBuilder.html",
    "title": "Class DisjunctionMaxQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DisjunctionMaxQueryBuilder Builder for Inheritance System.Object DisjunctionMaxQueryBuilder Implements IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class DisjunctionMaxQueryBuilder : object, IQueryBuilder Constructors | Improve this Doc View Source DisjunctionMaxQueryBuilder(IQueryBuilder) Declaration public DisjunctionMaxQueryBuilder(IQueryBuilder factory) Parameters Type Name Description IQueryBuilder factory Methods | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.DuplicateFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.DuplicateFilterBuilder.html",
    "title": "Class DuplicateFilterBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DuplicateFilterBuilder Builder for DuplicateFilter Inheritance System.Object DuplicateFilterBuilder Implements IFilterBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class DuplicateFilterBuilder : object, IFilterBuilder Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.FilteredQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.FilteredQueryBuilder.html",
    "title": "Class FilteredQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteredQueryBuilder Builder for Inheritance System.Object FilteredQueryBuilder Implements IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class FilteredQueryBuilder : object, IQueryBuilder Constructors | Improve this Doc View Source FilteredQueryBuilder(IFilterBuilder, IQueryBuilder) Declaration public FilteredQueryBuilder(IFilterBuilder filterFactory, IQueryBuilder queryFactory) Parameters Type Name Description IFilterBuilder filterFactory IQueryBuilder queryFactory Methods | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.FuzzyLikeThisQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.FuzzyLikeThisQueryBuilder.html",
    "title": "Class FuzzyLikeThisQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyLikeThisQueryBuilder Builder for FuzzyLikeThisQuery Inheritance System.Object FuzzyLikeThisQueryBuilder Implements IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyLikeThisQueryBuilder : object, IQueryBuilder Constructors | Improve this Doc View Source FuzzyLikeThisQueryBuilder(Analyzer) Declaration public FuzzyLikeThisQueryBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.html",
    "title": "Namespace Lucene.Net.QueryParsers.Xml.Builders | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Xml.Builders <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> XML Parser factories for different Lucene Query/Filters. Classes BooleanFilterBuilder Builder for BooleanFilter BooleanQueryBuilder Builder for BoostingQueryBuilder Builder for BoostingQuery BoostingTermBuilder Builder for CachedFilterBuilder Filters are cached in an LRU Cache keyed on the contained query or filter object. Using this will speed up overall performance for repeated uses of the same expensive query/filter. The sorts of queries/filters likely to benefit from caching need not necessarily be complex - e.g. simple TermQuerys with a large DF (document frequency) can be expensive on large indexes. A good example of this might be a term query on a field with only 2 possible values - \"true\" or \"false\". In a large index, querying or filtering on this field requires reading millions of document ids from disk which can more usefully be cached as a filter bitset. For Queries/Filters to be cached and reused the object must implement hashcode and equals methods correctly so that duplicate queries/filters can be detected in the cache. The CoreParser.maxNumCachedFilters property can be used to control the size of the LRU Cache established during the construction of CoreParser instances. ConstantScoreQueryBuilder Builder for DisjunctionMaxQueryBuilder Builder for DuplicateFilterBuilder Builder for DuplicateFilter FilteredQueryBuilder Builder for FuzzyLikeThisQueryBuilder Builder for FuzzyLikeThisQuery LikeThisQueryBuilder Builder for MoreLikeThisQuery MatchAllDocsQueryBuilder Builder for NumericRangeFilterBuilder Creates a . The table below specifies the required attributes and the defaults if optional attributes are omitted. For more detail on what each of the attributes actually do, consult the documentation for : Attribute nameValuesRequiredDefault fieldNameStringYesN/A lowerTermSpecified by type YesN/A upperTermSpecified by type YesN/A typeint, long, float, doubleNoint includeLowertrue, falseNotrue includeUppertrue, falseNotrue precisionStepintNo4 If an error occurs parsing the supplied lowerTerm or upperTerm into the numeric type specified by type , then the error will be silently ignored and the resulting filter will not match any documents. NumericRangeQueryBuilder Creates a . The table below specifies the required attributes and the defaults if optional attributes are omitted. For more detail on what each of the attributes actually do, consult the documentation for : Attribute nameValuesRequiredDefault fieldNameStringYesN/A lowerTermSpecified by type YesN/A upperTermSpecified by type YesN/A typeint, long, float, doubleNoint includeLowertrue, falseNotrue includeUppertrue, falseNotrue precisionStepintNo4 A ParserException will be thrown if an error occurs parsing the supplied lowerTerm or upperTerm into the numeric type specified by type . RangeFilterBuilder Builder for SpanBuilderBase Base class for building s SpanFirstBuilder Builder for SpanNearBuilder Builder for SpanNotBuilder Builder for SpanOrBuilder Builder for SpanOrTermsBuilder Builder that analyzes the text into a SpanQueryBuilderFactory Factory for ISpanQueryBuilder s SpanTermBuilder Builder for TermQueryBuilder Builder for TermsFilterBuilder Builder for TermsFilter TermsQueryBuilder Builds a from all of the terms found in the XML element using the choice of analyzer UserInputQueryBuilder UserInputQueryBuilder uses 1 of 2 strategies for thread-safe parsing: 1) Synchronizing access to \"Parse\" calls on a previously supplied QueryParser or.. 2) creating a new QueryParser object for each parse request Interfaces ISpanQueryBuilder Interface for retrieving a"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.ISpanQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.ISpanQueryBuilder.html",
    "title": "Interface ISpanQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISpanQueryBuilder Interface for retrieving a Inherited Members IQueryBuilder.GetQuery(XmlElement) Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public interface ISpanQueryBuilder : IQueryBuilder Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description SpanQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.LikeThisQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.LikeThisQueryBuilder.html",
    "title": "Class LikeThisQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LikeThisQueryBuilder Builder for MoreLikeThisQuery Inheritance System.Object LikeThisQueryBuilder Implements IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class LikeThisQueryBuilder : object, IQueryBuilder Constructors | Improve this Doc View Source LikeThisQueryBuilder(Analyzer, String[]) Declaration public LikeThisQueryBuilder(Analyzer analyzer, string[] defaultFieldNames) Parameters Type Name Description Analyzer analyzer System.String [] defaultFieldNames Methods | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.MatchAllDocsQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.MatchAllDocsQueryBuilder.html",
    "title": "Class MatchAllDocsQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchAllDocsQueryBuilder Builder for Inheritance System.Object MatchAllDocsQueryBuilder Implements IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchAllDocsQueryBuilder : object, IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.NumericRangeFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.NumericRangeFilterBuilder.html",
    "title": "Class NumericRangeFilterBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeFilterBuilder Creates a . The table below specifies the required attributes and the defaults if optional attributes are omitted. For more detail on what each of the attributes actually do, consult the documentation for : Attribute nameValuesRequiredDefault fieldNameStringYesN/A lowerTermSpecified by type YesN/A upperTermSpecified by type YesN/A typeint, long, float, doubleNoint includeLowertrue, falseNotrue includeUppertrue, falseNotrue precisionStepintNo4 If an error occurs parsing the supplied lowerTerm or upperTerm into the numeric type specified by type , then the error will be silently ignored and the resulting filter will not match any documents. Inheritance System.Object NumericRangeFilterBuilder Implements IFilterBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeFilterBuilder : object, IFilterBuilder Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Filter | Improve this Doc View Source SetStrictMode(Boolean) Specifies how this NumericRangeFilterBuilder will handle errors. If this is set to true, GetFilter(XmlElement) will throw a ParserException if it is unable to parse the lowerTerm or upperTerm into the appropriate numeric type. If this is set to false, then this exception will be silently ignored and the resulting filter will not match any documents. Defaults to false. Declaration public void SetStrictMode(bool strictMode) Parameters Type Name Description System.Boolean strictMode Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.NumericRangeQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.NumericRangeQueryBuilder.html",
    "title": "Class NumericRangeQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeQueryBuilder Creates a . The table below specifies the required attributes and the defaults if optional attributes are omitted. For more detail on what each of the attributes actually do, consult the documentation for : Attribute nameValuesRequiredDefault fieldNameStringYesN/A lowerTermSpecified by type YesN/A upperTermSpecified by type YesN/A typeint, long, float, doubleNoint includeLowertrue, falseNotrue includeUppertrue, falseNotrue precisionStepintNo4 A ParserException will be thrown if an error occurs parsing the supplied lowerTerm or upperTerm into the numeric type specified by type . Inheritance System.Object NumericRangeQueryBuilder Implements IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeQueryBuilder : object, IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.RangeFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.RangeFilterBuilder.html",
    "title": "Class RangeFilterBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RangeFilterBuilder Builder for Inheritance System.Object RangeFilterBuilder Implements IFilterBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class RangeFilterBuilder : object, IFilterBuilder Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanBuilderBase.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanBuilderBase.html",
    "title": "Class SpanBuilderBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanBuilderBase Base class for building s Inheritance System.Object SpanBuilderBase BoostingTermBuilder SpanFirstBuilder SpanNearBuilder SpanNotBuilder SpanOrBuilder SpanOrTermsBuilder SpanTermBuilder Implements ISpanQueryBuilder IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class SpanBuilderBase : object, ISpanQueryBuilder, IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query | Improve this Doc View Source GetSpanQuery(XmlElement) LUCENENET specific - must provide declaration of GetSpanQuery to satisfy contract of ISpanQueryBuilder Declaration public abstract SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description SpanQuery Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanFirstBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanFirstBuilder.html",
    "title": "Class SpanFirstBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanFirstBuilder Builder for Inheritance System.Object SpanBuilderBase SpanFirstBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanFirstBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanFirstBuilder(ISpanQueryBuilder) Declaration public SpanFirstBuilder(ISpanQueryBuilder factory) Parameters Type Name Description ISpanQueryBuilder factory Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanNearBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanNearBuilder.html",
    "title": "Class SpanNearBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanNearBuilder Builder for Inheritance System.Object SpanBuilderBase SpanNearBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanNearBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanNearBuilder(ISpanQueryBuilder) Declaration public SpanNearBuilder(ISpanQueryBuilder factory) Parameters Type Name Description ISpanQueryBuilder factory Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanNotBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanNotBuilder.html",
    "title": "Class SpanNotBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanNotBuilder Builder for Inheritance System.Object SpanBuilderBase SpanNotBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanNotBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanNotBuilder(ISpanQueryBuilder) Declaration public SpanNotBuilder(ISpanQueryBuilder factory) Parameters Type Name Description ISpanQueryBuilder factory Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanOrBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanOrBuilder.html",
    "title": "Class SpanOrBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanOrBuilder Builder for Inheritance System.Object SpanBuilderBase SpanOrBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanOrBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanOrBuilder(ISpanQueryBuilder) Declaration public SpanOrBuilder(ISpanQueryBuilder factory) Parameters Type Name Description ISpanQueryBuilder factory Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanOrTermsBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanOrTermsBuilder.html",
    "title": "Class SpanOrTermsBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanOrTermsBuilder Builder that analyzes the text into a Inheritance System.Object SpanBuilderBase SpanOrTermsBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanOrTermsBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanOrTermsBuilder(Analyzer) Declaration public SpanOrTermsBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanQueryBuilderFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanQueryBuilderFactory.html",
    "title": "Class SpanQueryBuilderFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanQueryBuilderFactory Factory for ISpanQueryBuilder s Inheritance System.Object SpanQueryBuilderFactory Implements ISpanQueryBuilder IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanQueryBuilderFactory : object, ISpanQueryBuilder, IQueryBuilder Methods | Improve this Doc View Source AddBuilder(String, ISpanQueryBuilder) Declaration public virtual void AddBuilder(string nodeName, ISpanQueryBuilder builder) Parameters Type Name Description System.String nodeName ISpanQueryBuilder builder | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public virtual SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description SpanQuery Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanTermBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanTermBuilder.html",
    "title": "Class SpanTermBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanTermBuilder Builder for Inheritance System.Object SpanBuilderBase SpanTermBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanTermBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermQueryBuilder.html",
    "title": "Class TermQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermQueryBuilder Builder for Inheritance System.Object TermQueryBuilder Implements IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class TermQueryBuilder : object, IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermsFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermsFilterBuilder.html",
    "title": "Class TermsFilterBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsFilterBuilder Builder for TermsFilter Inheritance System.Object TermsFilterBuilder Implements IFilterBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class TermsFilterBuilder : object, IFilterBuilder Constructors | Improve this Doc View Source TermsFilterBuilder(Analyzer) Declaration public TermsFilterBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Methods | Improve this Doc View Source GetFilter(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.FilterBuilder#process(org.w3c.dom.Element) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermsQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermsQueryBuilder.html",
    "title": "Class TermsQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsQueryBuilder Builds a from all of the terms found in the XML element using the choice of analyzer Inheritance System.Object TermsQueryBuilder Implements IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class TermsQueryBuilder : object, IQueryBuilder Constructors | Improve this Doc View Source TermsQueryBuilder(Analyzer) Declaration public TermsQueryBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.UserInputQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.UserInputQueryBuilder.html",
    "title": "Class UserInputQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UserInputQueryBuilder UserInputQueryBuilder uses 1 of 2 strategies for thread-safe parsing: 1) Synchronizing access to \"Parse\" calls on a previously supplied QueryParser or.. 2) creating a new QueryParser object for each parse request Inheritance System.Object UserInputQueryBuilder Implements IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class UserInputQueryBuilder : object, IQueryBuilder Constructors | Improve this Doc View Source UserInputQueryBuilder(QueryParser) This constructor has the disadvantage of not being able to change choice of default field name Declaration public UserInputQueryBuilder(QueryParser parser) Parameters Type Name Description QueryParser parser thread un-safe query parser | Improve this Doc View Source UserInputQueryBuilder(String, Analyzer) Declaration public UserInputQueryBuilder(string defaultField, Analyzer analyzer) Parameters Type Name Description System.String defaultField Analyzer analyzer Methods | Improve this Doc View Source CreateQueryParser(String, Analyzer) Method to create a QueryParser - designed to be overridden Declaration protected virtual QueryParser CreateQueryParser(string fieldName, Analyzer analyzer) Parameters Type Name Description System.String fieldName Analyzer analyzer Returns Type Description QueryParser QueryParser | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.CoreParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.CoreParser.html",
    "title": "Class CoreParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CoreParser Assembles a IQueryBuilder which uses only core Lucene Query objects Inheritance System.Object CoreParser CorePlusExtensionsParser Implements IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class CoreParser : object, IQueryBuilder Constructors | Improve this Doc View Source CoreParser(Analyzer, QueryParser) Construct an XML parser that uses a single instance QueryParser for handling UserQuery tags - all parse operations are synchronised on this parser Declaration public CoreParser(Analyzer analyzer, QueryParser parser) Parameters Type Name Description Analyzer analyzer QueryParser parser A QueryParser which will be synchronized on during parse calls. | Improve this Doc View Source CoreParser(String, Analyzer) Constructs an XML parser that creates a QueryParser for each UserQuery request. Declaration public CoreParser(string defaultField, Analyzer analyzer) Parameters Type Name Description System.String defaultField The default field name used by QueryParser s constructed for UserQuery tags Analyzer analyzer | Improve this Doc View Source CoreParser(String, Analyzer, QueryParser) Declaration protected CoreParser(string defaultField, Analyzer analyzer, QueryParser parser) Parameters Type Name Description System.String defaultField Analyzer analyzer QueryParser parser Fields | Improve this Doc View Source m_analyzer Declaration protected Analyzer m_analyzer Field Value Type Description Analyzer | Improve this Doc View Source m_filterFactory Declaration protected FilterBuilderFactory m_filterFactory Field Value Type Description FilterBuilderFactory | Improve this Doc View Source m_parser Declaration protected QueryParser m_parser Field Value Type Description QueryParser | Improve this Doc View Source m_queryFactory Declaration protected QueryBuilderFactory m_queryFactory Field Value Type Description QueryBuilderFactory | Improve this Doc View Source maxNumCachedFilters Declaration public static int maxNumCachedFilters Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddFilterBuilder(String, IFilterBuilder) Declaration public virtual void AddFilterBuilder(string nodeName, IFilterBuilder builder) Parameters Type Name Description System.String nodeName IFilterBuilder builder | Improve this Doc View Source AddQueryBuilder(String, IQueryBuilder) Declaration public virtual void AddQueryBuilder(string nodeName, IQueryBuilder builder) Parameters Type Name Description System.String nodeName IQueryBuilder builder | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query | Improve this Doc View Source Parse(Stream) Declaration public virtual Query Parse(Stream xmlStream) Parameters Type Name Description Stream xmlStream Returns Type Description Query | Improve this Doc View Source Parse(TextReader) Declaration public virtual Query Parse(TextReader xmlTextReader) Parameters Type Name Description TextReader xmlTextReader Returns Type Description Query | Improve this Doc View Source Parse(XmlDocument) Declaration public virtual Query Parse(XmlDocument xmlDocument) Parameters Type Name Description XmlDocument xmlDocument Returns Type Description Query | Improve this Doc View Source Parse(XmlReader) Declaration public virtual Query Parse(XmlReader xmlReader) Parameters Type Name Description XmlReader xmlReader Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.CorePlusExtensionsParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.CorePlusExtensionsParser.html",
    "title": "Class CorePlusExtensionsParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CorePlusExtensionsParser Assembles a which uses objects from Lucene's sandbox and queries modules in addition to core queries. Inheritance System.Object CoreParser CorePlusExtensionsParser Implements IQueryBuilder Inherited Members CoreParser.m_analyzer CoreParser.m_parser CoreParser.m_queryFactory CoreParser.m_filterFactory CoreParser.maxNumCachedFilters CoreParser.Parse(Stream) CoreParser.Parse(TextReader) CoreParser.Parse(XmlReader) CoreParser.Parse(XmlDocument) CoreParser.AddQueryBuilder(String, IQueryBuilder) CoreParser.AddFilterBuilder(String, IFilterBuilder) CoreParser.GetQuery(XmlElement) Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class CorePlusExtensionsParser : CoreParser, IQueryBuilder Constructors | Improve this Doc View Source CorePlusExtensionsParser(Analyzer, QueryParser) Construct an XML parser that uses a single instance QueryParser for handling UserQuery tags - all parse operations are synchronized on this parser Declaration public CorePlusExtensionsParser(Analyzer analyzer, QueryParser parser) Parameters Type Name Description Analyzer analyzer QueryParser parser A QueryParser which will be synchronized on during parse calls. | Improve this Doc View Source CorePlusExtensionsParser(String, Analyzer) Constructs an XML parser that creates a QueryParser for each UserQuery request. Declaration public CorePlusExtensionsParser(string defaultField, Analyzer analyzer) Parameters Type Name Description System.String defaultField The default field name used by QueryParser s constructed for UserQuery tags Analyzer analyzer Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.DOMUtils.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.DOMUtils.html",
    "title": "Class DOMUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DOMUtils Helper methods for parsing XML Inheritance System.Object DOMUtils Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class DOMUtils : object Methods | Improve this Doc View Source GetAttribute(XmlElement, String, Boolean) Declaration public static bool GetAttribute(XmlElement element, string attributeName, bool deflt) Parameters Type Name Description XmlElement element System.String attributeName System.Boolean deflt Returns Type Description System.Boolean | Improve this Doc View Source GetAttribute(XmlElement, String, Int32) Declaration public static int GetAttribute(XmlElement element, string attributeName, int deflt) Parameters Type Name Description XmlElement element System.String attributeName System.Int32 deflt Returns Type Description System.Int32 | Improve this Doc View Source GetAttribute(XmlElement, String, Single) Declaration public static float GetAttribute(XmlElement element, string attributeName, float deflt) Parameters Type Name Description XmlElement element System.String attributeName System.Single deflt Returns Type Description System.Single | Improve this Doc View Source GetAttribute(XmlElement, String, String) Declaration public static string GetAttribute(XmlElement element, string attributeName, string deflt) Parameters Type Name Description XmlElement element System.String attributeName System.String deflt Returns Type Description System.String | Improve this Doc View Source GetAttributeOrFail(XmlElement, String) Declaration public static string GetAttributeOrFail(XmlElement e, string name) Parameters Type Name Description XmlElement e System.String name Returns Type Description System.String | Improve this Doc View Source GetAttributeWithInheritance(XmlElement, String) Returns an attribute value from this node, or first parent node with this attribute defined Declaration public static string GetAttributeWithInheritance(XmlElement element, string attributeName) Parameters Type Name Description XmlElement element System.String attributeName Returns Type Description System.String A non-zero-length value if defined, otherwise null | Improve this Doc View Source GetAttributeWithInheritanceOrFail(XmlElement, String) Declaration public static string GetAttributeWithInheritanceOrFail(XmlElement e, string name) Parameters Type Name Description XmlElement e System.String name Returns Type Description System.String | Improve this Doc View Source GetChildByTagName(XmlElement, String) Convenience method where there is only one child of a given name Declaration public static XmlElement GetChildByTagName(XmlElement e, string name) Parameters Type Name Description XmlElement e System.String name Returns Type Description XmlElement | Improve this Doc View Source GetChildByTagOrFail(XmlElement, String) Declaration public static XmlElement GetChildByTagOrFail(XmlElement e, string name) Parameters Type Name Description XmlElement e System.String name Returns Type Description XmlElement | Improve this Doc View Source GetChildTextByTagName(XmlElement, String) Convenience method where there is only one child of a given name Declaration public static string GetChildTextByTagName(XmlElement e, string tagName) Parameters Type Name Description XmlElement e System.String tagName Returns Type Description System.String | Improve this Doc View Source GetFirstChildElement(XmlElement) Declaration public static XmlElement GetFirstChildElement(XmlElement element) Parameters Type Name Description XmlElement element Returns Type Description XmlElement | Improve this Doc View Source GetFirstChildOrFail(XmlElement) Declaration public static XmlElement GetFirstChildOrFail(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description XmlElement | Improve this Doc View Source GetNonBlankTextOrFail(XmlElement) Declaration public static string GetNonBlankTextOrFail(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description System.String | Improve this Doc View Source GetText(XmlNode) Declaration public static string GetText(XmlNode e) Parameters Type Name Description XmlNode e Returns Type Description System.String | Improve this Doc View Source InsertChild(XmlElement, String, String) Convenience method to append a new child with text Declaration public static XmlElement InsertChild(XmlElement parent, string tagName, string text) Parameters Type Name Description XmlElement parent System.String tagName System.String text Returns Type Description XmlElement | Improve this Doc View Source LoadXML(Stream) Helper method to parse an XML file into a DOM tree, given a . Declaration public static XmlDocument LoadXML(Stream input) Parameters Type Name Description Stream input reader of the XML file to be parsed Returns Type Description XmlDocument an object | Improve this Doc View Source LoadXML(TextReader) Helper method to parse an XML file into a DOM tree, given a . Declaration public static XmlDocument LoadXML(TextReader input) Parameters Type Name Description TextReader input reader of the XML file to be parsed Returns Type Description XmlDocument an object | Improve this Doc View Source LoadXML(XmlReader) Helper method to parse an XML file into a DOM tree, given an . Declaration public static XmlDocument LoadXML(XmlReader input) Parameters Type Name Description XmlReader input reader of the XML file to be parsed Returns Type Description XmlDocument an object"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.FilterBuilderFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.FilterBuilderFactory.html",
    "title": "Class FilterBuilderFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterBuilderFactory Factory for IFilterBuilder Inheritance System.Object FilterBuilderFactory Implements IFilterBuilder Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class FilterBuilderFactory : object, IFilterBuilder Methods | Improve this Doc View Source AddBuilder(String, IFilterBuilder) Declaration public virtual void AddBuilder(string nodeName, IFilterBuilder builder) Parameters Type Name Description System.String nodeName IFilterBuilder builder | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement n) Parameters Type Name Description XmlElement n Returns Type Description Filter | Improve this Doc View Source GetFilterBuilder(String) Declaration public virtual IFilterBuilder GetFilterBuilder(string nodeName) Parameters Type Name Description System.String nodeName Returns Type Description IFilterBuilder Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.html",
    "title": "Namespace Lucene.Net.QueryParsers.Xml | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Xml <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Parser that produces Lucene Query objects from XML streams. Classes CoreParser Assembles a IQueryBuilder which uses only core Lucene Query objects CorePlusExtensionsParser Assembles a which uses objects from Lucene's sandbox and queries modules in addition to core queries. DOMUtils Helper methods for parsing XML FilterBuilderFactory Factory for IFilterBuilder ParserException Thrown when the xml queryparser encounters invalid syntax/configuration. QueryBuilderFactory Factory for IQueryBuilder QueryTemplateManager Provides utilities for turning query form input (such as from a web page or Swing gui) into Lucene XML queries by using XSL templates. This approach offers a convenient way of externalizing and changing how user input is turned into Lucene queries. Database applications often adopt similar practices by externalizing SQL in template files that can be easily changed/optimized by a DBA. The static methods can be used on their own or by creating an instance of this class you can store and re-use compiled stylesheets for fast use (e.g. in a server environment) LUCENENET (.NET Core): This is not compiled this because .NET Standard does not currently support XSL Transform. Interfaces IFilterBuilder Interface for building s IQueryBuilder Implemented by objects that produce Lucene Query objects from XML streams. Implementations are expected to be thread-safe so that they can be used to simultaneously parse multiple XML documents."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.IFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.IFilterBuilder.html",
    "title": "Interface IFilterBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFilterBuilder Interface for building s Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public interface IFilterBuilder Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration Filter GetFilter(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Filter"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.IQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.IQueryBuilder.html",
    "title": "Interface IQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IQueryBuilder Implemented by objects that produce Lucene Query objects from XML streams. Implementations are expected to be thread-safe so that they can be used to simultaneously parse multiple XML documents. Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public interface IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration Query GetQuery(XmlElement e) Parameters Type Name Description XmlElement e Returns Type Description Query"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.ParserException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.ParserException.html",
    "title": "Class ParserException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParserException Thrown when the xml queryparser encounters invalid syntax/configuration. Inheritance System.Object ParserException Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class ParserException : Exception Constructors | Improve this Doc View Source ParserException() Declaration public ParserException() | Improve this Doc View Source ParserException(Exception) Declaration public ParserException(Exception cause) Parameters Type Name Description Exception cause | Improve this Doc View Source ParserException(String) Declaration public ParserException(String message) Parameters Type Name Description String message | Improve this Doc View Source ParserException(String, Exception) Declaration public ParserException(String message, Exception cause) Parameters Type Name Description String message Exception cause"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.QueryBuilderFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.QueryBuilderFactory.html",
    "title": "Class QueryBuilderFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryBuilderFactory Factory for IQueryBuilder Inheritance System.Object QueryBuilderFactory Implements IQueryBuilder Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryBuilderFactory : object, IQueryBuilder Methods | Improve this Doc View Source AddBuilder(String, IQueryBuilder) Declaration public virtual void AddBuilder(string nodeName, IQueryBuilder builder) Parameters Type Name Description System.String nodeName IQueryBuilder builder | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement n) Parameters Type Name Description XmlElement n Returns Type Description Query | Improve this Doc View Source GetQueryBuilder(String) Declaration public virtual IQueryBuilder GetQueryBuilder(string nodeName) Parameters Type Name Description System.String nodeName Returns Type Description IQueryBuilder Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.QueryTemplateManager.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.QueryTemplateManager.html",
    "title": "Class QueryTemplateManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryTemplateManager Provides utilities for turning query form input (such as from a web page or Swing gui) into Lucene XML queries by using XSL templates. This approach offers a convenient way of externalizing and changing how user input is turned into Lucene queries. Database applications often adopt similar practices by externalizing SQL in template files that can be easily changed/optimized by a DBA. The static methods can be used on their own or by creating an instance of this class you can store and re-use compiled stylesheets for fast use (e.g. in a server environment) LUCENENET (.NET Core): This is not compiled this because .NET Standard does not currently support XSL Transform. Inheritance System.Object QueryTemplateManager Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryTemplateManager : object Constructors | Improve this Doc View Source QueryTemplateManager() Declaration public QueryTemplateManager() | Improve this Doc View Source QueryTemplateManager(Stream) Declaration public QueryTemplateManager(Stream xslIs) Parameters Type Name Description Stream xslIs Methods | Improve this Doc View Source AddDefaultQueryTemplate(Stream) Declaration public virtual void AddDefaultQueryTemplate(Stream xslIs) Parameters Type Name Description Stream xslIs | Improve this Doc View Source AddQueryTemplate(String, Stream) Declaration public virtual void AddQueryTemplate(string name, Stream xslIs) Parameters Type Name Description System.String name Stream xslIs | Improve this Doc View Source GetQueryAsDOM(IDictionary<String, String>) Declaration public virtual XmlDocument GetQueryAsDOM(IDictionary<string, string> formProperties) Parameters Type Name Description IDictionary < System.String , System.String > formProperties Returns Type Description XmlDocument | Improve this Doc View Source GetQueryAsDOM(IDictionary<String, String>, Stream) Slow means of constructing query - parses stylesheet from input stream Declaration public static XmlDocument GetQueryAsDOM(IDictionary<string, string> formProperties, Stream xslIs) Parameters Type Name Description IDictionary < System.String , System.String > formProperties Stream xslIs Returns Type Description XmlDocument | Improve this Doc View Source GetQueryAsDOM(IDictionary<String, String>, String) Declaration public virtual XmlDocument GetQueryAsDOM(IDictionary<string, string> formProperties, string queryTemplateName) Parameters Type Name Description IDictionary < System.String , System.String > formProperties System.String queryTemplateName Returns Type Description XmlDocument | Improve this Doc View Source GetQueryAsDOM(IDictionary<String, String>, XslCompiledTransform) Fast means of constructing query using a cached,precompiled stylesheet Declaration public static XmlDocument GetQueryAsDOM(IDictionary<string, string> formProperties, XslCompiledTransform template) Parameters Type Name Description IDictionary < System.String , System.String > formProperties XslCompiledTransform template Returns Type Description XmlDocument | Improve this Doc View Source GetQueryAsXmlString(IDictionary<String, String>) Declaration public virtual string GetQueryAsXmlString(IDictionary<string, string> formProperties) Parameters Type Name Description IDictionary < System.String , System.String > formProperties Returns Type Description System.String | Improve this Doc View Source GetQueryAsXmlString(IDictionary<String, String>, Stream) Slow means of constructing query parsing a stylesheet from an input stream Declaration public static string GetQueryAsXmlString(IDictionary<string, string> formProperties, Stream xslIs) Parameters Type Name Description IDictionary < System.String , System.String > formProperties Stream xslIs Returns Type Description System.String | Improve this Doc View Source GetQueryAsXmlString(IDictionary<String, String>, String) Declaration public virtual string GetQueryAsXmlString(IDictionary<string, string> formProperties, string queryTemplateName) Parameters Type Name Description IDictionary < System.String , System.String > formProperties System.String queryTemplateName Returns Type Description System.String | Improve this Doc View Source GetQueryAsXmlString(IDictionary<String, String>, XslCompiledTransform) Fast means of constructing query using a precompiled stylesheet Declaration public static string GetQueryAsXmlString(IDictionary<string, string> formProperties, XslCompiledTransform template) Parameters Type Name Description IDictionary < System.String , System.String > formProperties XslCompiledTransform template Returns Type Description System.String | Improve this Doc View Source GetTemplates(Stream) Parses a query stylesheet for repeated use Declaration public static XslCompiledTransform GetTemplates(Stream xslIs) Parameters Type Name Description Stream xslIs Returns Type Description XslCompiledTransform | Improve this Doc View Source TransformCriteria(IDictionary<String, String>, Stream, Stream) Slower transformation using an uncompiled stylesheet (suitable for development environment) Declaration public static void TransformCriteria(IDictionary<string, string> formProperties, Stream xslIs, Stream result) Parameters Type Name Description IDictionary < System.String , System.String > formProperties Stream xslIs Stream result | Improve this Doc View Source TransformCriteria(IDictionary<String, String>, XslCompiledTransform, Stream) Fast transformation using a pre-compiled stylesheet (suitable for production environments) Declaration public static void TransformCriteria(IDictionary<string, string> formProperties, XslCompiledTransform transformer, Stream result) Parameters Type Name Description IDictionary < System.String , System.String > formProperties XslCompiledTransform transformer Stream result"
  },
  "api/Lucene.Net.QueryParser/overview.html": {
    "href": "api/Lucene.Net.QueryParser/overview.html",
    "title": "Lucene.Net.QueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Lucene.Net.QueryParser <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Apache Lucene QueryParsers. This module provides a number of queryparsers: Classic Analyzing Complex Phrase Extendable Flexible Surround XML Classic A Simple Lucene QueryParser implemented with JavaCC. Analyzing QueryParser that passes Fuzzy-, Prefix-, Range-, and WildcardQuerys through the given analyzer. Complex Phrase QueryParser which permits complex phrase query syntax eg \"(john jon jonathan~) peters*\" Extendable Extendable QueryParser provides a simple and flexible extension mechanism by overloading query field names. Flexible This project contains the new Lucene query parser implementation, which matches the syntax of the core QueryParser but offers a more modular architecture to enable customization. It's currently divided in 2 main packages: * Lucene.Net.QueryParsers.Flexible.Core : it contains the query parser API classes, which should be extended by query parser implementations. * Lucene.Net.QueryParsers.Flexible.Standard : it contains the current Lucene query parser implementation using the new query parser API. Features Full support for boolean logic (not enabled) QueryNode Trees - support for several syntaxes, that can be converted into similar syntax QueryNode trees. QueryNode Processors - Optimize, validate, rewrite the QueryNode trees Processors Pipelines - Select your favorite Processor and build a processor pipeline, to implement the features you need Config Interfaces - Allow the consumer of the Query Parser to implement a diff Config Handler Objects to suite their needs. Standard Builders - convert QueryNode's into several lucene representations. Supported conversion is using a 2.4 compatible logic QueryNode tree's can be converted to a lucene 2.4 syntax string, using toQueryString Design This new query parser was designed to have very generic architecture, so that it can be easily used for different products with varying query syntaxes. This code is much more flexible and extensible than the Lucene query parser in 2.4.X. The new query parser goal is to separate syntax and semantics of a query. E.g. 'a AND b', '+a +b', 'AND(a,b)' could be different syntaxes for the same query. It distinguishes the semantics of the different query components, e.g. whether and how to tokenize/lemmatize/normalize the different terms or which Query objects to create for the terms. It allows to write a parser with a new syntax, while reusing the underlying semantics, as quickly as possible. The query parser has three layers and its core is what we call the QueryNode tree. It is a tree that initially represents the syntax of the original query, e.g. for 'a AND b': AND / \\ A B The three layers are: QueryParser This layer is the text parsing layer which simply transforms the query text string into a QueryNode tree. Every text parser must implement the interface <xref:Lucene.Net.QueryParsers.Flexible.Core.Parser.SyntaxParser>. Lucene default implementations implements it using JavaCC. QueryNodeProcessor The query node processors do most of the work. It is in fact a configurable chain of processors. Each processors can walk the tree and modify nodes or even the tree's structure. That makes it possible to e.g. do query optimization before the query is executed or to tokenize terms. QueryBuilder The third layer is a configurable map of builders, which map QueryNode types to its specific builder that will transform the QueryNode into Lucene Query object. Furthermore, the query parser uses flexible configuration objects. It also uses message classes that allow to attach resource bundles. This makes it possible to translate messages, which is an important feature of a query parser. This design allows to develop different query syntaxes very quickly. StandardQueryParser and QueryParserWrapper The classic Lucene query parser is located under Lucene.Net.QueryParsers.Classic . To make it simpler to use the new query parser the class StandardQueryParser may be helpful, specially for people that do not want to extend the Query Parser. It uses the default Lucene query processors, text parser and builders, so you don't need to worry about dealing with those. StandardQueryParser usage: StandardQueryParser qpHelper = new StandardQueryParser(); StandardQueryConfigHandler config = qpHelper.getQueryConfigHandler(); config.setAllowLeadingWildcard(true); config.setAnalyzer(new WhitespaceAnalyzer()); Query query = qpHelper.parse(\"apache AND lucene\", \"defaultField\"); Surround A QueryParser that supports the Span family of queries as well as pre and infix notation. XML A QueryParser that produces Lucene Query objects from XML streams."
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.html",
    "title": "Namespace Lucene.Net.Replicator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Replicator <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Files replication framework The Replicator allows replicating files between a server and client(s). Producers publish revisions and consumers update to the latest revision available. ReplicationClient is a helper utility for performing the update operation. It can be invoked either manually or periodically by [starting an update thread](ReplicationClient.html#startUpdateThread(long, java.lang.String)). HttpReplicator can be used to replicate revisions by consumers that reside on a different node than the producer. The replication framework supports replicating any type of files, with built-in support for a single search index as well as an index and taxonomy pair. For a single index, the application should publish an IndexRevision and set IndexReplicationHandler on the client. For an index and taxonomy pair, the application should publish an IndexAndTaxonomyRevision and set IndexAndTaxonomyReplicationHandler on the client. When the replication client detects that there is a newer revision available, it copies the files of the revision and then invokes the handler to complete the operation (e.g. copy the files to the index directory, fsync them, reopen an index reader etc.). By default, only files that do not exist in the handler's current revision files are copied, however this can be overridden by extending the client. An example usage of the Replicator: // ++++++++++++++ SERVER SIDE ++++++++++++++ // IndexWriter publishWriter; // the writer used for indexing Replicator replicator = new LocalReplicator(); replicator.publish(new IndexRevision(publishWriter)); // ++++++++++++++ CLIENT SIDE ++++++++++++++ // // either LocalReplictor, or HttpReplicator if client and server are on different nodes Replicator replicator; // callback invoked after handler finished handling the revision and e.g. can reopen the reader. Callable callback = null; // can also be null if no callback is needed ReplicationHandler handler = new IndexReplicationHandler(indexDir, callback); SourceDirectoryFactory factory = new PerSessionDirectoryFactory(workDir); ReplicationClient client = new ReplicationClient(replicator, handler, factory); // invoke client manually client.updateNow(); // or, periodically client.startUpdateThread(100); // check for update every 100 milliseconds Classes IndexAndTaxonomyReplicationHandler A IReplicationHandler for replication of an index and taxonomy pair. See IReplicationHandler for more detail. This handler ensures that the search and taxonomy indexes are replicated in a consistent way. IndexAndTaxonomyRevision A IRevision of a single index and taxonomy index files which comprises the list of files from both indexes. This revision should be used whenever a pair of search and taxonomy indexes need to be replicated together to guarantee consistency of both on the replicating (client) side. IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter A DirectoryTaxonomyWriter which sets the underlying IndexWriter 's IndexDeletionPolicy to SnapshotDeletionPolicy . IndexInputStream A which wraps an IndexInput . IndexReplicationHandler A IReplicationHandler for replication of an index. Implements RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) by copying the files pointed by the client resolver to the index Directory and then touches the index with IndexWriter to make sure any unused files are deleted. IndexRevision A IRevision of a single index files which comprises the list of files that are part of the current IndexCommit . To ensure the files are not deleted by IndexWriter for as long as this revision stays alive (i.e. until Release() , the current commit point is snapshotted, using SnapshotDeletionPolicy (this means that the given writer's IndexDeletionPolicy should return SnapshotDeletionPolicy ). When this revision is Release() d, it releases the obtained snapshot as well as calls DeleteUnusedFiles() so that the snapshotted files are deleted (if they are no longer needed). LocalReplicator A IReplicator implementation for use by the side that publishes IRevision s, as well for clients to CheckForUpdate(String) check for updates}. When a client needs to be updated, it is returned a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. As long as a revision is being replicated, this replicator guarantees that it will not be Release() . Replication sessions expire by default after , and the threshold can be configured through ExpirationThreshold . PerSessionDirectoryFactory A ISourceDirectoryFactory which returns FSDirectory under a dedicated session directory. When a session is over, the entire directory is deleted. ReplicationClient A client which monitors and obtains new revisions from a IReplicator . It can be used to either periodically check for updates by invoking StartUpdateThread(Int64, String) , or manually by calling UpdateNow() . Whenever a new revision is available, the RequiredFiles(IDictionary<String, IList<RevisionFile>>) are copied to the Directory specified by PerSessionDirectoryFactory and a handler is notified. RevisionFile Describes a file in a IRevision . A file has a source, which allows a single revision to contain files from multiple sources (e.g. multiple indexes). SessionExpiredException Exception indicating that a revision update session was expired due to lack of activity. SessionToken Token for a replication session, for guaranteeing that source replicated files will be kept safe until the replication completes. Interfaces IReplicationHandler Handler for revisions obtained by the client. IReplicator An interface for replicating files. Allows a producer to Publish(IRevision) IRevision s and consumers to CheckForUpdate(String) . When a client needs to be updated, it is given a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. After the client has finished obtaining all the files, it should Release(String) the given session, so that the files can be reclaimed if they are not needed anymore. A client is always updated to the newest revision available. That is, if a client is on revision r1 and revisions r2 and r3 were published, then when the client will next check for update, it will receive r3 . IRevision A revision comprises lists of files that come from different sources and need to be replicated together to e.g. guarantee that all resources are in sync. In most cases an application will replicate a single index, and so the revision will contain files from a single source. However, some applications may require to treat a collection of indexes as a single entity so that the files from all sources are replicated together, to guarantee consistency beween them. For example, an application which indexes facets will need to replicate both the search and taxonomy indexes together, to guarantee that they match at the client side. ISourceDirectoryFactory Resolves a session and source into a Directory to use for copying the session files to."
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.html",
    "title": "Namespace Lucene.Net.Replicator.Http.Abstractions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Replicator.Http.Abstractions Interfaces IReplicationRequest Abstraction for remote replication requests, allows easy integration into any hosting frameworks. IReplicationResponse Abstraction for remote replication response, allows easy integration into any hosting frameworks. IReplicationService Contract for a replication service."
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationRequest.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationRequest.html",
    "title": "Interface IReplicationRequest | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReplicationRequest Abstraction for remote replication requests, allows easy integration into any hosting frameworks. Namespace : Lucene.Net.Replicator.Http.Abstractions Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationRequest Remarks .NET Specific Abstraction Properties | Improve this Doc View Source Path Provides the requested path which mapps to a replication operation. Declaration string Path { get; } Property Value Type Description System.String Methods | Improve this Doc View Source QueryParam(String) Returns the requested query parameter or null if not present. Declaration string QueryParam(string name) Parameters Type Name Description System.String name the name of the requested parameter Returns Type Description System.String the value of the requested parameter or null if not present Remarks May though execeptions if the same parameter is provided multiple times, consult the documentation for the specific implementation."
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationResponse.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationResponse.html",
    "title": "Interface IReplicationResponse | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReplicationResponse Abstraction for remote replication response, allows easy integration into any hosting frameworks. Namespace : Lucene.Net.Replicator.Http.Abstractions Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationResponse Remarks .NET Specific Abstraction Properties | Improve this Doc View Source Body The response content. Declaration Stream Body { get; } Property Value Type Description Stream | Improve this Doc View Source StatusCode Gets or sets the http status code of the response. Declaration int StatusCode { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Flush() Flushes the reponse to the underlying response stream. Declaration void Flush()"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationService.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationService.html",
    "title": "Interface IReplicationService | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReplicationService Contract for a replication service. Namespace : Lucene.Net.Replicator.Http.Abstractions Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationService Methods | Improve this Doc View Source Perform(IReplicationRequest, IReplicationResponse) Executes the replication task. Declaration void Perform(IReplicationRequest request, IReplicationResponse response) Parameters Type Name Description IReplicationRequest request IReplicationResponse response"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.html",
    "title": "Namespace Lucene.Net.Replicator.Http | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Replicator.Http <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> HTTP replication implementation Classes HttpClientBase Base class for Http clients. HttpReplicator An HTTP implementation of IReplicator . Assumes the API supported by ReplicationService . ReplicationService A server-side service for handling replication requests. The service assumes requests are sent in the format /<context>/<shard>/<action> where context is the servlet context, e.g. REPLICATION_CONTEXT shard is the ID of the shard, e.g. \"s1\" action is one of ReplicationService.ReplicationAction values For example, to check whether there are revision updates for shard \"s1\" you should send the request: http://host:port/replicate/s1/update . Enums ReplicationService.ReplicationAction Actions supported by the ReplicationService ."
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.HttpClientBase.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.HttpClientBase.html",
    "title": "Class HttpClientBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HttpClientBase Base class for Http clients. Inheritance System.Object HttpClientBase HttpReplicator Namespace : Lucene.Net.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public abstract class HttpClientBase : IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source HttpClientBase(String, HttpClient) Creates a new HttpClientBase with the given url and . Declaration protected HttpClientBase(string url, HttpClient client) Parameters Type Name Description System.String url HttpClient client The to use make remote http calls. Remarks This allows full controll over how the is created, prefer the HttpClientBase(String, HttpMessageHandler) over this unless you know you need the control of the . | Improve this Doc View Source HttpClientBase(String, HttpMessageHandler) Creates a new HttpClientBase with the given url . Declaration protected HttpClientBase(string url, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String url The full url, including with host, port and path. HttpMessageHandler messageHandler Optional, The HTTP handler stack to use for sending requests. Remarks A is taken as an optional parameter as well, if this is not provided it defaults to null . In this case the internal will default to use a . | Improve this Doc View Source HttpClientBase(String, Int32, String, HttpMessageHandler) Creates a new HttpClientBase with the given host, port and path. Declaration protected HttpClientBase(string host, int port, string path, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String host The host that the client should retrieve data from. System.Int32 port The port to be used to connect on. System.String path The path to the replicator on the host. HttpMessageHandler messageHandler Optional, The HTTP handler stack to use for sending requests, defaults to null . Remarks The host, port and path parameters are normalized to http://{host}:{port}{path} , if path is null or empty it defaults to / . A is taken as an optional parameter as well, if this is not provided it defaults to null . In this case the internal will default to use a . Fields | Improve this Doc View Source DEFAULT_CONNECTION_TIMEOUT Default connection timeout for this client, in milliseconds. ConnectionTimeout Declaration public const int DEFAULT_CONNECTION_TIMEOUT = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source ConnectionTimeout Gets or Sets the connection timeout for this client, in milliseconds. This setting is used to modify . Declaration public virtual int ConnectionTimeout { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source IsDisposed Returns true if this instance was Dispose(Boolean) ed, otherwise returns false . Note that if you override Dispose(Boolean) , you must call Dispose(Boolean) on the base class, in order for this instance to be properly disposed. Declaration public bool IsDisposed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Url The URL to execute requests against. Declaration protected string Url { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Dispose() Disposes this HttpClientBase . This disposes the underlying . Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Disposes this HttpClientBase . When called with true , this disposes the underlying . Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source DoAction<T>(HttpResponseMessage, Func<T>) Calls the overload DoAction<T>(HttpResponseMessage, Boolean, Func<T>) passing true to consume. Declaration protected virtual T DoAction<T>(HttpResponseMessage response, Func<T> call) Parameters Type Name Description HttpResponseMessage response Func <T> call Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source DoAction<T>(HttpResponseMessage, Boolean, Func<T>) Do a specific action and validate after the action that the status is still OK, and if not, attempt to extract the actual server side exception. Optionally release the response at exit, depending on consume parameter. Declaration protected virtual T DoAction<T>(HttpResponseMessage response, bool consume, Func<T> call) Parameters Type Name Description HttpResponseMessage response System.Boolean consume Func <T> call Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source EnsureOpen() Throws if this client is already disposed. Declaration protected void EnsureOpen() | Improve this Doc View Source ExecuteGet(String, String[]) Internal: Execute a request and return its result. The parameters argument is treated as: name1,value1,name2,value2,... Declaration protected virtual HttpResponseMessage ExecuteGet(string request, params string[] parameters) Parameters Type Name Description System.String request System.String [] parameters Returns Type Description HttpResponseMessage | Improve this Doc View Source ExecutePost(String, Object, String[]) Internal: Execute a request and return its result. The parameters argument is treated as: name1,value1,name2,value2,... Declaration protected virtual HttpResponseMessage ExecutePost(string request, object entity, params string[] parameters) Parameters Type Name Description System.String request System.Object entity System.String [] parameters Returns Type Description HttpResponseMessage | Improve this Doc View Source ResponseInputStream(HttpResponseMessage) Internal utility: input stream of the provided response. Declaration public virtual Stream ResponseInputStream(HttpResponseMessage response) Parameters Type Name Description HttpResponseMessage response Returns Type Description Stream | Improve this Doc View Source ResponseInputStream(HttpResponseMessage, Boolean) Internal utility: input stream of the provided response, which optionally consumes the response's resources when the input stream is exhausted. Declaration public virtual Stream ResponseInputStream(HttpResponseMessage response, bool consume) Parameters Type Name Description HttpResponseMessage response System.Boolean consume Returns Type Description Stream | Improve this Doc View Source ThrowKnownError(HttpResponseMessage) Throws an exception for any errors. Declaration protected virtual void ThrowKnownError(HttpResponseMessage response) Parameters Type Name Description HttpResponseMessage response | Improve this Doc View Source VerifyStatus(HttpResponseMessage) Internal: Verifies the response status and if not successful throws an exception. Declaration protected virtual void VerifyStatus(HttpResponseMessage response) Parameters Type Name Description HttpResponseMessage response"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.HttpReplicator.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.HttpReplicator.html",
    "title": "Class HttpReplicator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HttpReplicator An HTTP implementation of IReplicator . Assumes the API supported by ReplicationService . Inheritance System.Object HttpClientBase HttpReplicator Implements IReplicator IDisposable Inherited Members HttpClientBase.DEFAULT_CONNECTION_TIMEOUT HttpClientBase.Url HttpClientBase.ConnectionTimeout HttpClientBase.EnsureOpen() HttpClientBase.VerifyStatus(HttpResponseMessage) HttpClientBase.ThrowKnownError(HttpResponseMessage) HttpClientBase.ExecutePost(String, Object, String[]) HttpClientBase.ExecuteGet(String, String[]) HttpClientBase.ResponseInputStream(HttpResponseMessage) HttpClientBase.ResponseInputStream(HttpResponseMessage, Boolean) HttpClientBase.IsDisposed HttpClientBase.DoAction<T>(HttpResponseMessage, Func<T>) HttpClientBase.DoAction<T>(HttpResponseMessage, Boolean, Func<T>) HttpClientBase.Dispose(Boolean) HttpClientBase.Dispose() Namespace : Lucene.Net.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public class HttpReplicator : HttpClientBase, IReplicator, IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source HttpReplicator(String, HttpClient) Creates a new HttpReplicator with the given url and . HttpClientBase(String, HttpClient) for more details. Declaration public HttpReplicator(string url, HttpClient client) Parameters Type Name Description System.String url HttpClient client | Improve this Doc View Source HttpReplicator(String, HttpMessageHandler) Creates a new HttpReplicator with the given url. HttpClientBase(String, HttpMessageHandler) for more details. Declaration public HttpReplicator(string url, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String url HttpMessageHandler messageHandler | Improve this Doc View Source HttpReplicator(String, Int32, String, HttpMessageHandler) Creates a new HttpReplicator with the given host, port and path. HttpClientBase(String, Int32, String, HttpMessageHandler) for more details. Declaration public HttpReplicator(string host, int port, string path, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String host System.Int32 port System.String path HttpMessageHandler messageHandler Methods | Improve this Doc View Source CheckForUpdate(String) Checks for updates at the remote host. Declaration public virtual SessionToken CheckForUpdate(string currentVersion) Parameters Type Name Description System.String currentVersion Returns Type Description SessionToken | Improve this Doc View Source ObtainFile(String, String, String) Obtains the given file from it's source at the remote host. Declaration public virtual Stream ObtainFile(string sessionId, string source, string fileName) Parameters Type Name Description System.String sessionId System.String source System.String fileName Returns Type Description Stream | Improve this Doc View Source Publish(IRevision) Not supported. Declaration public virtual void Publish(IRevision revision) Parameters Type Name Description IRevision revision | Improve this Doc View Source Release(String) Releases a session obtained from the remote host. Declaration public virtual void Release(string sessionId) Parameters Type Name Description System.String sessionId Implements IReplicator IDisposable"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.ReplicationService.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.ReplicationService.html",
    "title": "Class ReplicationService | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReplicationService A server-side service for handling replication requests. The service assumes requests are sent in the format /<context>/<shard>/<action> where context is the servlet context, e.g. REPLICATION_CONTEXT shard is the ID of the shard, e.g. \"s1\" action is one of ReplicationService.ReplicationAction values For example, to check whether there are revision updates for shard \"s1\" you should send the request: http://host:port/replicate/s1/update . Inheritance System.Object ReplicationService Implements IReplicationService Namespace : Lucene.Net.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public class ReplicationService : object, IReplicationService Remarks This service is written using abstractions over requests and responses which makes it easy to integrate into any hosting framework. See the Lucene.Net.Replicator.AspNetCore for an example of an implementation for the AspNetCore Framework. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source ReplicationService(IReadOnlyDictionary<String, IReplicator>, String) Declaration public ReplicationService(IReadOnlyDictionary<string, IReplicator> replicators, string context = null) Parameters Type Name Description IReadOnlyDictionary < System.String , IReplicator > replicators System.String context Fields | Improve this Doc View Source JSON_SERIALIZER_SETTINGS Json Serializer Settings to use when serializing and deserializing errors. Declaration public static readonly JsonSerializerSettings JSON_SERIALIZER_SETTINGS Field Value Type Description JsonSerializerSettings | Improve this Doc View Source REPLICATE_FILENAME_PARAM Request parameter name for providing the file's name. Declaration public const string REPLICATE_FILENAME_PARAM = null Field Value Type Description System.String | Improve this Doc View Source REPLICATE_SESSION_ID_PARAM Request parameter name for providing a session ID. Declaration public const string REPLICATE_SESSION_ID_PARAM = null Field Value Type Description System.String | Improve this Doc View Source REPLICATE_SOURCE_PARAM Request parameter name for providing the file's source. Declaration public const string REPLICATE_SOURCE_PARAM = null Field Value Type Description System.String | Improve this Doc View Source REPLICATE_VERSION_PARAM Request parameter name for providing the revision version. Declaration public const string REPLICATE_VERSION_PARAM = null Field Value Type Description System.String | Improve this Doc View Source REPLICATION_CONTEXT The default context path for the ReplicationService . Declaration public const string REPLICATION_CONTEXT = null Field Value Type Description System.String Methods | Improve this Doc View Source Perform(IReplicationRequest, IReplicationResponse) Executes the replication task. Declaration public virtual void Perform(IReplicationRequest request, IReplicationResponse response) Parameters Type Name Description IReplicationRequest request IReplicationResponse response Implements IReplicationService"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.ReplicationService.ReplicationAction.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.ReplicationService.ReplicationAction.html",
    "title": "Enum ReplicationService.ReplicationAction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum ReplicationService.ReplicationAction Actions supported by the ReplicationService . Namespace : Lucene.Net.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public enum ReplicationAction : int Fields Name Description OBTAIN RELEASE UPDATE"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyReplicationHandler.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyReplicationHandler.html",
    "title": "Class IndexAndTaxonomyReplicationHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexAndTaxonomyReplicationHandler A IReplicationHandler for replication of an index and taxonomy pair. See IReplicationHandler for more detail. This handler ensures that the search and taxonomy indexes are replicated in a consistent way. Inheritance System.Object IndexAndTaxonomyReplicationHandler Implements IReplicationHandler Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexAndTaxonomyReplicationHandler : object, IReplicationHandler Remarks NOTE: If you intend to recreate a taxonomy index, you should make sure to reopen an IndexSearcher and TaxonomyReader pair via the provided callback, to guarantee that both indexes are in sync. This handler does not prevent replicating such index and taxonomy pairs, and if they are reopened by a different thread, unexpected errors can occur, as well as inconsistency between the taxonomy and index readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexAndTaxonomyReplicationHandler(Directory, Directory, Func<Nullable<Boolean>>) Constructor with the given index directory and callback to notify when the indexes were updated. Declaration public IndexAndTaxonomyReplicationHandler(Directory indexDirectory, Directory taxonomyDirectory, Func<bool?> callback) Parameters Type Name Description Directory indexDirectory Directory taxonomyDirectory Func < System.Nullable < System.Boolean >> callback Fields | Improve this Doc View Source INFO_STREAM_COMPONENT The component used to log messages to the Default InfoStream . Declaration public const string INFO_STREAM_COMPONENT = null Field Value Type Description System.String Properties | Improve this Doc View Source CurrentRevisionFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> CurrentRevisionFiles { get; } Property Value Type Description IDictionary < System.String , IList < RevisionFile >> | Improve this Doc View Source CurrentVersion Declaration public virtual string CurrentVersion { get; } Property Value Type Description System.String | Improve this Doc View Source InfoStream Gets or sets the InfoStream to use for logging messages. Declaration public virtual InfoStream InfoStream { get; set; } Property Value Type Description InfoStream Methods | Improve this Doc View Source RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) Declaration public virtual void RevisionReady(string version, IDictionary<string, IList<RevisionFile>> revisionFiles, IDictionary<string, IList<string>> copiedFiles, IDictionary<string, Directory> sourceDirectory) Parameters Type Name Description System.String version IDictionary < System.String , IList < RevisionFile >> revisionFiles IDictionary < System.String , IList < System.String >> copiedFiles IDictionary < System.String , Directory > sourceDirectory Implements IReplicationHandler See Also IndexReplicationHandler"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyRevision.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyRevision.html",
    "title": "Class IndexAndTaxonomyRevision | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexAndTaxonomyRevision A IRevision of a single index and taxonomy index files which comprises the list of files from both indexes. This revision should be used whenever a pair of search and taxonomy indexes need to be replicated together to guarantee consistency of both on the replicating (client) side. Inheritance System.Object IndexAndTaxonomyRevision Implements IRevision IComparable < IRevision > Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexAndTaxonomyRevision : object, IRevision, IComparable<IRevision> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexAndTaxonomyRevision(IndexWriter, IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter) Constructor over the given IndexWriter . Uses the last IndexCommit found in the Directory managed by the given writer. Declaration public IndexAndTaxonomyRevision(IndexWriter indexWriter, IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter taxonomyWriter) Parameters Type Name Description IndexWriter indexWriter IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter taxonomyWriter Fields | Improve this Doc View Source INDEX_SOURCE Declaration public const string INDEX_SOURCE = null Field Value Type Description System.String | Improve this Doc View Source TAXONOMY_SOURCE Declaration public const string TAXONOMY_SOURCE = null Field Value Type Description System.String Properties | Improve this Doc View Source SourceFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description IDictionary < System.String , IList < RevisionFile >> | Improve this Doc View Source Version Declaration public virtual string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(IRevision) Declaration public virtual int CompareTo(IRevision other) Parameters Type Name Description IRevision other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(String) Compares this IndexAndTaxonomyRevision to the given Lucene.Net.Replicator.IndexAndTaxonomyRevision.version . Declaration public virtual int CompareTo(string version) Parameters Type Name Description System.String version Returns Type Description System.Int32 | Improve this Doc View Source Open(String, String) Declaration public virtual Stream Open(string source, string fileName) Parameters Type Name Description System.String source System.String fileName Returns Type Description Stream | Improve this Doc View Source Release() Declaration public virtual void Release() | Improve this Doc View Source RevisionFiles(IndexCommit, IndexCommit) Returns a map of the revision files from the given IndexCommit s of the search and taxonomy indexes. Declaration public static IDictionary<string, IList<RevisionFile>> RevisionFiles(IndexCommit indexCommit, IndexCommit taxonomyCommit) Parameters Type Name Description IndexCommit indexCommit IndexCommit taxonomyCommit Returns Type Description IDictionary < System.String , IList < RevisionFile >> | Improve this Doc View Source RevisionVersion(IndexCommit, IndexCommit) Returns a representation of a revision's version from the given IndexCommit s of the search and taxonomy indexes. Declaration public static string RevisionVersion(IndexCommit indexCommit, IndexCommit taxonomyCommit) Parameters Type Name Description IndexCommit indexCommit IndexCommit taxonomyCommit Returns Type Description System.String a representation of a revision's version from the given IndexCommit s of the search and taxonomy indexes. Implements IRevision IComparable<> See Also IndexRevision"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter.html",
    "title": "Class IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter A DirectoryTaxonomyWriter which sets the underlying IndexWriter 's IndexDeletionPolicy to SnapshotDeletionPolicy . Inheritance System.Object DirectoryTaxonomyWriter IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter Implements ITaxonomyWriter IDisposable Index.ITwoPhaseCommit Inherited Members DirectoryTaxonomyWriter.INDEX_EPOCH DirectoryTaxonomyWriter.Unlock(Store.Directory) DirectoryTaxonomyWriter.DefaultTaxonomyWriterCache() DirectoryTaxonomyWriter.Dispose() DirectoryTaxonomyWriter.CloseResources() DirectoryTaxonomyWriter.FindCategory(FacetLabel) DirectoryTaxonomyWriter.AddCategory(FacetLabel) DirectoryTaxonomyWriter.EnsureOpen() DirectoryTaxonomyWriter.Commit() Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.SetCommitData(IDictionary<, >) DirectoryTaxonomyWriter.CommitData DirectoryTaxonomyWriter.PrepareCommit() DirectoryTaxonomyWriter.Count DirectoryTaxonomyWriter.SetCacheMissesUntilFill(Int32) DirectoryTaxonomyWriter.GetParent(Int32) DirectoryTaxonomyWriter.AddTaxonomy(Store.Directory, DirectoryTaxonomyWriter.IOrdinalMap) DirectoryTaxonomyWriter.Rollback() DirectoryTaxonomyWriter.ReplaceTaxonomy(Store.Directory) DirectoryTaxonomyWriter.Directory DirectoryTaxonomyWriter.TaxonomyEpoch Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class SnapshotDirectoryTaxonomyWriter : DirectoryTaxonomyWriter, ITaxonomyWriter, IDisposable, Index.ITwoPhaseCommit Constructors | Improve this Doc View Source SnapshotDirectoryTaxonomyWriter(Directory, OpenMode) Declaration public SnapshotDirectoryTaxonomyWriter(Directory directory, OpenMode openMode = OpenMode.CREATE_OR_APPEND) Parameters Type Name Description Directory directory OpenMode openMode | Improve this Doc View Source SnapshotDirectoryTaxonomyWriter(Directory, OpenMode, ITaxonomyWriterCache) Declaration public SnapshotDirectoryTaxonomyWriter(Directory directory, OpenMode openMode, ITaxonomyWriterCache cache) Parameters Type Name Description Directory directory OpenMode openMode ITaxonomyWriterCache cache Properties | Improve this Doc View Source DeletionPolicy Gets the SnapshotDeletionPolicy used by the underlying IndexWriter . Declaration public virtual SnapshotDeletionPolicy DeletionPolicy { get; } Property Value Type Description SnapshotDeletionPolicy | Improve this Doc View Source IndexWriter Gets the IndexWriter used by this DirectoryTaxonomyWriter . Declaration public virtual IndexWriter IndexWriter { get; } Property Value Type Description IndexWriter Methods | Improve this Doc View Source CreateIndexWriterConfig(OpenMode) Declaration protected override IndexWriterConfig CreateIndexWriterConfig(OpenMode openMode) Parameters Type Name Description OpenMode openMode Returns Type Description IndexWriterConfig | Improve this Doc View Source OpenIndexWriter(Directory, IndexWriterConfig) Declaration protected override IndexWriter OpenIndexWriter(Directory directory, IndexWriterConfig config) Parameters Type Name Description Directory directory IndexWriterConfig config Returns Type Description IndexWriter Implements ITaxonomyWriter IDisposable ITwoPhaseCommit"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexInputStream.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexInputStream.html",
    "title": "Class IndexInputStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexInputStream A which wraps an IndexInput . Inheritance System.Object IndexInputStream Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexInputStream : Stream Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexInputStream(IndexInput) Declaration public IndexInputStream(IndexInput input) Parameters Type Name Description IndexInput input Properties | Improve this Doc View Source CanRead Declaration public override bool CanRead { get; } Property Value Type Description System.Boolean | Improve this Doc View Source CanSeek Declaration public override bool CanSeek { get; } Property Value Type Description System.Boolean | Improve this Doc View Source CanWrite Declaration public override bool CanWrite { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Position Declaration public override long Position { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Flush() Declaration public override void Flush() | Improve this Doc View Source Read(Byte[], Int32, Int32) Declaration public override int Read(byte[] buffer, int offset, int count) Parameters Type Name Description System.Byte [] buffer System.Int32 offset System.Int32 count Returns Type Description System.Int32 | Improve this Doc View Source Seek(Int64, SeekOrigin) Declaration public override long Seek(long offset, SeekOrigin origin) Parameters Type Name Description System.Int64 offset SeekOrigin origin Returns Type Description System.Int64 | Improve this Doc View Source SetLength(Int64) Declaration public override void SetLength(long value) Parameters Type Name Description System.Int64 value | Improve this Doc View Source Write(Byte[], Int32, Int32) Declaration public override void Write(byte[] buffer, int offset, int count) Parameters Type Name Description System.Byte [] buffer System.Int32 offset System.Int32 count"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexReplicationHandler.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexReplicationHandler.html",
    "title": "Class IndexReplicationHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexReplicationHandler A IReplicationHandler for replication of an index. Implements RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) by copying the files pointed by the client resolver to the index Directory and then touches the index with IndexWriter to make sure any unused files are deleted. Inheritance System.Object IndexReplicationHandler Implements IReplicationHandler Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexReplicationHandler : object, IReplicationHandler Remarks NOTE: This handler assumes that IndexWriter is not opened by another process on the index directory. In fact, opening an IndexWriter on the same directory to which files are copied can lead to undefined behavior, where some or all the files will be deleted, override other files or simply create a mess. When you replicate an index, it is best if the index is never modified by IndexWriter , except the one that is open on the source index, from which you replicate. This handler notifies the application via a provided when an updated index commit was made available for it. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexReplicationHandler(Directory, Func<Nullable<Boolean>>) Constructor with the given index directory and callback to notify when the indexes were updated. Declaration public IndexReplicationHandler(Directory indexDirectory, Func<bool?> callback) Parameters Type Name Description Directory indexDirectory Func < System.Nullable < System.Boolean >> callback Fields | Improve this Doc View Source INFO_STREAM_COMPONENT The component used to log messages to the Default InfoStream . Declaration public const string INFO_STREAM_COMPONENT = null Field Value Type Description System.String Properties | Improve this Doc View Source CurrentRevisionFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> CurrentRevisionFiles { get; } Property Value Type Description IDictionary < System.String , IList < RevisionFile >> | Improve this Doc View Source CurrentVersion Declaration public virtual string CurrentVersion { get; } Property Value Type Description System.String | Improve this Doc View Source InfoStream Gets or sets the InfoStream to use for logging messages. Declaration public virtual InfoStream InfoStream { get; set; } Property Value Type Description InfoStream Methods | Improve this Doc View Source CleanupFilesOnFailure(Directory, IList<String>) Cleanup the index directory by deleting all given files. Called when file copy or sync failed. Declaration public static void CleanupFilesOnFailure(Directory directory, IList<string> files) Parameters Type Name Description Directory directory IList < System.String > files | Improve this Doc View Source CleanupOldIndexFiles(Directory, String) Cleans up the index directory from old index files. This method uses the last commit found by GetLastCommit(Directory) . If it matches the expected segmentsFile , then all files not referenced by this commit point are deleted. Declaration public static void CleanupOldIndexFiles(Directory directory, string segmentsFile) Parameters Type Name Description Directory directory System.String segmentsFile Remarks NOTE: This method does a best effort attempt to clean the index directory. It suppresses any exceptions that occur, as this can be retried the next time. | Improve this Doc View Source CopyFiles(Directory, Directory, IList<String>) Copies the provided list of files from the source Directory to the target Directory , if they are not the same. Declaration public static void CopyFiles(Directory source, Directory target, IList<string> files) Parameters Type Name Description Directory source Directory target IList < System.String > files | Improve this Doc View Source GetLastCommit(Directory) Returns the last IndexCommit found in the Directory , or null if there are no commits. Declaration public static IndexCommit GetLastCommit(Directory directory) Parameters Type Name Description Directory directory Returns Type Description IndexCommit | Improve this Doc View Source GetSegmentsFile(IList<String>, Boolean) Verifies that the last file is segments_N and fails otherwise. It also removes and returns the file from the list, because it needs to be handled last, after all files. This is important in order to guarantee that if a reader sees the new segments_N, all other segment files are already on stable storage. The reason why the code fails instead of putting segments_N file last is that this indicates an error in the IRevision implementation. Declaration public static string GetSegmentsFile(IList<string> files, bool allowEmpty) Parameters Type Name Description IList < System.String > files System.Boolean allowEmpty Returns Type Description System.String | Improve this Doc View Source RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) Declaration public virtual void RevisionReady(string version, IDictionary<string, IList<RevisionFile>> revisionFiles, IDictionary<string, IList<string>> copiedFiles, IDictionary<string, Directory> sourceDirectory) Parameters Type Name Description System.String version IDictionary < System.String , IList < RevisionFile >> revisionFiles IDictionary < System.String , IList < System.String >> copiedFiles IDictionary < System.String , Directory > sourceDirectory | Improve this Doc View Source WriteSegmentsGen(String, Directory) Writes SEGMENTS_GEN file to the directory, reading the generation from the given segmentsFile . If it is null , this method deletes segments.gen from the directory. Declaration public static void WriteSegmentsGen(string segmentsFile, Directory directory) Parameters Type Name Description System.String segmentsFile Directory directory Implements IReplicationHandler"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexRevision.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexRevision.html",
    "title": "Class IndexRevision | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexRevision A IRevision of a single index files which comprises the list of files that are part of the current IndexCommit . To ensure the files are not deleted by IndexWriter for as long as this revision stays alive (i.e. until Release() , the current commit point is snapshotted, using SnapshotDeletionPolicy (this means that the given writer's IndexDeletionPolicy should return SnapshotDeletionPolicy ). When this revision is Release() d, it releases the obtained snapshot as well as calls DeleteUnusedFiles() so that the snapshotted files are deleted (if they are no longer needed). Inheritance System.Object IndexRevision Implements IRevision IComparable < IRevision > Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexRevision : object, IRevision, IComparable<IRevision> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexRevision(IndexWriter) Constructor over the given IndexWriter . Uses the last IndexCommit found in the Directory managed by the given writer. Declaration public IndexRevision(IndexWriter writer) Parameters Type Name Description IndexWriter writer Properties | Improve this Doc View Source SourceFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description IDictionary < System.String , IList < RevisionFile >> | Improve this Doc View Source Version Declaration public virtual string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(IRevision) Declaration public virtual int CompareTo(IRevision other) Parameters Type Name Description IRevision other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(String) Declaration public virtual int CompareTo(string version) Parameters Type Name Description System.String version Returns Type Description System.Int32 | Improve this Doc View Source Open(String, String) Declaration public virtual Stream Open(string source, string fileName) Parameters Type Name Description System.String source System.String fileName Returns Type Description Stream | Improve this Doc View Source Release() Declaration public virtual void Release() | Improve this Doc View Source RevisionFiles(IndexCommit) Returns a singleton map of the revision files from the given IndexCommit . Declaration public static IDictionary<string, IList<RevisionFile>> RevisionFiles(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description IDictionary < System.String , IList < RevisionFile >> | Improve this Doc View Source RevisionVersion(IndexCommit) Returns a string representation of a revision's version from the given IndexCommit Declaration public static string RevisionVersion(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description System.String | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Implements IRevision IComparable<>"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IReplicationHandler.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IReplicationHandler.html",
    "title": "Interface IReplicationHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReplicationHandler Handler for revisions obtained by the client. Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationHandler Properties | Improve this Doc View Source CurrentRevisionFiles Returns the current revision version held by the handler. Declaration IDictionary<string, IList<RevisionFile>> CurrentRevisionFiles { get; } Property Value Type Description IDictionary < System.String , IList < RevisionFile >> | Improve this Doc View Source CurrentVersion Returns the current revision files held by the handler. Declaration string CurrentVersion { get; } Property Value Type Description System.String Methods | Improve this Doc View Source RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) Called when a new revision was obtained and is available (i.e. all needed files were successfully copied). Declaration void RevisionReady(string version, IDictionary<string, IList<RevisionFile>> revisionFiles, IDictionary<string, IList<string>> copiedFiles, IDictionary<string, Directory> sourceDirectory) Parameters Type Name Description System.String version The version of the IRevision that was copied IDictionary < System.String , IList < RevisionFile >> revisionFiles The files contained by this IRevision IDictionary < System.String , IList < System.String >> copiedFiles The files that were actually copied IDictionary < System.String , Directory > sourceDirectory A mapping from a source of files to the Directory they were copied into"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IReplicator.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IReplicator.html",
    "title": "Interface IReplicator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReplicator An interface for replicating files. Allows a producer to Publish(IRevision) IRevision s and consumers to CheckForUpdate(String) . When a client needs to be updated, it is given a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. After the client has finished obtaining all the files, it should Release(String) the given session, so that the files can be reclaimed if they are not needed anymore. A client is always updated to the newest revision available. That is, if a client is on revision r1 and revisions r2 and r3 were published, then when the client will next check for update, it will receive r3 . Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicator : IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Methods | Improve this Doc View Source CheckForUpdate(String) Check whether the given version is up-to-date and returns a SessionToken which can be used for fetching the revision files, otherwise returns null . Declaration SessionToken CheckForUpdate(string currentVersion) Parameters Type Name Description System.String currentVersion Returns Type Description SessionToken Remarks NOTE: When the returned session token is no longer needed, you should call Release(String) so that the session resources can be reclaimed, including the revision files. | Improve this Doc View Source ObtainFile(String, String, String) Returns an for the requested file and source in the context of the given Id . Declaration Stream ObtainFile(string sessionId, string source, string fileName) Parameters Type Name Description System.String sessionId System.String source System.String fileName Returns Type Description Stream Remarks NOTE: It is the caller's responsibility to call on the returned stream. Exceptions Type Condition SessionExpiredException The specified session has already expired | Improve this Doc View Source Publish(IRevision) Publish a new IRevision for consumption by clients. It is the caller's responsibility to verify that the revision files exist and can be read by clients. When the revision is no longer needed, it will be Release(String) d by the replicator. Declaration void Publish(IRevision revision) Parameters Type Name Description IRevision revision The IRevision to publish. | Improve this Doc View Source Release(String) Notify that the specified SessionToken is no longer needed by the caller. Declaration void Release(string sessionId) Parameters Type Name Description System.String sessionId"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IRevision.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IRevision.html",
    "title": "Interface IRevision | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IRevision A revision comprises lists of files that come from different sources and need to be replicated together to e.g. guarantee that all resources are in sync. In most cases an application will replicate a single index, and so the revision will contain files from a single source. However, some applications may require to treat a collection of indexes as a single entity so that the files from all sources are replicated together, to guarantee consistency beween them. For example, an application which indexes facets will need to replicate both the search and taxonomy indexes together, to guarantee that they match at the client side. Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface IRevision : IComparable<IRevision> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Properties | Improve this Doc View Source SourceFiles Returns the files that comprise this revision, as a mapping from a source to a list of files. Declaration IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description IDictionary < System.String , IList < RevisionFile >> | Improve this Doc View Source Version Returns a string representation of the version of this revision. The version is used by CompareTo(String) as well as to serialize/deserialize revision information. Therefore it must be self descriptive as well as be able to identify one revision from another. Declaration string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(String) Compares the revision to the given version string. Behaves like Declaration int CompareTo(string version) Parameters Type Name Description System.String version Returns Type Description System.Int32 | Improve this Doc View Source Open(String, String) Returns a for the given fileName and source . It is the caller's respnsibility to dispose the when it has been consumed. Declaration Stream Open(string source, string fileName) Parameters Type Name Description System.String source System.String fileName Returns Type Description Stream | Improve this Doc View Source Release() Called when this revision can be safely released, i.e. where there are no more references to it. Declaration void Release()"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.ISourceDirectoryFactory.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.ISourceDirectoryFactory.html",
    "title": "Interface ISourceDirectoryFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISourceDirectoryFactory Resolves a session and source into a Directory to use for copying the session files to. Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface ISourceDirectoryFactory Methods | Improve this Doc View Source CleanupSession(String) Called to denote that the replication actions for this session were finished and the directory is no longer needed. Declaration void CleanupSession(string sessionId) Parameters Type Name Description System.String sessionId | Improve this Doc View Source GetDirectory(String, String) Returns the Directory to use for the given session and source. Implementations may e.g. return different directories for different sessions, or the same directory for all sessions. In that case, it is advised to clean the directory before it is used for a new session. Declaration Directory GetDirectory(string sessionId, string source) Parameters Type Name Description System.String sessionId System.String source Returns Type Description Directory See Also CleanupSession(String)"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.LocalReplicator.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.LocalReplicator.html",
    "title": "Class LocalReplicator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LocalReplicator A IReplicator implementation for use by the side that publishes IRevision s, as well for clients to CheckForUpdate(String) check for updates}. When a client needs to be updated, it is returned a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. As long as a revision is being replicated, this replicator guarantees that it will not be Release() . Replication sessions expire by default after , and the threshold can be configured through ExpirationThreshold . Inheritance System.Object LocalReplicator Implements IReplicator IDisposable Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class LocalReplicator : object, IReplicator, IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Fields | Improve this Doc View Source DEFAULT_SESSION_EXPIRATION_THRESHOLD Threshold for expiring inactive sessions. Defaults to 30 minutes. Declaration public const long DEFAULT_SESSION_EXPIRATION_THRESHOLD = null Field Value Type Description System.Int64 Properties | Improve this Doc View Source ExpirationThreshold Gets or sets the expiration threshold in milliseconds. If a replication session is inactive this long it is automatically expired, and further attempts to operate within this session will throw a SessionExpiredException . Declaration public virtual long ExpirationThreshold { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CheckForUpdate(String) Declaration public virtual SessionToken CheckForUpdate(string currentVersion) Parameters Type Name Description System.String currentVersion Returns Type Description SessionToken | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EnsureOpen() Ensure that replicator is still open, or throw otherwise. Declaration protected void EnsureOpen() | Improve this Doc View Source ObtainFile(String, String, String) Declaration public virtual Stream ObtainFile(string sessionId, string source, string fileName) Parameters Type Name Description System.String sessionId System.String source System.String fileName Returns Type Description Stream | Improve this Doc View Source Publish(IRevision) Declaration public virtual void Publish(IRevision revision) Parameters Type Name Description IRevision revision | Improve this Doc View Source Release(String) Declaration public virtual void Release(string sessionId) Parameters Type Name Description System.String sessionId Implements IReplicator IDisposable"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.PerSessionDirectoryFactory.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.PerSessionDirectoryFactory.html",
    "title": "Class PerSessionDirectoryFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PerSessionDirectoryFactory A ISourceDirectoryFactory which returns FSDirectory under a dedicated session directory. When a session is over, the entire directory is deleted. Inheritance System.Object PerSessionDirectoryFactory Implements ISourceDirectoryFactory Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class PerSessionDirectoryFactory : object, ISourceDirectoryFactory Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source PerSessionDirectoryFactory(String) Constructor with the given sources mapping. Declaration public PerSessionDirectoryFactory(string workingDirectory) Parameters Type Name Description System.String workingDirectory Methods | Improve this Doc View Source CleanupSession(String) Declaration public virtual void CleanupSession(string sessionId) Parameters Type Name Description System.String sessionId | Improve this Doc View Source GetDirectory(String, String) Declaration public virtual Directory GetDirectory(string sessionId, string source) Parameters Type Name Description System.String sessionId System.String source Returns Type Description Directory Implements ISourceDirectoryFactory"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.ReplicationClient.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.ReplicationClient.html",
    "title": "Class ReplicationClient | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReplicationClient A client which monitors and obtains new revisions from a IReplicator . It can be used to either periodically check for updates by invoking StartUpdateThread(Int64, String) , or manually by calling UpdateNow() . Whenever a new revision is available, the RequiredFiles(IDictionary<String, IList<RevisionFile>>) are copied to the Directory specified by PerSessionDirectoryFactory and a handler is notified. Inheritance System.Object ReplicationClient Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class ReplicationClient : IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source ReplicationClient(IReplicator, IReplicationHandler, ISourceDirectoryFactory) Constructor. Declaration public ReplicationClient(IReplicator replicator, IReplicationHandler handler, ISourceDirectoryFactory factory) Parameters Type Name Description IReplicator replicator The IReplicator used for checking for updates IReplicationHandler handler The IReplicationHandler notified when new revisions are ready ISourceDirectoryFactory factory The ISourceDirectoryFactory for returning a Directory for a given source and session Fields | Improve this Doc View Source INFO_STREAM_COMPONENT The component name to use with IsEnabled(String) Declaration public const string INFO_STREAM_COMPONENT = null Field Value Type Description System.String Properties | Improve this Doc View Source InfoStream Gets or sets the InfoStream to use for logging messages. Declaration public virtual InfoStream InfoStream { get; set; } Property Value Type Description InfoStream | Improve this Doc View Source IsUpdateThreadAlive Returns true if the update thread is alive. The update thread is alive if it has been StartUpdateThread(Int64, String) and not StopUpdateThread() , as well as didn't hit an error which caused it to terminate (i.e. HandleUpdateException(Exception) threw the exception further). Declaration public virtual bool IsUpdateThreadAlive { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EnsureOpen() Throws if the client has already been disposed. Declaration protected void EnsureOpen() | Improve this Doc View Source HandleUpdateException(Exception) Called when an exception is hit by the replication thread. The default implementation prints the full stacktrace to the InfoStream set in InfoStream , or the Default one. You can override to log the exception elsewhere. Declaration protected virtual void HandleUpdateException(Exception exception) Parameters Type Name Description Exception exception Remarks NOTE: If you override this method to throw the exception further, the replication thread will be terminated. The only way to restart it is to call StopUpdateThread() followed by StartUpdateThread(Int64, String) . | Improve this Doc View Source RequiredFiles(IDictionary<String, IList<RevisionFile>>) Returns the files required for replication. By default, this method returns all files that exist in the new revision, but not in the handler. Declaration protected virtual IDictionary<string, IList<RevisionFile>> RequiredFiles(IDictionary<string, IList<RevisionFile>> newRevisionFiles) Parameters Type Name Description IDictionary < System.String , IList < RevisionFile >> newRevisionFiles Returns Type Description IDictionary < System.String , IList < RevisionFile >> | Improve this Doc View Source StartUpdateThread(Int64, String) Start the update thread with the specified interval in milliseconds. For debugging purposes, you can optionally set the name to set on Lucene.Net.Replicator.ReplicationClient.ReplicationThread.Name . If you pass null , a default name will be set. Declaration public virtual void StartUpdateThread(long intervalMillis, string threadName) Parameters Type Name Description System.Int64 intervalMillis System.String threadName | Improve this Doc View Source StopUpdateThread() Stop the update thread. If the update thread is not running, silently does nothing. This method returns after the update thread has stopped. Declaration public virtual void StopUpdateThread() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source UpdateNow() Executes the update operation immediately, regardless if an update thread is running or not. Declaration public virtual void UpdateNow()"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.RevisionFile.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.RevisionFile.html",
    "title": "Class RevisionFile | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RevisionFile Describes a file in a IRevision . A file has a source, which allows a single revision to contain files from multiple sources (e.g. multiple indexes). Inheritance System.Object RevisionFile Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class RevisionFile : IEquatable<RevisionFile> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source RevisionFile(String, Int64) Constructor with the given file name and optionally length. Declaration public RevisionFile(string fileName, long length = null) Parameters Type Name Description System.String fileName The name of the file System.Int64 length Optional, the length of the file. Properties | Improve this Doc View Source FileName Gets the name of the file. Declaration public string FileName { get; } Property Value Type Description System.String | Improve this Doc View Source Length Gets or sets the length of the file denoted by FileName . Declaration public long Length { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Equals(RevisionFile) Declaration public virtual bool Equals(RevisionFile other) Parameters Type Name Description RevisionFile other Returns Type Description System.Boolean | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.SessionExpiredException.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.SessionExpiredException.html",
    "title": "Class SessionExpiredException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SessionExpiredException Exception indicating that a revision update session was expired due to lack of activity. Inheritance System.Object SessionExpiredException Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class SessionExpiredException : IOException Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source SessionExpiredException() Declaration public SessionExpiredException() | Improve this Doc View Source SessionExpiredException(String) Declaration public SessionExpiredException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source SessionExpiredException(String, Exception) Declaration public SessionExpiredException(string message, Exception inner) Parameters Type Name Description System.String message Exception inner See Also DEFAULT_SESSION_EXPIRATION_THRESHOLD ExpirationThreshold"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.SessionToken.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.SessionToken.html",
    "title": "Class SessionToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SessionToken Token for a replication session, for guaranteeing that source replicated files will be kept safe until the replication completes. Inheritance System.Object SessionToken Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public sealed class SessionToken : object Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source SessionToken(IDataInput) Constructor which deserializes from the given . Declaration public SessionToken(IDataInput reader) Parameters Type Name Description IDataInput reader | Improve this Doc View Source SessionToken(String, IRevision) Constructor with the given id and revision . Declaration public SessionToken(string id, IRevision revision) Parameters Type Name Description System.String id IRevision revision Properties | Improve this Doc View Source Id Id of this session. Should be passed when releasing the session, thereby acknowledging the IReplicator that this session is no longer in use. Declaration public string Id { get; } Property Value Type Description System.String See Also Release ( System.String ) | Improve this Doc View Source SourceFiles SourceFiles Declaration public IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description IDictionary < System.String , IList < RevisionFile >> | Improve this Doc View Source Version Version Declaration public string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Serialize(DataOutputStream) Serialize the token data for communication between server and client. Declaration public void Serialize(DataOutputStream writer) Parameters Type Name Description DataOutputStream writer | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String See Also CheckForUpdate ( System.String ) Release ( System.String ) DEFAULT_SESSION_EXPIRATION_THRESHOLD"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.DuplicateFilter.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.DuplicateFilter.html",
    "title": "Class DuplicateFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DuplicateFilter Filter to remove duplicate values from search results. WARNING: for this to work correctly, you may have to wrap your reader as it cannot current deduplicate across different index segments. Inheritance System.Object Filter DuplicateFilter Inherited Members Lucene.Net.Search.Filter.NewAnonymous(Func<, , >) Namespace : Lucene.Net.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax public class DuplicateFilter : Filter Constructors | Improve this Doc View Source DuplicateFilter(String) Declaration public DuplicateFilter(string fieldName) Parameters Type Name Description System.String fieldName | Improve this Doc View Source DuplicateFilter(String, KeepMode, ProcessingMode) Declaration public DuplicateFilter(string fieldName, KeepMode keepMode, ProcessingMode processingMode) Parameters Type Name Description System.String fieldName KeepMode keepMode ProcessingMode processingMode Properties | Improve this Doc View Source FieldName Declaration public virtual string FieldName { get; set; } Property Value Type Description System.String | Improve this Doc View Source KeepMode Declaration public KeepMode KeepMode { get; set; } Property Value Type Description KeepMode | Improve this Doc View Source ProcessingMode Declaration public ProcessingMode ProcessingMode { get; set; } Property Value Type Description ProcessingMode Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 See Also SlowCompositeReaderWrapper"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.FuzzyLikeThisQuery.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.FuzzyLikeThisQuery.html",
    "title": "Class FuzzyLikeThisQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyLikeThisQuery Fuzzifies ALL terms provided as strings and then picks the best n differentiating terms. In effect this mixes the behaviour of FuzzyQuery and MoreLikeThis but with special consideration of fuzzy scoring factors. This generally produces good results for queries where users may provide details in a number of fields and have no knowledge of boolean query syntax and also want a degree of fuzzy matching and a fast query. For each source term the fuzzy variants are held in a BooleanQuery with no coord factor (because we are not looking for matches on multiple variants in any one doc). Additionally, a specialized TermQuery is used for variants and does not use that variant term's IDF because this would favour rarer terms eg misspellings. Instead, all variants use the same IDF ranking (the one for the source query term) and this is factored into the variant's boost. If the source query term does not exist in the index the average IDF of the variants is used. Inheritance System.Object Query FuzzyLikeThisQuery Inherited Members Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Lucene.Net.Search.Query.ExtractTerms(ISet<>) Query.Clone() Namespace : Lucene.Net.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax public class FuzzyLikeThisQuery : Query Constructors | Improve this Doc View Source FuzzyLikeThisQuery(Int32, Analyzer) Declaration public FuzzyLikeThisQuery(int maxNumTerms, Analyzer analyzer) Parameters Type Name Description System.Int32 maxNumTerms The total number of terms clauses that will appear once rewritten as a BooleanQuery Analyzer analyzer Properties | Improve this Doc View Source IgnoreTF Declaration public virtual bool IgnoreTF { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source AddTerms(String, String, Single, Int32) Adds user input for \"fuzzification\" Declaration public virtual void AddTerms(string queryString, string fieldName, float minSimilarity, int prefixLength) Parameters Type Name Description System.String queryString The string which will be parsed by the analyzer and for which fuzzy variants will be parsed System.String fieldName The minimum similarity of the term variants (see FuzzyTermsEnum ) System.Single minSimilarity Length of required common prefix on variant terms (see FuzzyTermsEnum ) System.Int32 prefixLength | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) (non-Javadoc) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.html",
    "title": "Namespace Lucene.Net.Sandbox.Queries | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Sandbox.Queries <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Additional queries (some may have caveats or limitations) Classes DuplicateFilter Filter to remove duplicate values from search results. WARNING: for this to work correctly, you may have to wrap your reader as it cannot current deduplicate across different index segments. FuzzyLikeThisQuery Fuzzifies ALL terms provided as strings and then picks the best n differentiating terms. In effect this mixes the behaviour of FuzzyQuery and MoreLikeThis but with special consideration of fuzzy scoring factors. This generally produces good results for queries where users may provide details in a number of fields and have no knowledge of boolean query syntax and also want a degree of fuzzy matching and a fast query. For each source term the fuzzy variants are held in a BooleanQuery with no coord factor (because we are not looking for matches on multiple variants in any one doc). Additionally, a specialized TermQuery is used for variants and does not use that variant term's IDF because this would favour rarer terms eg misspellings. Instead, all variants use the same IDF ranking (the one for the source query term) and this is factored into the variant's boost. If the source query term does not exist in the index the average IDF of the variants is used. SlowFuzzyQuery Implements the classic fuzzy search query. The similarity measurement is based on the Levenshtein (edit distance) algorithm. Note that, unlike FuzzyQuery , this query will silently allow for a (possibly huge) number of edit distances in comparisons, and may be extremely slow (comparing every term in the index). SlowFuzzyTermsEnum Potentially slow fuzzy TermsEnum for enumerating all terms that are similar to the specified filter term. If the minSimilarity or maxEdits is greater than the Automaton's allowable range, this backs off to the classic (brute force) fuzzy terms enum method by calling . Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. SortedSetSortField SortField for SortedSetDocValues . A SortedSetDocValues contains multiple values for a field, so sorting with this technique \"selects\" a value as the representative sort value for the document. By default, the minimum value in the set is selected as the sort value, but this can be customized. Selectors other than the default do have some limitations (see below) to ensure that all selections happen in constant-time for performance. Like sorting by string, this also supports sorting missing values as first or last, via MissingValue . Limitations: Fields containing or more unique values are unsupported. Selectors other than the default MIN require optional codec support. However several codecs provided by Lucene, including the current default codec, support this. Enums KeepMode KeepMode determines which document id to consider as the master, all others being identified as duplicates. Selecting the \"first occurrence\" can potentially save on IO. ProcessingMode \"Full\" processing mode starts by setting all bits to false and only setting bits for documents that contain the given field and are identified as none-duplicates. \"Fast\" processing sets all bits to true then unsets all duplicate docs found for the given field. This approach avoids the need to read DocsEnum for terms that are seen to have a document frequency of exactly \"1\" (i.e. no duplicates). While a potentially faster approach , the downside is that bitsets produced will include bits set for documents that do not actually contain the field given. Selector Selects a value from the document's set to use as the sort value"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.KeepMode.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.KeepMode.html",
    "title": "Enum KeepMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum KeepMode KeepMode determines which document id to consider as the master, all others being identified as duplicates. Selecting the \"first occurrence\" can potentially save on IO. Namespace : Lucene.Net.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax public enum KeepMode : int Fields Name Description KM_USE_FIRST_OCCURRENCE KM_USE_LAST_OCCURRENCE"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.ProcessingMode.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.ProcessingMode.html",
    "title": "Enum ProcessingMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum ProcessingMode \"Full\" processing mode starts by setting all bits to false and only setting bits for documents that contain the given field and are identified as none-duplicates. \"Fast\" processing sets all bits to true then unsets all duplicate docs found for the given field. This approach avoids the need to read DocsEnum for terms that are seen to have a document frequency of exactly \"1\" (i.e. no duplicates). While a potentially faster approach , the downside is that bitsets produced will include bits set for documents that do not actually contain the field given. Namespace : Lucene.Net.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax public enum ProcessingMode : int Fields Name Description PM_FAST_INVALIDATION \"Fast\" processing sets all bits to true then unsets all duplicate docs found for the given field. This approach avoids the need to read DocsEnum for terms that are seen to have a document frequency of exactly \"1\" (i.e. no duplicates). While a potentially faster approach , the downside is that bitsets produced will include bits set for documents that do not actually contain the field given. PM_FULL_VALIDATION \"Full\" processing mode starts by setting all bits to false and only setting bits for documents that contain the given field and are identified as none-duplicates."
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.Selector.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.Selector.html",
    "title": "Enum Selector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Selector Selects a value from the document's set to use as the sort value Namespace : Lucene.Net.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax public enum Selector : int Fields Name Description MAX Selects the maximum value in the set MIDDLE_MAX Selects the middle value in the set. If the set has an even number of values, the higher of the middle two is chosen MIDDLE_MIN Selects the middle value in the set. If the set has an even number of values, the lower of the middle two is chosen. MIN Selects the minimum value in the set"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.SlowFuzzyQuery.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.SlowFuzzyQuery.html",
    "title": "Class SlowFuzzyQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SlowFuzzyQuery Implements the classic fuzzy search query. The similarity measurement is based on the Levenshtein (edit distance) algorithm. Note that, unlike FuzzyQuery , this query will silently allow for a (possibly huge) number of edit distances in comparisons, and may be extremely slow (comparing every term in the index). Inheritance System.Object Query MultiTermQuery SlowFuzzyQuery Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Lucene.Net.Search.Query.ExtractTerms(ISet<>) Query.Clone() Namespace : Lucene.Net.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax public class SlowFuzzyQuery : MultiTermQuery Constructors | Improve this Doc View Source SlowFuzzyQuery(Term) Calls SlowFuzzyQuery(Term, Single) . Declaration public SlowFuzzyQuery(Term term) Parameters Type Name Description Term term | Improve this Doc View Source SlowFuzzyQuery(Term, Single) Calls SlowFuzzyQuery(Term, Single) . Declaration public SlowFuzzyQuery(Term term, float minimumSimilarity) Parameters Type Name Description Term term System.Single minimumSimilarity | Improve this Doc View Source SlowFuzzyQuery(Term, Single, Int32) Calls SlowFuzzyQuery(Term, Single) . Declaration public SlowFuzzyQuery(Term term, float minimumSimilarity, int prefixLength) Parameters Type Name Description Term term System.Single minimumSimilarity System.Int32 prefixLength | Improve this Doc View Source SlowFuzzyQuery(Term, Single, Int32, Int32) Create a new SlowFuzzyQuery that will match terms with a similarity of at least minimumSimilarity to term . If a prefixLength > 0 is specified, a common prefix of that length is also required. Declaration public SlowFuzzyQuery(Term term, float minimumSimilarity, int prefixLength, int maxExpansions) Parameters Type Name Description Term term the term to search for System.Single minimumSimilarity a value between 0 and 1 to set the required similarity between the query term and the matching terms. For example, for a minimumSimilarity of 0.5 a term of the same length as the query term is considered similar to the query term if the edit distance between both terms is less than length(term)*0.5 Alternatively, if minimumSimilarity is >= 1f, it is interpreted as a pure Levenshtein edit distance. For example, a value of 2f will match all terms within an edit distance of 2 from the query term. Edit distances specified in this way may not be fractional. System.Int32 prefixLength length of common (non-fuzzy) prefix System.Int32 maxExpansions the maximum number of terms to match. If this number is greater than MaxClauseCount when the query is rewritten, then the maxClauseCount will be used instead. Fields | Improve this Doc View Source defaultMaxExpansions Declaration public static readonly int defaultMaxExpansions Field Value Type Description System.Int32 | Improve this Doc View Source defaultMinSimilarity Declaration public static readonly float defaultMinSimilarity Field Value Type Description System.Single | Improve this Doc View Source defaultPrefixLength Declaration public static readonly int defaultPrefixLength Field Value Type Description System.Int32 | Improve this Doc View Source m_term Declaration protected Term m_term Field Value Type Description Term Properties | Improve this Doc View Source MinSimilarity Gets the minimum similarity that is required for this query to match. Returns float value between 0.0 and 1.0. Declaration public virtual float MinSimilarity { get; } Property Value Type Description System.Single | Improve this Doc View Source PrefixLength Gets the non-fuzzy prefix length. This is the number of characters at the start of a term that must be identical (not fuzzy) to the query term if the query is to match that term. Declaration public virtual int PrefixLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Term Gets the pattern term. Declaration public virtual Term Term { get; } Property Value Type Description Term Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.SlowFuzzyTermsEnum.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.SlowFuzzyTermsEnum.html",
    "title": "Class SlowFuzzyTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SlowFuzzyTermsEnum Potentially slow fuzzy TermsEnum for enumerating all terms that are similar to the specified filter term. If the minSimilarity or maxEdits is greater than the Automaton's allowable range, this backs off to the classic (brute force) fuzzy terms enum method by calling . Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Inheritance System.Object TermsEnum FuzzyTermsEnum SlowFuzzyTermsEnum Implements IBytesRefIterator Inherited Members FuzzyTermsEnum.m_minSimilarity FuzzyTermsEnum.m_scaleFactor FuzzyTermsEnum.m_termLength FuzzyTermsEnum.m_maxEdits FuzzyTermsEnum.m_raw FuzzyTermsEnum.m_terms FuzzyTermsEnum.m_termText FuzzyTermsEnum.m_realPrefixLength FuzzyTermsEnum.GetAutomatonEnum(Int32, BytesRef) FuzzyTermsEnum.SetEnum(TermsEnum) FuzzyTermsEnum.Next() FuzzyTermsEnum.DocFreq FuzzyTermsEnum.TotalTermFreq FuzzyTermsEnum.Docs(IBits, DocsEnum, DocsFlags) FuzzyTermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) FuzzyTermsEnum.SeekExact(BytesRef, TermState) FuzzyTermsEnum.GetTermState() FuzzyTermsEnum.Comparer FuzzyTermsEnum.Ord FuzzyTermsEnum.SeekExact(BytesRef) FuzzyTermsEnum.SeekCeil(BytesRef) FuzzyTermsEnum.SeekExact(Int64) FuzzyTermsEnum.Term FuzzyTermsEnum.MinSimilarity FuzzyTermsEnum.ScaleFactor TermsEnum.Attributes TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY Namespace : Lucene.Net.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax public class SlowFuzzyTermsEnum : FuzzyTermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source SlowFuzzyTermsEnum(Terms, AttributeSource, Term, Single, Int32) Declaration public SlowFuzzyTermsEnum(Terms terms, AttributeSource atts, Term term, float minSimilarity, int prefixLength) Parameters Type Name Description Terms terms AttributeSource atts Term term System.Single minSimilarity System.Int32 prefixLength Methods | Improve this Doc View Source MaxEditDistanceChanged(BytesRef, Int32, Boolean) Declaration protected override void MaxEditDistanceChanged(BytesRef lastTerm, int maxEdits, bool init) Parameters Type Name Description BytesRef lastTerm System.Int32 maxEdits System.Boolean init Implements IBytesRefIterator"
  },
  "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.SortedSetSortField.html": {
    "href": "api/Lucene.Net.Sandbox/Lucene.Net.Sandbox.Queries.SortedSetSortField.html",
    "title": "Class SortedSetSortField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedSetSortField SortField for SortedSetDocValues . A SortedSetDocValues contains multiple values for a field, so sorting with this technique \"selects\" a value as the representative sort value for the document. By default, the minimum value in the set is selected as the sort value, but this can be customized. Selectors other than the default do have some limitations (see below) to ensure that all selections happen in constant-time for performance. Like sorting by string, this also supports sorting missing values as first or last, via MissingValue . Limitations: Fields containing or more unique values are unsupported. Selectors other than the default MIN require optional codec support. However several codecs provided by Lucene, including the current default codec, support this. Inheritance System.Object SortField SortedSetSortField Inherited Members SortField.FIELD_SCORE SortField.FIELD_DOC SortField.m_missingValue SortField.STRING_FIRST SortField.STRING_LAST SortField.Field SortField.Type SortField.Parser SortField.IsReverse SortField.ComparerSource SortField.BytesComparer SortField.Rewrite(IndexSearcher) SortField.NeedsScores Namespace : Lucene.Net.Sandbox.Queries Assembly : Lucene.Net.Sandbox.dll Syntax public class SortedSetSortField : SortField Constructors | Improve this Doc View Source SortedSetSortField(String, Boolean) Creates a sort, possibly in reverse, by the minimum value in the set for the document. Declaration public SortedSetSortField(string field, bool reverse) Parameters Type Name Description System.String field Name of field to sort by. Must not be null. System.Boolean reverse True if natural order should be reversed. | Improve this Doc View Source SortedSetSortField(String, Boolean, Selector) Creates a sort, possibly in reverse, specifying how the sort value from the document's set is selected. Declaration public SortedSetSortField(string field, bool reverse, Selector selector) Parameters Type Name Description System.String field Name of field to sort by. Must not be null. System.Boolean reverse True if natural order should be reversed. Selector selector custom selector for choosing the sort value from the set. NOTE: selectors other than MIN require optional codec support. Properties | Improve this Doc View Source MissingValue Set how missing values (the empty set) are sorted. Note that this must be STRING_FIRST or STRING_LAST . Declaration public override object MissingValue { get; set; } Property Value Type Description System.Object Overrides SortField.MissingValue | Improve this Doc View Source Selector Returns the selector in use for this sort Declaration public Selector Selector { get; } Property Value Type Description Selector Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetComparer(Int32, Int32) Declaration public override FieldComparer GetComparer(int numHits, int sortPos) Parameters Type Name Description System.Int32 numHits System.Int32 sortPos Returns Type Description FieldComparer | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides SortField.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SortField.ToString()"
  },
  "api/Lucene.Net.Sandbox/overview.html": {
    "href": "api/Lucene.Net.Sandbox/overview.html",
    "title": "Lucene.Net.Sandbox | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Lucene.Net.Sandbox <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Sandbox"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.DisjointSpatialFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.DisjointSpatialFilter.html",
    "title": "Class DisjointSpatialFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DisjointSpatialFilter A Spatial Filter implementing IsDisjointTo in terms of a SpatialStrategy 's support for Intersects . A document is considered disjoint if it has spatial data that does not intersect with the query shape. Another way of looking at this is that it's a way to invert a query shape. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Filter DisjointSpatialFilter Inherited Members Lucene.Net.Search.Filter.NewAnonymous(Func<, , >) Namespace : Lucene.Net.Spatial Assembly : Lucene.Net.Spatial.dll Syntax public class DisjointSpatialFilter : Filter Constructors | Improve this Doc View Source DisjointSpatialFilter(SpatialStrategy, SpatialArgs, String) Declaration public DisjointSpatialFilter(SpatialStrategy strategy, SpatialArgs args, string field) Parameters Type Name Description SpatialStrategy strategy Needed to compute intersects SpatialArgs args Used in spatial intersection System.String field This field is used to determine which docs have spatial data via . Passing null will assume all docs have spatial data. Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.html",
    "title": "Namespace Lucene.Net.Spatial | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The Spatial Module for Apache Lucene The spatial module is new to Lucene 4, replacing the old \"contrib\" module that came before it. The principle interface to the module is a SpatialStrategy which encapsulates an approach to indexing and searching based on shapes. Different Strategies have different features and performance profiles, which are documented at each Strategy implementation class level. For some sample code showing how to use the API, see SpatialExample.java in the tests. The spatial module uses Spatial4j heavily. Spatial4j is an ASL licensed library with these capabilities: * Provides shape implementations, namely point, rectangle, and circle. Both geospatial contexts and plain 2D Euclidean/Cartesian contexts are supported. With an additional dependency, it adds polygon and other geometry shape support via integration with JTS Topology Suite . This includes dateline wrap support. * Shape parsing and serialization, including Well-Known Text (WKT) (via JTS). * Distance and other spatial related math calculations. Historical note: The new spatial module was once known as Lucene Spatial Playground (LSP) as an external project. In ~March 2012, LSP split into this new module as part of Lucene and Spatial4j externally. A large chunk of the LSP implementation originated as SOLR-2155 which uses trie/prefix-tree algorithms with a geohash encoding. That approach is implemented in RecursivePrefixTreeStrategy today. Classes DisjointSpatialFilter A Spatial Filter implementing IsDisjointTo in terms of a SpatialStrategy 's support for Intersects . A document is considered disjoint if it has spatial data that does not intersect with the query shape. Another way of looking at this is that it's a way to invert a query shape. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SpatialStrategy The SpatialStrategy encapsulates an approach to indexing and searching based on shapes. Different implementations will support different features. A strategy should document these common elements: Can it index more than one shape per field? What types of shapes can be indexed? What types of query shapes can be used? What types of query operations are supported? This might vary per shape. Does it use the FieldCache , or some other type of cache? When? If a strategy only supports certain shapes at index or query time, then in general it will throw an exception if given an incompatible one. It will not be coerced into compatibility. Note that a SpatialStrategy is not involved with the Lucene stored field values of shapes, which is immaterial to indexing and search. Thread-safe. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractPrefixTreeFilter.BaseTermsEnumTraverser.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractPrefixTreeFilter.BaseTermsEnumTraverser.html",
    "title": "Class AbstractPrefixTreeFilter.BaseTermsEnumTraverser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractPrefixTreeFilter.BaseTermsEnumTraverser Holds transient state and docid collecting utility methods as part of traversing a TermsEnum . Inheritance System.Object AbstractPrefixTreeFilter.BaseTermsEnumTraverser AbstractVisitingPrefixTreeFilter.VisitorTemplate Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class BaseTermsEnumTraverser : object Constructors | Improve this Doc View Source BaseTermsEnumTraverser(AbstractPrefixTreeFilter, AtomicReaderContext, IBits) Declaration public BaseTermsEnumTraverser(AbstractPrefixTreeFilter outerInstance, AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AbstractPrefixTreeFilter outerInstance AtomicReaderContext context IBits acceptDocs Fields | Improve this Doc View Source m_acceptDocs Declaration protected IBits m_acceptDocs Field Value Type Description IBits | Improve this Doc View Source m_context Declaration protected readonly AtomicReaderContext m_context Field Value Type Description AtomicReaderContext | Improve this Doc View Source m_docsEnum Declaration protected DocsEnum m_docsEnum Field Value Type Description DocsEnum | Improve this Doc View Source m_maxDoc Declaration protected readonly int m_maxDoc Field Value Type Description System.Int32 | Improve this Doc View Source m_outerInstance Declaration protected readonly AbstractPrefixTreeFilter m_outerInstance Field Value Type Description AbstractPrefixTreeFilter | Improve this Doc View Source m_termsEnum Declaration protected TermsEnum m_termsEnum Field Value Type Description TermsEnum Methods | Improve this Doc View Source CollectDocs(FixedBitSet) Declaration protected virtual void CollectDocs(FixedBitSet bitSet) Parameters Type Name Description FixedBitSet bitSet"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractPrefixTreeFilter.html",
    "title": "Class AbstractPrefixTreeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractPrefixTreeFilter Base class for Lucene Filters on SpatialPrefixTree fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter AbstractVisitingPrefixTreeFilter ContainsPrefixTreeFilter Inherited Members Filter.GetDocIdSet(AtomicReaderContext, IBits) Lucene.Net.Search.Filter.NewAnonymous(Func<, , >) Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class AbstractPrefixTreeFilter : Filter Constructors | Improve this Doc View Source AbstractPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32) Declaration public AbstractPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel) Parameters Type Name Description IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel Fields | Improve this Doc View Source m_detailLevel Declaration protected readonly int m_detailLevel Field Value Type Description System.Int32 | Improve this Doc View Source m_fieldName Declaration protected readonly string m_fieldName Field Value Type Description System.String | Improve this Doc View Source m_grid Declaration protected readonly SpatialPrefixTree m_grid Field Value Type Description SpatialPrefixTree | Improve this Doc View Source m_queryShape Declaration protected readonly IShape m_queryShape Field Value Type Description IShape Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.html",
    "title": "Class AbstractVisitingPrefixTreeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractVisitingPrefixTreeFilter Traverses a SpatialPrefixTree indexed field, using the template & visitor design patterns for subclasses to guide the traversal and collect matching documents. Subclasses implement GetDocIdSet(AtomicReaderContext, IBits) by instantiating a custom AbstractVisitingPrefixTreeFilter.VisitorTemplate subclass (i.e. an anonymous inner class) and implement the required methods. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter AbstractVisitingPrefixTreeFilter IntersectsPrefixTreeFilter WithinPrefixTreeFilter Inherited Members AbstractPrefixTreeFilter.m_queryShape AbstractPrefixTreeFilter.m_fieldName AbstractPrefixTreeFilter.m_grid AbstractPrefixTreeFilter.m_detailLevel Filter.GetDocIdSet(AtomicReaderContext, IBits) Lucene.Net.Search.Filter.NewAnonymous(Func<, , >) Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class AbstractVisitingPrefixTreeFilter : AbstractPrefixTreeFilter Constructors | Improve this Doc View Source AbstractVisitingPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Int32) Declaration public AbstractVisitingPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel, int prefixGridScanLevel) Parameters Type Name Description IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel System.Int32 prefixGridScanLevel Fields | Improve this Doc View Source m_prefixGridScanLevel Declaration protected readonly int m_prefixGridScanLevel Field Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides AbstractPrefixTreeFilter.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides AbstractPrefixTreeFilter.GetHashCode()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.VisitorTemplate.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.VisitorTemplate.html",
    "title": "Class AbstractVisitingPrefixTreeFilter.VisitorTemplate | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractVisitingPrefixTreeFilter.VisitorTemplate An abstract class designed to make it easy to implement predicates or other operations on a SpatialPrefixTree indexed field. An instance of this class is not designed to be re-used across AtomicReaderContext instances so simply create a new one for each call to, say a GetDocIdSet(AtomicReaderContext, IBits) . The GetDocIdSet() method here starts the work. It first checks that there are indexed terms; if not it quickly returns null. Then it calls Start() so a subclass can set up a return value, like an FixedBitSet . Then it starts the traversal process, calling FindSubCellsToVisit(Cell) which by default finds the top cells that intersect queryShape . If there isn't an indexed cell for a corresponding cell returned for this method then it's short-circuited until it finds one, at which point Visit(Cell) is called. At some depths, of the tree, the algorithm switches to a scanning mode that calls VisitScanned(Cell) for each leaf cell found. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object AbstractPrefixTreeFilter.BaseTermsEnumTraverser AbstractVisitingPrefixTreeFilter.VisitorTemplate Inherited Members AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_outerInstance AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_context AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_acceptDocs AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_maxDoc AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_termsEnum AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_docsEnum AbstractPrefixTreeFilter.BaseTermsEnumTraverser.CollectDocs(FixedBitSet) Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class VisitorTemplate : AbstractPrefixTreeFilter.BaseTermsEnumTraverser Constructors | Improve this Doc View Source VisitorTemplate(AbstractVisitingPrefixTreeFilter, AtomicReaderContext, IBits, Boolean) Declaration public VisitorTemplate(AbstractVisitingPrefixTreeFilter outerInstance, AtomicReaderContext context, IBits acceptDocs, bool hasIndexedLeaves) Parameters Type Name Description AbstractVisitingPrefixTreeFilter outerInstance AtomicReaderContext context IBits acceptDocs System.Boolean hasIndexedLeaves Fields | Improve this Doc View Source m_hasIndexedLeaves Declaration protected readonly bool m_hasIndexedLeaves Field Value Type Description System.Boolean Methods | Improve this Doc View Source FindSubCellsToVisit(Cell) Called when doing a divide & conquer to find the next intersecting cells of the query shape that are beneath cell . cell is guaranteed to have an intersection and thus this must return some number of nodes. Declaration protected virtual IEnumerator<Cell> FindSubCellsToVisit(Cell cell) Parameters Type Name Description Cell cell Returns Type Description IEnumerator < Cell > | Improve this Doc View Source Finish() Called last to return the result. Declaration protected abstract DocIdSet Finish() Returns Type Description DocIdSet | Improve this Doc View Source GetDocIdSet() Declaration public virtual DocIdSet GetDocIdSet() Returns Type Description DocIdSet | Improve this Doc View Source PostSiblings(AbstractVisitingPrefixTreeFilter.VNode) Declaration protected virtual void PostSiblings(AbstractVisitingPrefixTreeFilter.VNode vNode) Parameters Type Name Description AbstractVisitingPrefixTreeFilter.VNode vNode | Improve this Doc View Source PreSiblings(AbstractVisitingPrefixTreeFilter.VNode) Declaration protected virtual void PreSiblings(AbstractVisitingPrefixTreeFilter.VNode vNode) Parameters Type Name Description AbstractVisitingPrefixTreeFilter.VNode vNode | Improve this Doc View Source Scan(Int32) Scans ( termsEnum.Next() ) terms until a term is found that does not start with curVNode's cell. If it finds a leaf cell or a cell at level scanDetailLevel then it calls VisitScanned(Cell) . Declaration protected virtual void Scan(int scanDetailLevel) Parameters Type Name Description System.Int32 scanDetailLevel | Improve this Doc View Source Start() Called first to setup things. Declaration protected abstract void Start() | Improve this Doc View Source Visit(Cell) Visit an indexed cell returned from FindSubCellsToVisit(Cell) . Declaration protected abstract bool Visit(Cell cell) Parameters Type Name Description Cell cell An intersecting cell. Returns Type Description System.Boolean true to descend to more levels. It is an error to return true if cell.Level == detailLevel | Improve this Doc View Source VisitLeaf(Cell) Called after visit() returns true and an indexed leaf cell is found. Declaration protected abstract void VisitLeaf(Cell cell) Parameters Type Name Description Cell cell Remarks Called after Visit() returns true and an indexed leaf cell is found. An indexed leaf cell means associated documents generally won't be found at further detail levels. | Improve this Doc View Source VisitScanned(Cell) The cell is either indexed as a leaf or is the last level of detail. It might not even intersect the query shape, so be sure to check for that. Declaration protected abstract void VisitScanned(Cell cell) Parameters Type Name Description Cell cell"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.VNode.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.VNode.html",
    "title": "Class AbstractVisitingPrefixTreeFilter.VNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractVisitingPrefixTreeFilter.VNode A Visitor node/cell found via the query shape for AbstractVisitingPrefixTreeFilter.VisitorTemplate . Sometimes these are reset(cell). It's like a LinkedList node but forms a tree. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object AbstractVisitingPrefixTreeFilter.VNode Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class VNode : object"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.ContainsPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.ContainsPrefixTreeFilter.html",
    "title": "Class ContainsPrefixTreeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ContainsPrefixTreeFilter Finds docs where its indexed shape Contains the query shape. For use on RecursivePrefixTreeStrategy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter ContainsPrefixTreeFilter Inherited Members AbstractPrefixTreeFilter.m_queryShape AbstractPrefixTreeFilter.m_fieldName AbstractPrefixTreeFilter.m_grid AbstractPrefixTreeFilter.m_detailLevel Lucene.Net.Search.Filter.NewAnonymous(Func<, , >) Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class ContainsPrefixTreeFilter : AbstractPrefixTreeFilter Constructors | Improve this Doc View Source ContainsPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Boolean) Declaration public ContainsPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel, bool multiOverlappingIndexedShapes) Parameters Type Name Description IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel System.Boolean multiOverlappingIndexedShapes Fields | Improve this Doc View Source m_multiOverlappingIndexedShapes If the spatial data for a document is comprised of multiple overlapping or adjacent parts, it might fail to match a query shape when doing the CONTAINS predicate when the sum of those shapes contain the query shape but none do individually. Set this to false to increase performance if you don't care about that circumstance (such as if your indexed data doesn't even have such conditions). See LUCENE-5062. Declaration protected readonly bool m_multiOverlappingIndexedShapes Field Value Type Description System.Boolean Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides AbstractPrefixTreeFilter.Equals(Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides AbstractPrefixTreeFilter.GetHashCode()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.html",
    "title": "Namespace Lucene.Net.Spatial.Prefix | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Prefix <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Prefix Tree Strategy Classes AbstractPrefixTreeFilter Base class for Lucene Filters on SpatialPrefixTree fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractPrefixTreeFilter.BaseTermsEnumTraverser Holds transient state and docid collecting utility methods as part of traversing a TermsEnum . AbstractVisitingPrefixTreeFilter Traverses a SpatialPrefixTree indexed field, using the template & visitor design patterns for subclasses to guide the traversal and collect matching documents. Subclasses implement GetDocIdSet(AtomicReaderContext, IBits) by instantiating a custom AbstractVisitingPrefixTreeFilter.VisitorTemplate subclass (i.e. an anonymous inner class) and implement the required methods. This is a Lucene.NET INTERNAL API, use at your own risk AbstractVisitingPrefixTreeFilter.VisitorTemplate An abstract class designed to make it easy to implement predicates or other operations on a SpatialPrefixTree indexed field. An instance of this class is not designed to be re-used across AtomicReaderContext instances so simply create a new one for each call to, say a GetDocIdSet(AtomicReaderContext, IBits) . The GetDocIdSet() method here starts the work. It first checks that there are indexed terms; if not it quickly returns null. Then it calls Start() so a subclass can set up a return value, like an FixedBitSet . Then it starts the traversal process, calling FindSubCellsToVisit(Cell) which by default finds the top cells that intersect queryShape . If there isn't an indexed cell for a corresponding cell returned for this method then it's short-circuited until it finds one, at which point Visit(Cell) is called. At some depths, of the tree, the algorithm switches to a scanning mode that calls VisitScanned(Cell) for each leaf cell found. This is a Lucene.NET INTERNAL API, use at your own risk AbstractVisitingPrefixTreeFilter.VNode A Visitor node/cell found via the query shape for AbstractVisitingPrefixTreeFilter.VisitorTemplate . Sometimes these are reset(cell). It's like a LinkedList node but forms a tree. This is a Lucene.NET INTERNAL API, use at your own risk ContainsPrefixTreeFilter Finds docs where its indexed shape Contains the query shape. For use on RecursivePrefixTreeStrategy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk IntersectsPrefixTreeFilter A Filter matching documents that have an (i.e. not DISTINCT) relationship with a provided query shape. This is a Lucene.NET INTERNAL API, use at your own risk PointPrefixTreeFieldCacheProvider Implementation of ShapeFieldCacheProvider<T> designed for PrefixTreeStrategy s. Note, due to the fragmented representation of Shapes in these Strategies, this implementation can only retrieve the central Point of the original Shapes. This is a Lucene.NET INTERNAL API, use at your own risk PrefixTreeStrategy An abstract SpatialStrategy based on SpatialPrefixTree . The two subclasses are RecursivePrefixTreeStrategy and TermQueryPrefixTreeStrategy . This strategy is most effective as a fast approximate spatial search filter. Characteristics: Can index any shape; however only RecursivePrefixTreeStrategy can effectively search non-point shapes. Can index a variable number of shapes per field value. This strategy can do it via multiple calls to CreateIndexableFields(IShape) for a document or by giving it some sort of Shape aggregate (e.g. NTS WKT MultiPoint). The shape's boundary is approximated to a grid precision. Can query with any shape. The shape's boundary is approximated to a grid precision. Only Intersects is supported. If only points are indexed then this is effectively equivalent to IsWithin. The strategy supports MakeDistanceValueSource(IPoint, Double) even for multi-valued data, so long as the indexed data is all points; the behavior is undefined otherwise. However, it will likely be removed in the future in lieu of using another strategy with a more scalable implementation. Use of this call is the only circumstance in which a cache is used. The cache is simple but as such it doesn't scale to large numbers of points nor is it real-time-search friendly. Implementation: The SpatialPrefixTree does most of the work, for example returning a list of terms representing grids of various sizes for a supplied shape. An important configuration item is DistErrPct which balances shape precision against scalability. See those docs. This is a Lucene.NET INTERNAL API, use at your own risk RecursivePrefixTreeStrategy A PrefixTreeStrategy which uses AbstractVisitingPrefixTreeFilter . This strategy has support for searching non-point shapes (note: not tested). Even a query shape with distErrPct=0 (fully precise to the grid) should have good performance for typical data, unless there is a lot of indexed data coincident with the shape's edge. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermQueryPrefixTreeStrategy A basic implementation of PrefixTreeStrategy using a large TermsFilter of all the cells from GetCells(IShape, Int32, Boolean, Boolean) . It only supports the search of indexed Point shapes. The precision of query shapes (DistErrPct) is an important factor in using this Strategy. If the precision is too precise then it will result in many terms which will amount to a slower query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WithinPrefixTreeFilter Finds docs where its indexed shape is IsWithin the query shape. It works by looking at cells outside of the query shape to ensure documents there are excluded. By default, it will examine all cells, and it's fairly slow. If you know that the indexed shapes are never comprised of multiple disjoint parts (which also means it is not multi-valued), then you can pass SpatialPrefixTree.GetDistanceForLevel(maxLevels) as the queryBuffer constructor parameter to minimally look this distance beyond the query shape's edge. Even if the indexed shapes are sometimes comprised of multiple disjoint parts, you might want to use this option with a large buffer as a faster approximation with minimal false-positives. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.IntersectsPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.IntersectsPrefixTreeFilter.html",
    "title": "Class IntersectsPrefixTreeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IntersectsPrefixTreeFilter A Filter matching documents that have an (i.e. not DISTINCT) relationship with a provided query shape. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter AbstractVisitingPrefixTreeFilter IntersectsPrefixTreeFilter Inherited Members AbstractVisitingPrefixTreeFilter.m_prefixGridScanLevel AbstractPrefixTreeFilter.m_queryShape AbstractPrefixTreeFilter.m_fieldName AbstractPrefixTreeFilter.m_grid AbstractPrefixTreeFilter.m_detailLevel Lucene.Net.Search.Filter.NewAnonymous(Func<, , >) Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class IntersectsPrefixTreeFilter : AbstractVisitingPrefixTreeFilter Constructors | Improve this Doc View Source IntersectsPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Int32, Boolean) Declaration public IntersectsPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel, int prefixGridScanLevel, bool hasIndexedLeaves) Parameters Type Name Description IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel System.Int32 prefixGridScanLevel System.Boolean hasIndexedLeaves Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides AbstractVisitingPrefixTreeFilter.Equals(Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() LUCENENET specific: need to override GetHashCode to prevent a compiler warning and realistically, the hash code should work similarly to Equals. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides AbstractVisitingPrefixTreeFilter.GetHashCode()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.PointPrefixTreeFieldCacheProvider.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.PointPrefixTreeFieldCacheProvider.html",
    "title": "Class PointPrefixTreeFieldCacheProvider | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PointPrefixTreeFieldCacheProvider Implementation of ShapeFieldCacheProvider<T> designed for PrefixTreeStrategy s. Note, due to the fragmented representation of Shapes in these Strategies, this implementation can only retrieve the central Point of the original Shapes. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ShapeFieldCacheProvider < IPoint > PointPrefixTreeFieldCacheProvider Inherited Members ShapeFieldCacheProvider<IPoint>.m_defaultSize ShapeFieldCacheProvider<IPoint>.m_shapeField ShapeFieldCacheProvider<IPoint>.GetCache(AtomicReader) Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class PointPrefixTreeFieldCacheProvider : ShapeFieldCacheProvider<IPoint> Constructors | Improve this Doc View Source PointPrefixTreeFieldCacheProvider(SpatialPrefixTree, String, Int32) Declaration public PointPrefixTreeFieldCacheProvider(SpatialPrefixTree grid, string shapeField, int defaultSize) Parameters Type Name Description SpatialPrefixTree grid System.String shapeField System.Int32 defaultSize Methods | Improve this Doc View Source ReadShape(BytesRef) Declaration protected override IPoint ReadShape(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description IPoint Overrides Lucene.Net.Spatial.Util.ShapeFieldCacheProvider<IPoint>.ReadShape(Lucene.Net.Util.BytesRef)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.PrefixTreeStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.PrefixTreeStrategy.html",
    "title": "Class PrefixTreeStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixTreeStrategy An abstract SpatialStrategy based on SpatialPrefixTree . The two subclasses are RecursivePrefixTreeStrategy and TermQueryPrefixTreeStrategy . This strategy is most effective as a fast approximate spatial search filter. Characteristics: Can index any shape; however only RecursivePrefixTreeStrategy can effectively search non-point shapes. Can index a variable number of shapes per field value. This strategy can do it via multiple calls to CreateIndexableFields(IShape) for a document or by giving it some sort of Shape aggregate (e.g. NTS WKT MultiPoint). The shape's boundary is approximated to a grid precision. Can query with any shape. The shape's boundary is approximated to a grid precision. Only Intersects is supported. If only points are indexed then this is effectively equivalent to IsWithin. The strategy supports MakeDistanceValueSource(IPoint, Double) even for multi-valued data, so long as the indexed data is all points; the behavior is undefined otherwise. However, it will likely be removed in the future in lieu of using another strategy with a more scalable implementation. Use of this call is the only circumstance in which a cache is used. The cache is simple but as such it doesn't scale to large numbers of points nor is it real-time-search friendly. Implementation: The SpatialPrefixTree does most of the work, for example returning a list of terms representing grids of various sizes for a supplied shape. An important configuration item is DistErrPct which balances shape precision against scalability. See those docs. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SpatialStrategy PrefixTreeStrategy RecursivePrefixTreeStrategy TermQueryPrefixTreeStrategy Inherited Members SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeQuery(SpatialArgs) SpatialStrategy.MakeFilter(SpatialArgs) SpatialStrategy.MakeRecipDistanceValueSource(IShape) SpatialStrategy.ToString() Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class PrefixTreeStrategy : SpatialStrategy Constructors | Improve this Doc View Source PrefixTreeStrategy(SpatialPrefixTree, String, Boolean) Declaration public PrefixTreeStrategy(SpatialPrefixTree grid, string fieldName, bool simplifyIndexedCells) Parameters Type Name Description SpatialPrefixTree grid System.String fieldName System.Boolean simplifyIndexedCells Fields | Improve this Doc View Source FIELD_TYPE Indexed, tokenized, not stored. Declaration public static readonly FieldType FIELD_TYPE Field Value Type Description FieldType | Improve this Doc View Source m_defaultFieldValuesArrayLen Declaration protected int m_defaultFieldValuesArrayLen Field Value Type Description System.Int32 | Improve this Doc View Source m_distErrPct Declaration protected double m_distErrPct Field Value Type Description System.Double | Improve this Doc View Source m_grid Declaration protected readonly SpatialPrefixTree m_grid Field Value Type Description SpatialPrefixTree | Improve this Doc View Source m_simplifyIndexedCells Declaration protected readonly bool m_simplifyIndexedCells Field Value Type Description System.Boolean Properties | Improve this Doc View Source DefaultFieldValuesArrayLen A memory hint used by MakeDistanceValueSource(IPoint) for how big the initial size of each Document's array should be. The default is 2. Set this to slightly more than the default expected number of points per document. Declaration public virtual int DefaultFieldValuesArrayLen { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source DistErrPct The default measure of shape precision affecting shapes at index and query times. Declaration public virtual double DistErrPct { get; set; } Property Value Type Description System.Double Remarks The default measure of shape precision affecting shapes at index and query times. Points don't use this as they are always indexed at the configured maximum precision ( MaxLevels ); this applies to all other shapes. Specific shapes at index and query time can use something different than this default value. If you don't set a default then the default is DEFAULT_DISTERRPCT -- 2.5%. See Also DistErrPct | Improve this Doc View Source Grid Declaration public virtual SpatialPrefixTree Grid { get; } Property Value Type Description SpatialPrefixTree Methods | Improve this Doc View Source CreateIndexableFields(IShape) Declaration public override Field[] CreateIndexableFields(IShape shape) Parameters Type Name Description IShape shape Returns Type Description Field [] Overrides SpatialStrategy.CreateIndexableFields(IShape) | Improve this Doc View Source CreateIndexableFields(IShape, Double) Declaration public virtual Field[] CreateIndexableFields(IShape shape, double distErr) Parameters Type Name Description IShape shape System.Double distErr Returns Type Description Field [] | Improve this Doc View Source MakeDistanceValueSource(IPoint, Double) Declaration public override ValueSource MakeDistanceValueSource(IPoint queryPoint, double multiplier) Parameters Type Name Description IPoint queryPoint System.Double multiplier Returns Type Description ValueSource Overrides SpatialStrategy.MakeDistanceValueSource(IPoint, Double)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.RecursivePrefixTreeStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.RecursivePrefixTreeStrategy.html",
    "title": "Class RecursivePrefixTreeStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RecursivePrefixTreeStrategy A PrefixTreeStrategy which uses AbstractVisitingPrefixTreeFilter . This strategy has support for searching non-point shapes (note: not tested). Even a query shape with distErrPct=0 (fully precise to the grid) should have good performance for typical data, unless there is a lot of indexed data coincident with the shape's edge. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy PrefixTreeStrategy RecursivePrefixTreeStrategy Inherited Members PrefixTreeStrategy.m_grid PrefixTreeStrategy.m_simplifyIndexedCells PrefixTreeStrategy.m_defaultFieldValuesArrayLen PrefixTreeStrategy.m_distErrPct PrefixTreeStrategy.DefaultFieldValuesArrayLen PrefixTreeStrategy.DistErrPct PrefixTreeStrategy.CreateIndexableFields(IShape) PrefixTreeStrategy.CreateIndexableFields(IShape, Double) PrefixTreeStrategy.FIELD_TYPE PrefixTreeStrategy.MakeDistanceValueSource(IPoint, Double) PrefixTreeStrategy.Grid SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeQuery(SpatialArgs) SpatialStrategy.MakeRecipDistanceValueSource(IShape) Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class RecursivePrefixTreeStrategy : PrefixTreeStrategy Constructors | Improve this Doc View Source RecursivePrefixTreeStrategy(SpatialPrefixTree, String) Declaration public RecursivePrefixTreeStrategy(SpatialPrefixTree grid, string fieldName) Parameters Type Name Description SpatialPrefixTree grid System.String fieldName Fields | Improve this Doc View Source m_multiOverlappingIndexedShapes See m_multiOverlappingIndexedShapes . Declaration protected bool m_multiOverlappingIndexedShapes Field Value Type Description System.Boolean | Improve this Doc View Source m_pointsOnly True if only indexed points shall be supported. See Lucene.Net.Spatial.Prefix.IntersectsPrefixTreeFilter.hasIndexedLeaves . Declaration protected bool m_pointsOnly Field Value Type Description System.Boolean Properties | Improve this Doc View Source PrefixGridScanLevel Sets the grid level [1-maxLevels] at which indexed terms are scanned brute-force instead of by grid decomposition. By default this is maxLevels - 4. The final level, maxLevels, is always scanned. Value can be 1 to maxLevels. Declaration public virtual int PrefixGridScanLevel { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source MakeFilter(SpatialArgs) Declaration public override Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Overrides SpatialStrategy.MakeFilter(SpatialArgs) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SpatialStrategy.ToString()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.TermQueryPrefixTreeStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.TermQueryPrefixTreeStrategy.html",
    "title": "Class TermQueryPrefixTreeStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermQueryPrefixTreeStrategy A basic implementation of PrefixTreeStrategy using a large TermsFilter of all the cells from GetCells(IShape, Int32, Boolean, Boolean) . It only supports the search of indexed Point shapes. The precision of query shapes (DistErrPct) is an important factor in using this Strategy. If the precision is too precise then it will result in many terms which will amount to a slower query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy PrefixTreeStrategy TermQueryPrefixTreeStrategy Inherited Members PrefixTreeStrategy.m_grid PrefixTreeStrategy.m_simplifyIndexedCells PrefixTreeStrategy.m_defaultFieldValuesArrayLen PrefixTreeStrategy.m_distErrPct PrefixTreeStrategy.DefaultFieldValuesArrayLen PrefixTreeStrategy.DistErrPct PrefixTreeStrategy.CreateIndexableFields(IShape) PrefixTreeStrategy.CreateIndexableFields(IShape, Double) PrefixTreeStrategy.FIELD_TYPE PrefixTreeStrategy.MakeDistanceValueSource(IPoint, Double) PrefixTreeStrategy.Grid SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeQuery(SpatialArgs) SpatialStrategy.MakeRecipDistanceValueSource(IShape) SpatialStrategy.ToString() Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class TermQueryPrefixTreeStrategy : PrefixTreeStrategy Constructors | Improve this Doc View Source TermQueryPrefixTreeStrategy(SpatialPrefixTree, String) Declaration public TermQueryPrefixTreeStrategy(SpatialPrefixTree grid, string fieldName) Parameters Type Name Description SpatialPrefixTree grid System.String fieldName Methods | Improve this Doc View Source MakeFilter(SpatialArgs) Declaration public override Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Overrides SpatialStrategy.MakeFilter(SpatialArgs)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.Cell.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.Cell.html",
    "title": "Class Cell | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Cell Represents a grid cell. These are not necessarily thread-safe, although new Cell(\"\") (world cell) must be. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Cell Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public abstract class Cell : IComparable<Cell> Constructors | Improve this Doc View Source Cell(SpatialPrefixTree, Byte[], Int32, Int32) Declaration protected Cell(SpatialPrefixTree outerInstance, byte[] bytes, int off, int len) Parameters Type Name Description SpatialPrefixTree outerInstance System.Byte [] bytes System.Int32 off System.Int32 len | Improve this Doc View Source Cell(SpatialPrefixTree, String) Declaration protected Cell(SpatialPrefixTree outerInstance, string token) Parameters Type Name Description SpatialPrefixTree outerInstance System.String token Fields | Improve this Doc View Source LEAF_BYTE Declaration public const byte LEAF_BYTE = null Field Value Type Description System.Byte | Improve this Doc View Source m_leaf Always false for points. Declaration protected bool m_leaf Field Value Type Description System.Boolean Remarks Always false for points. Otherwise, indicate no further sub-cells are going to be provided because shapeRel is WITHIN or maxLevels or a detailLevel is hit. | Improve this Doc View Source m_outerInstance LUCENENET specific - we need to set the SpatialPrefixTree before calling overridden members of this class, just in case those overridden members require it. This is not possible from the subclass because the constructor of the base class runs first. So we need to move the reference here and also set it before running the normal constructor logic. Declaration protected readonly SpatialPrefixTree m_outerInstance Field Value Type Description SpatialPrefixTree | Improve this Doc View Source m_shapeRel When set via GetSubCells(IShape) , it is the relationship between this cell and the given shape filter. Declaration protected SpatialRelation m_shapeRel Field Value Type Description SpatialRelation Properties | Improve this Doc View Source Center Declaration public virtual IPoint Center { get; } Property Value Type Description IPoint | Improve this Doc View Source IsLeaf For points, this is always false. Declaration public virtual bool IsLeaf { get; } Property Value Type Description System.Boolean Remarks For points, this is always false. Otherwise this is true if there are no further cells with this prefix for the shape (always true at maxLevels). | Improve this Doc View Source Level Declaration public virtual int Level { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Shape Declaration public abstract IShape Shape { get; } Property Value Type Description IShape | Improve this Doc View Source ShapeRel Declaration public virtual SpatialRelation ShapeRel { get; } Property Value Type Description SpatialRelation | Improve this Doc View Source SubCellsSize GetSubCells() .Count -- usually a constant. Should be >=2 Declaration public abstract int SubCellsSize { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TokenString Note: doesn't contain a trailing leaf byte. Declaration public virtual string TokenString { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(Cell) Declaration public virtual int CompareTo(Cell o) Parameters Type Name Description Cell o Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source GetSubCell(IPoint) Performant implementations are expected to implement this efficiently by considering the current cell's boundary. Declaration public abstract Cell GetSubCell(IPoint p) Parameters Type Name Description IPoint p Returns Type Description Cell Remarks Performant implementations are expected to implement this efficiently by considering the current cell's boundary. Precondition: Never called when Level == maxLevel. Precondition: this.Shape.Relate(p) != SpatialRelation.DISJOINT. | Improve this Doc View Source GetSubCells() Gets the cells at the next grid cell level that cover this cell. Declaration protected abstract ICollection<Cell> GetSubCells() Returns Type Description ICollection < Cell > A set of cells (no dups), sorted, modifiable, not empty, not null. Remarks Gets the cells at the next grid cell level that cover this cell. Precondition: Never called when Level == maxLevel. | Improve this Doc View Source GetSubCells(IShape) Like GetSubCells() but with the results filtered by a shape. If that shape is a then it must call GetSubCell(IPoint) . The returned cells should have ShapeRel set to their relation with shapeFilter . In addition, IsLeaf must be true when that relation is . Precondition: Never called when Level == maxLevel. Declaration public virtual ICollection<Cell> GetSubCells(IShape shapeFilter) Parameters Type Name Description IShape shapeFilter an optional filter for the returned cells. Returns Type Description ICollection < Cell > A set of cells (no dups), sorted. Not Modifiable. | Improve this Doc View Source GetTokenBytes() Note: doesn't contain a trailing leaf byte. Declaration public virtual byte[] GetTokenBytes() Returns Type Description System.Byte [] | Improve this Doc View Source Reset(Byte[], Int32, Int32) Declaration public virtual void Reset(byte[] bytes, int off, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 off System.Int32 len | Improve this Doc View Source SetLeaf() Note: not supported at level 0. Declaration public virtual void SetLeaf() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.GeohashPrefixTree.Factory.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.GeohashPrefixTree.Factory.html",
    "title": "Class GeohashPrefixTree.Factory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GeohashPrefixTree.Factory Factory for creating GeohashPrefixTree instances with useful defaults Inheritance System.Object SpatialPrefixTreeFactory GeohashPrefixTree.Factory Inherited Members SpatialPrefixTreeFactory.PREFIX_TREE SpatialPrefixTreeFactory.MAX_LEVELS SpatialPrefixTreeFactory.MAX_DIST_ERR SpatialPrefixTreeFactory.m_args SpatialPrefixTreeFactory.m_ctx SpatialPrefixTreeFactory.m_maxLevels SpatialPrefixTreeFactory.MakeSPT(IDictionary<String, String>, SpatialContext) SpatialPrefixTreeFactory.Init(IDictionary<String, String>, SpatialContext) SpatialPrefixTreeFactory.InitMaxLevels() Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public class Factory : SpatialPrefixTreeFactory Methods | Improve this Doc View Source GetLevelForDistance(Double) Declaration protected override int GetLevelForDistance(double degrees) Parameters Type Name Description System.Double degrees Returns Type Description System.Int32 Overrides SpatialPrefixTreeFactory.GetLevelForDistance(Double) | Improve this Doc View Source NewSPT() Declaration protected override SpatialPrefixTree NewSPT() Returns Type Description SpatialPrefixTree Overrides SpatialPrefixTreeFactory.NewSPT()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.GeohashPrefixTree.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.GeohashPrefixTree.html",
    "title": "Class GeohashPrefixTree | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GeohashPrefixTree A SpatialPrefixTree based on Geohashes . Uses to do all the geohash work. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialPrefixTree GeohashPrefixTree Inherited Members SpatialPrefixTree.m_maxLevels SpatialPrefixTree.m_ctx SpatialPrefixTree.SpatialContext SpatialPrefixTree.MaxLevels SpatialPrefixTree.ToString() SpatialPrefixTree.GetDistanceForLevel(Int32) SpatialPrefixTree.WorldCell SpatialPrefixTree.GetCell(Byte[], Int32, Int32, Cell) SpatialPrefixTree.GetCells(IShape, Int32, Boolean, Boolean) SpatialPrefixTree.GetCells(IPoint, Int32, Boolean) SpatialPrefixTree.CellsToTokenStrings(ICollection<Cell>) Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public class GeohashPrefixTree : SpatialPrefixTree Constructors | Improve this Doc View Source GeohashPrefixTree(SpatialContext, Int32) Declaration public GeohashPrefixTree(SpatialContext ctx, int maxLevels) Parameters Type Name Description SpatialContext ctx System.Int32 maxLevels Properties | Improve this Doc View Source MaxLevelsPossible Any more than this and there's no point (double lat & lon are the same). Declaration public static int MaxLevelsPossible { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetCell(IPoint, Int32) Declaration protected override Cell GetCell(IPoint p, int level) Parameters Type Name Description IPoint p System.Int32 level Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(IPoint, Int32) | Improve this Doc View Source GetCell(Byte[], Int32, Int32) Declaration public override Cell GetCell(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(Byte[], Int32, Int32) | Improve this Doc View Source GetCell(String) Declaration public override Cell GetCell(string token) Parameters Type Name Description System.String token Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(String) | Improve this Doc View Source GetLevelForDistance(Double) Declaration public override int GetLevelForDistance(double dist) Parameters Type Name Description System.Double dist Returns Type Description System.Int32 Overrides SpatialPrefixTree.GetLevelForDistance(Double)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.html",
    "title": "Namespace Lucene.Net.Spatial.Prefix.Tree | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Prefix.Tree <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The Spatial Prefix package supports spatial indexing by index-time tokens where adding characters to a string gives greater resolution. Potential Implementations include: http://en.wikipedia.org/wiki/Quadtree http://en.wikipedia.org/wiki/Geohash http://healpix.jpl.nasa.gov/ Classes Cell Represents a grid cell. These are not necessarily thread-safe, although new Cell(\"\") (world cell) must be. This is a Lucene.NET EXPERIMENTAL API, use at your own risk GeohashPrefixTree A SpatialPrefixTree based on Geohashes . Uses to do all the geohash work. This is a Lucene.NET EXPERIMENTAL API, use at your own risk GeohashPrefixTree.Factory Factory for creating GeohashPrefixTree instances with useful defaults QuadPrefixTree A SpatialPrefixTree which uses a quad tree in which an indexed term will be generated for each cell, 'A', 'B', 'C', 'D'. This is a Lucene.NET EXPERIMENTAL API, use at your own risk QuadPrefixTree.Factory Factory for creating QuadPrefixTree instances with useful defaults SpatialPrefixTree A spatial Prefix Tree, or Trie, which decomposes shapes into prefixed strings at variable lengths corresponding to variable precision. SpatialPrefixTreeFactory Abstract Factory for creating SpatialPrefixTree instances with useful defaults and passed on configurations defined in a . This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.QuadPrefixTree.Factory.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.QuadPrefixTree.Factory.html",
    "title": "Class QuadPrefixTree.Factory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QuadPrefixTree.Factory Factory for creating QuadPrefixTree instances with useful defaults Inheritance System.Object SpatialPrefixTreeFactory QuadPrefixTree.Factory Inherited Members SpatialPrefixTreeFactory.PREFIX_TREE SpatialPrefixTreeFactory.MAX_LEVELS SpatialPrefixTreeFactory.MAX_DIST_ERR SpatialPrefixTreeFactory.m_args SpatialPrefixTreeFactory.m_ctx SpatialPrefixTreeFactory.m_maxLevels SpatialPrefixTreeFactory.MakeSPT(IDictionary<String, String>, SpatialContext) SpatialPrefixTreeFactory.Init(IDictionary<String, String>, SpatialContext) SpatialPrefixTreeFactory.InitMaxLevels() Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public class Factory : SpatialPrefixTreeFactory Methods | Improve this Doc View Source GetLevelForDistance(Double) Declaration protected override int GetLevelForDistance(double degrees) Parameters Type Name Description System.Double degrees Returns Type Description System.Int32 Overrides SpatialPrefixTreeFactory.GetLevelForDistance(Double) | Improve this Doc View Source NewSPT() Declaration protected override SpatialPrefixTree NewSPT() Returns Type Description SpatialPrefixTree Overrides SpatialPrefixTreeFactory.NewSPT()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.QuadPrefixTree.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.QuadPrefixTree.html",
    "title": "Class QuadPrefixTree | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QuadPrefixTree A SpatialPrefixTree which uses a quad tree in which an indexed term will be generated for each cell, 'A', 'B', 'C', 'D'. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialPrefixTree QuadPrefixTree Inherited Members SpatialPrefixTree.m_maxLevels SpatialPrefixTree.m_ctx SpatialPrefixTree.SpatialContext SpatialPrefixTree.MaxLevels SpatialPrefixTree.ToString() SpatialPrefixTree.GetDistanceForLevel(Int32) SpatialPrefixTree.WorldCell SpatialPrefixTree.GetCell(Byte[], Int32, Int32, Cell) SpatialPrefixTree.GetCells(IShape, Int32, Boolean, Boolean) SpatialPrefixTree.GetCells(IPoint, Int32, Boolean) SpatialPrefixTree.CellsToTokenStrings(ICollection<Cell>) Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public class QuadPrefixTree : SpatialPrefixTree Constructors | Improve this Doc View Source QuadPrefixTree(SpatialContext) Declaration public QuadPrefixTree(SpatialContext ctx) Parameters Type Name Description SpatialContext ctx | Improve this Doc View Source QuadPrefixTree(SpatialContext, IRectangle, Int32) Declaration public QuadPrefixTree(SpatialContext ctx, IRectangle bounds, int maxLevels) Parameters Type Name Description SpatialContext ctx IRectangle bounds System.Int32 maxLevels | Improve this Doc View Source QuadPrefixTree(SpatialContext, Int32) Declaration public QuadPrefixTree(SpatialContext ctx, int maxLevels) Parameters Type Name Description SpatialContext ctx System.Int32 maxLevels Fields | Improve this Doc View Source DEFAULT_MAX_LEVELS Declaration public const int DEFAULT_MAX_LEVELS = null Field Value Type Description System.Int32 | Improve this Doc View Source MAX_LEVELS_POSSIBLE Declaration public const int MAX_LEVELS_POSSIBLE = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source GridH Declaration public double GridH { get; } Property Value Type Description System.Double Methods | Improve this Doc View Source GetCell(IPoint, Int32) Declaration protected override Cell GetCell(IPoint p, int level) Parameters Type Name Description IPoint p System.Int32 level Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(IPoint, Int32) | Improve this Doc View Source GetCell(Byte[], Int32, Int32) Declaration public override Cell GetCell(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(Byte[], Int32, Int32) | Improve this Doc View Source GetCell(String) Declaration public override Cell GetCell(string token) Parameters Type Name Description System.String token Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(String) | Improve this Doc View Source GetLevelForDistance(Double) Declaration public override int GetLevelForDistance(double dist) Parameters Type Name Description System.Double dist Returns Type Description System.Int32 Overrides SpatialPrefixTree.GetLevelForDistance(Double) | Improve this Doc View Source PrintInfo(TextWriter) Declaration public virtual void PrintInfo(TextWriter out) Parameters Type Name Description TextWriter out"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.SpatialPrefixTree.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.SpatialPrefixTree.html",
    "title": "Class SpatialPrefixTree | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpatialPrefixTree A spatial Prefix Tree, or Trie, which decomposes shapes into prefixed strings at variable lengths corresponding to variable precision. Inheritance System.Object SpatialPrefixTree GeohashPrefixTree QuadPrefixTree Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public abstract class SpatialPrefixTree : object Remarks A spatial Prefix Tree, or Trie, which decomposes shapes into prefixed strings at variable lengths corresponding to variable precision. Each string corresponds to a rectangular spatial region. This approach is also referred to \"Grids\", \"Tiles\", and \"Spatial Tiers\". Implementations of this class should be thread-safe and immutable once initialized. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source SpatialPrefixTree(SpatialContext, Int32) Declaration public SpatialPrefixTree(SpatialContext ctx, int maxLevels) Parameters Type Name Description SpatialContext ctx System.Int32 maxLevels Fields | Improve this Doc View Source m_ctx Declaration protected readonly SpatialContext m_ctx Field Value Type Description SpatialContext | Improve this Doc View Source m_maxLevels Declaration protected readonly int m_maxLevels Field Value Type Description System.Int32 Properties | Improve this Doc View Source MaxLevels Declaration public virtual int MaxLevels { get; } Property Value Type Description System.Int32 | Improve this Doc View Source SpatialContext Declaration public virtual SpatialContext SpatialContext { get; } Property Value Type Description SpatialContext | Improve this Doc View Source WorldCell Returns the level 0 cell which encompasses all spatial data. Declaration public virtual Cell WorldCell { get; } Property Value Type Description Cell Remarks Returns the level 0 cell which encompasses all spatial data. Equivalent to GetCell(String) with . This cell is threadsafe, just like a spatial prefix grid is, although cells aren't generally threadsafe. Methods | Improve this Doc View Source CellsToTokenStrings(ICollection<Cell>) Will add the trailing leaf byte for leaves. This isn't particularly efficient. Declaration public static IList<string> CellsToTokenStrings(ICollection<Cell> cells) Parameters Type Name Description ICollection < Cell > cells Returns Type Description IList < System.String > | Improve this Doc View Source GetCell(IPoint, Int32) Returns the cell containing point p at the specified level . Declaration protected virtual Cell GetCell(IPoint p, int level) Parameters Type Name Description IPoint p System.Int32 level Returns Type Description Cell | Improve this Doc View Source GetCell(Byte[], Int32, Int32) Declaration public abstract Cell GetCell(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Returns Type Description Cell | Improve this Doc View Source GetCell(Byte[], Int32, Int32, Cell) Declaration public Cell GetCell(byte[] bytes, int offset, int len, Cell target) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Cell target Returns Type Description Cell | Improve this Doc View Source GetCell(String) The cell for the specified token. Declaration public abstract Cell GetCell(string token) Parameters Type Name Description System.String token Returns Type Description Cell Remarks The cell for the specified token. The empty string should be equal to WorldCell . Precondition: Never called when token length > maxLevel. | Improve this Doc View Source GetCells(IPoint, Int32, Boolean) A Point-optimized implementation of GetCells(IShape, Int32, Boolean, Boolean) . That method in facts calls this for points. This implementation depends on GetCell(String) being fast, as its called repeatedly when incPlarents is true. Declaration public virtual IList<Cell> GetCells(IPoint p, int detailLevel, bool inclParents) Parameters Type Name Description IPoint p System.Int32 detailLevel System.Boolean inclParents Returns Type Description IList < Cell > | Improve this Doc View Source GetCells(IShape, Int32, Boolean, Boolean) Gets the intersecting cells for the specified shape, without exceeding detail level. Declaration public virtual IList<Cell> GetCells(IShape shape, int detailLevel, bool inclParents, bool simplify) Parameters Type Name Description IShape shape the shape; non-null System.Int32 detailLevel the maximum detail level to get cells for System.Boolean inclParents if true then all parent cells of leaves are returned too. The top world cell is never returned. System.Boolean simplify for non-point shapes, this will simply/aggregate sets of complete leaves in a cell to its parent, resulting in ~20-25% fewer cells. Returns Type Description IList < Cell > a set of cells (no dups), sorted, immutable, non-null Remarks Gets the intersecting cells for the specified shape, without exceeding detail level. If a cell is within the query shape then it's marked as a leaf and none of its children are added. This implementation checks if shape is a and if so returns GetCells(IPoint, Int32, Boolean) . | Improve this Doc View Source GetDistanceForLevel(Int32) Given a cell having the specified level, returns the distance from opposite corners. Declaration public virtual double GetDistanceForLevel(int level) Parameters Type Name Description System.Int32 level [1 to maxLevels] Returns Type Description System.Double 0 Remarks Given a cell having the specified level, returns the distance from opposite corners. Since this might very depending on where the cell is, this method may over-estimate. | Improve this Doc View Source GetLevelForDistance(Double) Returns the level of the largest grid in which its longest side is less than or equal to the provided distance (in degrees). Declaration public abstract int GetLevelForDistance(double dist) Parameters Type Name Description System.Double dist = 0 Returns Type Description System.Int32 level [1 to maxLevels] Remarks Returns the level of the largest grid in which its longest side is less than or equal to the provided distance (in degrees). Consequently dist acts as an error epsilon declaring the amount of detail needed in the grid, such that you can get a grid with just the right amount of precision. | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.SpatialPrefixTreeFactory.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.SpatialPrefixTreeFactory.html",
    "title": "Class SpatialPrefixTreeFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpatialPrefixTreeFactory Abstract Factory for creating SpatialPrefixTree instances with useful defaults and passed on configurations defined in a . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialPrefixTreeFactory GeohashPrefixTree.Factory QuadPrefixTree.Factory Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public abstract class SpatialPrefixTreeFactory : object Fields | Improve this Doc View Source m_args Declaration protected IDictionary<string, string> m_args Field Value Type Description IDictionary < System.String , System.String > | Improve this Doc View Source m_ctx Declaration protected SpatialContext m_ctx Field Value Type Description SpatialContext | Improve this Doc View Source m_maxLevels Declaration protected int? m_maxLevels Field Value Type Description System.Nullable < System.Int32 > | Improve this Doc View Source MAX_DIST_ERR Declaration public const string MAX_DIST_ERR = null Field Value Type Description System.String | Improve this Doc View Source MAX_LEVELS Declaration public const string MAX_LEVELS = null Field Value Type Description System.String | Improve this Doc View Source PREFIX_TREE Declaration public const string PREFIX_TREE = null Field Value Type Description System.String Methods | Improve this Doc View Source GetLevelForDistance(Double) Calls GetLevelForDistance(Double) . Declaration protected abstract int GetLevelForDistance(double degrees) Parameters Type Name Description System.Double degrees Returns Type Description System.Int32 | Improve this Doc View Source Init(IDictionary<String, String>, SpatialContext) Declaration protected virtual void Init(IDictionary<string, string> args, SpatialContext ctx) Parameters Type Name Description IDictionary < System.String , System.String > args SpatialContext ctx | Improve this Doc View Source InitMaxLevels() Declaration protected virtual void InitMaxLevels() | Improve this Doc View Source MakeSPT(IDictionary<String, String>, SpatialContext) The factory is looked up via \"prefixTree\" in args , expecting \"geohash\" or \"quad\". Declaration public static SpatialPrefixTree MakeSPT(IDictionary<string, string> args, SpatialContext ctx) Parameters Type Name Description IDictionary < System.String , System.String > args SpatialContext ctx Returns Type Description SpatialPrefixTree Remarks The factory is looked up via \"prefixTree\" in args , expecting \"geohash\" or \"quad\". If its neither of these, then \"geohash\" is chosen for a geo context, otherwise \"quad\" is chosen. | Improve this Doc View Source NewSPT() Declaration protected abstract SpatialPrefixTree NewSPT() Returns Type Description SpatialPrefixTree"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.WithinPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.WithinPrefixTreeFilter.html",
    "title": "Class WithinPrefixTreeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WithinPrefixTreeFilter Finds docs where its indexed shape is IsWithin the query shape. It works by looking at cells outside of the query shape to ensure documents there are excluded. By default, it will examine all cells, and it's fairly slow. If you know that the indexed shapes are never comprised of multiple disjoint parts (which also means it is not multi-valued), then you can pass SpatialPrefixTree.GetDistanceForLevel(maxLevels) as the queryBuffer constructor parameter to minimally look this distance beyond the query shape's edge. Even if the indexed shapes are sometimes comprised of multiple disjoint parts, you might want to use this option with a large buffer as a faster approximation with minimal false-positives. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter AbstractVisitingPrefixTreeFilter WithinPrefixTreeFilter Inherited Members AbstractVisitingPrefixTreeFilter.m_prefixGridScanLevel AbstractVisitingPrefixTreeFilter.Equals(Object) AbstractVisitingPrefixTreeFilter.GetHashCode() AbstractPrefixTreeFilter.m_queryShape AbstractPrefixTreeFilter.m_fieldName AbstractPrefixTreeFilter.m_grid AbstractPrefixTreeFilter.m_detailLevel Lucene.Net.Search.Filter.NewAnonymous(Func<, , >) Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class WithinPrefixTreeFilter : AbstractVisitingPrefixTreeFilter Constructors | Improve this Doc View Source WithinPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Int32, Double) See AbstractVisitingPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Int32) . queryBuffer is the (minimum) distance beyond the query shape edge where non-matching documents are looked for so they can be excluded. If -1 is used then the whole world is examined (a good default for correctness). Declaration public WithinPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel, int prefixGridScanLevel, double queryBuffer) Parameters Type Name Description IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel System.Int32 prefixGridScanLevel System.Double queryBuffer Methods | Improve this Doc View Source BufferShape(IShape, Double) Returns a new shape that is larger than shape by at distErr. Declaration protected virtual IShape BufferShape(IShape shape, double distErr) Parameters Type Name Description IShape shape System.Double distErr Returns Type Description IShape | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.html",
    "title": "Namespace Lucene.Net.Spatial.Queries | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Queries <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Spatial Query options useful for client side requests Classes SpatialArgs Principally holds the query and the SpatialOperation . It's used as an argument to some methods on SpatialStrategy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk SpatialArgsParser Parses a string that usually looks like \"OPERATION(SHAPE)\" into a SpatialArgs object. The set of operations supported are defined in SpatialOperation , such as \"Intersects\" being a common one. The shape portion is defined by WKT , but it can be overridden/customized via ParseShape(String, SpatialContext) . There are some optional name-value pair parameters that follow the closing parenthesis. Example: Intersects(ENVELOPE(-10,-8,22,20)) distErrPct=0.025 In the future it would be good to support something at least semi-standardized like a variant of [E]CQL . This is a Lucene.NET EXPERIMENTAL API, use at your own risk SpatialOperation A clause that compares a stored geometry to a supplied geometry. For more explanation of each operation, consider looking at the source implementation of Evaluate(IShape, IShape) . See ESRIs docs on spatial relations This is a Lucene.NET EXPERIMENTAL API, use at your own risk UnsupportedSpatialOperation Exception thrown when the SpatialStrategy cannot implement the requested operation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialArgs.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialArgs.html",
    "title": "Class SpatialArgs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpatialArgs Principally holds the query and the SpatialOperation . It's used as an argument to some methods on SpatialStrategy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialArgs Namespace : Lucene.Net.Spatial.Queries Assembly : Lucene.Net.Spatial.dll Syntax public class SpatialArgs : object Constructors | Improve this Doc View Source SpatialArgs(SpatialOperation, IShape) Declaration public SpatialArgs(SpatialOperation operation, IShape shape) Parameters Type Name Description SpatialOperation operation IShape shape Fields | Improve this Doc View Source DEFAULT_DISTERRPCT Declaration public static readonly double DEFAULT_DISTERRPCT Field Value Type Description System.Double Properties | Improve this Doc View Source DistErr The acceptable error of the shape. This effectively inflates the size of the shape but should not shrink it. Declaration public virtual double? DistErr { get; set; } Property Value Type Description System.Nullable < System.Double > = 0 | Improve this Doc View Source DistErrPct A measure of acceptable error of the shape as a fraction. This effectively inflates the size of the shape but should not shrink it. Declaration public virtual double? DistErrPct { get; set; } Property Value Type Description System.Nullable < System.Double > 0 to 0.5 | Improve this Doc View Source Operation Declaration public virtual SpatialOperation Operation { get; set; } Property Value Type Description SpatialOperation | Improve this Doc View Source Shape Declaration public virtual IShape Shape { get; set; } Property Value Type Description IShape Methods | Improve this Doc View Source CalcDistanceFromErrPct(IShape, Double, SpatialContext) Computes the distance given a shape and the distErrPct . The algorithm is the fraction of the distance from the center of the query shape to its furthest bounding box corner. Declaration public static double CalcDistanceFromErrPct(IShape shape, double distErrPct, SpatialContext ctx) Parameters Type Name Description IShape shape Mandatory. System.Double distErrPct 0 to 0.5 SpatialContext ctx Mandatory Returns Type Description System.Double A distance (in degrees). | Improve this Doc View Source ResolveDistErr(SpatialContext, Double) Gets the error distance that specifies how precise the query shape is. This looks at DistErr , DistErrPct , and defaultDistErrPct . Declaration public virtual double ResolveDistErr(SpatialContext ctx, double defaultDistErrPct) Parameters Type Name Description SpatialContext ctx System.Double defaultDistErrPct 0 to 0.5 Returns Type Description System.Double = 0 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source Validate() Check if the arguments make sense -- throw an exception if not Declaration public virtual void Validate()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialArgsParser.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialArgsParser.html",
    "title": "Class SpatialArgsParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpatialArgsParser Parses a string that usually looks like \"OPERATION(SHAPE)\" into a SpatialArgs object. The set of operations supported are defined in SpatialOperation , such as \"Intersects\" being a common one. The shape portion is defined by WKT , but it can be overridden/customized via ParseShape(String, SpatialContext) . There are some optional name-value pair parameters that follow the closing parenthesis. Example: Intersects(ENVELOPE(-10,-8,22,20)) distErrPct=0.025 In the future it would be good to support something at least semi-standardized like a variant of [E]CQL . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialArgsParser Namespace : Lucene.Net.Spatial.Queries Assembly : Lucene.Net.Spatial.dll Syntax public class SpatialArgsParser : object Fields | Improve this Doc View Source DIST_ERR Declaration public const string DIST_ERR = null Field Value Type Description System.String | Improve this Doc View Source DIST_ERR_PCT Declaration public const string DIST_ERR_PCT = null Field Value Type Description System.String Methods | Improve this Doc View Source NewSpatialArgs(SpatialOperation, IShape) Declaration protected virtual SpatialArgs NewSpatialArgs(SpatialOperation op, IShape shape) Parameters Type Name Description SpatialOperation op IShape shape Returns Type Description SpatialArgs | Improve this Doc View Source Parse(String, SpatialContext) Parses a string such as \"Intersects(ENVELOPE(-10,-8,22,20)) distErrPct=0.025\". Declaration public virtual SpatialArgs Parse(string v, SpatialContext ctx) Parameters Type Name Description System.String v The string to parse. Mandatory. SpatialContext ctx The spatial context. Mandatory. Returns Type Description SpatialArgs Not null. | Improve this Doc View Source ParseMap(String) Parses \"a=b c=d f\" (whitespace separated) into name-value pairs. If there is no '=' as in 'f' above then it's short for f=f. Declaration protected static IDictionary<string, string> ParseMap(string body) Parameters Type Name Description System.String body Returns Type Description IDictionary < System.String , System.String > | Improve this Doc View Source ParseShape(String, SpatialContext) Declaration protected virtual IShape ParseShape(string str, SpatialContext ctx) Parameters Type Name Description System.String str SpatialContext ctx Returns Type Description IShape | Improve this Doc View Source ReadBool(String, Boolean) Declaration protected static bool ReadBool(string v, bool defaultValue) Parameters Type Name Description System.String v System.Boolean defaultValue Returns Type Description System.Boolean | Improve this Doc View Source ReadDouble(String) Declaration protected static double? ReadDouble(string v) Parameters Type Name Description System.String v Returns Type Description System.Nullable < System.Double > | Improve this Doc View Source ReadNameValuePairs(SpatialArgs, IDictionary<String, String>) Declaration protected virtual void ReadNameValuePairs(SpatialArgs args, IDictionary<string, string> nameValPairs) Parameters Type Name Description SpatialArgs args IDictionary < System.String , System.String > nameValPairs | Improve this Doc View Source WriteSpatialArgs(SpatialArgs) Writes a close approximation to the parsed input format. Declaration public static string WriteSpatialArgs(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description System.String"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialOperation.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialOperation.html",
    "title": "Class SpatialOperation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpatialOperation A clause that compares a stored geometry to a supplied geometry. For more explanation of each operation, consider looking at the source implementation of Evaluate(IShape, IShape) . See ESRIs docs on spatial relations This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialOperation Namespace : Lucene.Net.Spatial.Queries Assembly : Lucene.Net.Spatial.dll Syntax public abstract class SpatialOperation : object Constructors | Improve this Doc View Source SpatialOperation(String, Boolean, Boolean, Boolean) Declaration protected SpatialOperation(string name, bool scoreIsMeaningful, bool sourceNeedsArea, bool targetNeedsArea) Parameters Type Name Description System.String name System.Boolean scoreIsMeaningful System.Boolean sourceNeedsArea System.Boolean targetNeedsArea Fields | Improve this Doc View Source BBoxIntersects Bounding box of the indexed shape. Declaration public static readonly SpatialOperation BBoxIntersects Field Value Type Description SpatialOperation | Improve this Doc View Source BBoxWithin Bounding box of the indexed shape. Declaration public static readonly SpatialOperation BBoxWithin Field Value Type Description SpatialOperation | Improve this Doc View Source Contains Declaration public static readonly SpatialOperation Contains Field Value Type Description SpatialOperation | Improve this Doc View Source Intersects Declaration public static readonly SpatialOperation Intersects Field Value Type Description SpatialOperation | Improve this Doc View Source IsDisjointTo Declaration public static readonly SpatialOperation IsDisjointTo Field Value Type Description SpatialOperation | Improve this Doc View Source IsEqualTo Declaration public static readonly SpatialOperation IsEqualTo Field Value Type Description SpatialOperation | Improve this Doc View Source IsWithin Declaration public static readonly SpatialOperation IsWithin Field Value Type Description SpatialOperation | Improve this Doc View Source Overlaps Declaration public static readonly SpatialOperation Overlaps Field Value Type Description SpatialOperation Properties | Improve this Doc View Source IsScoreMeaningful Declaration public virtual bool IsScoreMeaningful { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsTargetNeedsArea Declaration public virtual bool IsTargetNeedsArea { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source SourceNeedsArea Declaration public virtual bool SourceNeedsArea { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Values Declaration public static IList<SpatialOperation> Values { get; } Property Value Type Description IList < SpatialOperation > Methods | Improve this Doc View Source Evaluate(IShape, IShape) Returns whether the relationship between indexedShape and queryShape is satisfied by this operation. Declaration public abstract bool Evaluate(IShape indexedShape, IShape queryShape) Parameters Type Name Description IShape indexedShape IShape queryShape Returns Type Description System.Boolean | Improve this Doc View Source Get(String) Declaration public static SpatialOperation Get(string v) Parameters Type Name Description System.String v Returns Type Description SpatialOperation | Improve this Doc View Source Is(SpatialOperation, SpatialOperation[]) Declaration public static bool Is(SpatialOperation op, params SpatialOperation[] tst) Parameters Type Name Description SpatialOperation op SpatialOperation [] tst Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.UnsupportedSpatialOperation.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.UnsupportedSpatialOperation.html",
    "title": "Class UnsupportedSpatialOperation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnsupportedSpatialOperation Exception thrown when the SpatialStrategy cannot implement the requested operation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object UnsupportedSpatialOperation Namespace : Lucene.Net.Spatial.Queries Assembly : Lucene.Net.Spatial.dll Syntax public class UnsupportedSpatialOperation : NotSupportedException Constructors | Improve this Doc View Source UnsupportedSpatialOperation(SpatialOperation) Declaration public UnsupportedSpatialOperation(SpatialOperation op) Parameters Type Name Description SpatialOperation op"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Serialized.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Serialized.html",
    "title": "Namespace Lucene.Net.Spatial.Serialized | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Serialized <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Strategies that serialize the shape (non-indexed). Classes SerializedDVStrategy A SpatialStrategy based on serializing a Shape stored into BinaryDocValues. This is not at all fast; it's designed to be used in conjuction with another index based SpatialStrategy that is approximated(like RecursivePrefixTreeStrategy ) to add precision or eventually make more specific / advanced calculations on the per-document geometry. The serialization uses Spatial4j's . This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Serialized.SerializedDVStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Serialized.SerializedDVStrategy.html",
    "title": "Class SerializedDVStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SerializedDVStrategy A SpatialStrategy based on serializing a Shape stored into BinaryDocValues. This is not at all fast; it's designed to be used in conjuction with another index based SpatialStrategy that is approximated(like RecursivePrefixTreeStrategy ) to add precision or eventually make more specific / advanced calculations on the per-document geometry. The serialization uses Spatial4j's . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy SerializedDVStrategy Inherited Members SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeRecipDistanceValueSource(IShape) SpatialStrategy.ToString() Namespace : Lucene.Net.Spatial.Serialized Assembly : Lucene.Net.Spatial.dll Syntax public class SerializedDVStrategy : SpatialStrategy Constructors | Improve this Doc View Source SerializedDVStrategy(SpatialContext, String) Constructs the spatial strategy with its mandatory arguments. Declaration public SerializedDVStrategy(SpatialContext ctx, string fieldName) Parameters Type Name Description SpatialContext ctx System.String fieldName Methods | Improve this Doc View Source CreateIndexableFields(IShape) Declaration public override Field[] CreateIndexableFields(IShape shape) Parameters Type Name Description IShape shape Returns Type Description Field [] Overrides SpatialStrategy.CreateIndexableFields(IShape) | Improve this Doc View Source MakeDistanceValueSource(IPoint, Double) Declaration public override ValueSource MakeDistanceValueSource(IPoint queryPoint, double multiplier) Parameters Type Name Description IPoint queryPoint System.Double multiplier Returns Type Description ValueSource Overrides SpatialStrategy.MakeDistanceValueSource(IPoint, Double) | Improve this Doc View Source MakeFilter(SpatialArgs) Returns a Filter that should be used with QUERY_FIRST_FILTER_STRATEGY . Use in another manner is likely to result in an to prevent misuse because the filter can't efficiently work via iteration. Declaration public override Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Overrides SpatialStrategy.MakeFilter(SpatialArgs) | Improve this Doc View Source MakeQuery(SpatialArgs) Declaration public override ConstantScoreQuery MakeQuery(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description ConstantScoreQuery Overrides SpatialStrategy.MakeQuery(SpatialArgs) | Improve this Doc View Source MakeShapeValueSource() Provides access to each shape per document as a ValueSource in which ObjectVal(Int32) returns a . Declaration public virtual ValueSource MakeShapeValueSource() Returns Type Description ValueSource"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.SpatialStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.SpatialStrategy.html",
    "title": "Class SpatialStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpatialStrategy The SpatialStrategy encapsulates an approach to indexing and searching based on shapes. Different implementations will support different features. A strategy should document these common elements: Can it index more than one shape per field? What types of shapes can be indexed? What types of query shapes can be used? What types of query operations are supported? This might vary per shape. Does it use the FieldCache , or some other type of cache? When? If a strategy only supports certain shapes at index or query time, then in general it will throw an exception if given an incompatible one. It will not be coerced into compatibility. Note that a SpatialStrategy is not involved with the Lucene stored field values of shapes, which is immaterial to indexing and search. Thread-safe. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy PrefixTreeStrategy SerializedDVStrategy PointVectorStrategy Namespace : Lucene.Net.Spatial Assembly : Lucene.Net.Spatial.dll Syntax public abstract class SpatialStrategy : object Constructors | Improve this Doc View Source SpatialStrategy(SpatialContext, String) Constructs the spatial strategy with its mandatory arguments. Declaration protected SpatialStrategy(SpatialContext ctx, string fieldName) Parameters Type Name Description SpatialContext ctx System.String fieldName Fields | Improve this Doc View Source m_ctx Declaration protected readonly SpatialContext m_ctx Field Value Type Description SpatialContext Properties | Improve this Doc View Source FieldName The name of the field or the prefix of them if there are multiple fields needed internally. Declaration public virtual string FieldName { get; } Property Value Type Description System.String Not null. | Improve this Doc View Source SpatialContext Declaration public virtual SpatialContext SpatialContext { get; } Property Value Type Description SpatialContext Methods | Improve this Doc View Source CreateIndexableFields(IShape) Returns the IndexableField(s) from the shape that are to be added to the Document . These fields are expected to be marked as indexed and not stored. Note: If you want to store the shape as a string for retrieval in search results, you could add it like this: document.Add(new StoredField(fieldName, ctx.ToString(shape))); The particular string representation used doesn't matter to the Strategy since it doesn't use it. Declaration public abstract Field[] CreateIndexableFields(IShape shape) Parameters Type Name Description IShape shape Returns Type Description Field [] Not null nor will it have null elements. | Improve this Doc View Source MakeDistanceValueSource(IPoint) See MakeDistanceValueSource(IPoint, Double) called with a multiplier of 1.0 (i.e. units of degrees). Declaration public virtual ValueSource MakeDistanceValueSource(IPoint queryPoint) Parameters Type Name Description IPoint queryPoint Returns Type Description ValueSource | Improve this Doc View Source MakeDistanceValueSource(IPoint, Double) Make a ValueSource returning the distance between the center of the indexed shape and queryPoint . If there are multiple indexed shapes then the closest one is chosen. The result is multiplied by multiplier , which conveniently is used to get the desired units. Declaration public abstract ValueSource MakeDistanceValueSource(IPoint queryPoint, double multiplier) Parameters Type Name Description IPoint queryPoint System.Double multiplier Returns Type Description ValueSource | Improve this Doc View Source MakeFilter(SpatialArgs) Make a Filter based principally on SpatialOperation and from the supplied args . If a subclasses implements MakeQuery(SpatialArgs) then this method could be simply: return new QueryWrapperFilter(MakeQuery(args).Query); Declaration public abstract Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Exceptions Type Condition UnsupportedSpatialOperation If the strategy does not support the SpatialOperation in args . | Improve this Doc View Source MakeQuery(SpatialArgs) Make a Query based principally on SpatialOperation and from the supplied args . The default implementation is return new ConstantScoreQuery(MakeFilter(args)); Declaration public virtual ConstantScoreQuery MakeQuery(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description ConstantScoreQuery Exceptions Type Condition UnsupportedSpatialOperation If the strategy does not support the SpatialOperation in args . | Improve this Doc View Source MakeRecipDistanceValueSource(IShape) Returns a ValueSource with values ranging from 1 to 0, depending inversely on the distance from MakeDistanceValueSource(IPoint) . The formula is c / (d + c) where 'd' is the distance and 'c' is one tenth the distance to the farthest edge from the center. Thus the scores will be 1 for indexed points at the center of the query shape and as low as ~0.1 at its furthest edges. Declaration public ValueSource MakeRecipDistanceValueSource(IShape queryShape) Parameters Type Name Description IShape queryShape Returns Type Description ValueSource | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.CachingDoubleValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.CachingDoubleValueSource.html",
    "title": "Class CachingDoubleValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CachingDoubleValueSource Caches the doubleVal of another value source in a HashMap so that it is computed only once. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource CachingDoubleValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class CachingDoubleValueSource : ValueSource Constructors | Improve this Doc View Source CachingDoubleValueSource(ValueSource) Declaration public CachingDoubleValueSource(ValueSource source) Parameters Type Name Description ValueSource source Fields | Improve this Doc View Source m_cache Declaration protected readonly IDictionary<int, double> m_cache Field Value Type Description IDictionary < System.Int32 , System.Double > | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.DistanceToShapeValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.DistanceToShapeValueSource.html",
    "title": "Class DistanceToShapeValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DistanceToShapeValueSource The distance from a provided Point to a Point retrieved from a ValueSource via ObjectVal(Int32) . The distance is calculated via a . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ValueSource DistanceToShapeValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class DistanceToShapeValueSource : ValueSource Constructors | Improve this Doc View Source DistanceToShapeValueSource(ValueSource, IPoint, Double, SpatialContext) Declaration public DistanceToShapeValueSource(ValueSource shapeValueSource, IPoint queryPoint, double multiplier, SpatialContext ctx) Parameters Type Name Description ValueSource shapeValueSource IPoint queryPoint System.Double multiplier SpatialContext ctx Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.html",
    "title": "Namespace Lucene.Net.Spatial.Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Util <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Various spatial utilities. Classes CachingDoubleValueSource Caches the doubleVal of another value source in a HashMap so that it is computed only once. This is a Lucene.NET INTERNAL API, use at your own risk DistanceToShapeValueSource The distance from a provided Point to a Point retrieved from a ValueSource via ObjectVal(Int32) . The distance is calculated via a . This is a Lucene.NET EXPERIMENTAL API, use at your own risk ShapeFieldCache<T> Bounded Cache of Shapes associated with docIds. Note, multiple Shapes can be associated with a given docId WARNING: This class holds the data in an extremely inefficient manner as all Points are in memory as objects and they are stored in many Lists (one per document). So it works but doesn't scale. It will be replaced in the future. This is a Lucene.NET INTERNAL API, use at your own risk ShapeFieldCacheDistanceValueSource An implementation of the Lucene ValueSource that returns the spatial distance between an input point and a document's points in ShapeFieldCacheProvider<T> . The shortest distance is returned if a document has more than one point. This is a Lucene.NET INTERNAL API, use at your own risk ShapeFieldCacheProvider<T> Provides access to a ShapeFieldCache<T> for a given AtomicReader . If a Cache does not exist for the TextReader, then it is built by iterating over the all terms for a given field, reconstructing the Shape from them, and adding them to the Cache. ShapePredicateValueSource A boolean ValueSource that compares a shape from a provided ValueSource with a given Shape and sees if it matches a given SpatialOperation (the predicate). This is a Lucene.NET EXPERIMENTAL API, use at your own risk ValueSourceFilter Filter that matches all documents where a ValueSource is in between a range of min and max inclusive. This is a Lucene.NET INTERNAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCache-1.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCache-1.html",
    "title": "Class ShapeFieldCache<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShapeFieldCache<T> Bounded Cache of Shapes associated with docIds. Note, multiple Shapes can be associated with a given docId WARNING: This class holds the data in an extremely inefficient manner as all Points are in memory as objects and they are stored in many Lists (one per document). So it works but doesn't scale. It will be replaced in the future. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ShapeFieldCache<T> Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class ShapeFieldCache<T> : object where T : IShape Type Parameters Name Description T Constructors | Improve this Doc View Source ShapeFieldCache(Int32, Int32) Declaration public ShapeFieldCache(int length, int defaultLength) Parameters Type Name Description System.Int32 length System.Int32 defaultLength Properties | Improve this Doc View Source DefaultLength Declaration public int DefaultLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(Int32, T) Declaration public virtual void Add(int docid, T s) Parameters Type Name Description System.Int32 docid T s | Improve this Doc View Source GetShapes(Int32) Declaration public virtual IList<T> GetShapes(int docid) Parameters Type Name Description System.Int32 docid Returns Type Description IList <T>"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCacheDistanceValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCacheDistanceValueSource.html",
    "title": "Class ShapeFieldCacheDistanceValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShapeFieldCacheDistanceValueSource An implementation of the Lucene ValueSource that returns the spatial distance between an input point and a document's points in ShapeFieldCacheProvider<T> . The shortest distance is returned if a document has more than one point. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource ShapeFieldCacheDistanceValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class ShapeFieldCacheDistanceValueSource : ValueSource Constructors | Improve this Doc View Source ShapeFieldCacheDistanceValueSource(SpatialContext, ShapeFieldCacheProvider<IPoint>, IPoint, Double) Declaration public ShapeFieldCacheDistanceValueSource(SpatialContext ctx, ShapeFieldCacheProvider<IPoint> provider, IPoint from, double multiplier) Parameters Type Name Description SpatialContext ctx ShapeFieldCacheProvider < IPoint > provider IPoint from System.Double multiplier Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCacheProvider-1.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCacheProvider-1.html",
    "title": "Class ShapeFieldCacheProvider<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShapeFieldCacheProvider<T> Provides access to a ShapeFieldCache<T> for a given AtomicReader . If a Cache does not exist for the TextReader, then it is built by iterating over the all terms for a given field, reconstructing the Shape from them, and adding them to the Cache. Inheritance System.Object ShapeFieldCacheProvider<T> PointPrefixTreeFieldCacheProvider Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public abstract class ShapeFieldCacheProvider<T> : object where T : IShape Type Parameters Name Description T Constructors | Improve this Doc View Source ShapeFieldCacheProvider(String, Int32) Declaration public ShapeFieldCacheProvider(string shapeField, int defaultSize) Parameters Type Name Description System.String shapeField System.Int32 defaultSize Fields | Improve this Doc View Source m_defaultSize Declaration protected readonly int m_defaultSize Field Value Type Description System.Int32 | Improve this Doc View Source m_shapeField Declaration protected readonly string m_shapeField Field Value Type Description System.String Methods | Improve this Doc View Source GetCache(AtomicReader) Declaration public virtual ShapeFieldCache<T> GetCache(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description ShapeFieldCache <T> | Improve this Doc View Source ReadShape(BytesRef) Declaration protected abstract T ReadShape(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description T"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapePredicateValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapePredicateValueSource.html",
    "title": "Class ShapePredicateValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShapePredicateValueSource A boolean ValueSource that compares a shape from a provided ValueSource with a given Shape and sees if it matches a given SpatialOperation (the predicate). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ValueSource ShapePredicateValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class ShapePredicateValueSource : ValueSource Constructors | Improve this Doc View Source ShapePredicateValueSource(ValueSource, SpatialOperation, IShape) Declaration public ShapePredicateValueSource(ValueSource shapeValuesource, SpatialOperation op, IShape queryShape) Parameters Type Name Description ValueSource shapeValuesource Must yield instances from it's ObjectVal(doc). If null then the result is false. This is the left-hand (indexed) side. SpatialOperation op the predicate IShape queryShape The shape on the right-hand (query) side. Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description IDictionary context IndexSearcher searcher | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ValueSourceFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ValueSourceFilter.html",
    "title": "Class ValueSourceFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ValueSourceFilter Filter that matches all documents where a ValueSource is in between a range of min and max inclusive. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Filter ValueSourceFilter Inherited Members Lucene.Net.Search.Filter.NewAnonymous(Func<, , >) Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class ValueSourceFilter : Filter Constructors | Improve this Doc View Source ValueSourceFilter(Filter, ValueSource, Double, Double) Declaration public ValueSourceFilter(Filter startingFilter, ValueSource source, double min, double max) Parameters Type Name Description Filter startingFilter ValueSource source System.Double min System.Double max Properties | Improve this Doc View Source Max Declaration public double Max { get; } Property Value Type Description System.Double | Improve this Doc View Source Min Declaration public double Min { get; } Property Value Type Description System.Double Methods | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.DistanceValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.DistanceValueSource.html",
    "title": "Class DistanceValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DistanceValueSource An implementation of the Lucene ValueSource model that returns the distance for a PointVectorStrategy . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource DistanceValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) Namespace : Lucene.Net.Spatial.Vector Assembly : Lucene.Net.Spatial.dll Syntax public class DistanceValueSource : ValueSource Constructors | Improve this Doc View Source DistanceValueSource(PointVectorStrategy, IPoint, Double) Constructor. Declaration public DistanceValueSource(PointVectorStrategy strategy, IPoint from, double multiplier) Parameters Type Name Description PointVectorStrategy strategy IPoint from System.Double multiplier Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Returns the ValueSource description. Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Returns the FunctionValues used by the function query. Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.html",
    "title": "Namespace Lucene.Net.Spatial.Vector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Vector <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Spatial strategy that uses two fields. Classes DistanceValueSource An implementation of the Lucene ValueSource model that returns the distance for a PointVectorStrategy . This is a Lucene.NET INTERNAL API, use at your own risk PointVectorStrategy Simple SpatialStrategy which represents Points in two numeric DoubleField s. The Strategy's best feature is decent distance sort. Characteristics: Only indexes points; just one per field value. Can query by a rectangle or circle. Intersects and IsWithin is supported. Uses the FieldCache for MakeDistanceValueSource(IPoint) and for searching with a Circle. Implementation: This is a simple Strategy. Search works with NumericRangeQuery s on an x & y pair of fields. A Circle query does the same bbox query but adds a ValueSource filter on MakeDistanceValueSource(IPoint) . One performance shortcoming with this strategy is that a scenario involving both a search using a Circle and sort will result in calculations for the spatial distance being done twice -- once for the filter and second for the sort. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.PointVectorStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.PointVectorStrategy.html",
    "title": "Class PointVectorStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PointVectorStrategy Simple SpatialStrategy which represents Points in two numeric DoubleField s. The Strategy's best feature is decent distance sort. Characteristics: Only indexes points; just one per field value. Can query by a rectangle or circle. Intersects and IsWithin is supported. Uses the FieldCache for MakeDistanceValueSource(IPoint) and for searching with a Circle. Implementation: This is a simple Strategy. Search works with NumericRangeQuery s on an x & y pair of fields. A Circle query does the same bbox query but adds a ValueSource filter on MakeDistanceValueSource(IPoint) . One performance shortcoming with this strategy is that a scenario involving both a search using a Circle and sort will result in calculations for the spatial distance being done twice -- once for the filter and second for the sort. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy PointVectorStrategy Inherited Members SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeRecipDistanceValueSource(IShape) SpatialStrategy.ToString() Namespace : Lucene.Net.Spatial.Vector Assembly : Lucene.Net.Spatial.dll Syntax public class PointVectorStrategy : SpatialStrategy Constructors | Improve this Doc View Source PointVectorStrategy(SpatialContext, String) Declaration public PointVectorStrategy(SpatialContext ctx, string fieldNamePrefix) Parameters Type Name Description SpatialContext ctx System.String fieldNamePrefix Fields | Improve this Doc View Source SUFFIX_X Declaration public static string SUFFIX_X Field Value Type Description System.String | Improve this Doc View Source SUFFIX_Y Declaration public static string SUFFIX_Y Field Value Type Description System.String Properties | Improve this Doc View Source PrecisionStep Declaration public virtual int PrecisionStep { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CreateIndexableFields(IPoint) See CreateIndexableFields(IShape) Declaration public virtual Field[] CreateIndexableFields(IPoint point) Parameters Type Name Description IPoint point Returns Type Description Field [] | Improve this Doc View Source CreateIndexableFields(IShape) Declaration public override Field[] CreateIndexableFields(IShape shape) Parameters Type Name Description IShape shape Returns Type Description Field [] Overrides SpatialStrategy.CreateIndexableFields(IShape) | Improve this Doc View Source MakeDistanceValueSource(IPoint, Double) Declaration public override ValueSource MakeDistanceValueSource(IPoint queryPoint, double multiplier) Parameters Type Name Description IPoint queryPoint System.Double multiplier Returns Type Description ValueSource Overrides SpatialStrategy.MakeDistanceValueSource(IPoint, Double) | Improve this Doc View Source MakeFilter(SpatialArgs) Declaration public override Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Overrides SpatialStrategy.MakeFilter(SpatialArgs) | Improve this Doc View Source MakeQuery(SpatialArgs) Declaration public override ConstantScoreQuery MakeQuery(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description ConstantScoreQuery Overrides SpatialStrategy.MakeQuery(SpatialArgs) | Improve this Doc View Source MakeQueryDistanceScore(SpatialArgs) Declaration public virtual Query MakeQueryDistanceScore(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Query"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.CombineSuggestion.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.CombineSuggestion.html",
    "title": "Class CombineSuggestion | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CombineSuggestion A suggestion generated by combining one or more original query terms Inheritance System.Object CombineSuggestion Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class CombineSuggestion : object Constructors | Improve this Doc View Source CombineSuggestion(SuggestWord, Int32[]) Creates a new CombineSuggestion from a suggestion and an array of term ids (referencing the indexes to the original terms that form this combined suggestion) Declaration public CombineSuggestion(SuggestWord suggestion, int[] originalTermIndexes) Parameters Type Name Description SuggestWord suggestion System.Int32 [] originalTermIndexes Properties | Improve this Doc View Source OriginalTermIndexes The indexes from the passed-in array of terms used to make this word combination Declaration public int[] OriginalTermIndexes { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Suggestion The word combination suggestion Declaration public SuggestWord Suggestion { get; } Property Value Type Description SuggestWord"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.DirectSpellChecker.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.DirectSpellChecker.html",
    "title": "Class DirectSpellChecker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectSpellChecker Simple automaton-based spellchecker. Candidates are presented directly from the term dictionary, based on Levenshtein distance. This is an alternative to SpellChecker if you are using an edit-distance-like metric such as Levenshtein or JaroWinklerDistance . A practical benefit of this spellchecker is that it requires no additional datastructures (neither in RAM nor on disk) to do its work. Inheritance System.Object DirectSpellChecker Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class DirectSpellChecker : object Constructors | Improve this Doc View Source DirectSpellChecker() Creates a DirectSpellChecker with default configuration values Declaration public DirectSpellChecker() Fields | Improve this Doc View Source INTERNAL_LEVENSHTEIN The default StringDistance, Damerau-Levenshtein distance implemented internally via . Note: this is the fastest distance metric, because Damerau-Levenshtein is used to draw candidates from the term dictionary: this just re-uses the scoring. Declaration public static readonly IStringDistance INTERNAL_LEVENSHTEIN Field Value Type Description IStringDistance Properties | Improve this Doc View Source Accuracy Gets or sets the minimal accuracy required (default: 0.5f) from a StringDistance for a suggestion match. Declaration public virtual float Accuracy { get; set; } Property Value Type Description System.Single | Improve this Doc View Source Comparer Gets or sets the comparer for sorting suggestions. The default is DEFAULT_COMPARER Declaration public virtual IComparer<SuggestWord> Comparer { get; set; } Property Value Type Description IComparer < SuggestWord > | Improve this Doc View Source Distance Gets or sets the string distance metric. The default is INTERNAL_LEVENSHTEIN . Note: because this spellchecker draws its candidates from the term dictionary using Damerau-Levenshtein, it works best with an edit-distance-like string metric. If you use a different metric than the default, you might want to consider increasing MaxInspections to draw more candidates for your metric to rank. Declaration public virtual IStringDistance Distance { get; set; } Property Value Type Description IStringDistance | Improve this Doc View Source LowerCaseTerms True if the spellchecker should lowercase terms (default: true) This is a convenience method, if your index field has more complicated analysis (such as StandardTokenizer removing punctuation), its probably better to turn this off, and instead run your query terms through your Analyzer first. If this option is not on, case differences count as an edit! Declaration public virtual bool LowerCaseTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerCaseTermsCulture Gets or sets the culture to use for lowercasing terms. Set to null (the default) to use . Declaration public virtual CultureInfo LowerCaseTermsCulture { get; set; } Property Value Type Description CultureInfo | Improve this Doc View Source MaxEdits Gets or sets the maximum number of Levenshtein edit-distances to draw candidate terms from.This value can be 1 or 2. The default is 2. Note: a large number of spelling errors occur with an edit distance of 1, by setting this value to 1 you can increase both performance and precision at the cost of recall. Declaration public virtual int MaxEdits { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxInspections Get the maximum number of top-N inspections per suggestion. Increasing this number can improve the accuracy of results, at the cost of performance. Declaration public virtual int MaxInspections { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxQueryFrequency Gets or sets the maximum threshold (default: 0.01f) of documents a query term can appear in order to provide suggestions. Very high-frequency terms are typically spelled correctly. Additionally, this can increase performance as it will do no work for the common case of correctly-spelled input terms. This can be specified as a relative percentage of documents such as 0.5f, or it can be specified as an absolute whole document frequency, such as 4f. Absolute document frequencies may not be fractional. Declaration public virtual float MaxQueryFrequency { get; set; } Property Value Type Description System.Single | Improve this Doc View Source MinPrefix Gets or sets the minimal number of characters that must match exactly. This can improve both performance and accuracy of results, as misspellings are commonly not the first character. Declaration public virtual int MinPrefix { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinQueryLength Gets or sets the minimum length of a query term (default: 4) needed to return suggestions. Very short query terms will often cause only bad suggestions with any distance metric. Declaration public virtual int MinQueryLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source ThresholdFrequency Gets or sets the minimal threshold of documents a term must appear for a match. This can improve quality by only suggesting high-frequency terms. Note that very high values might decrease performance slightly, by forcing the spellchecker to draw more candidates from the term dictionary, but a practical value such as 1 can be very useful towards improving quality. This can be specified as a relative percentage of documents such as 0.5f, or it can be specified as an absolute whole document frequency, such as 4f. Absolute document frequencies may not be fractional. Declaration public virtual float ThresholdFrequency { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source SuggestSimilar(Term, Int32, IndexReader) Calls SuggestSimilar(Term, Int32, IndexReader, SuggestMode) SuggestSimilar(term, numSug, ir, SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX) Declaration public virtual SuggestWord[] SuggestSimilar(Term term, int numSug, IndexReader ir) Parameters Type Name Description Term term System.Int32 numSug IndexReader ir Returns Type Description SuggestWord [] | Improve this Doc View Source SuggestSimilar(Term, Int32, IndexReader, SuggestMode) Calls SuggestSimilar(Term, Int32, IndexReader, SuggestMode, Single) SuggestSimilar(term, numSug, ir, suggestMode, this.accuracy) Declaration public virtual SuggestWord[] SuggestSimilar(Term term, int numSug, IndexReader ir, SuggestMode suggestMode) Parameters Type Name Description Term term System.Int32 numSug IndexReader ir SuggestMode suggestMode Returns Type Description SuggestWord [] | Improve this Doc View Source SuggestSimilar(Term, Int32, IndexReader, SuggestMode, Single) Suggest similar words. Unlike SpellChecker , the similarity used to fetch the most relevant terms is an edit distance, therefore typically a low value for numSug will work very well. Declaration public virtual SuggestWord[] SuggestSimilar(Term term, int numSug, IndexReader ir, SuggestMode suggestMode, float accuracy) Parameters Type Name Description Term term Term you want to spell check on System.Int32 numSug the maximum number of suggested words IndexReader ir IndexReader to find terms from SuggestMode suggestMode specifies when to return suggested words System.Single accuracy return only suggested words that match with this similarity Returns Type Description SuggestWord [] sorted list of the suggested words according to the comparer | Improve this Doc View Source SuggestSimilar(Term, Int32, IndexReader, Int32, Int32, Single, CharsRef) Provide spelling corrections based on several parameters. Declaration protected virtual IEnumerable<DirectSpellChecker.ScoreTerm> SuggestSimilar(Term term, int numSug, IndexReader ir, int docfreq, int editDistance, float accuracy, CharsRef spare) Parameters Type Name Description Term term The term to suggest spelling corrections for System.Int32 numSug The maximum number of spelling corrections IndexReader ir The index reader to fetch the candidate spelling corrections from System.Int32 docfreq The minimum document frequency a potential suggestion need to have in order to be included System.Int32 editDistance The maximum edit distance candidates are allowed to have System.Single accuracy The minimum accuracy a suggested spelling correction needs to have in order to be included CharsRef spare a chars scratch Returns Type Description IEnumerable < DirectSpellChecker.ScoreTerm > a collection of spelling corrections sorted by ScoreTerm 's natural order."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.DirectSpellChecker.ScoreTerm.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.DirectSpellChecker.ScoreTerm.html",
    "title": "Class DirectSpellChecker.ScoreTerm | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectSpellChecker.ScoreTerm Holds a spelling correction for internal usage inside DirectSpellChecker . Inheritance System.Object DirectSpellChecker.ScoreTerm Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax protected class ScoreTerm : IComparable<DirectSpellChecker.ScoreTerm> Constructors | Improve this Doc View Source ScoreTerm() Constructor. Declaration public ScoreTerm() Properties | Improve this Doc View Source Boost The boost representing the similarity from the FuzzyTermsEnum (internal similarity score) Declaration public float Boost { get; set; } Property Value Type Description System.Single | Improve this Doc View Source Docfreq The df of the spellcheck correction. Declaration public int Docfreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Score The similarity score. Declaration public float Score { get; set; } Property Value Type Description System.Single | Improve this Doc View Source Term The actual spellcheck correction. Declaration public BytesRef Term { get; set; } Property Value Type Description BytesRef | Improve this Doc View Source TermAsString The spellcheck correction represented as string, can be null . Declaration public string TermAsString { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(DirectSpellChecker.ScoreTerm) Declaration public virtual int CompareTo(DirectSpellChecker.ScoreTerm other) Parameters Type Name Description DirectSpellChecker.ScoreTerm other Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.HighFrequencyDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.HighFrequencyDictionary.html",
    "title": "Class HighFrequencyDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HighFrequencyDictionary HighFrequencyDictionary: terms taken from the given field of a Lucene index, which appear in a number of documents above a given threshold. Threshold is a value in [0..1] representing the minimum number of documents (of the total) where a term should appear. Based on LuceneDictionary . Inheritance System.Object HighFrequencyDictionary Implements IDictionary Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class HighFrequencyDictionary : object, IDictionary Constructors | Improve this Doc View Source HighFrequencyDictionary(IndexReader, String, Single) Creates a new Dictionary, pulling source terms from the specified field in the provided reader . Terms appearing in less than thresh percentage of documents will be excluded. Declaration public HighFrequencyDictionary(IndexReader reader, string field, float thresh) Parameters Type Name Description IndexReader reader System.String field System.Single thresh Methods | Improve this Doc View Source GetEntryIterator() Declaration public IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.html",
    "title": "Namespace Lucene.Net.Search.Spell | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Spell <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Suggest alternate spellings for words. Also see the spell checker Wiki page . Classes CombineSuggestion A suggestion generated by combining one or more original query terms DirectSpellChecker Simple automaton-based spellchecker. Candidates are presented directly from the term dictionary, based on Levenshtein distance. This is an alternative to SpellChecker if you are using an edit-distance-like metric such as Levenshtein or JaroWinklerDistance . A practical benefit of this spellchecker is that it requires no additional datastructures (neither in RAM nor on disk) to do its work. DirectSpellChecker.ScoreTerm Holds a spelling correction for internal usage inside DirectSpellChecker . HighFrequencyDictionary HighFrequencyDictionary: terms taken from the given field of a Lucene index, which appear in a number of documents above a given threshold. Threshold is a value in [0..1] representing the minimum number of documents (of the total) where a term should appear. Based on LuceneDictionary . JaroWinklerDistance Similarity measure for short strings such as person names. See http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance LevensteinDistance Levenstein edit distance class. LuceneDictionary Lucene Dictionary: terms taken from the given field of a Lucene index. LuceneLevenshteinDistance Damerau-Levenshtein (optimal string alignment) implemented in a consistent way as Lucene's FuzzyTermsEnum with the transpositions option enabled. Notes: This metric treats full unicode codepoints as characters This metric scales raw edit distances into a floating point score based upon the shortest of the two terms Transpositions of two adjacent codepoints are treated as primitive edits. Edits are applied in parallel: for example, \"ab\" and \"bca\" have distance 3. NOTE: this class is not particularly efficient. It is only intended for merging results from multiple DirectSpellCheckers. NGramDistance N-Gram version of edit distance based on paper by Grzegorz Kondrak, \"N-gram similarity and distance\". Proceedings of the Twelfth International Conference on String Processing and Information Retrieval (SPIRE 2005), pp. 115-126, Buenos Aires, Argentina, November 2005. http://www.cs.ualberta.ca/~kondrak/papers/spire05.pdf This implementation uses the position-based optimization to compute partial matches of n-gram sub-strings and adds a null-character prefix of size n-1 so that the first character is contained in the same number of n-grams as a middle character. Null-character prefix matches are discounted so that strings with no matching characters will return a distance of 0. PlainTextDictionary Dictionary represented by a text file. Format allowed: 1 word per line: word1 word2 word3 SpellChecker Spell Checker class (Main class) (initially inspired by the David Spencer code). Example Usage (C#): SpellChecker spellchecker = new SpellChecker(spellIndexDirectory); // To index a field of a user index: spellchecker.IndexDictionary(new LuceneDictionary(my_lucene_reader, a_field)); // To index a file containing words: spellchecker.IndexDictionary(new PlainTextDictionary(new FileInfo(\"myfile.txt\"))); string[] suggestions = spellchecker.SuggestSimilar(\"misspelt\", 5); SuggestWord SuggestWord, used in suggestSimilar method in SpellChecker class. Default sort is first by score, then by frequency. SuggestWordFrequencyComparer Frequency first, then score. SuggestWordQueue Sorts SuggestWord instances SuggestWordScoreComparer Score first, then frequency TermFreqIteratorWrapper Wraps a BytesRefIterator as a TermFreqIterator, with all weights set to 1 WordBreakSpellChecker A spell checker whose sole function is to offer suggestions by combining multiple terms into one word and/or breaking terms into multiple words. Interfaces IDictionary A simple interface representing a Dictionary. A Dictionary here is a list of entries, where every entry consists of term, weight and payload. IStringDistance Interface for string distances. ITermFreqIterator Interface for enumerating term,weight pairs. Enums SuggestMode Set of strategies for suggesting related terms This is a Lucene.NET EXPERIMENTAL API, use at your own risk WordBreakSpellChecker.BreakSuggestionSortMethod Determines the order to list word break suggestions"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.IDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.IDictionary.html",
    "title": "Interface IDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDictionary A simple interface representing a Dictionary. A Dictionary here is a list of entries, where every entry consists of term, weight and payload. Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public interface IDictionary Methods | Improve this Doc View Source GetEntryIterator() Returns an iterator over all the entries Declaration IInputIterator GetEntryIterator() Returns Type Description IInputIterator Iterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.IStringDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.IStringDistance.html",
    "title": "Interface IStringDistance | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IStringDistance Interface for string distances. Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public interface IStringDistance Methods | Improve this Doc View Source GetDistance(String, String) Returns a float between 0 and 1 based on how similar the specified strings are to one another. Returning a value of 1 means the specified strings are identical and 0 means the string are maximally different. Declaration float GetDistance(string s1, string s2) Parameters Type Name Description System.String s1 The first string. System.String s2 The second string. Returns Type Description System.Single a float between 0 and 1 based on how similar the specified strings are to one another."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.ITermFreqIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.ITermFreqIterator.html",
    "title": "Interface ITermFreqIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITermFreqIterator Interface for enumerating term,weight pairs. Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public interface ITermFreqIterator : IBytesRefIterator Properties | Improve this Doc View Source Weight Gets the term's weight, higher numbers mean better suggestions. Declaration long Weight { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.JaroWinklerDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.JaroWinklerDistance.html",
    "title": "Class JaroWinklerDistance | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JaroWinklerDistance Similarity measure for short strings such as person names. See http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance Inheritance System.Object JaroWinklerDistance Implements IStringDistance Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class JaroWinklerDistance : object, IStringDistance Constructors | Improve this Doc View Source JaroWinklerDistance() Creates a new distance metric with the default threshold for the Jaro Winkler bonus (0.7) Declaration public JaroWinklerDistance() See Also Threshold Properties | Improve this Doc View Source Threshold Gets or sets the threshold used to determine when Winkler bonus should be used. The default value is 0.7. Set to a negative value to get the Jaro distance. Declaration public virtual float Threshold { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetDistance(String, String) Declaration public virtual float GetDistance(string s1, string s2) Parameters Type Name Description System.String s1 System.String s2 Returns Type Description System.Single | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Implements IStringDistance"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LevensteinDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LevensteinDistance.html",
    "title": "Class LevensteinDistance | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LevensteinDistance Levenstein edit distance class. Inheritance System.Object LevensteinDistance Implements IStringDistance Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class LevensteinDistance : object, IStringDistance Constructors | Improve this Doc View Source LevensteinDistance() Optimized to run a bit faster than the static GetDistance(). In one benchmark times were 5.3sec using ctr vs 8.5sec w/ static method, thus 37% faster. Declaration public LevensteinDistance() Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetDistance(String, String) Declaration public float GetDistance(string target, string other) Parameters Type Name Description System.String target System.String other Returns Type Description System.Single | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Implements IStringDistance"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LuceneDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LuceneDictionary.html",
    "title": "Class LuceneDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LuceneDictionary Lucene Dictionary: terms taken from the given field of a Lucene index. Inheritance System.Object LuceneDictionary Implements IDictionary Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class LuceneDictionary : object, IDictionary Constructors | Improve this Doc View Source LuceneDictionary(IndexReader, String) Creates a new Dictionary, pulling source terms from the specified field in the provided reader Declaration public LuceneDictionary(IndexReader reader, string field) Parameters Type Name Description IndexReader reader System.String field Methods | Improve this Doc View Source GetEntryIterator() Declaration public virtual IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LuceneLevenshteinDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LuceneLevenshteinDistance.html",
    "title": "Class LuceneLevenshteinDistance | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LuceneLevenshteinDistance Damerau-Levenshtein (optimal string alignment) implemented in a consistent way as Lucene's FuzzyTermsEnum with the transpositions option enabled. Notes: This metric treats full unicode codepoints as characters This metric scales raw edit distances into a floating point score based upon the shortest of the two terms Transpositions of two adjacent codepoints are treated as primitive edits. Edits are applied in parallel: for example, \"ab\" and \"bca\" have distance 3. NOTE: this class is not particularly efficient. It is only intended for merging results from multiple DirectSpellCheckers. Inheritance System.Object LuceneLevenshteinDistance Implements IStringDistance Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class LuceneLevenshteinDistance : object, IStringDistance Constructors | Improve this Doc View Source LuceneLevenshteinDistance() Creates a new comparer, mimicing the behavior of Lucene's internal edit distance. Declaration public LuceneLevenshteinDistance() Methods | Improve this Doc View Source GetDistance(String, String) Declaration public float GetDistance(string target, string other) Parameters Type Name Description System.String target System.String other Returns Type Description System.Single Implements IStringDistance"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.NGramDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.NGramDistance.html",
    "title": "Class NGramDistance | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NGramDistance N-Gram version of edit distance based on paper by Grzegorz Kondrak, \"N-gram similarity and distance\". Proceedings of the Twelfth International Conference on String Processing and Information Retrieval (SPIRE 2005), pp. 115-126, Buenos Aires, Argentina, November 2005. http://www.cs.ualberta.ca/~kondrak/papers/spire05.pdf This implementation uses the position-based optimization to compute partial matches of n-gram sub-strings and adds a null-character prefix of size n-1 so that the first character is contained in the same number of n-grams as a middle character. Null-character prefix matches are discounted so that strings with no matching characters will return a distance of 0. Inheritance System.Object NGramDistance Implements IStringDistance Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class NGramDistance : object, IStringDistance Constructors | Improve this Doc View Source NGramDistance() Creates an N-Gram distance measure using n-grams of size 2. Declaration public NGramDistance() | Improve this Doc View Source NGramDistance(Int32) Creates an N-Gram distance measure using n-grams of the specified size. Declaration public NGramDistance(int size) Parameters Type Name Description System.Int32 size The size of the n-gram to be used to compute the string distance. Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetDistance(String, String) Declaration public virtual float GetDistance(string source, string target) Parameters Type Name Description System.String source System.String target Returns Type Description System.Single | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Implements IStringDistance"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.PlainTextDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.PlainTextDictionary.html",
    "title": "Class PlainTextDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PlainTextDictionary Dictionary represented by a text file. Format allowed: 1 word per line: word1 word2 word3 Inheritance System.Object PlainTextDictionary Implements IDictionary Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class PlainTextDictionary : object, IDictionary Constructors | Improve this Doc View Source PlainTextDictionary(FileInfo) Creates a dictionary based on a File. NOTE: content is treated as UTF-8 Declaration public PlainTextDictionary(FileInfo file) Parameters Type Name Description FileInfo file | Improve this Doc View Source PlainTextDictionary(Stream) Creates a dictionary based on an inputstream. NOTE: content is treated as UTF-8 Declaration public PlainTextDictionary(Stream dictFile) Parameters Type Name Description Stream dictFile | Improve this Doc View Source PlainTextDictionary(TextReader) Creates a dictionary based on a reader. Declaration public PlainTextDictionary(TextReader reader) Parameters Type Name Description TextReader reader Methods | Improve this Doc View Source GetEntryIterator() Declaration public virtual IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SpellChecker.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SpellChecker.html",
    "title": "Class SpellChecker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpellChecker Spell Checker class (Main class) (initially inspired by the David Spencer code). Example Usage (C#): SpellChecker spellchecker = new SpellChecker(spellIndexDirectory); // To index a field of a user index: spellchecker.IndexDictionary(new LuceneDictionary(my_lucene_reader, a_field)); // To index a file containing words: spellchecker.IndexDictionary(new PlainTextDictionary(new FileInfo(\"myfile.txt\"))); string[] suggestions = spellchecker.SuggestSimilar(\"misspelt\", 5); Inheritance System.Object SpellChecker Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class SpellChecker : IDisposable Constructors | Improve this Doc View Source SpellChecker(Store.Directory) Use the given directory as a spell checker index with a LevensteinDistance as the default StringDistance . The directory is created if it doesn't exist yet. Declaration public SpellChecker(Store.Directory spellIndex) Parameters Type Name Description Store.Directory spellIndex the spell index directory | Improve this Doc View Source SpellChecker(Store.Directory, IStringDistance) Use the given directory as a spell checker index. The directory is created if it doesn't exist yet. Declaration public SpellChecker(Store.Directory spellIndex, IStringDistance sd) Parameters Type Name Description Store.Directory spellIndex the spell index directory IStringDistance sd the StringDistance measurement to use | Improve this Doc View Source SpellChecker(Store.Directory, IStringDistance, IComparer<SuggestWord>) Use the given directory as a spell checker index with the given IStringDistance measure and the given for sorting the results. Declaration public SpellChecker(Store.Directory spellIndex, IStringDistance sd, IComparer<SuggestWord> comparer) Parameters Type Name Description Store.Directory spellIndex The spelling index IStringDistance sd The distance IComparer < SuggestWord > comparer The comparer Fields | Improve this Doc View Source DEFAULT_ACCURACY The default minimum score to use, if not specified by setting Accuracy or overriding with SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) . Declaration public const float DEFAULT_ACCURACY = null Field Value Type Description System.Single | Improve this Doc View Source F_WORD Field name for each word in the ngram index. Declaration public const string F_WORD = null Field Value Type Description System.String Properties | Improve this Doc View Source Accuracy Gets or sets the accuracy (minimum score) to be used, unless overridden in SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) , to decide whether a suggestion is included or not. Sets the accuracy 0 < minScore < 1; default DEFAULT_ACCURACY Declaration public virtual float Accuracy { get; set; } Property Value Type Description System.Single | Improve this Doc View Source Comparer Gets or sets the for the SuggestWordQueue . Declaration public virtual IComparer<SuggestWord> Comparer { get; set; } Property Value Type Description IComparer < SuggestWord > | Improve this Doc View Source StringDistance Gets or sets the IStringDistance implementation for this SpellChecker instance. Declaration public virtual IStringDistance StringDistance { get; set; } Property Value Type Description IStringDistance Methods | Improve this Doc View Source ClearIndex() Removes all terms from the spell check index. Declaration public virtual void ClearIndex() | Improve this Doc View Source Dispose() Dispose the underlying IndexSearcher used by this SpellChecker Declaration public void Dispose() | Improve this Doc View Source Exist(String) Check whether the word exists in the index. Declaration public virtual bool Exist(string word) Parameters Type Name Description System.String word word to check Returns Type Description System.Boolean true if the word exists in the index | Improve this Doc View Source IndexDictionary(IDictionary, IndexWriterConfig, Boolean) Indexes the data from the given IDictionary . Declaration public void IndexDictionary(IDictionary dict, IndexWriterConfig config, bool fullMerge) Parameters Type Name Description IDictionary dict Dictionary to index IndexWriterConfig config to use System.Boolean fullMerge whether or not the spellcheck index should be fully merged | Improve this Doc View Source SetSpellIndex(Store.Directory) Sets a different index as the spell checker index or re-open the existing index if spellIndex is the same value as given in the constructor. Declaration public virtual void SetSpellIndex(Store.Directory spellIndexDir) Parameters Type Name Description Store.Directory spellIndexDir the spell directory to use | Improve this Doc View Source SuggestSimilar(String, Int32) Suggest similar words. As the Lucene similarity that is used to fetch the most relevant n-grammed terms is not the same as the edit distance strategy used to calculate the best matching spell-checked word from the hits that Lucene found, one usually has to retrieve a couple of numSug's in order to get the true best match. I.e. if numSug == 1, don't count on that suggestion being the best one. Thus, you should set this value to at least 5 for a good suggestion. Declaration public virtual string[] SuggestSimilar(string word, int numSug) Parameters Type Name Description System.String word the word you want a spell check done on System.Int32 numSug the number of suggested words Returns Type Description System.String [] string[] the sorted list of the suggest words with these 2 criteria: first criteria: the edit distance, second criteria (only if restricted mode): the popularity of the suggest words in the field of the user index See Also SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) | Improve this Doc View Source SuggestSimilar(String, Int32, IndexReader, String, SuggestMode) Calls SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) SuggestSimilar(word, numSug, ir, suggestMode, field, this.accuracy) Declaration public virtual string[] SuggestSimilar(string word, int numSug, IndexReader ir, string field, SuggestMode suggestMode) Parameters Type Name Description System.String word System.Int32 numSug IndexReader ir System.String field SuggestMode suggestMode Returns Type Description System.String [] | Improve this Doc View Source SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) Suggest similar words (optionally restricted to a field of an index). As the Lucene similarity that is used to fetch the most relevant n-grammed terms is not the same as the edit distance strategy used to calculate the best matching spell-checked word from the hits that Lucene found, one usually has to retrieve a couple of numSug's in order to get the true best match. I.e. if numSug == 1, don't count on that suggestion being the best one. Thus, you should set this value to at least 5 for a good suggestion. Declaration public virtual string[] SuggestSimilar(string word, int numSug, IndexReader ir, string field, SuggestMode suggestMode, float accuracy) Parameters Type Name Description System.String word the word you want a spell check done on System.Int32 numSug the number of suggested words IndexReader ir the indexReader of the user index (can be null see field param) System.String field the field of the user index: if field is not null, the suggested words are restricted to the words present in this field. SuggestMode suggestMode (NOTE: if indexReader==null and/or field==null, then this is overridden with SuggestMode.SUGGEST_ALWAYS) System.Single accuracy The minimum score a suggestion must have in order to qualify for inclusion in the results Returns Type Description System.String [] string[] the sorted list of the suggest words with these 2 criteria: first criteria: the edit distance, second criteria (only if restricted mode): the popularity of the suggest words in the field of the user index | Improve this Doc View Source SuggestSimilar(String, Int32, Single) Suggest similar words. As the Lucene similarity that is used to fetch the most relevant n-grammed terms is not the same as the edit distance strategy used to calculate the best matching spell-checked word from the hits that Lucene found, one usually has to retrieve a couple of numSug's in order to get the true best match. I.e. if numSug == 1, don't count on that suggestion being the best one. Thus, you should set this value to at least 5 for a good suggestion. Declaration public virtual string[] SuggestSimilar(string word, int numSug, float accuracy) Parameters Type Name Description System.String word the word you want a spell check done on System.Int32 numSug the number of suggested words System.Single accuracy The minimum score a suggestion must have in order to qualify for inclusion in the results Returns Type Description System.String [] string[] the sorted list of the suggest words with these 2 criteria: first criteria: the edit distance, second criteria (only if restricted mode): the popularity of the suggest words in the field of the user index See Also SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestMode.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestMode.html",
    "title": "Enum SuggestMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum SuggestMode Set of strategies for suggesting related terms This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public enum SuggestMode : int Fields Name Description SUGGEST_ALWAYS Always attempt to offer suggestions (however, other parameters may limit suggestions. For example, see MaxQueryFrequency ). SUGGEST_MORE_POPULAR Return only suggested words that are as frequent or more frequent than the searched word SUGGEST_WHEN_NOT_IN_INDEX Generate suggestions only for terms not in the index (default)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWord.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWord.html",
    "title": "Class SuggestWord | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SuggestWord SuggestWord, used in suggestSimilar method in SpellChecker class. Default sort is first by score, then by frequency. Inheritance System.Object SuggestWord Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class SuggestWord : object Constructors | Improve this Doc View Source SuggestWord() Creates a new empty suggestion with null text. Declaration public SuggestWord() Properties | Improve this Doc View Source Freq The freq of the word Declaration public int Freq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Score the score of the word Declaration public float Score { get; set; } Property Value Type Description System.Single | Improve this Doc View Source String the suggested word Declaration public string String { get; set; } Property Value Type Description System.String"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordFrequencyComparer.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordFrequencyComparer.html",
    "title": "Class SuggestWordFrequencyComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SuggestWordFrequencyComparer Frequency first, then score. Inheritance System.Object SuggestWordFrequencyComparer Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class SuggestWordFrequencyComparer : IComparer<SuggestWord> Constructors | Improve this Doc View Source SuggestWordFrequencyComparer() Creates a new comparer that will compare by Freq , then by Score , then by String . Declaration public SuggestWordFrequencyComparer() Methods | Improve this Doc View Source Compare(SuggestWord, SuggestWord) Declaration public virtual int Compare(SuggestWord first, SuggestWord second) Parameters Type Name Description SuggestWord first SuggestWord second Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordQueue.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordQueue.html",
    "title": "Class SuggestWordQueue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SuggestWordQueue Sorts SuggestWord instances Inheritance System.Object SuggestWordQueue Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class SuggestWordQueue : PriorityQueue<SuggestWord> Constructors | Improve this Doc View Source SuggestWordQueue(Int32) Use the DEFAULT_COMPARER Declaration public SuggestWordQueue(int size) Parameters Type Name Description System.Int32 size The size of the queue | Improve this Doc View Source SuggestWordQueue(Int32, IComparer<SuggestWord>) Specify the size of the queue and the comparer to use for sorting. Declaration public SuggestWordQueue(int size, IComparer<SuggestWord> comparer) Parameters Type Name Description System.Int32 size The size IComparer < SuggestWord > comparer The comparer. Fields | Improve this Doc View Source DEFAULT_COMPARER Default comparer: score then frequency. Declaration public static readonly IComparer<SuggestWord> DEFAULT_COMPARER Field Value Type Description IComparer < SuggestWord > See Also SuggestWordScoreComparer Methods | Improve this Doc View Source LessThan(SuggestWord, SuggestWord) Declaration protected override bool LessThan(SuggestWord wa, SuggestWord wb) Parameters Type Name Description SuggestWord wa SuggestWord wb Returns Type Description System.Boolean See Also SuggestWordScoreComparer SuggestWordFrequencyComparer"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordScoreComparer.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordScoreComparer.html",
    "title": "Class SuggestWordScoreComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SuggestWordScoreComparer Score first, then frequency Inheritance System.Object SuggestWordScoreComparer Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class SuggestWordScoreComparer : IComparer<SuggestWord> Constructors | Improve this Doc View Source SuggestWordScoreComparer() Creates a new comparer that will compare by Score , then by Freq , then by String . Declaration public SuggestWordScoreComparer() Methods | Improve this Doc View Source Compare(SuggestWord, SuggestWord) Declaration public virtual int Compare(SuggestWord first, SuggestWord second) Parameters Type Name Description SuggestWord first SuggestWord second Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.TermFreqIteratorWrapper.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.TermFreqIteratorWrapper.html",
    "title": "Class TermFreqIteratorWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermFreqIteratorWrapper Wraps a BytesRefIterator as a TermFreqIterator, with all weights set to 1 Inheritance System.Object TermFreqIteratorWrapper Implements ITermFreqIterator IBytesRefIterator Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class TermFreqIteratorWrapper : object, ITermFreqIterator, IBytesRefIterator Constructors | Improve this Doc View Source TermFreqIteratorWrapper(IBytesRefIterator) Creates a new wrapper, wrapping the specified iterator and specifying a weight value of 1 for all terms. Declaration public TermFreqIteratorWrapper(IBytesRefIterator wrapped) Parameters Type Name Description IBytesRefIterator wrapped Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements ITermFreqIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.WordBreakSpellChecker.BreakSuggestionSortMethod.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.WordBreakSpellChecker.BreakSuggestionSortMethod.html",
    "title": "Enum WordBreakSpellChecker.BreakSuggestionSortMethod | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum WordBreakSpellChecker.BreakSuggestionSortMethod Determines the order to list word break suggestions Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public enum BreakSuggestionSortMethod : int Fields Name Description NUM_CHANGES_THEN_MAX_FREQUENCY Sort by Number of word breaks, then by the Maximum of all the component term's frequencies NUM_CHANGES_THEN_SUMMED_FREQUENCY Sort by Number of word breaks, then by the Sum of all the component term's frequencies"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.WordBreakSpellChecker.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.WordBreakSpellChecker.html",
    "title": "Class WordBreakSpellChecker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WordBreakSpellChecker A spell checker whose sole function is to offer suggestions by combining multiple terms into one word and/or breaking terms into multiple words. Inheritance System.Object WordBreakSpellChecker Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class WordBreakSpellChecker : object Constructors | Improve this Doc View Source WordBreakSpellChecker() Creates a new spellchecker with default configuration values Declaration public WordBreakSpellChecker() See Also MaxChanges MaxCombineWordLength MaxEvaluations MinBreakWordLength MinSuggestionFrequency Fields | Improve this Doc View Source SEPARATOR_TERM Term that can be used to prohibit adjacent terms from being combined Declaration public static readonly Term SEPARATOR_TERM Field Value Type Description Term Properties | Improve this Doc View Source MaxChanges Gets or sets the maximum numbers of changes (word breaks or combinations) to make on the original term(s). Default=1. Declaration public virtual int MaxChanges { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxCombineWordLength Gets or sets the maximum length of a suggestion made by combining 1 or more original terms. Default=20. Declaration public virtual int MaxCombineWordLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxEvaluations Gets or sets the maximum number of word combinations to evaluate. Default=1000. A higher value might improve result quality. A lower value might improve performance. Declaration public virtual int MaxEvaluations { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinBreakWordLength Gets or sets the minimum length to break words down to. Default=1. Declaration public virtual int MinBreakWordLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinSuggestionFrequency Gets or sets the minimum frequency a term must have to be included as part of a suggestion. Default=1 Not applicable when used with SUGGEST_MORE_POPULAR Declaration public virtual int MinSuggestionFrequency { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source SuggestWordBreaks(Term, Int32, IndexReader, SuggestMode, WordBreakSpellChecker.BreakSuggestionSortMethod) Generate suggestions by breaking the passed-in term into multiple words. The scores returned are equal to the number of word breaks needed so a lower score is generally preferred over a higher score. Declaration public virtual SuggestWord[][] SuggestWordBreaks(Term term, int maxSuggestions, IndexReader ir, SuggestMode suggestMode = default(SuggestMode), WordBreakSpellChecker.BreakSuggestionSortMethod sortMethod = WordBreakSpellChecker.BreakSuggestionSortMethod.NUM_CHANGES_THEN_MAX_FREQUENCY) Parameters Type Name Description Term term System.Int32 maxSuggestions IndexReader ir SuggestMode suggestMode default = SUGGEST_WHEN_NOT_IN_INDEX WordBreakSpellChecker.BreakSuggestionSortMethod sortMethod default = NUM_CHANGES_THEN_MAX_FREQUENCY Returns Type Description SuggestWord [][] one or more arrays of words formed by breaking up the original term | Improve this Doc View Source SuggestWordCombinations(Term[], Int32, IndexReader, SuggestMode) Generate suggestions by combining one or more of the passed-in terms into single words. The returned CombineSuggestion contains both a SuggestWord and also an array detailing which passed-in terms were involved in creating this combination. The scores returned are equal to the number of word combinations needed, also one less than the length of the array OriginalTermIndexes . Generally, a suggestion with a lower score is preferred over a higher score. To prevent two adjacent terms from being combined (for instance, if one is mandatory and the other is prohibited), separate the two terms with SEPARATOR_TERM When suggestMode equals SUGGEST_WHEN_NOT_IN_INDEX , each suggestion will include at least one term not in the index. When suggestMode equals SUGGEST_MORE_POPULAR , each suggestion will have the same, or better frequency than the most-popular included term. Declaration public virtual CombineSuggestion[] SuggestWordCombinations(Term[] terms, int maxSuggestions, IndexReader ir, SuggestMode suggestMode = default(SuggestMode)) Parameters Type Name Description Term [] terms System.Int32 maxSuggestions IndexReader ir SuggestMode suggestMode Returns Type Description CombineSuggestion [] an array of words generated by combining original terms"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.AnalyzingInfixSuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.AnalyzingInfixSuggester.html",
    "title": "Class AnalyzingInfixSuggester | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnalyzingInfixSuggester Analyzes the input text and then suggests matches based on prefix matches to any tokens in the indexed text. This also highlights the tokens that match. This suggester supports payloads. Matches are sorted only by the suggest weight; it would be nice to support blended score + weight sort in the future. This means this suggester best applies when there is a strong a-priori ranking of all the suggestions. This suggester supports contexts, however the contexts must be valid utf8 (arbitrary binary terms will not work). @lucene.experimental Inheritance System.Object Lookup AnalyzingInfixSuggester BlendedInfixSuggester Implements IDisposable Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public class AnalyzingInfixSuggester : Lookup, IDisposable Constructors | Improve this Doc View Source AnalyzingInfixSuggester(LuceneVersion, Store.Directory, Analyzer) Create a new instance, loading from a previously built AnalyzingInfixSuggester directory, if it exists. This directory must be private to the infix suggester (i.e., not an external Lucene index). Note that Dispose() will also dispose the provided directory. Declaration public AnalyzingInfixSuggester(LuceneVersion matchVersion, Store.Directory dir, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Store.Directory dir Analyzer analyzer | Improve this Doc View Source AnalyzingInfixSuggester(LuceneVersion, Store.Directory, Analyzer, Analyzer, Int32) Create a new instance, loading from a previously built AnalyzingInfixSuggester directory, if it exists. This directory must be private to the infix suggester (i.e., not an external Lucene index). Note that Dispose() will also dispose the provided directory. Declaration public AnalyzingInfixSuggester(LuceneVersion matchVersion, Store.Directory dir, Analyzer indexAnalyzer, Analyzer queryAnalyzer, int minPrefixChars) Parameters Type Name Description LuceneVersion matchVersion Store.Directory dir Analyzer indexAnalyzer Analyzer queryAnalyzer System.Int32 minPrefixChars Minimum number of leading characters before is used (default 4). Prefixes shorter than this are indexed as character ngrams (increasing index size but making lookups faster). Fields | Improve this Doc View Source CONTEXTS_FIELD_NAME Field name used for the indexed context, as a and a , for filtering. Declaration protected const string CONTEXTS_FIELD_NAME = null Field Value Type Description System.String | Improve this Doc View Source DEFAULT_MIN_PREFIX_CHARS Default minimum number of leading characters before PrefixQuery is used (4). Declaration public const int DEFAULT_MIN_PREFIX_CHARS = null Field Value Type Description System.Int32 | Improve this Doc View Source EXACT_TEXT_FIELD_NAME Field name used for the indexed text, as a , for exact lookup. Declaration protected const string EXACT_TEXT_FIELD_NAME = null Field Value Type Description System.String | Improve this Doc View Source m_indexAnalyzer Analyzer used at index time Declaration protected readonly Analyzer m_indexAnalyzer Field Value Type Description Analyzer | Improve this Doc View Source m_queryAnalyzer Analyzer used at search time Declaration protected readonly Analyzer m_queryAnalyzer Field Value Type Description Analyzer | Improve this Doc View Source m_searcherMgr used for lookups. Declaration protected SearcherManager m_searcherMgr Field Value Type Description SearcherManager | Improve this Doc View Source TEXT_FIELD_NAME Field name used for the indexed text. Declaration protected const string TEXT_FIELD_NAME = null Field Value Type Description System.String Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Add(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) Adds a new suggestion. Be sure to use Update(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) instead if you want to replace a previous suggestion. After adding or updating a batch of new suggestions, you must call Refresh() in the end in order to see the suggestions in DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) Declaration public virtual void Add(BytesRef text, IEnumerable<BytesRef> contexts, long weight, BytesRef payload) Parameters Type Name Description BytesRef text IEnumerable < BytesRef > contexts System.Int64 weight BytesRef payload | Improve this Doc View Source AddNonMatch(StringBuilder, String) Called while highlighting a single result, to append a non-matching chunk of text from the suggestion to the provided fragments list. Declaration protected virtual void AddNonMatch(StringBuilder sb, string text) Parameters Type Name Description StringBuilder sb The to append to System.String text The text chunk to add | Improve this Doc View Source AddPrefixMatch(StringBuilder, String, String, String) Called while highlighting a single result, to append a matched prefix token, to the provided fragments list. Declaration protected virtual void AddPrefixMatch(StringBuilder sb, string surface, string analyzed, string prefixToken) Parameters Type Name Description StringBuilder sb The to append to System.String surface The fragment of the surface form (indexed during Build(IInputIterator) , corresponding to this match System.String analyzed The analyzed token that matched System.String prefixToken The prefix of the token that matched | Improve this Doc View Source AddWholeMatch(StringBuilder, String, String) Called while highlighting a single result, to append the whole matched token to the provided fragments list. Declaration protected virtual void AddWholeMatch(StringBuilder sb, string surface, string analyzed) Parameters Type Name Description StringBuilder sb The to append to System.String surface The surface form (original) text System.String analyzed The analyzed token corresponding to the surface form text | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iter) Parameters Type Name Description IInputIterator iter Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source CreateResults(IndexSearcher, TopFieldDocs, Int32, String, Boolean, IEnumerable<String>, String) Create the results based on the search hits. Can be overridden by subclass to add particular behavior (e.g. weight transformation) Declaration protected virtual IList<Lookup.LookupResult> CreateResults(IndexSearcher searcher, TopFieldDocs hits, int num, string charSequence, bool doHighlight, IEnumerable<string> matchedTokens, string prefixToken) Parameters Type Name Description IndexSearcher searcher TopFieldDocs hits System.Int32 num System.String charSequence System.Boolean doHighlight IEnumerable < System.String > matchedTokens System.String prefixToken Returns Type Description IList < Lookup.LookupResult > | Improve this Doc View Source Dispose() Declaration public virtual void Dispose() | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) Retrieve suggestions, specifying whether all terms must match ( allTermsRequired ) and whether the hits should be highlighted ( doHighlight ). Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, int num, bool allTermsRequired, bool doHighlight) Parameters Type Name Description System.String key IEnumerable < BytesRef > contexts System.Int32 num System.Boolean allTermsRequired System.Boolean doHighlight Returns Type Description IList < Lookup.LookupResult > | Improve this Doc View Source DoLookup(String, Int32, Boolean, Boolean) Lookup, without any context. Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, int num, bool allTermsRequired, bool doHighlight) Parameters Type Name Description System.String key System.Int32 num System.Boolean allTermsRequired System.Boolean doHighlight Returns Type Description IList < Lookup.LookupResult > | Improve this Doc View Source FinishQuery(BooleanQuery, Boolean) Subclass can override this to tweak the Query before searching. Declaration protected virtual Query FinishQuery(BooleanQuery bq, bool allTermsRequired) Parameters Type Name Description BooleanQuery bq System.Boolean allTermsRequired Returns Type Description Query | Improve this Doc View Source GetDirectory(DirectoryInfo) Subclass can override to choose a specific implementation. Declaration protected virtual Store.Directory GetDirectory(DirectoryInfo path) Parameters Type Name Description DirectoryInfo path Returns Type Description Store.Directory | Improve this Doc View Source GetIndexWriterConfig(LuceneVersion, Analyzer, OpenMode) Override this to customize index settings, e.g. which codec to use. Declaration protected virtual IndexWriterConfig GetIndexWriterConfig(LuceneVersion matchVersion, Analyzer indexAnalyzer, OpenMode openMode) Parameters Type Name Description LuceneVersion matchVersion Analyzer indexAnalyzer OpenMode openMode Returns Type Description IndexWriterConfig | Improve this Doc View Source GetLastTokenQuery(String) This is called if the last token isn't ended (e.g. user did not type a space after it). Return an appropriate clause to add to the . Declaration protected virtual Query GetLastTokenQuery(string token) Parameters Type Name Description System.String token Returns Type Description Query | Improve this Doc View Source GetSizeInBytes() Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source GetTextFieldType() Subclass can override this method to change the field type of the text field e.g. to change the index options Declaration protected virtual FieldType GetTextFieldType() Returns Type Description FieldType | Improve this Doc View Source Highlight(String, IEnumerable<String>, String) Override this method to customize the Object representing a single highlighted suggestions; the result is set on each HighlightKey member. Declaration protected virtual object Highlight(string text, IEnumerable<string> matchedTokens, string prefixToken) Parameters Type Name Description System.String text IEnumerable < System.String > matchedTokens System.String prefixToken Returns Type Description System.Object | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput out) Parameters Type Name Description DataInput out Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Refresh() Reopens the underlying searcher; it's best to \"batch up\" many additions/updates, and then call refresh once in the end. Declaration public virtual void Refresh() | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput in) Parameters Type Name Description DataOutput in Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput) | Improve this Doc View Source Update(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) Updates a previous suggestion, matching the exact same text as before. Use this to change the weight or payload of an already added suggstion. If you know this text is not already present you can use Add(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) instead. After adding or updating a batch of new suggestions, you must call Refresh() in the end in order to see the suggestions in DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) Declaration public virtual void Update(BytesRef text, IEnumerable<BytesRef> contexts, long weight, BytesRef payload) Parameters Type Name Description BytesRef text IEnumerable < BytesRef > contexts System.Int64 weight BytesRef payload Implements IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.AnalyzingSuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.AnalyzingSuggester.html",
    "title": "Class AnalyzingSuggester | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnalyzingSuggester Suggester that first analyzes the surface form, adds the analyzed form to a weighted FST, and then does the same thing at lookup time. This means lookup is based on the analyzed form while suggestions are still the surface form(s). This can result in powerful suggester functionality. For example, if you use an analyzer removing stop words, then the partial text \"ghost chr...\" could see the suggestion \"The Ghost of Christmas Past\". Note that position increments MUST NOT be preserved for this example to work, so you should call the constructor with Lucene.Net.Search.Suggest.Analyzing.AnalyzingSuggester.preservePositionIncrements parameter set to false If SynonymFilter is used to map wifi and wireless network to hotspot then the partial text \"wirele...\" could suggest \"wifi router\". Token normalization like stemmers, accent removal, etc., would allow suggestions to ignore such variations. When two matching suggestions have the same weight, they are tie-broken by the analyzed form. If their analyzed form is the same then the order is undefined. There are some limitations: A lookup from a query like \"net\" in English won't be any different than \"net \" (ie, user added a trailing space) because analyzers don't reflect when they've seen a token separator and when they haven't. If you're using StopFilter , and the user will type \"fast apple\", but so far all they've typed is \"fast a\", again because the analyzer doesn't convey whether it's seen a token separator after the \"a\", StopFilter will remove that \"a\" causing far more matches than you'd expect. Lookups with the empty string return no results instead of all results. @lucene.experimental Inheritance System.Object Lookup AnalyzingSuggester FuzzySuggester Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public class AnalyzingSuggester : Lookup Constructors | Improve this Doc View Source AnalyzingSuggester(Analyzer) Calls AnalyzingSuggester(Analyzer, Analyzer, SuggesterOptions, Int32, Int32, Boolean) Declaration public AnalyzingSuggester(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer | Improve this Doc View Source AnalyzingSuggester(Analyzer, Analyzer) Calls AnalyzingSuggester(Analyzer, Analyzer, SuggesterOptions, Int32, Int32, Boolean) Declaration public AnalyzingSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer) Parameters Type Name Description Analyzer indexAnalyzer Analyzer queryAnalyzer | Improve this Doc View Source AnalyzingSuggester(Analyzer, Analyzer, SuggesterOptions, Int32, Int32, Boolean) Creates a new suggester. Declaration public AnalyzingSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, SuggesterOptions options, int maxSurfaceFormsPerAnalyzedForm, int maxGraphExpansions, bool preservePositionIncrements) Parameters Type Name Description Analyzer indexAnalyzer Analyzer that will be used for analyzing suggestions while building the index. Analyzer queryAnalyzer Analyzer that will be used for analyzing query text during lookup SuggesterOptions options see EXACT_FIRST , PRESERVE_SEP System.Int32 maxSurfaceFormsPerAnalyzedForm Maximum number of surface forms to keep for a single analyzed form. When there are too many surface forms we discard the lowest weighted ones. System.Int32 maxGraphExpansions Maximum number of graph paths to expand from the analyzed form. Set this to -1 for no limit. System.Boolean preservePositionIncrements Whether position holes should appear in the automata Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iterator) Parameters Type Name Description IInputIterator iterator Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source ConvertAutomaton(Automaton) Used by subclass to change the lookup automaton, if necessary. Declaration protected virtual Automaton ConvertAutomaton(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the weight associated with an input string, or null if it does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<Nullable<Int64>, BytesRef>.Pair>>, Automaton, FST<PairOutputs<Nullable<Int64>, BytesRef>.Pair>) Returns all prefix paths to initialize the search. Declaration protected virtual IList<FSTUtil.Path<PairOutputs<long?, BytesRef>.Pair>> GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<long?, BytesRef>.Pair>> prefixPaths, Automaton lookupAutomaton, FST<PairOutputs<long?, BytesRef>.Pair> fst) Parameters Type Name Description IList < FSTUtil.Path < PairOutputs.Pair <>>> prefixPaths Automaton lookupAutomaton FST < PairOutputs.Pair <>> fst Returns Type Description IList < FSTUtil.Path < PairOutputs.Pair <>>> | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying FST. Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.BlendedInfixSuggester.BlenderType.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.BlendedInfixSuggester.BlenderType.html",
    "title": "Enum BlendedInfixSuggester.BlenderType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum BlendedInfixSuggester.BlenderType The different types of blender. Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public enum BlenderType : int Fields Name Description CUSTOM Application dependent; override CalculateCoefficient(Int32) to compute it. POSITION_LINEAR weight (1 - 0.10 position) POSITION_RECIPROCAL weight/(1+position)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.BlendedInfixSuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.BlendedInfixSuggester.html",
    "title": "Class BlendedInfixSuggester | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlendedInfixSuggester Extension of the AnalyzingInfixSuggester which transforms the weight after search to take into account the position of the searched term into the indexed text. Please note that it increases the number of elements searched and applies the ponderation after. It might be costly for long suggestions. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lookup AnalyzingInfixSuggester BlendedInfixSuggester Implements IDisposable Inherited Members AnalyzingInfixSuggester.TEXT_FIELD_NAME AnalyzingInfixSuggester.EXACT_TEXT_FIELD_NAME AnalyzingInfixSuggester.CONTEXTS_FIELD_NAME AnalyzingInfixSuggester.m_queryAnalyzer AnalyzingInfixSuggester.m_indexAnalyzer AnalyzingInfixSuggester.m_searcherMgr AnalyzingInfixSuggester.DEFAULT_MIN_PREFIX_CHARS AnalyzingInfixSuggester.GetIndexWriterConfig(LuceneVersion, Analyzer, OpenMode) AnalyzingInfixSuggester.GetDirectory(DirectoryInfo) AnalyzingInfixSuggester.Build(IInputIterator) AnalyzingInfixSuggester.Add(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) AnalyzingInfixSuggester.Update(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) AnalyzingInfixSuggester.Refresh() AnalyzingInfixSuggester.DoLookup(String, Int32, Boolean, Boolean) AnalyzingInfixSuggester.GetLastTokenQuery(String) AnalyzingInfixSuggester.FinishQuery(BooleanQuery, Boolean) AnalyzingInfixSuggester.Highlight(String, IEnumerable<String>, String) AnalyzingInfixSuggester.AddNonMatch(StringBuilder, String) AnalyzingInfixSuggester.AddWholeMatch(StringBuilder, String, String) AnalyzingInfixSuggester.AddPrefixMatch(StringBuilder, String, String, String) AnalyzingInfixSuggester.Store(DataOutput) AnalyzingInfixSuggester.Load(DataInput) AnalyzingInfixSuggester.Dispose() AnalyzingInfixSuggester.GetSizeInBytes() AnalyzingInfixSuggester.Count Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public class BlendedInfixSuggester : AnalyzingInfixSuggester, IDisposable Constructors | Improve this Doc View Source BlendedInfixSuggester(LuceneVersion, Store.Directory, Analyzer) Create a new instance, loading from a previously built directory, if it exists. Declaration public BlendedInfixSuggester(LuceneVersion matchVersion, Store.Directory dir, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Store.Directory dir Analyzer analyzer | Improve this Doc View Source BlendedInfixSuggester(LuceneVersion, Store.Directory, Analyzer, Analyzer, Int32, BlendedInfixSuggester.BlenderType, Int32) Create a new instance, loading from a previously built directory, if it exists. Declaration public BlendedInfixSuggester(LuceneVersion matchVersion, Store.Directory dir, Analyzer indexAnalyzer, Analyzer queryAnalyzer, int minPrefixChars, BlendedInfixSuggester.BlenderType blenderType, int numFactor) Parameters Type Name Description LuceneVersion matchVersion Store.Directory dir Analyzer indexAnalyzer Analyzer queryAnalyzer System.Int32 minPrefixChars BlendedInfixSuggester.BlenderType blenderType Type of blending strategy, see BlenderType for more precisions System.Int32 numFactor Factor to multiply the number of searched elements before ponderate Fields | Improve this Doc View Source DEFAULT_NUM_FACTOR Default factor Declaration public static int DEFAULT_NUM_FACTOR Field Value Type Description System.Int32 | Improve this Doc View Source LINEAR_COEF Coefficient used for linear blending Declaration protected static double LINEAR_COEF Field Value Type Description System.Double Methods | Improve this Doc View Source CalculateCoefficient(Int32) Calculate the weight coefficient based on the position of the first matching word. Subclass should override it to adapt it to particular needs Declaration protected virtual double CalculateCoefficient(int position) Parameters Type Name Description System.Int32 position of the first matching word in text Returns Type Description System.Double the coefficient | Improve this Doc View Source CreateResults(IndexSearcher, TopFieldDocs, Int32, String, Boolean, IEnumerable<String>, String) Declaration protected override IList<Lookup.LookupResult> CreateResults(IndexSearcher searcher, TopFieldDocs hits, int num, string key, bool doHighlight, IEnumerable<string> matchedTokens, string prefixToken) Parameters Type Name Description IndexSearcher searcher TopFieldDocs hits System.Int32 num System.String key System.Boolean doHighlight IEnumerable < System.String > matchedTokens System.String prefixToken Returns Type Description IList < Lookup.LookupResult > Overrides AnalyzingInfixSuggester.CreateResults(IndexSearcher, TopFieldDocs, Int32, String, Boolean, IEnumerable<String>, String) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description IList < Lookup.LookupResult > Overrides AnalyzingInfixSuggester.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, int num, bool allTermsRequired, bool doHighlight) Parameters Type Name Description System.String key IEnumerable < BytesRef > contexts System.Int32 num System.Boolean allTermsRequired System.Boolean doHighlight Returns Type Description IList < Lookup.LookupResult > Overrides AnalyzingInfixSuggester.DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) | Improve this Doc View Source GetTextFieldType() Declaration protected override FieldType GetTextFieldType() Returns Type Description FieldType Overrides AnalyzingInfixSuggester.GetTextFieldType() Implements IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FreeTextSuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FreeTextSuggester.html",
    "title": "Class FreeTextSuggester | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FreeTextSuggester Builds an ngram model from the text sent to Build(IInputIterator, Double) and predicts based on the last grams-1 tokens in the request sent to DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) . This tries to handle the \"long tail\" of suggestions for when the incoming query is a never before seen query string. Likely this suggester would only be used as a fallback, when the primary suggester fails to find any suggestions. Note that the weight for each suggestion is unused, and the suggestions are the analyzed forms (so your analysis process should normally be very \"light\"). This uses the stupid backoff language model to smooth scores across ngram models; see \"Large language models in machine translation\" for details. From DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) , the key of each result is the ngram token; the value is * score (fixed point, cast to long). Divide by to get the score back, which ranges from 0.0 to 1.0. onlyMorePopular is unused. @lucene.experimental Inheritance System.Object Lookup FreeTextSuggester Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public class FreeTextSuggester : Lookup Constructors | Improve this Doc View Source FreeTextSuggester(Analyzer) Instantiate, using the provided analyzer for both indexing and lookup, using bigram model by default. Declaration public FreeTextSuggester(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer | Improve this Doc View Source FreeTextSuggester(Analyzer, Analyzer) Instantiate, using the provided indexing and lookup analyzers, using bigram model by default. Declaration public FreeTextSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer) Parameters Type Name Description Analyzer indexAnalyzer Analyzer queryAnalyzer | Improve this Doc View Source FreeTextSuggester(Analyzer, Analyzer, Int32) Instantiate, using the provided indexing and lookup analyzers, with the specified model (2 = bigram, 3 = trigram, etc.). Declaration public FreeTextSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, int grams) Parameters Type Name Description Analyzer indexAnalyzer Analyzer queryAnalyzer System.Int32 grams | Improve this Doc View Source FreeTextSuggester(Analyzer, Analyzer, Int32, Byte) Instantiate, using the provided indexing and lookup analyzers, and specified model (2 = bigram, 3 = trigram ,etc.). The separator is passed to SetTokenSeparator(String) to join multiple tokens into a single ngram token; it must be an ascii (7-bit-clean) byte. No input tokens should have this byte, otherwise is thrown. Declaration public FreeTextSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, int grams, byte separator) Parameters Type Name Description Analyzer indexAnalyzer Analyzer queryAnalyzer System.Int32 grams System.Byte separator Fields | Improve this Doc View Source ALPHA The constant used for backoff smoothing; during lookup, this means that if a given trigram did not occur, and we backoff to the bigram, the overall score will be 0.4 times what the bigram model would have assigned. Declaration public const double ALPHA = null Field Value Type Description System.Double | Improve this Doc View Source CODEC_NAME Codec name used in the header for the saved model. Declaration public const string CODEC_NAME = null Field Value Type Description System.String | Improve this Doc View Source DEFAULT_GRAMS By default we use a bigram model. Declaration public const int DEFAULT_GRAMS = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_SEPARATOR The default character used to join multiple tokens into a single ngram token. The input tokens produced by the analyzer must not contain this character. Declaration public const byte DEFAULT_SEPARATOR = null Field Value Type Description System.Byte | Improve this Doc View Source VERSION_CURRENT Current version of the the saved model file format. Declaration public const int VERSION_CURRENT = null Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Initial version of the the saved model file format. Declaration public const int VERSION_START = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iterator) Parameters Type Name Description IInputIterator iterator Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source Build(IInputIterator, Double) Build the suggest index, using up to the specified amount of temporary RAM while building. Note that the weights for the suggestions are ignored. Declaration public virtual void Build(IInputIterator iterator, double ramBufferSizeMB) Parameters Type Name Description IInputIterator iterator System.Double ramBufferSizeMB | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Int32) Retrieve suggestions. Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, int num) Parameters Type Name Description System.String key IEnumerable < BytesRef > contexts System.Int32 num Returns Type Description IList < Lookup.LookupResult > | Improve this Doc View Source DoLookup(String, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Boolean onlyMorePopular System.Int32 num Returns Type Description IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, Boolean, Int32) | Improve this Doc View Source DoLookup(String, Int32) Lookup, without any context. Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, int num) Parameters Type Name Description System.String key System.Int32 num Returns Type Description IList < Lookup.LookupResult > | Improve this Doc View Source Get(String) Returns the weight associated with an input string, or null if it does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying FST. Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FSTUtil.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FSTUtil.html",
    "title": "Class FSTUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTUtil Exposes a utility method to enumerate all paths intersecting an with an . Inheritance System.Object FSTUtil Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public static class FSTUtil : object Methods | Improve this Doc View Source IntersectPrefixPaths<T>(Automaton, FST<T>) Enumerates all minimal prefix paths in the automaton that also intersect the , accumulating the end node and output for each path. Declaration public static IList<FSTUtil.Path<T>> IntersectPrefixPaths<T>(Automaton a, FST<T> fst) Parameters Type Name Description Automaton a FST <T> fst Returns Type Description IList < FSTUtil.Path <T>> Type Parameters Name Description T"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FSTUtil.Path-1.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FSTUtil.Path-1.html",
    "title": "Class FSTUtil.Path<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTUtil.Path<T> Holds a pair (automaton, fst) of states and accumulated output in the intersected machine. Inheritance System.Object FSTUtil.Path<T> Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public sealed class Path<T> : object Type Parameters Name Description T Constructors | Improve this Doc View Source Path(State, FST.Arc<T>, T, Int32sRef) Sole constructor. Declaration public Path(State state, FST.Arc<T> fstNode, T output, Int32sRef input) Parameters Type Name Description State state FST.Arc <T> fstNode T output Int32sRef input Properties | Improve this Doc View Source FstNode Node in the where path ends: Declaration public FST.Arc<T> FstNode { get; } Property Value Type Description FST.Arc <T> | Improve this Doc View Source Input Input of the path so far: Declaration public Int32sRef Input { get; } Property Value Type Description Int32sRef | Improve this Doc View Source Output Output of the path so far: Declaration public T Output { get; set; } Property Value Type Description T | Improve this Doc View Source State Node in the automaton where path ends: Declaration public State State { get; } Property Value Type Description State"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.html",
    "title": "Class FuzzySuggester | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzySuggester Implements a fuzzy AnalyzingSuggester . The similarity measurement is based on the Damerau-Levenshtein (optimal string alignment) algorithm, though you can explicitly choose classic Levenshtein by passing false for the Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.transpositions parameter. At most, this query will match terms up to edits. Higher distances are not supported. Note that the fuzzy distance is measured in \"byte space\" on the bytes returned by the 's , usually UTF8. By default the analyzed bytes must be at least 3 DEFAULT_MIN_FUZZY_LENGTH bytes before any edits are considered. Furthermore, the first 1 DEFAULT_NON_FUZZY_PREFIX byte is not allowed to be edited. We allow up to 1 DEFAULT_MAX_EDITS edit. If Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.unicodeAware parameter in the constructor is set to true, maxEdits, minFuzzyLength, transpositions and nonFuzzyPrefix are measured in Unicode code points (actual letters) instead of bytes. NOTE: This suggester does not boost suggestions that required no edits over suggestions that did require edits. This is a known limitation. Note: complex query analyzers can have a significant impact on the lookup performance. It's recommended to not use analyzers that drop or inject terms like synonyms to keep the complexity of the prefix intersection low for good lookup performance. At index time, complex analyzers can safely be used. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lookup AnalyzingSuggester FuzzySuggester Inherited Members AnalyzingSuggester.GetSizeInBytes() AnalyzingSuggester.Build(IInputIterator) AnalyzingSuggester.Store(DataOutput) AnalyzingSuggester.Load(DataInput) AnalyzingSuggester.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) AnalyzingSuggester.Count AnalyzingSuggester.Get(String) Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public sealed class FuzzySuggester : AnalyzingSuggester Constructors | Improve this Doc View Source FuzzySuggester(Analyzer) Creates a FuzzySuggester instance initialized with default values. Declaration public FuzzySuggester(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer The used for this suggester. | Improve this Doc View Source FuzzySuggester(Analyzer, Analyzer) Creates a FuzzySuggester instance with an index & a query analyzer initialized with default values. Declaration public FuzzySuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer) Parameters Type Name Description Analyzer indexAnalyzer that will be used for analyzing suggestions while building the index. Analyzer queryAnalyzer that will be used for analyzing query text during lookup | Improve this Doc View Source FuzzySuggester(Analyzer, Analyzer, SuggesterOptions, Int32, Int32, Boolean, Int32, Boolean, Int32, Int32, Boolean) Creates a FuzzySuggester instance. Declaration public FuzzySuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, SuggesterOptions options, int maxSurfaceFormsPerAnalyzedForm, int maxGraphExpansions, bool preservePositionIncrements, int maxEdits, bool transpositions, int nonFuzzyPrefix, int minFuzzyLength, bool unicodeAware) Parameters Type Name Description Analyzer indexAnalyzer The that will be used for analyzing suggestions while building the index. Analyzer queryAnalyzer The that will be used for analyzing query text during lookup SuggesterOptions options see EXACT_FIRST , PRESERVE_SEP System.Int32 maxSurfaceFormsPerAnalyzedForm Maximum number of surface forms to keep for a single analyzed form. When there are too many surface forms we discard the lowest weighted ones. System.Int32 maxGraphExpansions Maximum number of graph paths to expand from the analyzed form. Set this to -1 for no limit. System.Boolean preservePositionIncrements Whether position holes should appear in the automaton System.Int32 maxEdits must be >= 0 and <= . System.Boolean transpositions true if transpositions should be treated as a primitive edit operation. If this is false, comparisons will implement the classic Levenshtein algorithm. System.Int32 nonFuzzyPrefix length of common (non-fuzzy) prefix (see default DEFAULT_NON_FUZZY_PREFIX System.Int32 minFuzzyLength minimum length of lookup key before any edits are allowed (see default DEFAULT_MIN_FUZZY_LENGTH ) System.Boolean unicodeAware operate Unicode code points instead of bytes. Fields | Improve this Doc View Source DEFAULT_MAX_EDITS The default maximum number of edits for fuzzy suggestions. Declaration public const int DEFAULT_MAX_EDITS = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_FUZZY_LENGTH The default minimum length of the key passed to Lookup before any edits are allowed. Declaration public const int DEFAULT_MIN_FUZZY_LENGTH = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_NON_FUZZY_PREFIX The default prefix length where edits are not allowed. Declaration public const int DEFAULT_NON_FUZZY_PREFIX = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_TRANSPOSITIONS The default transposition value passed to Declaration public const bool DEFAULT_TRANSPOSITIONS = null Field Value Type Description System.Boolean | Improve this Doc View Source DEFAULT_UNICODE_AWARE Measure Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.maxEdits , Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.minFuzzyLength , Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.transpositions , and Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.nonFuzzyPrefix parameters in Unicode code points (actual letters) instead of bytes. Declaration public const bool DEFAULT_UNICODE_AWARE = null Field Value Type Description System.Boolean Methods | Improve this Doc View Source ConvertAutomaton(Automaton) Declaration protected override Automaton ConvertAutomaton(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton Overrides AnalyzingSuggester.ConvertAutomaton(Automaton) | Improve this Doc View Source GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<Nullable<Int64>, BytesRef>.Pair>>, Automaton, FST<PairOutputs<Nullable<Int64>, BytesRef>.Pair>) Declaration protected override IList<FSTUtil.Path<PairOutputs<long?, BytesRef>.Pair>> GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<long?, BytesRef>.Pair>> prefixPaths, Automaton lookupAutomaton, FST<PairOutputs<long?, BytesRef>.Pair> fst) Parameters Type Name Description IList < FSTUtil.Path < PairOutputs.Pair <>>> prefixPaths Automaton lookupAutomaton FST < PairOutputs.Pair <>> fst Returns Type Description IList < FSTUtil.Path < PairOutputs.Pair <>>> Overrides AnalyzingSuggester.GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<Nullable<Int64>, BytesRef>.Pair>>, Automaton, FST<PairOutputs<Nullable<Int64>, BytesRef>.Pair>)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.html",
    "title": "Namespace Lucene.Net.Search.Suggest.Analyzing | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest.Analyzing <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer based autosuggest. Classes AnalyzingInfixSuggester Analyzes the input text and then suggests matches based on prefix matches to any tokens in the indexed text. This also highlights the tokens that match. This suggester supports payloads. Matches are sorted only by the suggest weight; it would be nice to support blended score + weight sort in the future. This means this suggester best applies when there is a strong a-priori ranking of all the suggestions. This suggester supports contexts, however the contexts must be valid utf8 (arbitrary binary terms will not work). @lucene.experimental AnalyzingSuggester Suggester that first analyzes the surface form, adds the analyzed form to a weighted FST, and then does the same thing at lookup time. This means lookup is based on the analyzed form while suggestions are still the surface form(s). This can result in powerful suggester functionality. For example, if you use an analyzer removing stop words, then the partial text \"ghost chr...\" could see the suggestion \"The Ghost of Christmas Past\". Note that position increments MUST NOT be preserved for this example to work, so you should call the constructor with Lucene.Net.Search.Suggest.Analyzing.AnalyzingSuggester.preservePositionIncrements parameter set to false If SynonymFilter is used to map wifi and wireless network to hotspot then the partial text \"wirele...\" could suggest \"wifi router\". Token normalization like stemmers, accent removal, etc., would allow suggestions to ignore such variations. When two matching suggestions have the same weight, they are tie-broken by the analyzed form. If their analyzed form is the same then the order is undefined. There are some limitations: A lookup from a query like \"net\" in English won't be any different than \"net \" (ie, user added a trailing space) because analyzers don't reflect when they've seen a token separator and when they haven't. If you're using StopFilter , and the user will type \"fast apple\", but so far all they've typed is \"fast a\", again because the analyzer doesn't convey whether it's seen a token separator after the \"a\", StopFilter will remove that \"a\" causing far more matches than you'd expect. Lookups with the empty string return no results instead of all results. @lucene.experimental BlendedInfixSuggester Extension of the AnalyzingInfixSuggester which transforms the weight after search to take into account the position of the searched term into the indexed text. Please note that it increases the number of elements searched and applies the ponderation after. It might be costly for long suggestions. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FreeTextSuggester Builds an ngram model from the text sent to Build(IInputIterator, Double) and predicts based on the last grams-1 tokens in the request sent to DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) . This tries to handle the \"long tail\" of suggestions for when the incoming query is a never before seen query string. Likely this suggester would only be used as a fallback, when the primary suggester fails to find any suggestions. Note that the weight for each suggestion is unused, and the suggestions are the analyzed forms (so your analysis process should normally be very \"light\"). This uses the stupid backoff language model to smooth scores across ngram models; see \"Large language models in machine translation\" for details. From DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) , the key of each result is the ngram token; the value is * score (fixed point, cast to long). Divide by to get the score back, which ranges from 0.0 to 1.0. onlyMorePopular is unused. @lucene.experimental FSTUtil Exposes a utility method to enumerate all paths intersecting an with an . FSTUtil.Path<T> Holds a pair (automaton, fst) of states and accumulated output in the intersected machine. FuzzySuggester Implements a fuzzy AnalyzingSuggester . The similarity measurement is based on the Damerau-Levenshtein (optimal string alignment) algorithm, though you can explicitly choose classic Levenshtein by passing false for the Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.transpositions parameter. At most, this query will match terms up to edits. Higher distances are not supported. Note that the fuzzy distance is measured in \"byte space\" on the bytes returned by the 's , usually UTF8. By default the analyzed bytes must be at least 3 DEFAULT_MIN_FUZZY_LENGTH bytes before any edits are considered. Furthermore, the first 1 DEFAULT_NON_FUZZY_PREFIX byte is not allowed to be edited. We allow up to 1 DEFAULT_MAX_EDITS edit. If Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.unicodeAware parameter in the constructor is set to true, maxEdits, minFuzzyLength, transpositions and nonFuzzyPrefix are measured in Unicode code points (actual letters) instead of bytes. NOTE: This suggester does not boost suggestions that required no edits over suggestions that did require edits. This is a known limitation. Note: complex query analyzers can have a significant impact on the lookup performance. It's recommended to not use analyzers that drop or inject terms like synonyms to keep the complexity of the prefix intersection low for good lookup performance. At index time, complex analyzers can safely be used. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SuggestStopFilter Like StopFilter except it will not remove the last token if that token was not followed by some token separator. For example, a query 'find the' would preserve the 'the' since it was not followed by a space or punctuation or something, and mark it KEYWORD so future stemmers won't touch it either while a query like \"find the popsicle' would remove 'the' as a stopword. Normally you'd use the ordinary StopFilter in your indexAnalyzer and then this class in your queryAnalyzer, when using one of the analyzing suggesters. Enums BlendedInfixSuggester.BlenderType The different types of blender. SuggesterOptions LUCENENET specific type for specifying AnalyzingSuggester and FuzzySuggester options."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.SuggesterOptions.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.SuggesterOptions.html",
    "title": "Enum SuggesterOptions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum SuggesterOptions LUCENENET specific type for specifying AnalyzingSuggester and FuzzySuggester options. Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public enum SuggesterOptions : int Fields Name Description EXACT_FIRST Always return the exact match first, regardless of score. This has no performance impact but could result in low-quality suggestions. PRESERVE_SEP Preserve token separators when matching."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.SuggestStopFilter.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.SuggestStopFilter.html",
    "title": "Class SuggestStopFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SuggestStopFilter Like StopFilter except it will not remove the last token if that token was not followed by some token separator. For example, a query 'find the' would preserve the 'the' since it was not followed by a space or punctuation or something, and mark it KEYWORD so future stemmers won't touch it either while a query like \"find the popsicle' would remove 'the' as a stopword. Normally you'd use the ordinary StopFilter in your indexAnalyzer and then this class in your queryAnalyzer, when using one of the analyzing suggesters. Inheritance System.Object SuggestStopFilter Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public sealed class SuggestStopFilter : TokenFilter Constructors | Improve this Doc View Source SuggestStopFilter(TokenStream, CharArraySet) Sole constructor. Declaration public SuggestStopFilter(TokenStream input, CharArraySet stopWords) Parameters Type Name Description TokenStream input CharArraySet stopWords Methods | Improve this Doc View Source End() Declaration public override void End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override void Reset()"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.BufferedInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.BufferedInputIterator.html",
    "title": "Class BufferedInputIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferedInputIterator This wrapper buffers incoming elements. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BufferedInputIterator UnsortedInputIterator Implements IInputIterator IBytesRefIterator Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class BufferedInputIterator : object, IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source BufferedInputIterator(IInputIterator) Creates a new iterator, buffering entries from the specified iterator Declaration public BufferedInputIterator(IInputIterator source) Parameters Type Name Description IInputIterator source Fields | Improve this Doc View Source m_contextSets buffered context set entries Declaration protected IList<IEnumerable<BytesRef>> m_contextSets Field Value Type Description IList < IEnumerable < BytesRef >> | Improve this Doc View Source m_curPos current buffer position Declaration protected int m_curPos Field Value Type Description System.Int32 | Improve this Doc View Source m_entries buffered term entries Declaration protected BytesRefArray m_entries Field Value Type Description BytesRefArray | Improve this Doc View Source m_freqs buffered weights, parallel with m_entries Declaration protected long[] m_freqs Field Value Type Description System.Int64 [] | Improve this Doc View Source m_payloads buffered payload entries Declaration protected BytesRefArray m_payloads Field Value Type Description BytesRefArray Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > | Improve this Doc View Source Contexts Declaration public virtual IEnumerable<BytesRef> Contexts { get; } Property Value Type Description IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Declaration public virtual bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.BufferingTermFreqIteratorWrapper.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.BufferingTermFreqIteratorWrapper.html",
    "title": "Class BufferingTermFreqIteratorWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferingTermFreqIteratorWrapper This wrapper buffers incoming elements. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BufferingTermFreqIteratorWrapper Implements ITermFreqIterator IBytesRefIterator Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class BufferingTermFreqIteratorWrapper : object, ITermFreqIterator, IBytesRefIterator Constructors | Improve this Doc View Source BufferingTermFreqIteratorWrapper(ITermFreqIterator) Creates a new iterator, buffering entries from the specified iterator Declaration public BufferingTermFreqIteratorWrapper(ITermFreqIterator source) Parameters Type Name Description ITermFreqIterator source Fields | Improve this Doc View Source m_curPos current buffer position Declaration protected int m_curPos Field Value Type Description System.Int32 | Improve this Doc View Source m_entries buffered term entries Declaration protected BytesRefArray m_entries Field Value Type Description BytesRefArray | Improve this Doc View Source m_freqs buffered weights, parallel with m_entries Declaration protected long[] m_freqs Field Value Type Description System.Int64 [] Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements ITermFreqIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentDictionary.DocumentInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentDictionary.DocumentInputIterator.html",
    "title": "Class DocumentDictionary.DocumentInputIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocumentDictionary.DocumentInputIterator Implements IInputIterator from stored fields. Inheritance System.Object DocumentDictionary.DocumentInputIterator Implements IInputIterator IBytesRefIterator Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax protected class DocumentInputIterator : object, IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source DocumentInputIterator(DocumentDictionary, Boolean, Boolean) Creates an iterator over term, weight and payload fields from the lucene index. setting HasPayloads to false, implies an iterator over only term and weight. Declaration public DocumentInputIterator(DocumentDictionary outerInstance, bool hasPayloads, bool hasContexts) Parameters Type Name Description DocumentDictionary outerInstance System.Boolean hasPayloads System.Boolean hasContexts Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > | Improve this Doc View Source Contexts Declaration public virtual IEnumerable<BytesRef> Contexts { get; } Property Value Type Description IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Declaration public virtual bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source GetWeight(Document, Int32) Returns the value of the Weight property for the current document. Retrieves the value for the Weight property if its stored (using doc ) or if its indexed as (using docId ) for the document. If no value is found, then the weight is 0. Declaration protected virtual long GetWeight(Document doc, int docId) Parameters Type Name Description Document doc System.Int32 docId Returns Type Description System.Int64 | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentDictionary.html",
    "title": "Class DocumentDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocumentDictionary Dictionary with terms, weights, payload (optional) and contexts (optional) information taken from stored/indexed fields in a Lucene index. NOTE: The term and (optionally) payload fields have to be stored The weight field can be stored or can be a . If the weight field is not defined, the value of the weight is 0 if any of the term or (optionally) payload fields supplied do not have a value for a document, then the document is skipped by the dictionary Inheritance System.Object DocumentDictionary DocumentValueSourceDictionary Implements IDictionary Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class DocumentDictionary : object, IDictionary Constructors | Improve this Doc View Source DocumentDictionary(IndexReader, String, String) Creates a new dictionary with the contents of the fields named field for the terms and weightField for the weights that will be used for the corresponding terms. Declaration public DocumentDictionary(IndexReader reader, string field, string weightField) Parameters Type Name Description IndexReader reader System.String field System.String weightField | Improve this Doc View Source DocumentDictionary(IndexReader, String, String, String) Creates a new dictionary with the contents of the fields named field for the terms, weightField for the weights that will be used for the the corresponding terms and payloadField for the corresponding payloads for the entry. Declaration public DocumentDictionary(IndexReader reader, string field, string weightField, string payloadField) Parameters Type Name Description IndexReader reader System.String field System.String weightField System.String payloadField | Improve this Doc View Source DocumentDictionary(IndexReader, String, String, String, String) Creates a new dictionary with the contents of the fields named field for the terms, weightField for the weights that will be used for the the corresponding terms, payloadField for the corresponding payloads for the entry and contextsField for associated contexts. Declaration public DocumentDictionary(IndexReader reader, string field, string weightField, string payloadField, string contextsField) Parameters Type Name Description IndexReader reader System.String field System.String weightField System.String payloadField System.String contextsField Fields | Improve this Doc View Source m_contextsField Field to read contexts from Declaration protected readonly string m_contextsField Field Value Type Description System.String | Improve this Doc View Source m_payloadField Field to read payload from Declaration protected readonly string m_payloadField Field Value Type Description System.String | Improve this Doc View Source m_reader to load documents from Declaration protected readonly IndexReader m_reader Field Value Type Description IndexReader Methods | Improve this Doc View Source GetEntryIterator() Declaration public virtual IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentValueSourceDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentValueSourceDictionary.html",
    "title": "Class DocumentValueSourceDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocumentValueSourceDictionary Dictionary with terms and optionally payload information taken from stored fields in a Lucene index. Similar to DocumentDictionary , except it obtains the weight of the terms in a document based on a ValueSource . NOTE: The term and (optionally) payload fields have to be stored if the term or (optionally) payload fields supplied do not have a value for a document, then the document is rejected by the dictionary In practice the ValueSource will likely be obtained using the lucene expression module. The following example shows how to create a ValueSource from a simple addition of two fields: Expression expression = JavascriptCompiler.Compile(\"f1 + f2\"); SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"f1\", SortField.Type_e.LONG)); bindings.Add(new SortField(\"f2\", SortField.Type_e.LONG)); ValueSource valueSource = expression.GetValueSource(bindings); Inheritance System.Object DocumentDictionary DocumentValueSourceDictionary Implements IDictionary Inherited Members DocumentDictionary.m_reader DocumentDictionary.m_payloadField DocumentDictionary.m_contextsField Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class DocumentValueSourceDictionary : DocumentDictionary, IDictionary Constructors | Improve this Doc View Source DocumentValueSourceDictionary(IndexReader, String, ValueSource) Creates a new dictionary with the contents of the fields named field for the terms and uses the weightsValueSource supplied to determine the score. Declaration public DocumentValueSourceDictionary(IndexReader reader, string field, ValueSource weightsValueSource) Parameters Type Name Description IndexReader reader System.String field ValueSource weightsValueSource | Improve this Doc View Source DocumentValueSourceDictionary(IndexReader, String, ValueSource, String) Creates a new dictionary with the contents of the fields named field for the terms, payload for the corresponding payloads and uses the weightsValueSource supplied to determine the score. Declaration public DocumentValueSourceDictionary(IndexReader reader, string field, ValueSource weightsValueSource, string payload) Parameters Type Name Description IndexReader reader System.String field ValueSource weightsValueSource System.String payload | Improve this Doc View Source DocumentValueSourceDictionary(IndexReader, String, ValueSource, String, String) Creates a new dictionary with the contents of the fields named field for the terms, payload for the corresponding payloads, contexts for the associated contexts and uses the weightsValueSource supplied to determine the score. Declaration public DocumentValueSourceDictionary(IndexReader reader, string field, ValueSource weightsValueSource, string payload, string contexts) Parameters Type Name Description IndexReader reader System.String field ValueSource weightsValueSource System.String payload System.String contexts Methods | Improve this Doc View Source GetEntryIterator() Declaration public override IInputIterator GetEntryIterator() Returns Type Description IInputIterator Overrides DocumentDictionary.GetEntryIterator() Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.EmptyInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.EmptyInputIterator.html",
    "title": "Class EmptyInputIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EmptyInputIterator Singleton IInputIterator that iterates over 0 BytesRefs. Inheritance System.Object EmptyInputIterator Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public static class EmptyInputIterator : object Fields | Improve this Doc View Source Instance Declaration public static readonly IInputIterator Instance Field Value Type Description IInputIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.FileDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.FileDictionary.html",
    "title": "Class FileDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FileDictionary Dictionary represented by a text file. Format allowed: 1 entry per line: An entry can be: suggestion suggestion Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter weight suggestion Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter weight Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter payload where the default Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter is DEFAULT_FIELD_DELIMITER (a tab) NOTE: In order to have payload enabled, the first entry has to have a payload If the weight for an entry is not specified then a value of 1 is used A payload cannot be specified without having the weight specified for an entry If the payload for an entry is not specified (assuming payload is enabled) then an empty payload is returned An entry cannot have more than two Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter s Example: word1 word2 TAB 100 TAB payload1 word3 TAB 101 word4 word3 TAB 102 Inheritance System.Object FileDictionary Implements IDictionary Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class FileDictionary : object, IDictionary Constructors | Improve this Doc View Source FileDictionary(Stream) Creates a dictionary based on an inputstream. Using DEFAULT_FIELD_DELIMITER as the field seperator in a line. NOTE: content is treated as UTF-8 Declaration public FileDictionary(Stream dictFile) Parameters Type Name Description Stream dictFile | Improve this Doc View Source FileDictionary(Stream, String) Creates a dictionary based on an inputstream. Using fieldDelimiter to seperate out the fields in a line. NOTE: content is treated as UTF-8 Declaration public FileDictionary(Stream dictFile, string fieldDelimiter) Parameters Type Name Description Stream dictFile System.String fieldDelimiter | Improve this Doc View Source FileDictionary(TextReader) Creates a dictionary based on a reader. Using DEFAULT_FIELD_DELIMITER as the field seperator in a line. Declaration public FileDictionary(TextReader reader) Parameters Type Name Description TextReader reader | Improve this Doc View Source FileDictionary(TextReader, String) Creates a dictionary based on a reader. Using fieldDelimiter to seperate out the fields in a line. Declaration public FileDictionary(TextReader reader, string fieldDelimiter) Parameters Type Name Description TextReader reader System.String fieldDelimiter Fields | Improve this Doc View Source DEFAULT_FIELD_DELIMITER Tab-delimited fields are most common thus the default, but one can override this via the constructor Declaration public const string DEFAULT_FIELD_DELIMITER = null Field Value Type Description System.String Methods | Improve this Doc View Source GetEntryIterator() Declaration public virtual IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.ExternalRefSorter.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.ExternalRefSorter.html",
    "title": "Class ExternalRefSorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExternalRefSorter Builds and iterates over sequences stored on disk. Inheritance System.Object ExternalRefSorter Implements IBytesRefSorter IDisposable Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class ExternalRefSorter : object, IBytesRefSorter, IDisposable Constructors | Improve this Doc View Source ExternalRefSorter(OfflineSorter) Will buffer all sequences to a temporary file and then sort (all on-disk). Declaration public ExternalRefSorter(OfflineSorter sort) Parameters Type Name Description OfflineSorter sort Properties | Improve this Doc View Source Comparer Declaration public IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Methods | Improve this Doc View Source Add(BytesRef) Declaration public virtual void Add(BytesRef utf8) Parameters Type Name Description BytesRef utf8 | Improve this Doc View Source Dispose() Removes any written temporary files. Declaration public virtual void Dispose() | Improve this Doc View Source GetIterator() Declaration public virtual IBytesRefIterator GetIterator() Returns Type Description IBytesRefIterator Implements IBytesRefSorter IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletion.Completion.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletion.Completion.html",
    "title": "Class FSTCompletion.Completion | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTCompletion.Completion A single completion for a given key. Inheritance System.Object FSTCompletion.Completion Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public sealed class Completion : IComparable<FSTCompletion.Completion> Properties | Improve this Doc View Source Bucket source bucket (weight) of the suggestion Declaration public int Bucket { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Utf8 UTF-8 bytes of the suggestion Declaration public BytesRef Utf8 { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source CompareTo(FSTCompletion.Completion) Declaration public int CompareTo(FSTCompletion.Completion o) Parameters Type Name Description FSTCompletion.Completion o Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletion.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletion.html",
    "title": "Class FSTCompletion | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTCompletion Finite state automata based implementation of \"autocomplete\" functionality. Inheritance System.Object FSTCompletion Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class FSTCompletion : object Constructors | Improve this Doc View Source FSTCompletion(FST<Object>) Defaults to higher weights first and exact first. Declaration public FSTCompletion(FST<object> automaton) Parameters Type Name Description FST < System.Object > automaton See Also FSTCompletion(FST<Object>, Boolean, Boolean) | Improve this Doc View Source FSTCompletion(FST<Object>, Boolean, Boolean) Constructs an FSTCompletion, specifying higherWeightsFirst and exactFirst. Declaration public FSTCompletion(FST<object> automaton, bool higherWeightsFirst, bool exactFirst) Parameters Type Name Description FST < System.Object > automaton Automaton with completions. See FSTCompletionBuilder . System.Boolean higherWeightsFirst Return most popular suggestions first. This is the default behavior for this implementation. Setting it to false has no effect (use constant term weights to sort alphabetically only). System.Boolean exactFirst Find and push an exact match to the first position of the result list if found. Fields | Improve this Doc View Source DEFAULT_BUCKETS Default number of buckets. Declaration public const int DEFAULT_BUCKETS = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source BucketCount Returns the bucket count (discretization thresholds). Declaration public virtual int BucketCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source FST Returns the internal automaton. Declaration public virtual FST<object> FST { get; } Property Value Type Description FST < System.Object > Methods | Improve this Doc View Source DoLookup(String, Int32) Lookup suggestions to key . Declaration public virtual IList<FSTCompletion.Completion> DoLookup(string key, int num) Parameters Type Name Description System.String key The prefix to which suggestions should be sought. System.Int32 num At most this number of suggestions will be returned. Returns Type Description IList < FSTCompletion.Completion > Returns the suggestions, sorted by their approximated weight first (decreasing) and then alphabetically (UTF-8 codepoint order). | Improve this Doc View Source GetBucket(String) Returns the bucket assigned to a given key (if found) or -1 if no exact match exists. Declaration public virtual int GetBucket(string key) Parameters Type Name Description System.String key Returns Type Description System.Int32 See Also FSTCompletionBuilder"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletionBuilder.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletionBuilder.html",
    "title": "Class FSTCompletionBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTCompletionBuilder Finite state automata based implementation of \"autocomplete\" functionality. Implementation details The construction step in the object finalizer works as follows: A set of input terms and their buckets is given. All terms in the input are prefixed with a synthetic pseudo-character (code) of the weight bucket the term fell into. For example a term abc with a discretized weight equal '1' would become 1abc . The terms are then sorted by their raw value of UTF-8 character values (including the synthetic bucket code in front). A finite state automaton ( ) is constructed from the input. The root node has arcs labeled with all possible weights. We cache all these arcs, highest-weight first. At runtime, in DoLookup(String, Int32) , the automaton is utilized as follows: For each possible term weight encoded in the automaton (cached arcs from the root above), starting with the highest one, we descend along the path of the input key. If the key is not a prefix of a sequence in the automaton (path ends prematurely), we exit immediately -- no completions. Otherwise, we have found an internal automaton node that ends the key. The entire subautomaton (all paths) starting from this node form the key's completions. We start the traversal of this subautomaton. Every time we reach a final state (arc), we add a single suggestion to the list of results (the weight of this suggestion is constant and equal to the root path we started from). The tricky part is that because automaton edges are sorted and we scan depth-first, we can terminate the entire procedure as soon as we collect enough suggestions the user requested. In case the number of suggestions collected in the step above is still insufficient, we proceed to the next (smaller) weight leaving the root node and repeat the same algorithm again. Runtime behavior and performance characteristic The algorithm described above is optimized for finding suggestions to short prefixes in a top-weights-first order. This is probably the most common use case: it allows presenting suggestions early and sorts them by the global frequency (and then alphabetically). If there is an exact match in the automaton, it is returned first on the results list (even with by-weight sorting). Note that the maximum lookup time for any prefix is the time of descending to the subtree, plus traversal of the subtree up to the number of requested suggestions (because they are already presorted by weight on the root level and alphabetically at any node level). To order alphabetically only (no ordering by priorities), use identical term weights for all terms. Alphabetical suggestions are returned even if non-constant weights are used, but the algorithm for doing this is suboptimal. \"alphabetically\" in any of the documentation above indicates UTF-8 representation order, nothing else. NOTE : the FST file format is experimental and subject to suddenly change, requiring you to rebuild the FST suggest index. Inheritance System.Object FSTCompletionBuilder Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class FSTCompletionBuilder : object Constructors | Improve this Doc View Source FSTCompletionBuilder() Creates an FSTCompletion with default options: 10 buckets, exact match promoted to first position and InMemorySorter with a comparer obtained from . Declaration public FSTCompletionBuilder() | Improve this Doc View Source FSTCompletionBuilder(Int32, IBytesRefSorter, Int32) Creates an FSTCompletion with the specified options. Declaration public FSTCompletionBuilder(int buckets, IBytesRefSorter sorter, int shareMaxTailLength) Parameters Type Name Description System.Int32 buckets The number of buckets for weight discretization. Buckets are used in Add(BytesRef, Int32) and must be smaller than the number given here. IBytesRefSorter sorter IBytesRefSorter used for re-sorting input for the automaton. For large inputs, use on-disk sorting implementations. The sorter is closed automatically in Build() if it implements . System.Int32 shareMaxTailLength Max shared suffix sharing length. See the description of this parameter in 's constructor. In general, for very large inputs you'll want to construct a non-minimal automaton which will be larger, but the construction will take far less ram. For minimal automata, set it to . Fields | Improve this Doc View Source DEFAULT_BUCKETS Default number of buckets. Declaration public const int DEFAULT_BUCKETS = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source Add(BytesRef, Int32) Appends a single suggestion and its weight to the internal buffers. Declaration public virtual void Add(BytesRef utf8, int bucket) Parameters Type Name Description BytesRef utf8 The suggestion (utf8 representation) to be added. The content is copied and the object can be reused. System.Int32 bucket The bucket to place this suggestion in. Must be non-negative and smaller than the number of buckets passed in the constructor. Higher numbers indicate suggestions that should be presented before suggestions placed in smaller buckets. | Improve this Doc View Source Build() Builds the final automaton from a list of added entries. This method may take a longer while as it needs to build the automaton. Declaration public virtual FSTCompletion Build() Returns Type Description FSTCompletion See Also FSTCompletion"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletionLookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletionLookup.html",
    "title": "Class FSTCompletionLookup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTCompletionLookup An adapter from Lookup API to FSTCompletion . This adapter differs from FSTCompletion in that it attempts to discretize any \"weights\" as passed from in Weight to match the number of buckets. For the rationale for bucketing, see FSTCompletion . Note: Discretization requires an additional sorting pass. The range of weights for bucketing/ discretization is determined by sorting the input by weight and then dividing into equal ranges. Then, scores within each range are assigned to that bucket. Note that this means that even large differences in weights may be lost during automaton construction, but the overall distinction between \"classes\" of weights will be preserved regardless of the distribution of weights. For fine-grained control over which weights are assigned to which buckets, use FSTCompletion directly or TSTLookup , for example. Inheritance System.Object Lookup FSTCompletionLookup Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class FSTCompletionLookup : Lookup Constructors | Improve this Doc View Source FSTCompletionLookup() This constructor prepares for creating a suggested FST using the Build(IInputIterator) method. The number of weight discretization buckets is set to DEFAULT_BUCKETS and exact matches are promoted to the top of the suggestions list. Declaration public FSTCompletionLookup() | Improve this Doc View Source FSTCompletionLookup(FSTCompletion, Boolean) This constructor takes a pre-built automaton. Declaration public FSTCompletionLookup(FSTCompletion completion, bool exactMatchFirst) Parameters Type Name Description FSTCompletion completion An instance of FSTCompletion . System.Boolean exactMatchFirst If true exact matches are promoted to the top of the suggestions list. Otherwise they appear in the order of discretized weight and alphabetical within the bucket. | Improve this Doc View Source FSTCompletionLookup(Int32, Boolean) This constructor prepares for creating a suggested FST using the Build(IInputIterator) method. Declaration public FSTCompletionLookup(int buckets, bool exactMatchFirst) Parameters Type Name Description System.Int32 buckets The number of weight discretization buckets (see FSTCompletion for details). System.Boolean exactMatchFirst If true exact matches are promoted to the top of the suggestions list. Otherwise they appear in the order of discretized weight and alphabetical within the bucket. Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iterator) Parameters Type Name Description IInputIterator iterator Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool higherWeightsFirst, int num) Parameters Type Name Description System.String key IEnumerable < BytesRef > contexts System.Boolean higherWeightsFirst System.Int32 num Returns Type Description IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the bucket (weight) as a Long for the provided key if it exists, otherwise null if it does not. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput) See Also FSTCompletion"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.html",
    "title": "Namespace Lucene.Net.Search.Suggest.Fst | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest.Fst <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Finite-state based autosuggest. Classes ExternalRefSorter Builds and iterates over sequences stored on disk. FSTCompletion Finite state automata based implementation of \"autocomplete\" functionality. FSTCompletion.Completion A single completion for a given key. FSTCompletionBuilder Finite state automata based implementation of \"autocomplete\" functionality. Implementation details The construction step in the object finalizer works as follows: A set of input terms and their buckets is given. All terms in the input are prefixed with a synthetic pseudo-character (code) of the weight bucket the term fell into. For example a term abc with a discretized weight equal '1' would become 1abc . The terms are then sorted by their raw value of UTF-8 character values (including the synthetic bucket code in front). A finite state automaton ( ) is constructed from the input. The root node has arcs labeled with all possible weights. We cache all these arcs, highest-weight first. At runtime, in DoLookup(String, Int32) , the automaton is utilized as follows: For each possible term weight encoded in the automaton (cached arcs from the root above), starting with the highest one, we descend along the path of the input key. If the key is not a prefix of a sequence in the automaton (path ends prematurely), we exit immediately -- no completions. Otherwise, we have found an internal automaton node that ends the key. The entire subautomaton (all paths) starting from this node form the key's completions. We start the traversal of this subautomaton. Every time we reach a final state (arc), we add a single suggestion to the list of results (the weight of this suggestion is constant and equal to the root path we started from). The tricky part is that because automaton edges are sorted and we scan depth-first, we can terminate the entire procedure as soon as we collect enough suggestions the user requested. In case the number of suggestions collected in the step above is still insufficient, we proceed to the next (smaller) weight leaving the root node and repeat the same algorithm again. Runtime behavior and performance characteristic The algorithm described above is optimized for finding suggestions to short prefixes in a top-weights-first order. This is probably the most common use case: it allows presenting suggestions early and sorts them by the global frequency (and then alphabetically). If there is an exact match in the automaton, it is returned first on the results list (even with by-weight sorting). Note that the maximum lookup time for any prefix is the time of descending to the subtree, plus traversal of the subtree up to the number of requested suggestions (because they are already presorted by weight on the root level and alphabetically at any node level). To order alphabetically only (no ordering by priorities), use identical term weights for all terms. Alphabetical suggestions are returned even if non-constant weights are used, but the algorithm for doing this is suboptimal. \"alphabetically\" in any of the documentation above indicates UTF-8 representation order, nothing else. NOTE : the FST file format is experimental and subject to suddenly change, requiring you to rebuild the FST suggest index. FSTCompletionLookup An adapter from Lookup API to FSTCompletion . This adapter differs from FSTCompletion in that it attempts to discretize any \"weights\" as passed from in Weight to match the number of buckets. For the rationale for bucketing, see FSTCompletion . Note: Discretization requires an additional sorting pass. The range of weights for bucketing/ discretization is determined by sorting the input by weight and then dividing into equal ranges. Then, scores within each range are assigned to that bucket. Note that this means that even large differences in weights may be lost during automaton construction, but the overall distinction between \"classes\" of weights will be preserved regardless of the distribution of weights. For fine-grained control over which weights are assigned to which buckets, use FSTCompletion directly or TSTLookup , for example. WFSTCompletionLookup Suggester based on a weighted FST: it first traverses the prefix, then walks the n shortest paths to retrieve top-ranked suggestions. NOTE : Input weights must be between 0 and , any other values will be rejected. @lucene.experimental Interfaces IBytesRefSorter Collects and then allows one to iterate over their sorted order. Implementations of this interface will be called in a single-threaded scenario."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.IBytesRefSorter.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.IBytesRefSorter.html",
    "title": "Interface IBytesRefSorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IBytesRefSorter Collects and then allows one to iterate over their sorted order. Implementations of this interface will be called in a single-threaded scenario. Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public interface IBytesRefSorter Properties | Improve this Doc View Source Comparer Comparer used to determine the sort order of entries. Declaration IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Methods | Improve this Doc View Source Add(BytesRef) Adds a single suggestion entry (possibly compound with its bucket). Declaration void Add(BytesRef utf8) Parameters Type Name Description BytesRef utf8 | Improve this Doc View Source GetIterator() Sorts the entries added in Add(BytesRef) and returns an enumerator over all sorted entries. Declaration IBytesRefIterator GetIterator() Returns Type Description IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.WFSTCompletionLookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.WFSTCompletionLookup.html",
    "title": "Class WFSTCompletionLookup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WFSTCompletionLookup Suggester based on a weighted FST: it first traverses the prefix, then walks the n shortest paths to retrieve top-ranked suggestions. NOTE : Input weights must be between 0 and , any other values will be rejected. @lucene.experimental Inheritance System.Object Lookup WFSTCompletionLookup Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class WFSTCompletionLookup : Lookup Constructors | Improve this Doc View Source WFSTCompletionLookup() Calls WFSTCompletionLookup(Boolean) Declaration public WFSTCompletionLookup() | Improve this Doc View Source WFSTCompletionLookup(Boolean) Creates a new suggester. Declaration public WFSTCompletionLookup(bool exactFirst) Parameters Type Name Description System.Boolean exactFirst true if suggestions that match the prefix exactly should always be returned first, regardless of score. This has no performance impact, but could result in low-quality suggestions. Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iterator) Parameters Type Name Description IInputIterator iterator Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the weight associated with an input string, or null if it does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying FST. Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.html",
    "title": "Namespace Lucene.Net.Search.Suggest | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for Autocomplete/Autosuggest Classes BufferedInputIterator This wrapper buffers incoming elements. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BufferingTermFreqIteratorWrapper This wrapper buffers incoming elements. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocumentDictionary Dictionary with terms, weights, payload (optional) and contexts (optional) information taken from stored/indexed fields in a Lucene index. NOTE: The term and (optionally) payload fields have to be stored The weight field can be stored or can be a . If the weight field is not defined, the value of the weight is 0 if any of the term or (optionally) payload fields supplied do not have a value for a document, then the document is skipped by the dictionary DocumentDictionary.DocumentInputIterator Implements IInputIterator from stored fields. DocumentValueSourceDictionary Dictionary with terms and optionally payload information taken from stored fields in a Lucene index. Similar to DocumentDictionary , except it obtains the weight of the terms in a document based on a ValueSource . NOTE: The term and (optionally) payload fields have to be stored if the term or (optionally) payload fields supplied do not have a value for a document, then the document is rejected by the dictionary In practice the ValueSource will likely be obtained using the lucene expression module. The following example shows how to create a ValueSource from a simple addition of two fields: Expression expression = JavascriptCompiler.Compile(\"f1 + f2\"); SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"f1\", SortField.Type_e.LONG)); bindings.Add(new SortField(\"f2\", SortField.Type_e.LONG)); ValueSource valueSource = expression.GetValueSource(bindings); EmptyInputIterator Singleton IInputIterator that iterates over 0 BytesRefs. FileDictionary Dictionary represented by a text file. Format allowed: 1 entry per line: An entry can be: suggestion suggestion Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter weight suggestion Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter weight Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter payload where the default Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter is DEFAULT_FIELD_DELIMITER (a tab) NOTE: In order to have payload enabled, the first entry has to have a payload If the weight for an entry is not specified then a value of 1 is used A payload cannot be specified without having the weight specified for an entry If the payload for an entry is not specified (assuming payload is enabled) then an empty payload is returned An entry cannot have more than two Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter s Example: word1 word2 TAB 100 TAB payload1 word3 TAB 101 word4 word3 TAB 102 InMemorySorter An IBytesRefSorter that keeps all the entries in memory. @lucene.experimental This is a Lucene.NET INTERNAL API, use at your own risk InputIteratorWrapper Wraps a as a suggester IInputIterator , with all weights set to 1 and carries no payload Lookup Simple Lookup interface for suggestions. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lookup.LookupPriorityQueue A collecting a fixed size of high priority Lookup.LookupResult s. Lookup.LookupResult Result of a lookup. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SortedInputIterator This wrapper buffers incoming elements and makes sure they are sorted based on given comparer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SortedTermFreqIteratorWrapper This wrapper buffers incoming elements and makes sure they are sorted based on given comparer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk UnsortedInputIterator This wrapper buffers the incoming elements and makes sure they are in random order. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces IInputIterator Interface for enumerating term,weight,payload triples for suggester consumption; currently only AnalyzingSuggester , FuzzySuggester and AnalyzingInfixSuggester support payloads."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.IInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.IInputIterator.html",
    "title": "Interface IInputIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IInputIterator Interface for enumerating term,weight,payload triples for suggester consumption; currently only AnalyzingSuggester , FuzzySuggester and AnalyzingInfixSuggester support payloads. Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public interface IInputIterator : IBytesRefIterator Properties | Improve this Doc View Source Contexts A term's contexts context can be used to filter suggestions. May return null, if suggest entries do not have any context Declaration IEnumerable<BytesRef> Contexts { get; } Property Value Type Description IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Returns true if the iterator has contexts Declaration bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Returns true if the iterator has payloads Declaration bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload An arbitrary byte[] to record per suggestion. See Payload to retrieve the payload for each suggestion. Declaration BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight A term's weight, higher numbers mean better suggestions. Declaration long Weight { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.InMemorySorter.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.InMemorySorter.html",
    "title": "Class InMemorySorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InMemorySorter An IBytesRefSorter that keeps all the entries in memory. @lucene.experimental This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object InMemorySorter Implements IBytesRefSorter Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public sealed class InMemorySorter : object, IBytesRefSorter Constructors | Improve this Doc View Source InMemorySorter(IComparer<BytesRef>) Creates an InMemorySorter, sorting entries by the provided comparer. Declaration public InMemorySorter(IComparer<BytesRef> comparer) Parameters Type Name Description IComparer < BytesRef > comparer Properties | Improve this Doc View Source Comparer Declaration public IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Methods | Improve this Doc View Source Add(BytesRef) Declaration public void Add(BytesRef utf8) Parameters Type Name Description BytesRef utf8 | Improve this Doc View Source GetIterator() Declaration public IBytesRefIterator GetIterator() Returns Type Description IBytesRefIterator Implements IBytesRefSorter"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.InputIteratorWrapper.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.InputIteratorWrapper.html",
    "title": "Class InputIteratorWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InputIteratorWrapper Wraps a as a suggester IInputIterator , with all weights set to 1 and carries no payload Inheritance System.Object InputIteratorWrapper Implements IInputIterator IBytesRefIterator Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class InputIteratorWrapper : object, IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source InputIteratorWrapper(IBytesRefIterator) Creates a new wrapper, wrapping the specified iterator and specifying a weight value of 1 for all terms and nullifies associated payloads. Declaration public InputIteratorWrapper(IBytesRefIterator wrapped) Parameters Type Name Description IBytesRefIterator wrapped Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > | Improve this Doc View Source Contexts Declaration public virtual IEnumerable<BytesRef> Contexts { get; } Property Value Type Description IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Declaration public virtual bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.html",
    "title": "Namespace Lucene.Net.Search.Suggest.Jaspell | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest.Jaspell <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> JaSpell-based autosuggest. Classes JaspellLookup Suggest implementation based on JaSpell . JaspellTernarySearchTrie Implementation of a Ternary Search Trie, a data structure for storing s that combines the compact size of a binary search tree with the speed of a digital search trie, and is therefore ideal for practical use in sorting and searching data. This data structure is faster than hashing for many typical search problems, and supports a broader range of useful problems and operations. Ternary searches are faster than hashing and more powerful, too. The theory of ternary search trees was described at a symposium in 1997 (see \"Fast Algorithms for Sorting and Searching Strings,\" by J.L. Bentley and R. Sedgewick, Proceedings of the 8th Annual ACM-SIAM Symposium on Discrete Algorithms, January 1997). Algorithms in C, Third Edition, by Robert Sedgewick (Addison-Wesley, 1998) provides yet another view of ternary search trees. JaspellTernarySearchTrie.TSTNode An inner class of Ternary Search Trie that represents a node in the trie."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellLookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellLookup.html",
    "title": "Class JaspellLookup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JaspellLookup Suggest implementation based on JaSpell . Inheritance System.Object Lookup JaspellLookup Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) Namespace : Lucene.Net.Search.Suggest.Jaspell Assembly : Lucene.Net.Suggest.dll Syntax public class JaspellLookup : Lookup Constructors | Improve this Doc View Source JaspellLookup() Creates a new empty trie Declaration public JaspellLookup() See Also Build(IInputIterator) Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Add(String, Object) Adds a new node if key already exists, otherwise replaces its value. This method always returns false. Declaration public virtual bool Add(string key, object value) Parameters Type Name Description System.String key A index. System.Object value The object to be stored in the Trie. Returns Type Description System.Boolean | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator tfit) Parameters Type Name Description IInputIterator tfit Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the value for the specified key, or null if the key does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key A index. Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying TST. Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput) See Also JaspellTernarySearchTrie"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellTernarySearchTrie.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellTernarySearchTrie.html",
    "title": "Class JaspellTernarySearchTrie | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JaspellTernarySearchTrie Implementation of a Ternary Search Trie, a data structure for storing s that combines the compact size of a binary search tree with the speed of a digital search trie, and is therefore ideal for practical use in sorting and searching data. This data structure is faster than hashing for many typical search problems, and supports a broader range of useful problems and operations. Ternary searches are faster than hashing and more powerful, too. The theory of ternary search trees was described at a symposium in 1997 (see \"Fast Algorithms for Sorting and Searching Strings,\" by J.L. Bentley and R. Sedgewick, Proceedings of the 8th Annual ACM-SIAM Symposium on Discrete Algorithms, January 1997). Algorithms in C, Third Edition, by Robert Sedgewick (Addison-Wesley, 1998) provides yet another view of ternary search trees. Inheritance System.Object JaspellTernarySearchTrie Namespace : Lucene.Net.Search.Suggest.Jaspell Assembly : Lucene.Net.Suggest.dll Syntax public class JaspellTernarySearchTrie : object Constructors | Improve this Doc View Source JaspellTernarySearchTrie() Constructs an empty Ternary Search Trie. Declaration public JaspellTernarySearchTrie() | Improve this Doc View Source JaspellTernarySearchTrie(CultureInfo) Constructs an empty Ternary Search Trie, specifying the used for lowercasing. Declaration public JaspellTernarySearchTrie(CultureInfo culture) Parameters Type Name Description CultureInfo culture | Improve this Doc View Source JaspellTernarySearchTrie(FileInfo) Constructs a Ternary Search Trie and loads data from a into the Trie. The file is a normal text document, where each line is of the form word TAB float. Uses the culture of the current thread to lowercase words before comparing. Declaration public JaspellTernarySearchTrie(FileInfo file) Parameters Type Name Description FileInfo file The with the data to load into the Trie. | Improve this Doc View Source JaspellTernarySearchTrie(FileInfo, CultureInfo) Constructs a Ternary Search Trie and loads data from a into the Trie. The file is a normal text document, where each line is of the form word TAB float. Uses the supplied culture to lowercase words before comparing. Declaration public JaspellTernarySearchTrie(FileInfo file, CultureInfo culture) Parameters Type Name Description FileInfo file The with the data to load into the Trie. CultureInfo culture The culture used for lowercasing. | Improve this Doc View Source JaspellTernarySearchTrie(FileInfo, Boolean) Constructs a Ternary Search Trie and loads data from a into the Trie. The file is a normal text document, where each line is of the form \"word TAB float\". Uses the culture of the current thread to lowercase words before comparing. Declaration public JaspellTernarySearchTrie(FileInfo file, bool compression) Parameters Type Name Description FileInfo file The with the data to load into the Trie. System.Boolean compression If true, the file is compressed with the GZIP algorithm, and if false, the file is a normal text document. | Improve this Doc View Source JaspellTernarySearchTrie(FileInfo, Boolean, CultureInfo) Constructs a Ternary Search Trie and loads data from a into the Trie. The file is a normal text document, where each line is of the form \"word TAB float\". Uses the supplied culture to lowercase words before comparing. Declaration public JaspellTernarySearchTrie(FileInfo file, bool compression, CultureInfo culture) Parameters Type Name Description FileInfo file The with the data to load into the Trie. System.Boolean compression If true, the file is compressed with the GZIP algorithm, and if false, the file is a normal text document. CultureInfo culture The culture used for lowercasing. Properties | Improve this Doc View Source MatchAlmostDiff Sets the number of characters by which words can differ from target word when calling the MatchAlmost(String, Int32) method. Arguments less than 0 will set the char difference to 0, and arguments greater than 3 will set the char difference to 3. Declaration public virtual int MatchAlmostDiff { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source NumReturnValues Sets the default maximum number of values returned from the MatchPrefix(String, Int32) and MatchAlmost(String, Int32) methods. The value should be set this to -1 to get an unlimited number of return values. note that the methods mentioned above provide overloaded versions that allow you to specify the maximum number of return values, in which case this value is temporarily overridden. Declaration public virtual int NumReturnValues { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(String) Retrieve the object indexed by a key. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key A index. Returns Type Description System.Object The object retrieved from the Ternary Search Trie. | Improve this Doc View Source GetAndIncrement(String) Retrieve the indexed by key, increment it by one unit and store the new . Declaration public virtual float? GetAndIncrement(string key) Parameters Type Name Description System.String key A index. Returns Type Description System.Nullable < System.Single > The retrieved from the Ternary Search Trie. | Improve this Doc View Source GetKey(JaspellTernarySearchTrie.TSTNode) Returns the key that indexes the node argument. Declaration protected virtual string GetKey(JaspellTernarySearchTrie.TSTNode node) Parameters Type Name Description JaspellTernarySearchTrie.TSTNode node The node whose index is to be calculated. Returns Type Description System.String The that indexes the node argument. | Improve this Doc View Source GetNode(String) Returns the node indexed by key, or null if that node doesn't exist. Search begins at root node. Declaration public virtual JaspellTernarySearchTrie.TSTNode GetNode(string key) Parameters Type Name Description System.String key A that indexes the node that is returned. Returns Type Description JaspellTernarySearchTrie.TSTNode The node object indexed by key. This object is an instance of an inner class named JaspellTernarySearchTrie.TSTNode . | Improve this Doc View Source GetNode(String, JaspellTernarySearchTrie.TSTNode) Returns the node indexed by key, or null if that node doesn't exist. The search begins at root node. Declaration protected virtual JaspellTernarySearchTrie.TSTNode GetNode(string key, JaspellTernarySearchTrie.TSTNode startNode) Parameters Type Name Description System.String key A that indexes the node that is returned. JaspellTernarySearchTrie.TSTNode startNode The top node defining the subtrie to be searched. Returns Type Description JaspellTernarySearchTrie.TSTNode The node object indexed by key. This object is an instance of an inner class named JaspellTernarySearchTrie.TSTNode . | Improve this Doc View Source GetOrCreateNode(String) Returns the node indexed by key, creating that node if it doesn't exist, and creating any required intermediate nodes if they don't exist. Declaration protected virtual JaspellTernarySearchTrie.TSTNode GetOrCreateNode(string key) Parameters Type Name Description System.String key A that indexes the node that is returned. Returns Type Description JaspellTernarySearchTrie.TSTNode The node object indexed by key. This object is an instance of an inner class named JaspellTernarySearchTrie.TSTNode . | Improve this Doc View Source GetSizeInBytes() Return an approximate memory usage for this trie. Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source MatchAlmost(String) Returns a of keys that almost match the argument key. Keys returned will have exactly diff characters that do not match the target key, where diff is equal to the last value set to the MatchAlmostDiff property. If the MatchAlmost(String, Int32) method is called before the MatchAlmostDiff property has been called for the first time, then diff = 0. Declaration public virtual IList<string> MatchAlmost(string key) Parameters Type Name Description System.String key The target key. Returns Type Description IList < System.String > A with the results. | Improve this Doc View Source MatchAlmost(String, Int32) Returns a of keys that almost match the argument key. Keys returned will have exactly diff characters that do not match the target key, where diff is equal to the last value set to the MatchAlmostDiff property. If the MatchAlmost(String, Int32) method is called before the MatchAlmostDiff property has been called for the first time, then diff = 0. Declaration public virtual IList<string> MatchAlmost(string key, int numReturnValues) Parameters Type Name Description System.String key The target key. System.Int32 numReturnValues The maximum number of values returned by this method. Returns Type Description IList < System.String > A with the results | Improve this Doc View Source MatchPrefix(String) Returns an alphabetical of all keys in the trie that begin with a given prefix. Only keys for nodes having non-null data are included in the . Declaration public virtual IList<string> MatchPrefix(string prefix) Parameters Type Name Description System.String prefix Each key returned from this method will begin with the characters in prefix. Returns Type Description IList < System.String > A with the results. | Improve this Doc View Source MatchPrefix(String, Int32) Returns an alphabetical of all keys in the trie that begin with a given prefix. Only keys for nodes having non-null data are included in the . Declaration public virtual IList<string> MatchPrefix(string prefix, int numReturnValues) Parameters Type Name Description System.String prefix Each key returned from this method will begin with the characters in prefix. System.Int32 numReturnValues The maximum number of values returned from this method. Returns Type Description IList < System.String > A with the results | Improve this Doc View Source NumDataNodes() Returns the number of nodes in the trie that have non-null data. Declaration public virtual int NumDataNodes() Returns Type Description System.Int32 The number of nodes in the trie that have non-null data. | Improve this Doc View Source NumDataNodes(JaspellTernarySearchTrie.TSTNode) Returns the number of nodes in the subtrie below and including the starting node. The method counts only nodes that have non-null data. Declaration protected virtual int NumDataNodes(JaspellTernarySearchTrie.TSTNode startingNode) Parameters Type Name Description JaspellTernarySearchTrie.TSTNode startingNode The top node of the subtrie. the node that defines the subtrie. Returns Type Description System.Int32 The total number of nodes in the subtrie. | Improve this Doc View Source NumNodes() Returns the total number of nodes in the trie. The method counts nodes whether or not they have data. Declaration public virtual int NumNodes() Returns Type Description System.Int32 The total number of nodes in the trie. | Improve this Doc View Source NumNodes(JaspellTernarySearchTrie.TSTNode) Returns the total number of nodes in the subtrie below and including the starting Node. The method counts nodes whether or not they have data. Declaration protected virtual int NumNodes(JaspellTernarySearchTrie.TSTNode startingNode) Parameters Type Name Description JaspellTernarySearchTrie.TSTNode startingNode The top node of the subtrie. The node that defines the subtrie. Returns Type Description System.Int32 The total number of nodes in the subtrie. | Improve this Doc View Source Put(String, Object) Stores a value in the trie. The value may be retrieved using the key. Declaration public virtual void Put(string key, object value) Parameters Type Name Description System.String key A that indexes the object to be stored. System.Object value The object to be stored in the Trie. | Improve this Doc View Source Remove(String) Removes the value indexed by key. Also removes all nodes that are rendered unnecessary by the removal of this data. Declaration public virtual void Remove(string key) Parameters Type Name Description System.String key A that indexes the object to be removed from the Trie. | Improve this Doc View Source SortKeys(JaspellTernarySearchTrie.TSTNode, Int32) Returns keys sorted in alphabetical order. This includes the start Node and all nodes connected to the start Node. The number of keys returned is limited to numReturnValues. To get a list that isn't limited in size, set numReturnValues to -1. Declaration protected virtual IList<string> SortKeys(JaspellTernarySearchTrie.TSTNode startNode, int numReturnValues) Parameters Type Name Description JaspellTernarySearchTrie.TSTNode startNode The top node defining the subtrie to be searched. System.Int32 numReturnValues The maximum number of values returned from this method. Returns Type Description IList < System.String > A with the results."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellTernarySearchTrie.TSTNode.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellTernarySearchTrie.TSTNode.html",
    "title": "Class JaspellTernarySearchTrie.TSTNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JaspellTernarySearchTrie.TSTNode An inner class of Ternary Search Trie that represents a node in the trie. Inheritance System.Object JaspellTernarySearchTrie.TSTNode Namespace : Lucene.Net.Search.Suggest.Jaspell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class TSTNode : object Methods | Improve this Doc View Source GetSizeInBytes() Return an approximate memory usage for this node and its sub-nodes. Declaration public long GetSizeInBytes() Returns Type Description System.Int64"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.html",
    "title": "Class Lookup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lookup Simple Lookup interface for suggestions. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lookup AnalyzingInfixSuggester AnalyzingSuggester FreeTextSuggester FSTCompletionLookup WFSTCompletionLookup JaspellLookup TSTLookup Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public abstract class Lookup : object Constructors | Improve this Doc View Source Lookup() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Lookup() Fields | Improve this Doc View Source CHARSEQUENCE_COMPARER A simple char-by-char comparer for Declaration public static readonly IComparer<string> CHARSEQUENCE_COMPARER Field Value Type Description IComparer < System.String > Properties | Improve this Doc View Source Count Get the number of entries the lookup was built with Declaration public abstract long Count { get; } Property Value Type Description System.Int64 total number of suggester entries Methods | Improve this Doc View Source Build(IDictionary) Build lookup from a dictionary. Some implementations may require sorted or unsorted keys from the dictionary's iterator - use SortedInputIterator or UnsortedInputIterator in such case. Declaration public virtual void Build(IDictionary dict) Parameters Type Name Description IDictionary dict | Improve this Doc View Source Build(IInputIterator) Builds up a new internal Lookup representation based on the given IInputIterator . The implementation might re-sort the data internally. Declaration public abstract void Build(IInputIterator inputIterator) Parameters Type Name Description IInputIterator inputIterator | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Look up a key and return possible completion for this key. Declaration public abstract IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key lookup key. Depending on the implementation this may be a prefix, misspelling, or even infix. IEnumerable < BytesRef > contexts contexts to filter the lookup by, or null if all contexts are allowed; if the suggestion contains any of the contexts, it's a match System.Boolean onlyMorePopular return only more popular results System.Int32 num maximum number of results to return Returns Type Description IList < Lookup.LookupResult > a list of possible completions, with their relative weight (e.g. popularity) | Improve this Doc View Source DoLookup(String, Boolean, Int32) Look up a key and return possible completion for this key. Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, bool onlyMorePopular, int num) Parameters Type Name Description System.String key lookup key. Depending on the implementation this may be a prefix, misspelling, or even infix. System.Boolean onlyMorePopular return only more popular results System.Int32 num maximum number of results to return Returns Type Description IList < Lookup.LookupResult > a list of possible completions, with their relative weight (e.g. popularity) | Improve this Doc View Source GetSizeInBytes() Get the size of the underlying lookup implementation in memory Declaration public abstract long GetSizeInBytes() Returns Type Description System.Int64 ram size of the lookup implementation in bytes | Improve this Doc View Source Load(DataInput) Discard current lookup data and load it from a previously saved copy. Optional operation. Declaration public abstract bool Load(DataInput input) Parameters Type Name Description DataInput input the to load the lookup data. Returns Type Description System.Boolean true if completed successfully, false if unsuccessful or not supported. | Improve this Doc View Source Load(Stream) Calls Load(DataInput) after converting to Declaration public virtual bool Load(Stream input) Parameters Type Name Description Stream input Returns Type Description System.Boolean | Improve this Doc View Source Store(DataOutput) Persist the constructed lookup data to a directory. Optional operation. Declaration public abstract bool Store(DataOutput output) Parameters Type Name Description DataOutput output to write the data to. Returns Type Description System.Boolean true if successful, false if unsuccessful or not supported. | Improve this Doc View Source Store(Stream) Calls Store(DataOutput) after converting to Declaration public virtual bool Store(Stream output) Parameters Type Name Description Stream output Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.LookupPriorityQueue.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.LookupPriorityQueue.html",
    "title": "Class Lookup.LookupPriorityQueue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lookup.LookupPriorityQueue A collecting a fixed size of high priority Lookup.LookupResult s. Inheritance System.Object Lookup.LookupPriorityQueue Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public sealed class LookupPriorityQueue : PriorityQueue<Lookup.LookupResult> Constructors | Improve this Doc View Source LookupPriorityQueue(Int32) Creates a new priority queue of the specified size. Declaration public LookupPriorityQueue(int size) Parameters Type Name Description System.Int32 size Methods | Improve this Doc View Source GetResults() Returns the top N results in descending order. Declaration public Lookup.LookupResult[] GetResults() Returns Type Description Lookup.LookupResult [] the top N results in descending order. | Improve this Doc View Source LessThan(Lookup.LookupResult, Lookup.LookupResult) Declaration protected override bool LessThan(Lookup.LookupResult a, Lookup.LookupResult b) Parameters Type Name Description Lookup.LookupResult a Lookup.LookupResult b Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.LookupResult.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.LookupResult.html",
    "title": "Class Lookup.LookupResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lookup.LookupResult Result of a lookup. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lookup.LookupResult Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public sealed class LookupResult : IComparable<Lookup.LookupResult> Constructors | Improve this Doc View Source LookupResult(String, Int64) Create a new result from a key+weight pair. Declaration public LookupResult(string key, long value) Parameters Type Name Description System.String key System.Int64 value | Improve this Doc View Source LookupResult(String, Int64, BytesRef) Create a new result from a key+weight+payload triple. Declaration public LookupResult(string key, long value, BytesRef payload) Parameters Type Name Description System.String key System.Int64 value BytesRef payload | Improve this Doc View Source LookupResult(String, Int64, BytesRef, IEnumerable<BytesRef>) Create a new result from a key+weight+payload+contexts triple. Declaration public LookupResult(string key, long value, BytesRef payload, IEnumerable<BytesRef> contexts) Parameters Type Name Description System.String key System.Int64 value BytesRef payload IEnumerable < BytesRef > contexts | Improve this Doc View Source LookupResult(String, Int64, HashSet<BytesRef>) Create a new result from a key+weight+contexts triple. Declaration public LookupResult(string key, long value, HashSet<BytesRef> contexts) Parameters Type Name Description System.String key System.Int64 value HashSet < BytesRef > contexts | Improve this Doc View Source LookupResult(String, Object, Int64, BytesRef) Create a new result from a key+highlightKey+weight+payload triple. Declaration public LookupResult(string key, object highlightKey, long value, BytesRef payload) Parameters Type Name Description System.String key System.Object highlightKey System.Int64 value BytesRef payload | Improve this Doc View Source LookupResult(String, Object, Int64, BytesRef, IEnumerable<BytesRef>) Create a new result from a key+highlightKey+weight+payload+contexts triple. Declaration public LookupResult(string key, object highlightKey, long value, BytesRef payload, IEnumerable<BytesRef> contexts) Parameters Type Name Description System.String key System.Object highlightKey System.Int64 value BytesRef payload IEnumerable < BytesRef > contexts Properties | Improve this Doc View Source Contexts the key's contexts (null if not present) Declaration public IEnumerable<BytesRef> Contexts { get; } Property Value Type Description IEnumerable < BytesRef > | Improve this Doc View Source HighlightKey Expert: custom Object to hold the result of a highlighted suggestion. Declaration public object HighlightKey { get; } Property Value Type Description System.Object | Improve this Doc View Source Key the key's text Declaration public string Key { get; } Property Value Type Description System.String | Improve this Doc View Source Payload the key's payload (null if not present) Declaration public BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Value the key's weight Declaration public long Value { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CompareTo(Lookup.LookupResult) Compare alphabetically. Declaration public int CompareTo(Lookup.LookupResult o) Parameters Type Name Description Lookup.LookupResult o Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.SortedInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.SortedInputIterator.html",
    "title": "Class SortedInputIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedInputIterator This wrapper buffers incoming elements and makes sure they are sorted based on given comparer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SortedInputIterator Implements IInputIterator IBytesRefIterator Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class SortedInputIterator : object, IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source SortedInputIterator(IInputIterator) Creates a new sorted wrapper, using for sorting. Declaration public SortedInputIterator(IInputIterator source) Parameters Type Name Description IInputIterator source | Improve this Doc View Source SortedInputIterator(IInputIterator, IComparer<BytesRef>) Creates a new sorted wrapper, sorting by BytesRef (ascending) then cost (ascending). Declaration public SortedInputIterator(IInputIterator source, IComparer<BytesRef> comparer) Parameters Type Name Description IInputIterator source IComparer < BytesRef > comparer Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > | Improve this Doc View Source Contexts Declaration public virtual IEnumerable<BytesRef> Contexts { get; } Property Value Type Description IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Declaration public virtual bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Decode(BytesRef, ByteArrayDataInput) decodes the weight at the current position Declaration protected virtual long Decode(BytesRef scratch, ByteArrayDataInput tmpInput) Parameters Type Name Description BytesRef scratch ByteArrayDataInput tmpInput Returns Type Description System.Int64 | Improve this Doc View Source DecodeContexts(BytesRef, ByteArrayDataInput) decodes the contexts at the current position Declaration protected virtual ISet<BytesRef> DecodeContexts(BytesRef scratch, ByteArrayDataInput tmpInput) Parameters Type Name Description BytesRef scratch ByteArrayDataInput tmpInput Returns Type Description ISet < BytesRef > | Improve this Doc View Source DecodePayload(BytesRef, ByteArrayDataInput) decodes the payload at the current position Declaration protected virtual BytesRef DecodePayload(BytesRef scratch, ByteArrayDataInput tmpInput) Parameters Type Name Description BytesRef scratch ByteArrayDataInput tmpInput Returns Type Description BytesRef | Improve this Doc View Source Encode(OfflineSorter.ByteSequencesWriter, ByteArrayDataOutput, Byte[], BytesRef, BytesRef, IEnumerable<BytesRef>, Int64) encodes an entry (bytes+(contexts)+(payload)+weight) to the provided writer Declaration protected virtual void Encode(OfflineSorter.ByteSequencesWriter writer, ByteArrayDataOutput output, byte[] buffer, BytesRef spare, BytesRef payload, IEnumerable<BytesRef> contexts, long weight) Parameters Type Name Description OfflineSorter.ByteSequencesWriter writer ByteArrayDataOutput output System.Byte [] buffer BytesRef spare BytesRef payload IEnumerable < BytesRef > contexts System.Int64 weight | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.SortedTermFreqIteratorWrapper.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.SortedTermFreqIteratorWrapper.html",
    "title": "Class SortedTermFreqIteratorWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedTermFreqIteratorWrapper This wrapper buffers incoming elements and makes sure they are sorted based on given comparer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SortedTermFreqIteratorWrapper Implements ITermFreqIterator IBytesRefIterator Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class SortedTermFreqIteratorWrapper : object, ITermFreqIterator, IBytesRefIterator Constructors | Improve this Doc View Source SortedTermFreqIteratorWrapper(ITermFreqIterator) Creates a new sorted wrapper, using for sorting. Declaration public SortedTermFreqIteratorWrapper(ITermFreqIterator source) Parameters Type Name Description ITermFreqIterator source | Improve this Doc View Source SortedTermFreqIteratorWrapper(ITermFreqIterator, IComparer<BytesRef>) Creates a new sorted wrapper, sorting by BytesRef (ascending) then cost (ascending). Declaration public SortedTermFreqIteratorWrapper(ITermFreqIterator source, IComparer<BytesRef> comparer) Parameters Type Name Description ITermFreqIterator source IComparer < BytesRef > comparer Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Decode(BytesRef, ByteArrayDataInput) decodes the weight at the current position Declaration protected virtual long Decode(BytesRef scratch, ByteArrayDataInput tmpInput) Parameters Type Name Description BytesRef scratch ByteArrayDataInput tmpInput Returns Type Description System.Int64 | Improve this Doc View Source Encode(OfflineSorter.ByteSequencesWriter, ByteArrayDataOutput, Byte[], BytesRef, Int64) encodes an entry (bytes+weight) to the provided writer Declaration protected virtual void Encode(OfflineSorter.ByteSequencesWriter writer, ByteArrayDataOutput output, byte[] buffer, BytesRef spare, long weight) Parameters Type Name Description OfflineSorter.ByteSequencesWriter writer ByteArrayDataOutput output System.Byte [] buffer BytesRef spare System.Int64 weight | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements ITermFreqIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.html",
    "title": "Namespace Lucene.Net.Search.Suggest.Tst | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest.Tst <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Ternary Search Tree based autosuggest. Classes TernaryTreeNode The class creates a TST node. TSTAutocomplete Ternary Search Trie implementation. TSTLookup Suggest implementation based on a Ternary Search Tree"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TernaryTreeNode.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TernaryTreeNode.html",
    "title": "Class TernaryTreeNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TernaryTreeNode The class creates a TST node. Inheritance System.Object TernaryTreeNode Namespace : Lucene.Net.Search.Suggest.Tst Assembly : Lucene.Net.Suggest.dll Syntax public class TernaryTreeNode : object Constructors | Improve this Doc View Source TernaryTreeNode() Creates a new empty node Declaration public TernaryTreeNode()"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TSTAutocomplete.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TSTAutocomplete.html",
    "title": "Class TSTAutocomplete | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TSTAutocomplete Ternary Search Trie implementation. Inheritance System.Object TSTAutocomplete Namespace : Lucene.Net.Search.Suggest.Tst Assembly : Lucene.Net.Suggest.dll Syntax public class TSTAutocomplete : object Methods | Improve this Doc View Source BalancedTree(Object[], Object[], Int32, Int32, TernaryTreeNode) Inserting keys in TST in the order middle,small,big (lexicographic measure) recursively creates a balanced tree which reduces insertion and search times significantly. Declaration public virtual void BalancedTree(object[] tokens, object[] vals, int lo, int hi, TernaryTreeNode root) Parameters Type Name Description System.Object [] tokens Sorted list of keys to be inserted in TST. System.Object [] vals System.Int32 lo stores the lower index of current list. System.Int32 hi stores the higher index of current list. TernaryTreeNode root a reference object to root of TST. | Improve this Doc View Source Insert(TernaryTreeNode, String, Object, Int32) Inserts a key in TST creating a series of Binary Search Trees at each node. The key is actually stored across the eqKid of each node in a successive manner. Declaration public virtual TernaryTreeNode Insert(TernaryTreeNode currentNode, string s, object val, int x) Parameters Type Name Description TernaryTreeNode currentNode a reference node where the insertion will take currently. System.String s key to be inserted in TST. System.Object val System.Int32 x index of character in key to be inserted currently. Returns Type Description TernaryTreeNode The new reference to root node of TST | Improve this Doc View Source PrefixCompletion(TernaryTreeNode, String, Int32) Auto-completes a given prefix query using Depth-First Search with the end of prefix as source node each time finding a new leaf to get a complete key to be added in the suggest list. Declaration public virtual IList<TernaryTreeNode> PrefixCompletion(TernaryTreeNode root, string s, int x) Parameters Type Name Description TernaryTreeNode root a reference to root node of TST. System.String s prefix query to be auto-completed. System.Int32 x index of current character to be searched while traversing through the prefix in TST. Returns Type Description IList < TernaryTreeNode > suggest list of auto-completed keys for the given prefix query. See Also TernaryTreeNode"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TSTLookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TSTLookup.html",
    "title": "Class TSTLookup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TSTLookup Suggest implementation based on a Ternary Search Tree Inheritance System.Object Lookup TSTLookup Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) Namespace : Lucene.Net.Search.Suggest.Tst Assembly : Lucene.Net.Suggest.dll Syntax public class TSTLookup : Lookup Constructors | Improve this Doc View Source TSTLookup() Creates a new TSTLookup with an empty Ternary Search Tree. Declaration public TSTLookup() See Also Build(IInputIterator) Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Add(String, Object) Adds a new node if key already exists, otherwise replaces its value. This method always returns true. Declaration public virtual bool Add(string key, object value) Parameters Type Name Description System.String key System.Object value Returns Type Description System.Boolean | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator tfit) Parameters Type Name Description IInputIterator tfit Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the value for the specified key, or null if the key does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying TST Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput) See Also TSTAutocomplete"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.UnsortedInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.UnsortedInputIterator.html",
    "title": "Class UnsortedInputIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnsortedInputIterator This wrapper buffers the incoming elements and makes sure they are in random order. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BufferedInputIterator UnsortedInputIterator Implements IInputIterator IBytesRefIterator Inherited Members BufferedInputIterator.m_entries BufferedInputIterator.m_payloads BufferedInputIterator.m_contextSets BufferedInputIterator.m_curPos BufferedInputIterator.m_freqs BufferedInputIterator.HasPayloads BufferedInputIterator.Comparer BufferedInputIterator.HasContexts Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class UnsortedInputIterator : BufferedInputIterator, IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source UnsortedInputIterator(IInputIterator) Creates a new iterator, wrapping the specified iterator and returning elements in a random order. Declaration public UnsortedInputIterator(IInputIterator source) Parameters Type Name Description IInputIterator source Properties | Improve this Doc View Source Contexts Declaration public override IEnumerable<BytesRef> Contexts { get; } Property Value Type Description IEnumerable < BytesRef > Overrides BufferedInputIterator.Contexts | Improve this Doc View Source Payload Declaration public override BytesRef Payload { get; } Property Value Type Description BytesRef Overrides BufferedInputIterator.Payload | Improve this Doc View Source Weight Declaration public override long Weight { get; } Property Value Type Description System.Int64 Overrides BufferedInputIterator.Weight Methods | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides BufferedInputIterator.Next() Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/overview.html": {
    "href": "api/Lucene.Net.Suggest/overview.html",
    "title": "Lucene.Net.Suggest | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Lucene.Net.Suggest <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Auto-suggest and spellchecking support."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.BaseTokenStreamTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.BaseTokenStreamTestCase.html",
    "title": "Class BaseTokenStreamTestCase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseTokenStreamTestCase Base class for all Lucene unit tests that use s. When writing unit tests for analysis components, its highly recommended to use the helper methods here (especially in conjunction with MockAnalyzer or MockTokenizer ), as they contain many assertions and checks to catch bugs. Inheritance System.Object LuceneTestCase BaseTokenStreamTestCase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseTokenStreamTestCase : LuceneTestCase Methods | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output) Parameters Type Name Description Analyzer a System.String input System.String [] output | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], Int32[]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, int[] posIncrements) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] posIncrements | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], Int32[], Int32[]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, int[] startOffsets, int[] endOffsets) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], Int32[], Int32[], Int32[]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, int[] startOffsets, int[] endOffsets, int[] posIncrements) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.Int32 [] posIncrements | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], Int32[], Int32[], String[], Int32[]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], Int32[], Int32[], String[], Int32[], Int32[]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int[] posLengths) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Int32 [] posLengths | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], Int32[], Int32[], String[], Int32[], Int32[], Boolean) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int[] posLengths, bool offsetsAreCorrect) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Int32 [] posLengths System.Boolean offsetsAreCorrect | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], Int32[], Int32[], String[], Int32[], Int32[], Boolean, Byte[][]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int[] posLengths, bool graphOffsetsAreCorrect, byte[][] payloads) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Int32 [] posLengths System.Boolean graphOffsetsAreCorrect System.Byte [][] payloads | Improve this Doc View Source AssertAnalyzesTo(Analyzer, String, String[], String[]) Declaration public static void AssertAnalyzesTo(Analyzer a, string input, string[] output, string[] types) Parameters Type Name Description Analyzer a System.String input System.String [] output System.String [] types | Improve this Doc View Source AssertAnalyzesToPositions(Analyzer, String, String[], Int32[], Int32[]) Declaration public static void AssertAnalyzesToPositions(Analyzer a, string input, string[] output, int[] posIncrements, int[] posLengths) Parameters Type Name Description Analyzer a System.String input System.String [] output System.Int32 [] posIncrements System.Int32 [] posLengths | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[]) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output) Parameters Type Name Description TokenStream ts System.String [] output | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[]) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] posIncrements) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] posIncrements | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[]) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], Int32[]) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, int[] posIncrements) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.Int32 [] posIncrements | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], Int32[], Int32[], Nullable<Int32>) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, int[] posIncrements, int[] posLengths, int? finalOffset) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.Int32 [] posIncrements System.Int32 [] posLengths System.Nullable < System.Int32 > finalOffset | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], Int32[], Nullable<Int32>) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, int[] posIncrements, int? finalOffset) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.Int32 [] posIncrements System.Nullable < System.Int32 > finalOffset | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], Nullable<Int32>) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, int? finalOffset) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.Nullable < System.Int32 > finalOffset | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], String[], Int32[]) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], String[], Int32[], Int32[], Nullable<Int32>) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int[] posLengths, int? finalOffset) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Int32 [] posLengths System.Nullable < System.Int32 > finalOffset | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], String[], Int32[], Int32[], Nullable<Int32>, Boolean) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int[] posLengths, int? finalOffset, bool offsetsAreCorrect) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Int32 [] posLengths System.Nullable < System.Int32 > finalOffset System.Boolean offsetsAreCorrect | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], String[], Int32[], Int32[], Nullable<Int32>, Boolean[], Boolean) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int[] posLengths, int? finalOffset, bool[] keywordAtts, bool offsetsAreCorrect) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Int32 [] posLengths System.Nullable < System.Int32 > finalOffset System.Boolean [] keywordAtts System.Boolean offsetsAreCorrect | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], String[], Int32[], Int32[], Nullable<Int32>, Nullable<Int32>, Boolean[], Boolean, Byte[][]) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int[] posLengths, int? finalOffset, int? finalPosInc, bool[] keywordAtts, bool offsetsAreCorrect, byte[][] payloads) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Int32 [] posLengths System.Nullable < System.Int32 > finalOffset System.Nullable < System.Int32 > finalPosInc System.Boolean [] keywordAtts System.Boolean offsetsAreCorrect System.Byte [][] payloads | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], Int32[], Int32[], String[], Int32[], Nullable<Int32>) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, int[] startOffsets, int[] endOffsets, string[] types, int[] posIncrements, int? finalOffset) Parameters Type Name Description TokenStream ts System.String [] output System.Int32 [] startOffsets System.Int32 [] endOffsets System.String [] types System.Int32 [] posIncrements System.Nullable < System.Int32 > finalOffset | Improve this Doc View Source AssertTokenStreamContents(TokenStream, String[], String[]) Declaration public static void AssertTokenStreamContents(TokenStream ts, string[] output, string[] types) Parameters Type Name Description TokenStream ts System.String [] output System.String [] types | Improve this Doc View Source CheckAnalysisConsistency(Random, Analyzer, Boolean, String) Declaration public static void CheckAnalysisConsistency(Random random, Analyzer a, bool useCharFilter, string text) Parameters Type Name Description Random random Analyzer a System.Boolean useCharFilter System.String text | Improve this Doc View Source CheckAnalysisConsistency(Random, Analyzer, Boolean, String, Boolean) Declaration public static void CheckAnalysisConsistency(Random random, Analyzer a, bool useCharFilter, string text, bool offsetsAreCorrect) Parameters Type Name Description Random random Analyzer a System.Boolean useCharFilter System.String text System.Boolean offsetsAreCorrect | Improve this Doc View Source CheckOneTerm(Analyzer, String, String) Simple utility method for testing stemmers Declaration public static void CheckOneTerm(Analyzer a, string input, string expected) Parameters Type Name Description Analyzer a System.String input System.String expected | Improve this Doc View Source CheckRandomData(Random, Analyzer, Int32) Utility method for blasting tokenstreams with data to make sure they don't do anything crazy Declaration public static void CheckRandomData(Random random, Analyzer a, int iterations) Parameters Type Name Description Random random Analyzer a System.Int32 iterations | Improve this Doc View Source CheckRandomData(Random, Analyzer, Int32, Boolean) Utility method for blasting tokenstreams with data to make sure they don't do anything crazy Declaration public static void CheckRandomData(Random random, Analyzer a, int iterations, bool simple) Parameters Type Name Description Random random Analyzer a System.Int32 iterations System.Boolean simple true if only ascii strings will be used (try to avoid) | Improve this Doc View Source CheckRandomData(Random, Analyzer, Int32, Int32) Utility method for blasting tokenstreams with data to make sure they don't do anything crazy Declaration public static void CheckRandomData(Random random, Analyzer a, int iterations, int maxWordLength) Parameters Type Name Description Random random Analyzer a System.Int32 iterations System.Int32 maxWordLength | Improve this Doc View Source CheckRandomData(Random, Analyzer, Int32, Int32, Boolean) Declaration public static void CheckRandomData(Random random, Analyzer a, int iterations, int maxWordLength, bool simple) Parameters Type Name Description Random random Analyzer a System.Int32 iterations System.Int32 maxWordLength System.Boolean simple | Improve this Doc View Source CheckRandomData(Random, Analyzer, Int32, Int32, Boolean, Boolean) Declaration public static void CheckRandomData(Random random, Analyzer a, int iterations, int maxWordLength, bool simple, bool offsetsAreCorrect) Parameters Type Name Description Random random Analyzer a System.Int32 iterations System.Int32 maxWordLength System.Boolean simple System.Boolean offsetsAreCorrect | Improve this Doc View Source Escape(String) Declaration public static string Escape(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source NewAttributeFactory() Returns a random impl Declaration public static AttributeSource.AttributeFactory NewAttributeFactory() Returns Type Description AttributeSource.AttributeFactory | Improve this Doc View Source NewAttributeFactory(Random) Returns a random impl Declaration public static AttributeSource.AttributeFactory NewAttributeFactory(Random random) Parameters Type Name Description Random random Returns Type Description AttributeSource.AttributeFactory | Improve this Doc View Source ToDot(Analyzer, String) Declaration protected virtual string ToDot(Analyzer a, string inputText) Parameters Type Name Description Analyzer a System.String inputText Returns Type Description System.String | Improve this Doc View Source ToDotFile(Analyzer, String, String) Declaration protected virtual void ToDotFile(Analyzer a, string inputText, string localFileName) Parameters Type Name Description Analyzer a System.String inputText System.String localFileName See Also MockAnalyzer MockTokenizer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.BinaryTermAttribute.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.BinaryTermAttribute.html",
    "title": "Class BinaryTermAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryTermAttribute Implementation for IBinaryTermAttribute . Inheritance System.Object BinaryTermAttribute Implements IBinaryTermAttribute ITermToBytesRefAttribute Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class BinaryTermAttribute : Attribute, IBinaryTermAttribute, ITermToBytesRefAttribute Properties | Improve this Doc View Source BytesRef Declaration public BytesRef BytesRef { get; set; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Clear() Declaration public override void Clear() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source FillBytesRef() Declaration public void FillBytesRef() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Implements IBinaryTermAttribute ITermToBytesRefAttribute"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.BinaryToken.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.BinaryToken.html",
    "title": "Class BinaryToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryToken Represents a binary token. Inheritance System.Object BinaryToken Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class BinaryToken : object Constructors | Improve this Doc View Source BinaryToken(BytesRef) Declaration public BinaryToken(BytesRef term) Parameters Type Name Description BytesRef term | Improve this Doc View Source BinaryToken(BytesRef, Int32, Int32) Declaration public BinaryToken(BytesRef term, int posInc, int posLen) Parameters Type Name Description BytesRef term System.Int32 posInc System.Int32 posLen"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CannedBinaryTokenStream.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CannedBinaryTokenStream.html",
    "title": "Class CannedBinaryTokenStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CannedBinaryTokenStream from a canned list of binary ( -based) tokens. Inheritance System.Object CannedBinaryTokenStream Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class CannedBinaryTokenStream : TokenStream Constructors | Improve this Doc View Source CannedBinaryTokenStream(BinaryToken[]) Declaration public CannedBinaryTokenStream(params BinaryToken[] tokens) Parameters Type Name Description BinaryToken [] tokens Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CannedTokenStream.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CannedTokenStream.html",
    "title": "Class CannedTokenStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CannedTokenStream from a canned list of s. Inheritance System.Object CannedTokenStream Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class CannedTokenStream : TokenStream Constructors | Improve this Doc View Source CannedTokenStream(Int32, Int32, Token[]) If you want trailing holes, pass a non-zero finalPosInc . Declaration public CannedTokenStream(int finalPosInc, int finalOffset, params Token[] tokens) Parameters Type Name Description System.Int32 finalPosInc System.Int32 finalOffset Token [] tokens | Improve this Doc View Source CannedTokenStream(Token[]) Declaration public CannedTokenStream(params Token[] tokens) Parameters Type Name Description Token [] tokens Methods | Improve this Doc View Source End() Declaration public override void End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CheckClearAttributesAttribute.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CheckClearAttributesAttribute.html",
    "title": "Class CheckClearAttributesAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckClearAttributesAttribute Attribute that records if it was cleared or not. this is used for testing that was called correctly. Inheritance System.Object CheckClearAttributesAttribute Implements ICheckClearAttributesAttribute IAttribute Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class CheckClearAttributesAttribute : Attribute, ICheckClearAttributesAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetAndResetClearCalled() Declaration public bool GetAndResetClearCalled() Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Implements ICheckClearAttributesAttribute IAttribute"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CollationTestBase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.CollationTestBase.html",
    "title": "Class CollationTestBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollationTestBase Base test class for testing Unicode collation. Inheritance System.Object LuceneTestCase CollationTestBase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class CollationTestBase : LuceneTestCase Fields | Improve this Doc View Source m_firstRangeBeginningOriginal Declaration protected string m_firstRangeBeginningOriginal Field Value Type Description System.String | Improve this Doc View Source m_firstRangeEndOriginal Declaration protected string m_firstRangeEndOriginal Field Value Type Description System.String | Improve this Doc View Source m_secondRangeBeginningOriginal Declaration protected string m_secondRangeBeginningOriginal Field Value Type Description System.String | Improve this Doc View Source m_secondRangeEndOriginal Declaration protected string m_secondRangeEndOriginal Field Value Type Description System.String Methods | Improve this Doc View Source AssertThreadSafe(Analyzer) Declaration public virtual void AssertThreadSafe(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer | Improve this Doc View Source EncodeCollationKey(Byte[]) Convenience method to perform the same function as CollationKeyFilter. Declaration protected virtual string EncodeCollationKey(byte[] keyBits) Parameters Type Name Description System.Byte [] keyBits the result from collator.GetCollationKey(original).ToByteArray() Returns Type Description System.String The encoded collation key for the original string. | Improve this Doc View Source TestCollationKeySort(Analyzer, Analyzer, Analyzer, Analyzer, String, String, String, String) Test using various international locales with accented characters (which sort differently depending on locale). Declaration public virtual void TestCollationKeySort(Analyzer usAnalyzer, Analyzer franceAnalyzer, Analyzer swedenAnalyzer, Analyzer denmarkAnalyzer, string usResult, string frResult, string svResult, string dkResult) Parameters Type Name Description Analyzer usAnalyzer Analyzer franceAnalyzer Analyzer swedenAnalyzer Analyzer denmarkAnalyzer System.String usResult System.String frResult System.String svResult System.String dkResult | Improve this Doc View Source TestFarsiRangeFilterCollating(Analyzer, BytesRef, BytesRef, BytesRef, BytesRef) Declaration public virtual void TestFarsiRangeFilterCollating(Analyzer analyzer, BytesRef firstBeg, BytesRef firstEnd, BytesRef secondBeg, BytesRef secondEnd) Parameters Type Name Description Analyzer analyzer BytesRef firstBeg BytesRef firstEnd BytesRef secondBeg BytesRef secondEnd | Improve this Doc View Source TestFarsiRangeQueryCollating(Analyzer, BytesRef, BytesRef, BytesRef, BytesRef) Declaration public virtual void TestFarsiRangeQueryCollating(Analyzer analyzer, BytesRef firstBeg, BytesRef firstEnd, BytesRef secondBeg, BytesRef secondEnd) Parameters Type Name Description Analyzer analyzer BytesRef firstBeg BytesRef firstEnd BytesRef secondBeg BytesRef secondEnd | Improve this Doc View Source TestFarsiTermRangeQuery(Analyzer, BytesRef, BytesRef, BytesRef, BytesRef) Declaration public virtual void TestFarsiTermRangeQuery(Analyzer analyzer, BytesRef firstBeg, BytesRef firstEnd, BytesRef secondBeg, BytesRef secondEnd) Parameters Type Name Description Analyzer analyzer BytesRef firstBeg BytesRef firstEnd BytesRef secondBeg BytesRef secondEnd"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.html",
    "title": "Namespace Lucene.Net.Analysis | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> API and code to convert text into indexable/searchable tokens. Covers Analyzer and related classes. Parsing? Tokenization? Analysis! Lucene, an indexing and search library, accepts only plain text input. Parsing Applications that build their search capabilities upon Lucene may support documents in various formats – HTML, XML, PDF, Word – just to name a few. Lucene does not care about the Parsing of these and other document formats, and it is the responsibility of the application using Lucene to use an appropriate Parser to convert the original format into plain text before passing that plain text to Lucene. Tokenization Plain text passed to Lucene for indexing goes through a process generally called tokenization. Tokenization is the process of breaking input text into small indexing elements – tokens. The way input text is broken into tokens heavily influences how people will then be able to search for that text. For instance, sentences beginnings and endings can be identified to provide for more accurate phrase and proximity searches (though sentence identification is not provided by Lucene). In some cases simply breaking the input text into tokens is not enough – a deeper Analysis may be needed. Lucene includes both pre- and post-tokenization analysis facilities. Pre-tokenization analysis can include (but is not limited to) stripping HTML markup, and transforming or removing text matching arbitrary patterns or sets of fixed strings. There are many post-tokenization steps that can be done, including (but not limited to): Stemming – Replacing words with their stems. For instance with English stemming \"bikes\" is replaced with \"bike\"; now query \"bike\" can find both documents containing \"bike\" and those containing \"bikes\". Stop Words Filtering – Common words like \"the\", \"and\" and \"a\" rarely add any value to a search. Removing them shrinks the index size and increases performance. It may also reduce some \"noise\" and actually improve search quality. Text Normalization – Stripping accents and other character markings can make for better searching. Synonym Expansion – Adding in synonyms at the same token position as the current word can mean better matching when users search with words in the synonym set. Core Analysis The analysis package provides the mechanism to convert Strings and Readers into tokens that can be indexed by Lucene. There are four main classes in the package from which all analysis processes are derived. These are: Analyzer – An Analyzer is responsible for building a TokenStream which can be consumed by the indexing and searching processes. See below for more information on implementing your own Analyzer. CharFilter – CharFilter extends {@link java.io.Reader} to perform pre-tokenization substitutions, deletions, and/or insertions on an input Reader's text, while providing corrected character offsets to account for these modifications. This capability allows highlighting to function over the original text when indexed tokens are created from CharFilter-modified text with offsets that are not the same as those in the original text. Tokenizers' constructors and reset() methods accept a CharFilter. CharFilters may be chained to perform multiple pre-tokenization modifications. Tokenizer – A Tokenizer is a TokenStream and is responsible for breaking up incoming text into tokens. In most cases, an Analyzer will use a Tokenizer as the first step in the analysis process. However, to modify text prior to tokenization, use a CharStream subclass (see above). TokenFilter – A TokenFilter is also a TokenStream and is responsible for modifying tokens that have been created by the Tokenizer. Common modifications performed by a TokenFilter are: deletion, stemming, synonym injection, and down casing. Not all Analyzers require TokenFilters. Hints, Tips and Traps The synergy between Analyzer and Tokenizer is sometimes confusing. To ease this confusion, some clarifications: The Analyzer is responsible for the entire task of creating tokens out of the input text, while the Tokenizer is only responsible for breaking the input text into tokens. Very likely, tokens created by the Tokenizer would be modified or even omitted by the Analyzer (via one or more TokenFilter s) before being returned. Tokenizer is a TokenStream , but Analyzer is not. Analyzer is \"field aware\", but Tokenizer is not. Lucene Java provides a number of analysis capabilities, the most commonly used one being the StandardAnalyzer. Many applications will have a long and industrious life with nothing more than the StandardAnalyzer. However, there are a few other classes/packages that are worth mentioning: PerFieldAnalyzerWrapper – Most Analyzers perform the same operation on all Field s. The PerFieldAnalyzerWrapper can be used to associate a different Analyzer with different Field s. The analysis library located at the root of the Lucene distribution has a number of different Analyzer implementations to solve a variety of different problems related to searching. Many of the Analyzers are designed to analyze non-English languages. There are a variety of Tokenizer and TokenFilter implementations in this package. Take a look around, chances are someone has implemented what you need. Analysis is one of the main causes of performance degradation during indexing. Simply put, the more you analyze the slower the indexing (in most cases). Perhaps your application would be just fine using the simple WhitespaceTokenizer combined with a StopFilter. The benchmark/ library can be useful for testing out the speed of the analysis process. Invoking the Analyzer Applications usually do not invoke analysis – Lucene does it for them: At indexing, as a consequence of AddDocument , the Analyzer in effect for indexing is invoked for each indexed field of the added document. At search, a QueryParser may invoke the Analyzer during parsing. Note that for some queries, analysis does not take place, e.g. wildcard queries. However an application might invoke Analysis of any text for testing or for any other purpose, something like: Version matchVersion = Version.LUCENE_XY; // Substitute desired Lucene version for XY Analyzer analyzer = new StandardAnalyzer(matchVersion); // or any other analyzer TokenStream ts = analyzer.tokenStream(\"myfield\", new StringReader(\"some text goes here\")); OffsetAttribute offsetAtt = ts.addAttribute(OffsetAttribute.class); try { ts.reset(); // Resets this stream to the beginning. (Required) while (ts.incrementToken()) { // Use [#reflectAsString(boolean)](xref:Lucene.Net.Util.AttributeSource) // for token stream debugging. System.out.println(\"token: \" + ts.reflectAsString(true)); System.out.println(\"token start offset: \" + offsetAtt.startOffset()); System.out.println(\" token end offset: \" + offsetAtt.endOffset()); } ts.end(); // Perform end-of-stream operations, e.g. set the final offset. } finally { ts.close(); // Release resources associated with this stream. } Indexing Analysis vs. Search Analysis Selecting the \"correct\" analyzer is crucial for search quality, and can also affect indexing and search performance. The \"correct\" analyzer differs between applications. Lucene java's wiki page AnalysisParalysis provides some data on \"analyzing your analyzer\". Here are some rules of thumb: 1. Test test test... (did we say test?) 2. Beware of over analysis – might hurt indexing performance. 3. Start with same analyzer for indexing and search, otherwise searches would not find what they are supposed to... 4. In some cases a different analyzer is required for indexing and search, for instance: * Certain searches require more stop words to be filtered. (I.e. more than those that were filtered at indexing.) * Query expansion by synonyms, acronyms, auto spell correction, etc. This might sometimes require a modified analyzer – see the next section on how to do that. Implementing your own Analyzer Creating your own Analyzer is straightforward. Your Analyzer can wrap existing analysis components — CharFilter(s) (optional) , a Tokenizer, and TokenFilter(s) (optional) — or components you create, or a combination of existing and newly created components. Before pursuing this approach, you may find it worthwhile to explore the analyzers-common library and/or ask on the java-user@lucene.apache.org mailing list first to see if what you need already exists. If you are still committed to creating your own Analyzer, have a look at the source code of any one of the many samples located in this package. The following sections discuss some aspects of implementing your own analyzer. Field Section Boundaries When Document.add is called multiple times for the same field name, we could say that each such call creates a new section for that field in that document. In fact, a separate call to TokenStream would take place for each of these so called \"sections\". However, the default Analyzer behavior is to treat all these sections as one large section. This allows phrase search and proximity search to seamlessly cross boundaries between these \"sections\". In other words, if a certain field \"f\" is added like this: document.add(new Field(\"f\",\"first ends\",...); document.add(new Field(\"f\",\"starts two\",...); indexWriter.addDocument(document); Then, a phrase search for \"ends starts\" would find that document. Where desired, this behavior can be modified by introducing a \"position gap\" between consecutive field \"sections\", simply by overriding Analyzer.getPositionIncrementGap : Version matchVersion = Version.LUCENE_XY; // Substitute desired Lucene version for XY Analyzer myAnalyzer = new StandardAnalyzer(matchVersion) { public int getPositionIncrementGap(String fieldName) { return 10; } }; Token Position Increments By default, all tokens created by Analyzers and Tokenizers have a Increment of one. This means that the position stored for that token in the index would be one more than that of the previous token. Recall that phrase and proximity searches rely on position info. If the selected analyzer filters the stop words \"is\" and \"the\", then for a document containing the string \"blue is the sky\", only the tokens \"blue\", \"sky\" are indexed, with position(\"sky\") = 3 + position(\"blue\"). Now, a phrase query \"blue is the sky\" would find that document, because the same analyzer filters the same stop words from that query. But the phrase query \"blue sky\" would not find that document because the position increment between \"blue\" and \"sky\" is only 1. If this behavior does not fit the application needs, the query parser needs to be configured to not take position increments into account when generating phrase queries. Note that a StopFilter MUST increment the position increment in order not to generate corrupt tokenstream graphs. Here is the logic used by StopFilter to increment positions when filtering out tokens: public TokenStream tokenStream(final String fieldName, Reader reader) { final TokenStream ts = someAnalyzer.tokenStream(fieldName, reader); TokenStream res = new TokenStream() { CharTermAttribute termAtt = addAttribute(CharTermAttribute.class); PositionIncrementAttribute posIncrAtt = addAttribute(PositionIncrementAttribute.class); public boolean incrementToken() throws IOException { int extraIncrement = 0; while (true) { boolean hasNext = ts.incrementToken(); if (hasNext) { if (stopWords.contains(termAtt.toString())) { extraIncrement += posIncrAtt.getPositionIncrement(); // filter this word continue; } if (extraIncrement>0) { posIncrAtt.setPositionIncrement(posIncrAtt.getPositionIncrement()+extraIncrement); } } return hasNext; } } }; return res; } A few more use cases for modifying position increments are: Inhibiting phrase and proximity matches in sentence boundaries – for this, a tokenizer that identifies a new sentence can add 1 to the position increment of the first token of the new sentence. Injecting synonyms – here, synonyms of a token should be added after that token, and their position increment should be set to 0. As result, all synonyms of a token would be considered to appear in exactly the same position as that token, and so would they be seen by phrase and proximity searches. Token Position Length By default, all tokens created by Analyzers and Tokenizers have a Length of one. This means that the token occupies a single position. This attribute is not indexed and thus not taken into account for positional queries, but is used by eg. suggesters. The main use case for positions lengths is multi-word synonyms. With single-word synonyms, setting the position increment to 0 is enough to denote the fact that two words are synonyms, for example: Term red magenta Position increment 1 0 Given that position(magenta) = 0 + position(red), they are at the same position, so anything working with analyzers will return the exact same result if you replace \"magenta\" with \"red\" in the input. However, multi-word synonyms are more tricky. Let's say that you want to build a TokenStream where \"IBM\" is a synonym of \"Internal Business Machines\". Position increments are not enough anymore: Term IBM International Business Machines Position increment 1 0 1 1 The problem with this token stream is that \"IBM\" is at the same position as \"International\" although it is a synonym with \"International Business Machines\" as a whole. Setting the position increment of \"Business\" and \"Machines\" to 0 wouldn't help as it would mean than \"International\" is a synonym of \"Business\". The only way to solve this issue is to make \"IBM\" span across 3 positions, this is where position lengths come to rescue. Term IBM International Business Machines Position increment 1 0 1 1 Position length 3 1 1 1 This new attribute makes clear that \"IBM\" and \"International Business Machines\" start and end at the same positions. How to not write corrupt token streams There are a few rules to observe when writing custom Tokenizers and TokenFilters: The first position increment must be > 0. Positions must not go backward. Tokens that have the same start position must have the same start offset. Tokens that have the same end position (taking into account the position length) must have the same end offset. Tokenizers must call #clearAttributes() in incrementToken(). Tokenizers must override #end() , and pass the final offset (the total number of input characters processed) to both parameters of Int) . Although these rules might seem easy to follow, problems can quickly happen when chaining badly implemented filters that play with positions and offsets, such as synonym or n-grams filters. Here are good practices for writing correct filters: Token filters should not modify offsets. If you feel that your filter would need to modify offsets, then it should probably be implemented as a tokenizer. Token filters should not insert positions. If a filter needs to add tokens, then they should all have a position increment of 0. When they add tokens, token filters should call #clearAttributes() first. When they remove tokens, token filters should increment the position increment of the following token. Token filters should preserve position lengths. TokenStream API \"Flexible Indexing\" summarizes the effort of making the Lucene indexer pluggable and extensible for custom index formats. A fully customizable indexer means that users will be able to store custom data structures on disk. Therefore an API is necessary that can transport custom types of data from the documents to the indexer. Attribute and AttributeSource Classes Attribute and AttributeSource serve as the basis upon which the analysis elements of \"Flexible Indexing\" are implemented. An Attribute holds a particular piece of information about a text token. For example, CharTermAttribute contains the term text of a token, and OffsetAttribute contains the start and end character offsets of a token. An AttributeSource is a collection of Attributes with a restriction: there may be only one instance of each attribute type. TokenStream now extends AttributeSource, which means that one can add Attributes to a TokenStream. Since TokenFilter extends TokenStream, all filters are also AttributeSources. Lucene provides seven Attributes out of the box: CharTermAttribute The term text of a token. Implements {@link java.lang.CharSequence} (providing methods length() and charAt(), and allowing e.g. for direct use with regular expression {@link java.util.regex.Matcher}s) and {@link java.lang.Appendable} (allowing the term text to be appended to.) OffsetAttribute The start and end offset of a token in characters. PositionIncrementAttribute See above for detailed information about position increment. PositionLengthAttribute The number of positions occupied by a token. PayloadAttribute The payload that a Token can optionally have. TypeAttribute The type of the token. Default is 'word'. FlagsAttribute Optional flags a token can have. KeywordAttribute Keyword-aware TokenStreams/-Filters skip modification of tokens that return true from this attribute's isKeyword() method. More Requirements for Analysis Component Classes Due to the historical development of the API, there are some perhaps less than obvious requirements to implement analysis components classes. Token Stream Lifetime The code fragment of the analysis workflow protocol above shows a token stream being obtained, used, and then left for garbage. However, that does not mean that the components of that token stream will, in fact, be discarded. The default is just the opposite. Analyzer applies a reuse strategy to the tokenizer and the token filters. It will reuse them. For each new input, it calls #setReader(java.io.Reader) to set the input. Your components must be prepared for this scenario, as described below. Tokenizer You should create your tokenizer class by extending Tokenizer . Your tokenizer must never make direct use of the {@link java.io.Reader} supplied to its constructor(s). (A future release of Apache Lucene may remove the reader parameters from the Tokenizer constructors.) Tokenizer wraps the reader in an object that helps enforce that applications comply with the analysis workflow . Thus, your class should only reference the input via the protected 'input' field of Tokenizer. Your tokenizer must override #end() . Your implementation must call super.end() . It must set a correct final offset into the offset attribute, and finish up and other attributes to reflect the end of the stream. If your tokenizer overrides #reset() or #close() , it must call the corresponding superclass method. Token Filter You should create your token filter class by extending TokenFilter . If your token filter overrides #reset() , #end() or #close() , it must call the corresponding superclass method. Creating delegates Forwarding classes (those which extend Tokenizer but delegate selected logic to another tokenizer) must also set the reader to the delegate in the overridden #reset() method, e.g.: public class ForwardingTokenizer extends Tokenizer { private Tokenizer delegate; ... {@literal @Override} public void reset() { super.reset(); delegate.setReader(this.input); delegate.reset(); } } Testing Your Analysis Component The lucene-test-framework component defines BaseTokenStreamTestCase . By extending this class, you can create JUnit tests that validate that your Analyzer and/or analysis components correctly implement the protocol. The checkRandomData methods of that class are particularly effective in flushing out errors. Using the TokenStream API There are a few important things to know in order to use the new API efficiently which are summarized here. You may want to walk through the example below first and come back to this section afterwards. Please keep in mind that an AttributeSource can only have one instance of a particular Attribute. Furthermore, if a chain of a TokenStream and multiple TokenFilters is used, then all TokenFilters in that chain share the Attributes with the TokenStream. Attribute instances are reused for all tokens of a document. Thus, a TokenStream/-Filter needs to update the appropriate Attribute(s) in incrementToken(). The consumer, commonly the Lucene indexer, consumes the data in the Attributes and then calls incrementToken() again until it returns false, which indicates that the end of the stream was reached. This means that in each call of incrementToken() a TokenStream/-Filter can safely overwrite the data in the Attribute instances. For performance reasons a TokenStream/-Filter should add/get Attributes during instantiation; i.e., create an attribute in the constructor and store references to it in an instance variable. Using an instance variable instead of calling addAttribute()/getAttribute() in incrementToken() will avoid attribute lookups for every token in the document. All methods in AttributeSource are idempotent, which means calling them multiple times always yields the same result. This is especially important to know for addAttribute(). The method takes the type ( Class ) of an Attribute as an argument and returns an instance . If an Attribute of the same type was previously added, then the already existing instance is returned, otherwise a new instance is created and returned. Therefore TokenStreams/-Filters can safely call addAttribute() with the same Attribute type multiple times. Even consumers of TokenStreams should normally call addAttribute() instead of getAttribute(), because it would not fail if the TokenStream does not have this Attribute (getAttribute() would throw an IllegalArgumentException, if the Attribute is missing). More advanced code could simply check with hasAttribute(), if a TokenStream has it, and may conditionally leave out processing for extra performance. Example In this example we will create a WhiteSpaceTokenizer and use a LengthFilter to suppress all words that have only two or fewer characters. The LengthFilter is part of the Lucene core and its implementation will be explained here to illustrate the usage of the TokenStream API. Then we will develop a custom Attribute, a PartOfSpeechAttribute, and add another filter to the chain which utilizes the new custom attribute, and call it PartOfSpeechTaggingFilter. Whitespace tokenization public class MyAnalyzer extends Analyzer { private Version matchVersion; public MyAnalyzer(Version matchVersion) { this.matchVersion = matchVersion; } {@literal @Override} protected TokenStreamComponents createComponents(String fieldName, Reader reader) { return new TokenStreamComponents(new WhitespaceTokenizer(matchVersion, reader)); } public static void main(String[] args) throws IOException { // text to tokenize final String text = \"This is a demo of the TokenStream API\"; Version matchVersion = Version.LUCENE_XY; // Substitute desired Lucene version for XY MyAnalyzer analyzer = new MyAnalyzer(matchVersion); TokenStream stream = analyzer.tokenStream(\"field\", new StringReader(text)); // get the CharTermAttribute from the TokenStream CharTermAttribute termAtt = stream.addAttribute(CharTermAttribute.class); try { stream.reset(); // print all tokens until stream is exhausted while (stream.incrementToken()) { System.out.println(termAtt.toString()); } stream.end(); } finally { stream.close(); } } } In this easy example a simple white space tokenization is performed. In main() a loop consumes the stream and prints the term text of the tokens by accessing the CharTermAttribute that the WhitespaceTokenizer provides. Here is the output: This is a demo of the new TokenStream API Adding a LengthFilter We want to suppress all tokens that have 2 or less characters. We can do that easily by adding a LengthFilter to the chain. Only the createComponents() method in our analyzer needs to be changed: {@literal @Override} protected TokenStreamComponents createComponents(String fieldName, Reader reader) { final Tokenizer source = new WhitespaceTokenizer(matchVersion, reader); TokenStream result = new LengthFilter(true, source, 3, Integer.MAX_VALUE); return new TokenStreamComponents(source, result); } Note how now only words with 3 or more characters are contained in the output: This demo the new TokenStream API Now let's take a look how the LengthFilter is implemented: public final class LengthFilter extends FilteringTokenFilter { private final int min; private final int max; private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class); /** Create a new LengthFilter. This will filter out tokens whose CharTermAttribute is either too short (< min) or too long (> max). @param version the Lucene match version @param in the TokenStream to consume @param min the minimum length @param max the maximum length */ public LengthFilter(Version version, TokenStream in, int min, int max) { super(version, in); this.min = min; this.max = max; } {@literal @Override} public boolean accept() { final int len = termAtt.length(); return (len >= min && len <= max);=\"\" }=\"\" }=\"\"></=> In LengthFilter, the CharTermAttribute is added and stored in the instance variable termAtt . Remember that there can only be a single instance of CharTermAttribute in the chain, so in our example the addAttribute() call in LengthFilter returns the CharTermAttribute that the WhitespaceTokenizer already added. The tokens are retrieved from the input stream in FilteringTokenFilter's incrementToken() method (see below), which calls LengthFilter's accept() method. By looking at the term text in the CharTermAttribute, the length of the term can be determined and tokens that are either too short or too long are skipped. Note how accept() can efficiently access the instance variable; no attribute lookup is necessary. The same is true for the consumer, which can simply use local references to the Attributes. LengthFilter extends FilteringTokenFilter: public abstract class FilteringTokenFilter extends TokenFilter { private final PositionIncrementAttribute posIncrAtt = addAttribute(PositionIncrementAttribute.class); /** Create a new FilteringTokenFilter. @param in the TokenStream to consume */ public FilteringTokenFilter(Version version, TokenStream in) { super(in); } /** Override this method and return if the current input token should be returned by incrementToken. */ protected abstract boolean accept() throws IOException; {@literal @Override} public final boolean incrementToken() throws IOException { int skippedPositions = 0; while (input.incrementToken()) { if (accept()) { if (skippedPositions != 0) { posIncrAtt.setPositionIncrement(posIncrAtt.getPositionIncrement() + skippedPositions); } return true; } skippedPositions += posIncrAtt.getPositionIncrement(); } // reached EOS -- return false return false; } {@literal @Override} public void reset() throws IOException { super.reset(); } } Adding a custom Attribute Now we're going to implement our own custom Attribute for part-of-speech tagging and call it consequently PartOfSpeechAttribute . First we need to define the interface of the new Attribute: public interface PartOfSpeechAttribute extends Attribute { public static enum PartOfSpeech { Noun, Verb, Adjective, Adverb, Pronoun, Preposition, Conjunction, Article, Unknown } public void setPartOfSpeech(PartOfSpeech pos); public PartOfSpeech getPartOfSpeech(); } Now we also need to write the implementing class. The name of that class is important here: By default, Lucene checks if there is a class with the name of the Attribute with the suffix 'Impl'. In this example, we would consequently call the implementing class PartOfSpeechAttributeImpl . This should be the usual behavior. However, there is also an expert-API that allows changing these naming conventions: AttributeSource.AttributeFactory . The factory accepts an Attribute interface as argument and returns an actual instance. You can implement your own factory if you need to change the default behavior. Now here is the actual class that implements our new Attribute. Notice that the class has to extend <xref:Lucene.Net.Util.AttributeImpl>: public final class PartOfSpeechAttributeImpl extends AttributeImpl implements PartOfSpeechAttribute { private PartOfSpeech pos = PartOfSpeech.Unknown; public void setPartOfSpeech(PartOfSpeech pos) { this.pos = pos; } public PartOfSpeech getPartOfSpeech() { return pos; } {@literal @Override} public void clear() { pos = PartOfSpeech.Unknown; } {@literal @Override} public void copyTo(AttributeImpl target) { ((PartOfSpeechAttribute) target).setPartOfSpeech(pos); } } This is a simple Attribute implementation has only a single variable that stores the part-of-speech of a token. It extends the AttributeImpl class and therefore implements its abstract methods clear() and copyTo() . Now we need a TokenFilter that can set this new PartOfSpeechAttribute for each token. In this example we show a very naive filter that tags every word with a leading upper-case letter as a 'Noun' and all other words as 'Unknown'. public static class PartOfSpeechTaggingFilter extends TokenFilter { PartOfSpeechAttribute posAtt = addAttribute(PartOfSpeechAttribute.class); CharTermAttribute termAtt = addAttribute(CharTermAttribute.class); protected PartOfSpeechTaggingFilter(TokenStream input) { super(input); } public boolean incrementToken() throws IOException { if (!input.incrementToken()) {return false;} posAtt.setPartOfSpeech(determinePOS(termAtt.buffer(), 0, termAtt.length())); return true; } // determine the part of speech for the given term protected PartOfSpeech determinePOS(char[] term, int offset, int length) { // naive implementation that tags every uppercased word as noun if (length > 0 && Character.isUpperCase(term[0])) { return PartOfSpeech.Noun; } return PartOfSpeech.Unknown; } } Just like the LengthFilter, this new filter stores references to the attributes it needs in instance variables. Notice how you only need to pass in the interface of the new Attribute and instantiating the correct class is automatically taken care of. Now we need to add the filter to the chain in MyAnalyzer: {@literal @Override} protected TokenStreamComponents createComponents(String fieldName, Reader reader) { final Tokenizer source = new WhitespaceTokenizer(matchVersion, reader); TokenStream result = new LengthFilter(true, source, 3, Integer.MAX_VALUE); result = new PartOfSpeechTaggingFilter(result); return new TokenStreamComponents(source, result); } Now let's look at the output: This demo the new TokenStream API Apparently it hasn't changed, which shows that adding a custom attribute to a TokenStream/Filter chain does not affect any existing consumers, simply because they don't know the new Attribute. Now let's change the consumer to make use of the new PartOfSpeechAttribute and print it out: public static void main(String[] args) throws IOException { // text to tokenize final String text = \"This is a demo of the TokenStream API\"; MyAnalyzer analyzer = new MyAnalyzer(); TokenStream stream = analyzer.tokenStream(\"field\", new StringReader(text)); // get the CharTermAttribute from the TokenStream CharTermAttribute termAtt = stream.addAttribute(CharTermAttribute.class); // get the PartOfSpeechAttribute from the TokenStream PartOfSpeechAttribute posAtt = stream.addAttribute(PartOfSpeechAttribute.class); try { stream.reset(); // print all tokens until stream is exhausted while (stream.incrementToken()) { System.out.println(termAtt.toString() + \": \" + posAtt.getPartOfSpeech()); } stream.end(); } finally { stream.close(); } } The change that was made is to get the PartOfSpeechAttribute from the TokenStream and print out its contents in the while loop that consumes the stream. Here is the new output: This: Noun demo: Unknown the: Unknown new: Unknown TokenStream: Noun API: Noun Each word is now followed by its assigned PartOfSpeech tag. Of course this is a naive part-of-speech tagging. The word 'This' should not even be tagged as noun; it is only spelled capitalized because it is the first word of a sentence. Actually this is a good opportunity for an exercise. To practice the usage of the new API the reader could now write an Attribute and TokenFilter that can specify for each word if it was the first token of a sentence or not. Then the PartOfSpeechTaggingFilter can make use of this knowledge and only tag capitalized words as nouns if not the first word of a sentence (we know, this is still not a correct behavior, but hey, it's a good exercise). As a small hint, this is how the new Attribute class could begin: public class FirstTokenOfSentenceAttributeImpl extends AttributeImpl implements FirstTokenOfSentenceAttribute { private boolean firstToken; public void setFirstToken(boolean firstToken) { this.firstToken = firstToken; } public boolean getFirstToken() { return firstToken; } {@literal @Override} public void clear() { firstToken = false; } ... Adding a CharFilter chain Analyzers take Java {@link java.io.Reader}s as input. Of course you can wrap your Readers with {@link java.io.FilterReader}s to manipulate content, but this would have the big disadvantage that character offsets might be inconsistent with your original text. CharFilter is designed to allow you to pre-process input like a FilterReader would, but also preserve the original offsets associated with those characters. This way mechanisms like highlighting still work correctly. CharFilters can be chained. Example: public class MyAnalyzer extends Analyzer { {@literal @Override} protected TokenStreamComponents createComponents(String fieldName, Reader reader) { return new TokenStreamComponents(new MyTokenizer(reader)); } {@literal @Override} protected Reader initReader(String fieldName, Reader reader) { // wrap the Reader in a CharFilter chain. return new SecondCharFilter(new FirstCharFilter(reader)); } } Classes BaseTokenStreamTestCase Base class for all Lucene unit tests that use s. When writing unit tests for analysis components, its highly recommended to use the helper methods here (especially in conjunction with MockAnalyzer or MockTokenizer ), as they contain many assertions and checks to catch bugs. BinaryTermAttribute Implementation for IBinaryTermAttribute . BinaryToken Represents a binary token. CannedBinaryTokenStream from a canned list of binary ( -based) tokens. CannedTokenStream from a canned list of s. CheckClearAttributesAttribute Attribute that records if it was cleared or not. this is used for testing that was called correctly. CollationTestBase Base test class for testing Unicode collation. LookaheadTokenFilter LUCENENET specific abstraction so we can reference LookaheadTokenFilter.Position without specifying a generic closing type. LookaheadTokenFilter.Position Holds all state for a single position; subclass this to record other state at each position. LookaheadTokenFilter<T> An abstract to make it easier to build graph token filters requiring some lookahead. This class handles the details of buffering up tokens, recording them by position, restoring them, providing access to them, etc. MockAnalyzer Analyzer for testing. This analyzer is a replacement for Whitespace/Simple/KeywordAnalyzers for unit tests. If you are testing a custom component such as a queryparser or analyzer-wrapper that consumes analysis streams, its a great idea to test it with this analyzer instead. MockAnalyzer has the following behavior: By default, the assertions in MockTokenizer are turned on for extra checks that the consumer is consuming properly. These checks can be disabled with EnableChecks . Payload data is randomly injected into the stream for more thorough testing of payloads. MockBytesAnalyzer for testing that encodes terms as UTF-16 bytes. MockBytesAttributeFactory that implements with MockUTF16TermAttributeImpl . MockCharFilter The purpose of this charfilter is to send offsets out of bounds if the analyzer doesn't use or does incorrect offset math. MockFixedLengthPayloadFilter that adds random fixed-length payloads. MockGraphTokenFilter Randomly inserts overlapped (posInc=0) tokens with posLength sometimes > 1. The chain must have an . MockHoleInjectingTokenFilter Randomly injects holes (similar to what a stopfilter would do) MockPayloadAnalyzer Wraps a whitespace tokenizer with a filter that sets the first token, and odd tokens to posinc=1, and all others to 0, encoding the position as pos: XXX in the payload. MockRandomLookaheadTokenFilter Uses LookaheadTokenFilter to randomly peek at future tokens. MockReaderWrapper Wraps a , and can throw random or fixed exceptions, and spoon feed read chars. MockTokenFilter A for testing that removes terms accepted by a DFA. Union a list of singletons to act like a StopFilter . Use the complement to act like a KeepWordFilter . Use a regex like .{12,} to act like a LengthFilter . MockTokenizer Tokenizer for testing. This tokenizer is a replacement for WHITESPACE , SIMPLE , and KEYWORD tokenizers. If you are writing a component such as a , its a great idea to test it wrapping this tokenizer instead for extra checks. This tokenizer has the following behavior: An internal state-machine is used for checking consumer consistency. These checks can be disabled with EnableChecks . For convenience, optionally lowercases terms that it outputs. MockUTF16TermAttributeImpl Extension of that encodes the term text as UTF-16 bytes instead of as UTF-8 bytes. MockVariableLengthPayloadFilter that adds random variable-length payloads. TokenStreamToDot Consumes a and outputs the dot (graphviz) string (graph). ValidatingTokenFilter A that checks consistency of the tokens (eg offsets are consistent with one another). VocabularyAssert Utility class for doing vocabulary-based stemming tests. Interfaces IBinaryTermAttribute An attribute extending but exposing BytesRef property. ICheckClearAttributesAttribute Attribute that records if it was cleared or not. this is used for testing that was called correctly."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.IBinaryTermAttribute.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.IBinaryTermAttribute.html",
    "title": "Interface IBinaryTermAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IBinaryTermAttribute An attribute extending but exposing BytesRef property. Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public interface IBinaryTermAttribute : ITermToBytesRefAttribute Properties | Improve this Doc View Source BytesRef Set the current binary value. Declaration BytesRef BytesRef { get; set; } Property Value Type Description BytesRef"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.ICheckClearAttributesAttribute.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.ICheckClearAttributesAttribute.html",
    "title": "Interface ICheckClearAttributesAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICheckClearAttributesAttribute Attribute that records if it was cleared or not. this is used for testing that was called correctly. Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public interface ICheckClearAttributesAttribute : IAttribute Methods | Improve this Doc View Source GetAndResetClearCalled() Declaration bool GetAndResetClearCalled() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.LookaheadTokenFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.LookaheadTokenFilter.html",
    "title": "Class LookaheadTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LookaheadTokenFilter LUCENENET specific abstraction so we can reference LookaheadTokenFilter.Position without specifying a generic closing type. Inheritance System.Object LookaheadTokenFilter LookaheadTokenFilter<T> Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class LookaheadTokenFilter : TokenFilter Methods | Improve this Doc View Source IncrementToken() Declaration public abstract override bool IncrementToken() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.LookaheadTokenFilter.Position.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.LookaheadTokenFilter.Position.html",
    "title": "Class LookaheadTokenFilter.Position | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LookaheadTokenFilter.Position Holds all state for a single position; subclass this to record other state at each position. Inheritance System.Object LookaheadTokenFilter.Position Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class Position : RollingBuffer.IResettable Properties | Improve this Doc View Source EndOffset Declaration public int EndOffset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source InputTokens Declaration public IList<AttributeSource.State> InputTokens { get; } Property Value Type Description IList < AttributeSource.State > | Improve this Doc View Source NextRead Declaration public int NextRead { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public int StartOffset { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(AttributeSource.State) Declaration public virtual void Add(AttributeSource.State state) Parameters Type Name Description AttributeSource.State state | Improve this Doc View Source NextState() Declaration public virtual AttributeSource.State NextState() Returns Type Description AttributeSource.State | Improve this Doc View Source Reset() Declaration public void Reset()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.LookaheadTokenFilter-1.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.LookaheadTokenFilter-1.html",
    "title": "Class LookaheadTokenFilter<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LookaheadTokenFilter<T> An abstract to make it easier to build graph token filters requiring some lookahead. This class handles the details of buffering up tokens, recording them by position, restoring them, providing access to them, etc. Inheritance System.Object LookaheadTokenFilter LookaheadTokenFilter<T> MockGraphTokenFilter MockRandomLookaheadTokenFilter Inherited Members LookaheadTokenFilter.IncrementToken() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class LookaheadTokenFilter<T> : LookaheadTokenFilter where T : LookaheadTokenFilter.Position Type Parameters Name Description T Constructors | Improve this Doc View Source LookaheadTokenFilter(TokenStream) Declaration protected LookaheadTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Fields | Improve this Doc View Source DEBUG Declaration protected static readonly bool DEBUG Field Value Type Description System.Boolean | Improve this Doc View Source m_end Declaration protected bool m_end Field Value Type Description System.Boolean | Improve this Doc View Source m_inputPos Declaration protected int m_inputPos Field Value Type Description System.Int32 | Improve this Doc View Source m_offsetAtt Declaration protected readonly IOffsetAttribute m_offsetAtt Field Value Type Description IOffsetAttribute | Improve this Doc View Source m_outputPos Declaration protected int m_outputPos Field Value Type Description System.Int32 | Improve this Doc View Source m_posIncAtt Declaration protected readonly IPositionIncrementAttribute m_posIncAtt Field Value Type Description IPositionIncrementAttribute | Improve this Doc View Source m_positions Declaration protected readonly RollingBuffer<T> m_positions Field Value Type Description RollingBuffer <T> | Improve this Doc View Source m_posLenAtt Declaration protected readonly IPositionLengthAttribute m_posLenAtt Field Value Type Description IPositionLengthAttribute Methods | Improve this Doc View Source AfterPosition() This is called when all input tokens leaving a given position have been returned. Override this and call insertToken and then set whichever token's attributes you want, if you want to inject a token starting from this position. Declaration protected virtual void AfterPosition() | Improve this Doc View Source InsertToken() Call this only from within AfterPosition() , to insert a new token. After calling this you should set any necessary token you need. Declaration protected virtual void InsertToken() | Improve this Doc View Source NewPosition() Declaration protected abstract T NewPosition() Returns Type Description T | Improve this Doc View Source NextToken() Call this when you are done looking ahead; it will set the next token to return. Return the boolean back to the caller. Declaration protected virtual bool NextToken() Returns Type Description System.Boolean | Improve this Doc View Source PeekToken() Returns true if there is a new token. Declaration protected virtual bool PeekToken() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override void Reset()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockAnalyzer.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockAnalyzer.html",
    "title": "Class MockAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockAnalyzer Analyzer for testing. This analyzer is a replacement for Whitespace/Simple/KeywordAnalyzers for unit tests. If you are testing a custom component such as a queryparser or analyzer-wrapper that consumes analysis streams, its a great idea to test it with this analyzer instead. MockAnalyzer has the following behavior: By default, the assertions in MockTokenizer are turned on for extra checks that the consumer is consuming properly. These checks can be disabled with EnableChecks . Payload data is randomly injected into the stream for more thorough testing of payloads. Inheritance System.Object MockAnalyzer Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockAnalyzer : Analyzer Constructors | Improve this Doc View Source MockAnalyzer(Random) Create a Whitespace-lowercasing analyzer with no stopwords removal. Calls MockAnalyzer(random, MockTokenizer.WHITESPACE, true, MockTokenFilter.EMPTY_STOPSET, false) . Declaration public MockAnalyzer(Random random) Parameters Type Name Description Random random | Improve this Doc View Source MockAnalyzer(Random, CharacterRunAutomaton, Boolean) Calls MockAnalyzer(random, runAutomaton, lowerCase, MockTokenFilter.EMPTY_STOPSET, false) . Declaration public MockAnalyzer(Random random, CharacterRunAutomaton runAutomaton, bool lowerCase) Parameters Type Name Description Random random CharacterRunAutomaton runAutomaton System.Boolean lowerCase | Improve this Doc View Source MockAnalyzer(Random, CharacterRunAutomaton, Boolean, CharacterRunAutomaton) Creates a new MockAnalyzer . Declaration public MockAnalyzer(Random random, CharacterRunAutomaton runAutomaton, bool lowerCase, CharacterRunAutomaton filter) Parameters Type Name Description Random random Random for payloads behavior CharacterRunAutomaton runAutomaton DFA describing how tokenization should happen (e.g. [a-zA-Z]+) System.Boolean lowerCase true if the tokenizer should lowercase terms CharacterRunAutomaton filter DFA describing how terms should be filtered (set of stopwords, etc) Properties | Improve this Doc View Source EnableChecks Toggle consumer workflow checking: if your test consumes tokenstreams normally you should leave this enabled. Declaration public bool EnableChecks { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxTokenLength Toggle maxTokenLength for MockTokenizer . Declaration public int MaxTokenLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TokenStreamComponents | Improve this Doc View Source GetOffsetGap(String) Get the offset gap between tokens in fields if several fields with the same name were added. Declaration public override int GetOffsetGap(string fieldName) Parameters Type Name Description System.String fieldName Currently not used, the same offset gap is returned for each field. Returns Type Description System.Int32 | Improve this Doc View Source GetPositionIncrementGap(String) Declaration public override int GetPositionIncrementGap(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Int32 | Improve this Doc View Source SetOffsetGap(Int32) Sets an offset gap which will then be added to the offset when several fields with the same name are indexed Declaration public void SetOffsetGap(int offsetGap) Parameters Type Name Description System.Int32 offsetGap | Improve this Doc View Source SetPositionIncrementGap(Int32) Declaration public void SetPositionIncrementGap(int positionIncrementGap) Parameters Type Name Description System.Int32 positionIncrementGap See Also MockTokenizer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockBytesAnalyzer.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockBytesAnalyzer.html",
    "title": "Class MockBytesAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockBytesAnalyzer for testing that encodes terms as UTF-16 bytes. Inheritance System.Object MockBytesAnalyzer Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class MockBytesAnalyzer : Analyzer 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 TextReader reader Returns Type Description TokenStreamComponents"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockBytesAttributeFactory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockBytesAttributeFactory.html",
    "title": "Class MockBytesAttributeFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockBytesAttributeFactory that implements with MockUTF16TermAttributeImpl . Inheritance System.Object MockBytesAttributeFactory Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class MockBytesAttributeFactory : AttributeSource.AttributeFactory Methods | Improve this Doc View Source CreateAttributeInstance<T>() Declaration public override Attribute CreateAttributeInstance<T>() Returns Type Description Attribute Type Parameters Name Description T"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockCharFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockCharFilter.html",
    "title": "Class MockCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockCharFilter The purpose of this charfilter is to send offsets out of bounds if the analyzer doesn't use or does incorrect offset math. Inheritance System.Object MockCharFilter Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class MockCharFilter : CharFilter Constructors | Improve this Doc View Source MockCharFilter(TextReader) Declaration public MockCharFilter(TextReader in) Parameters Type Name Description TextReader in | Improve this Doc View Source MockCharFilter(TextReader, Int32) Declaration public MockCharFilter(TextReader in, int remainder) Parameters Type Name Description TextReader in System.Int32 remainder Methods | Improve this Doc View Source AddOffCorrectMap(Int32, Int32) Declaration protected virtual void AddOffCorrectMap(int off, int cumulativeDiff) Parameters Type Name Description System.Int32 off System.Int32 cumulativeDiff | Improve this Doc View Source Correct(Int32) Declaration protected override int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 | 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"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockFixedLengthPayloadFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockFixedLengthPayloadFilter.html",
    "title": "Class MockFixedLengthPayloadFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockFixedLengthPayloadFilter that adds random fixed-length payloads. Inheritance System.Object MockFixedLengthPayloadFilter Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockFixedLengthPayloadFilter : TokenFilter Constructors | Improve this Doc View Source MockFixedLengthPayloadFilter(Random, TokenStream, Int32) Declaration public MockFixedLengthPayloadFilter(Random random, TokenStream in, int length) Parameters Type Name Description Random random TokenStream in System.Int32 length Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockGraphTokenFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockGraphTokenFilter.html",
    "title": "Class MockGraphTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockGraphTokenFilter Randomly inserts overlapped (posInc=0) tokens with posLength sometimes > 1. The chain must have an . Inheritance System.Object LookaheadTokenFilter LookaheadTokenFilter < LookaheadTokenFilter.Position > MockGraphTokenFilter Inherited Members LookaheadTokenFilter<LookaheadTokenFilter.Position>.DEBUG LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_posIncAtt LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_posLenAtt LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_offsetAtt LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_inputPos LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_outputPos LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_end LookaheadTokenFilter<LookaheadTokenFilter.Position>.InsertToken() LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_positions LookaheadTokenFilter<LookaheadTokenFilter.Position>.PeekToken() LookaheadTokenFilter<LookaheadTokenFilter.Position>.NextToken() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockGraphTokenFilter : LookaheadTokenFilter<LookaheadTokenFilter.Position> Constructors | Improve this Doc View Source MockGraphTokenFilter(Random, TokenStream) Declaration public MockGraphTokenFilter(Random random, TokenStream input) Parameters Type Name Description Random random TokenStream input Methods | Improve this Doc View Source AfterPosition() Declaration protected override void AfterPosition() Overrides Lucene.Net.Analysis.LookaheadTokenFilter<Lucene.Net.Analysis.LookaheadTokenFilter.Position>.AfterPosition() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides LookaheadTokenFilter.IncrementToken() | Improve this Doc View Source NewPosition() Declaration protected override LookaheadTokenFilter.Position NewPosition() Returns Type Description LookaheadTokenFilter.Position Overrides Lucene.Net.Analysis.LookaheadTokenFilter<Lucene.Net.Analysis.LookaheadTokenFilter.Position>.NewPosition() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.LookaheadTokenFilter<Lucene.Net.Analysis.LookaheadTokenFilter.Position>.Reset()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockHoleInjectingTokenFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockHoleInjectingTokenFilter.html",
    "title": "Class MockHoleInjectingTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockHoleInjectingTokenFilter Randomly injects holes (similar to what a stopfilter would do) Inheritance System.Object MockHoleInjectingTokenFilter Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockHoleInjectingTokenFilter : TokenFilter Constructors | Improve this Doc View Source MockHoleInjectingTokenFilter(Random, TokenStream) Declaration public MockHoleInjectingTokenFilter(Random random, TokenStream in) Parameters Type Name Description Random random TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override void Reset()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockPayloadAnalyzer.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockPayloadAnalyzer.html",
    "title": "Class MockPayloadAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockPayloadAnalyzer Wraps a whitespace tokenizer with a filter that sets the first token, and odd tokens to posinc=1, and all others to 0, encoding the position as pos: XXX in the payload. Inheritance System.Object MockPayloadAnalyzer Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockPayloadAnalyzer : Analyzer 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 TextReader reader Returns Type Description TokenStreamComponents"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockRandomLookaheadTokenFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockRandomLookaheadTokenFilter.html",
    "title": "Class MockRandomLookaheadTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockRandomLookaheadTokenFilter Uses LookaheadTokenFilter to randomly peek at future tokens. Inheritance System.Object LookaheadTokenFilter LookaheadTokenFilter < LookaheadTokenFilter.Position > MockRandomLookaheadTokenFilter Inherited Members LookaheadTokenFilter<LookaheadTokenFilter.Position>.DEBUG LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_posIncAtt LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_posLenAtt LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_offsetAtt LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_inputPos LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_outputPos LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_end LookaheadTokenFilter<LookaheadTokenFilter.Position>.InsertToken() LookaheadTokenFilter<LookaheadTokenFilter.Position>.m_positions LookaheadTokenFilter<LookaheadTokenFilter.Position>.PeekToken() LookaheadTokenFilter<LookaheadTokenFilter.Position>.NextToken() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockRandomLookaheadTokenFilter : LookaheadTokenFilter<LookaheadTokenFilter.Position> Constructors | Improve this Doc View Source MockRandomLookaheadTokenFilter(Random, TokenStream) Declaration public MockRandomLookaheadTokenFilter(Random random, TokenStream in) Parameters Type Name Description Random random TokenStream in Methods | Improve this Doc View Source AfterPosition() Declaration protected override void AfterPosition() Overrides Lucene.Net.Analysis.LookaheadTokenFilter<Lucene.Net.Analysis.LookaheadTokenFilter.Position>.AfterPosition() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides LookaheadTokenFilter.IncrementToken() | Improve this Doc View Source NewPosition() Declaration protected override LookaheadTokenFilter.Position NewPosition() Returns Type Description LookaheadTokenFilter.Position Overrides Lucene.Net.Analysis.LookaheadTokenFilter<Lucene.Net.Analysis.LookaheadTokenFilter.Position>.NewPosition() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.LookaheadTokenFilter<Lucene.Net.Analysis.LookaheadTokenFilter.Position>.Reset()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockReaderWrapper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockReaderWrapper.html",
    "title": "Class MockReaderWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockReaderWrapper Wraps a , and can throw random or fixed exceptions, and spoon feed read chars. Inheritance System.Object MockReaderWrapper Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class MockReaderWrapper : TextReader Constructors | Improve this Doc View Source MockReaderWrapper(Random, TextReader) Declaration public MockReaderWrapper(Random random, TextReader input) Parameters Type Name Description Random random TextReader input Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source IsMyEvilException(Exception) Declaration public static bool IsMyEvilException(Exception t) Parameters Type Name Description Exception t Returns Type Description System.Boolean | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 | 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 | Improve this Doc View Source ThrowExcAfterChar(Int32) Throw an exception after reading this many chars. Declaration public virtual void ThrowExcAfterChar(int charUpto) Parameters Type Name Description System.Int32 charUpto | Improve this Doc View Source ThrowExcNext() Declaration public virtual void ThrowExcNext()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockTokenFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockTokenFilter.html",
    "title": "Class MockTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockTokenFilter A for testing that removes terms accepted by a DFA. Union a list of singletons to act like a StopFilter . Use the complement to act like a KeepWordFilter . Use a regex like .{12,} to act like a LengthFilter . Inheritance System.Object MockTokenFilter Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockTokenFilter : TokenFilter Constructors | Improve this Doc View Source MockTokenFilter(TokenStream, CharacterRunAutomaton) Create a new MockTokenFilter . Declaration public MockTokenFilter(TokenStream input, CharacterRunAutomaton filter) Parameters Type Name Description TokenStream input to filter CharacterRunAutomaton filter DFA representing the terms that should be removed. Fields | Improve this Doc View Source EMPTY_STOPSET Empty set of stopwords Declaration public static readonly CharacterRunAutomaton EMPTY_STOPSET Field Value Type Description CharacterRunAutomaton | Improve this Doc View Source ENGLISH_STOPSET Set of common english stopwords Declaration public static readonly CharacterRunAutomaton ENGLISH_STOPSET Field Value Type Description CharacterRunAutomaton Methods | Improve this Doc View Source End() Declaration public override void End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override void Reset()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockTokenizer.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockTokenizer.html",
    "title": "Class MockTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockTokenizer Tokenizer for testing. This tokenizer is a replacement for WHITESPACE , SIMPLE , and KEYWORD tokenizers. If you are writing a component such as a , its a great idea to test it wrapping this tokenizer instead for extra checks. This tokenizer has the following behavior: An internal state-machine is used for checking consumer consistency. These checks can be disabled with EnableChecks . For convenience, optionally lowercases terms that it outputs. Inheritance System.Object MockTokenizer Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class MockTokenizer : Tokenizer Constructors | Improve this Doc View Source MockTokenizer(AttributeFactory, TextReader) Calls MockTokenizer(AttributeFactory, TextReader, WHITESPACE, true) Declaration public MockTokenizer(AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeFactory factory TextReader input | Improve this Doc View Source MockTokenizer(AttributeFactory, TextReader, CharacterRunAutomaton, Boolean) Declaration public MockTokenizer(AttributeFactory factory, TextReader input, CharacterRunAutomaton runAutomaton, bool lowerCase) Parameters Type Name Description AttributeFactory factory TextReader input CharacterRunAutomaton runAutomaton System.Boolean lowerCase | Improve this Doc View Source MockTokenizer(AttributeFactory, TextReader, CharacterRunAutomaton, Boolean, Int32) Declaration public MockTokenizer(AttributeFactory factory, TextReader input, CharacterRunAutomaton runAutomaton, bool lowerCase, int maxTokenLength) Parameters Type Name Description AttributeFactory factory TextReader input CharacterRunAutomaton runAutomaton System.Boolean lowerCase System.Int32 maxTokenLength | Improve this Doc View Source MockTokenizer(TextReader) Calls MockTokenizer(TextReader, WHITESPACE, true) . Declaration public MockTokenizer(TextReader input) Parameters Type Name Description TextReader input | Improve this Doc View Source MockTokenizer(TextReader, CharacterRunAutomaton, Boolean) Declaration public MockTokenizer(TextReader input, CharacterRunAutomaton runAutomaton, bool lowerCase) Parameters Type Name Description TextReader input CharacterRunAutomaton runAutomaton System.Boolean lowerCase | Improve this Doc View Source MockTokenizer(TextReader, CharacterRunAutomaton, Boolean, Int32) Declaration public MockTokenizer(TextReader input, CharacterRunAutomaton runAutomaton, bool lowerCase, int maxTokenLength) Parameters Type Name Description TextReader input CharacterRunAutomaton runAutomaton System.Boolean lowerCase System.Int32 maxTokenLength Fields | Improve this Doc View Source DEFAULT_MAX_TOKEN_LENGTH Declaration public static readonly int DEFAULT_MAX_TOKEN_LENGTH Field Value Type Description System.Int32 | Improve this Doc View Source KEYWORD Acts Similar to KeywordTokenizer . TODO: Keyword returns an \"empty\" token for an empty reader... Declaration public static readonly CharacterRunAutomaton KEYWORD Field Value Type Description CharacterRunAutomaton | Improve this Doc View Source SIMPLE Acts like LetterTokenizer . Declaration public static readonly CharacterRunAutomaton SIMPLE Field Value Type Description CharacterRunAutomaton | Improve this Doc View Source WHITESPACE Acts Similar to WhitespaceTokenizer . Declaration public static readonly CharacterRunAutomaton WHITESPACE Field Value Type Description CharacterRunAutomaton Properties | Improve this Doc View Source EnableChecks Toggle consumer workflow checking: if your test consumes tokenstreams normally you should leave this enabled. Declaration public virtual bool EnableChecks { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source End() Declaration public override void End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean | Improve this Doc View Source IsTokenChar(Int32) Declaration protected virtual bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean | Improve this Doc View Source Normalize(Int32) Declaration protected virtual int Normalize(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Int32 | Improve this Doc View Source ReadChar() Declaration protected virtual int ReadChar() Returns Type Description System.Int32 | Improve this Doc View Source ReadCodePoint() Declaration protected virtual int ReadCodePoint() Returns Type Description System.Int32 | Improve this Doc View Source Reset() Declaration public override void Reset()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockUTF16TermAttributeImpl.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockUTF16TermAttributeImpl.html",
    "title": "Class MockUTF16TermAttributeImpl | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockUTF16TermAttributeImpl Extension of that encodes the term text as UTF-16 bytes instead of as UTF-8 bytes. Inheritance System.Object MockUTF16TermAttributeImpl Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class MockUTF16TermAttributeImpl : CharTermAttribute Methods | Improve this Doc View Source FillBytesRef() Declaration public override void FillBytesRef()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockVariableLengthPayloadFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.MockVariableLengthPayloadFilter.html",
    "title": "Class MockVariableLengthPayloadFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockVariableLengthPayloadFilter that adds random variable-length payloads. Inheritance System.Object MockVariableLengthPayloadFilter Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockVariableLengthPayloadFilter : TokenFilter Constructors | Improve this Doc View Source MockVariableLengthPayloadFilter(Random, TokenStream) Declaration public MockVariableLengthPayloadFilter(Random random, TokenStream in) Parameters Type Name Description Random random TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.TokenStreamToDot.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.TokenStreamToDot.html",
    "title": "Class TokenStreamToDot | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenStreamToDot Consumes a and outputs the dot (graphviz) string (graph). Inheritance System.Object TokenStreamToDot Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public class TokenStreamToDot : object Constructors | Improve this Doc View Source TokenStreamToDot(String, TokenStream, TextWriter) If inputText is non-null, and the has offsets, we include the surface form in each arc's label. Declaration public TokenStreamToDot(string inputText, TokenStream in, TextWriter out) Parameters Type Name Description System.String inputText TokenStream in TextWriter out Fields | Improve this Doc View Source m_out Declaration protected readonly TextWriter m_out Field Value Type Description TextWriter Methods | Improve this Doc View Source ToDot() Declaration public virtual void ToDot() | Improve this Doc View Source WriteArc(Int32, Int32, String, String) Declaration protected virtual void WriteArc(int fromNode, int toNode, string label, string style) Parameters Type Name Description System.Int32 fromNode System.Int32 toNode System.String label System.String style | Improve this Doc View Source WriteHeader() Override to customize. Declaration protected virtual void WriteHeader() | Improve this Doc View Source WriteNode(Int32, String) Declaration protected virtual void WriteNode(int name, string label) Parameters Type Name Description System.Int32 name System.String label | Improve this Doc View Source WriteTrailer() Override to customize. Declaration protected virtual void WriteTrailer()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.ValidatingTokenFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.ValidatingTokenFilter.html",
    "title": "Class ValidatingTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ValidatingTokenFilter A that checks consistency of the tokens (eg offsets are consistent with one another). Inheritance System.Object ValidatingTokenFilter Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class ValidatingTokenFilter : TokenFilter Constructors | Improve this Doc View Source ValidatingTokenFilter(TokenStream, String, Boolean) The name is used to identify this stage when throwing exceptions (useful if you have more than one instance in your chain). Declaration public ValidatingTokenFilter(TokenStream in, string name, bool offsetsAreCorrect) Parameters Type Name Description TokenStream in System.String name System.Boolean offsetsAreCorrect Methods | Improve this Doc View Source End() Declaration public override void End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override void Reset()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.VocabularyAssert.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Analysis.VocabularyAssert.html",
    "title": "Class VocabularyAssert | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VocabularyAssert Utility class for doing vocabulary-based stemming tests. Inheritance System.Object VocabularyAssert Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public static class VocabularyAssert : object Methods | Improve this Doc View Source AssertVocabulary(Analyzer, Stream) Run a vocabulary test against one file: tab separated. Declaration public static void AssertVocabulary(Analyzer a, Stream vocOut) Parameters Type Name Description Analyzer a Stream vocOut | Improve this Doc View Source AssertVocabulary(Analyzer, Stream, Stream) Run a vocabulary test against two data files. Declaration public static void AssertVocabulary(Analyzer a, Stream voc, Stream out) Parameters Type Name Description Analyzer a Stream voc Stream out | Improve this Doc View Source AssertVocabulary(Analyzer, Stream, String) Run a vocabulary test against a tab-separated data file inside a zip file. Declaration public static void AssertVocabulary(Analyzer a, Stream zipFile, string vocOut) Parameters Type Name Description Analyzer a Stream zipFile System.String vocOut | Improve this Doc View Source AssertVocabulary(Analyzer, Stream, String, String) Run a vocabulary test against two data files inside a zip file. Declaration public static void AssertVocabulary(Analyzer a, Stream zipFile, string voc, string out) Parameters Type Name Description Analyzer a Stream zipFile System.String voc System.String out"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingCodec.html",
    "title": "Class AssertingCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingCodec Acts like but with additional asserts. Inheritance System.Object AssertingCodec Namespace : Lucene.Net.Codecs.Asserting Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class AssertingCodec : FilterCodec Constructors | Improve this Doc View Source AssertingCodec() Declaration public AssertingCodec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingDocValuesFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingDocValuesFormat.html",
    "title": "Class AssertingDocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingDocValuesFormat Just like but with additional asserts. Inheritance System.Object AssertingDocValuesFormat Namespace : Lucene.Net.Codecs.Asserting Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source AssertingDocValuesFormat() Declaration public AssertingDocValuesFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingNormsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingNormsFormat.html",
    "title": "Class AssertingNormsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingNormsFormat Just like but with additional asserts. Inheritance System.Object AssertingNormsFormat Namespace : Lucene.Net.Codecs.Asserting Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingNormsFormat : NormsFormat Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingPostingsFormat.html",
    "title": "Class AssertingPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingPostingsFormat Just like but with additional asserts. Inheritance System.Object AssertingPostingsFormat Namespace : Lucene.Net.Codecs.Asserting Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class AssertingPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source AssertingPostingsFormat() Declaration public AssertingPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingStoredFieldsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingStoredFieldsFormat.html",
    "title": "Class AssertingStoredFieldsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingStoredFieldsFormat Just like but with additional asserts. Inheritance System.Object AssertingStoredFieldsFormat Namespace : Lucene.Net.Codecs.Asserting Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingStoredFieldsFormat : StoredFieldsFormat Methods | Improve this Doc View Source FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Returns Type Description StoredFieldsReader | Improve this Doc View Source FieldsWriter(Directory, SegmentInfo, IOContext) Declaration public override StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Returns Type Description StoredFieldsWriter"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingTermVectorsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.AssertingTermVectorsFormat.html",
    "title": "Class AssertingTermVectorsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingTermVectorsFormat Just like but with additional asserts. Inheritance System.Object AssertingTermVectorsFormat Namespace : Lucene.Net.Codecs.Asserting Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingTermVectorsFormat : TermVectorsFormat Methods | Improve this Doc View Source VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos IOContext context Returns Type Description TermVectorsReader | Improve this Doc View Source VectorsWriter(Directory, SegmentInfo, IOContext) Declaration public override TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo IOContext context Returns Type Description TermVectorsWriter"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Asserting.html",
    "title": "Namespace Lucene.Net.Codecs.Asserting | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Asserting <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codec for testing that asserts various contracts of the codec apis. Classes AssertingCodec Acts like but with additional asserts. AssertingDocValuesFormat Just like but with additional asserts. AssertingNormsFormat Just like but with additional asserts. AssertingPostingsFormat Just like but with additional asserts. AssertingStoredFieldsFormat Just like but with additional asserts. AssertingTermVectorsFormat Just like but with additional asserts."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Bloom.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Bloom.html",
    "title": "Namespace Lucene.Net.Codecs.Bloom | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Bloom <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codec PostingsFormat for fast access to low-frequency terms such as primary key fields. Classes TestBloomFilteredLucene41Postings A class used for testing BloomFilteringPostingsFormat with a concrete delegate (Lucene41). Creates a Bloom filter on ALL fields and with tiny amounts of memory reserved for the filter. DO NOT USE IN A PRODUCTION APPLICATION! This is not a realistic application of Bloom Filters as they ordinarily are larger and operate on only primary key type fields."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Bloom.TestBloomFilteredLucene41Postings.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Bloom.TestBloomFilteredLucene41Postings.html",
    "title": "Class TestBloomFilteredLucene41Postings | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TestBloomFilteredLucene41Postings A class used for testing BloomFilteringPostingsFormat with a concrete delegate (Lucene41). Creates a Bloom filter on ALL fields and with tiny amounts of memory reserved for the filter. DO NOT USE IN A PRODUCTION APPLICATION! This is not a realistic application of Bloom Filters as they ordinarily are larger and operate on only primary key type fields. Inheritance System.Object TestBloomFilteredLucene41Postings Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.TestFramework.dll Syntax public class TestBloomFilteredLucene41Postings : PostingsFormat Constructors | Improve this Doc View Source TestBloomFilteredLucene41Postings() Declaration public TestBloomFilteredLucene41Postings() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.CheapBastard.CheapBastardCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.CheapBastard.CheapBastardCodec.html",
    "title": "Class CheapBastardCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheapBastardCodec Codec that tries to use as little ram as possible because he spent all his money on beer Inheritance System.Object CheapBastardCodec Namespace : Lucene.Net.Codecs.CheapBastard Assembly : Lucene.Net.TestFramework.dll Syntax public class CheapBastardCodec : FilterCodec Constructors | Improve this Doc View Source CheapBastardCodec() Declaration public CheapBastardCodec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.CheapBastard.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.CheapBastard.html",
    "title": "Namespace Lucene.Net.Codecs.CheapBastard | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.CheapBastard <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codec that unreasonably tries to use as little RAM as possible. For testing, benchmarking, API purposes only! Classes CheapBastardCodec Codec that tries to use as little ram as possible because he spent all his money on beer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.CompressingCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.CompressingCodec.html",
    "title": "Class CompressingCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingCodec A codec that uses for its stored fields and delegates to for everything else. Inheritance System.Object CompressingCodec DummyCompressingCodec FastCompressingCodec FastDecompressionCompressingCodec HighCompressionCompressingCodec Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class CompressingCodec : FilterCodec Constructors | Improve this Doc View Source CompressingCodec(CompressionMode, Int32) Creates a compressing codec with an empty segment suffix. Declaration public CompressingCodec(CompressionMode compressionMode, int chunkSize) Parameters Type Name Description CompressionMode compressionMode System.Int32 chunkSize | Improve this Doc View Source CompressingCodec(String, CompressionMode, Int32) Creates a compressing codec with a given segmentSuffix . Declaration public CompressingCodec(string segmentSuffix, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description System.String segmentSuffix CompressionMode compressionMode System.Int32 chunkSize Properties | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Methods | Improve this Doc View Source RandomInstance(Random) Creates a random CompressingCodec that is using an empty segment suffix. Declaration public static CompressingCodec RandomInstance(Random random) Parameters Type Name Description Random random Returns Type Description CompressingCodec | Improve this Doc View Source RandomInstance(Random, Boolean) Creates a random CompressingCodec that is using a segment suffix. Declaration public static CompressingCodec RandomInstance(Random random, bool withSegmentSuffix) Parameters Type Name Description Random random System.Boolean withSegmentSuffix Returns Type Description CompressingCodec | Improve this Doc View Source RandomInstance(Random, Int32, Boolean) Create a random instance. Declaration public static CompressingCodec RandomInstance(Random random, int chunkSize, bool withSegmentSuffix) Parameters Type Name Description Random random System.Int32 chunkSize System.Boolean withSegmentSuffix Returns Type Description CompressingCodec | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.Dummy.DummyCompressingCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.Dummy.DummyCompressingCodec.html",
    "title": "Class DummyCompressingCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DummyCompressingCodec CompressingCodec that does not compress data, useful for testing. Inheritance System.Object CompressingCodec DummyCompressingCodec Inherited Members CompressingCodec.RandomInstance(Random, Int32, Boolean) CompressingCodec.RandomInstance(Random) CompressingCodec.RandomInstance(Random, Boolean) CompressingCodec.StoredFieldsFormat CompressingCodec.TermVectorsFormat CompressingCodec.ToString() Namespace : Lucene.Net.Codecs.Compressing.Dummy Assembly : Lucene.Net.TestFramework.dll Syntax public class DummyCompressingCodec : CompressingCodec Constructors | Improve this Doc View Source DummyCompressingCodec() Default constructor. Declaration public DummyCompressingCodec() | Improve this Doc View Source DummyCompressingCodec(Int32, Boolean) Constructor that allows to configure the chunkSize . Declaration public DummyCompressingCodec(int chunkSize, bool withSegmentSuffix) Parameters Type Name Description System.Int32 chunkSize System.Boolean withSegmentSuffix Fields | Improve this Doc View Source DUMMY Declaration public static readonly CompressionMode DUMMY Field Value Type Description CompressionMode"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.Dummy.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.Dummy.html",
    "title": "Namespace Lucene.Net.Codecs.Compressing.Dummy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Compressing.Dummy <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Dummy CompressingCodec implementation used for testing. Classes DummyCompressingCodec CompressingCodec that does not compress data, useful for testing."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.FastCompressingCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.FastCompressingCodec.html",
    "title": "Class FastCompressingCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FastCompressingCodec CompressionCodec that uses . Inheritance System.Object CompressingCodec FastCompressingCodec Inherited Members CompressingCodec.RandomInstance(Random, Int32, Boolean) CompressingCodec.RandomInstance(Random) CompressingCodec.RandomInstance(Random, Boolean) CompressingCodec.StoredFieldsFormat CompressingCodec.TermVectorsFormat CompressingCodec.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.TestFramework.dll Syntax public class FastCompressingCodec : CompressingCodec Constructors | Improve this Doc View Source FastCompressingCodec() Default constructor. Declaration public FastCompressingCodec() | Improve this Doc View Source FastCompressingCodec(Int32, Boolean) Constructor that allows to configure the chunk size. Declaration public FastCompressingCodec(int chunkSize, bool withSegmentSuffix) Parameters Type Name Description System.Int32 chunkSize System.Boolean withSegmentSuffix Properties | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.FastDecompressionCompressingCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.FastDecompressionCompressingCodec.html",
    "title": "Class FastDecompressionCompressingCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FastDecompressionCompressingCodec CompressingCodec that uses . Inheritance System.Object CompressingCodec FastDecompressionCompressingCodec Inherited Members CompressingCodec.RandomInstance(Random, Int32, Boolean) CompressingCodec.RandomInstance(Random) CompressingCodec.RandomInstance(Random, Boolean) CompressingCodec.StoredFieldsFormat CompressingCodec.TermVectorsFormat CompressingCodec.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.TestFramework.dll Syntax public class FastDecompressionCompressingCodec : CompressingCodec Constructors | Improve this Doc View Source FastDecompressionCompressingCodec() Default constructor. Declaration public FastDecompressionCompressingCodec() | Improve this Doc View Source FastDecompressionCompressingCodec(Int32, Boolean) Constructor that allows to configure the chunkSize . Declaration public FastDecompressionCompressingCodec(int chunkSize, bool withSegmentSuffix) Parameters Type Name Description System.Int32 chunkSize System.Boolean withSegmentSuffix Properties | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.HighCompressionCompressingCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.HighCompressionCompressingCodec.html",
    "title": "Class HighCompressionCompressingCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HighCompressionCompressingCodec CompressionCodec that uses . Inheritance System.Object CompressingCodec HighCompressionCompressingCodec Inherited Members CompressingCodec.RandomInstance(Random, Int32, Boolean) CompressingCodec.RandomInstance(Random) CompressingCodec.RandomInstance(Random, Boolean) CompressingCodec.StoredFieldsFormat CompressingCodec.TermVectorsFormat CompressingCodec.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.TestFramework.dll Syntax public class HighCompressionCompressingCodec : CompressingCodec Constructors | Improve this Doc View Source HighCompressionCompressingCodec() Default constructor. Declaration public HighCompressionCompressingCodec() | Improve this Doc View Source HighCompressionCompressingCodec(Int32, Boolean) Constructor that allows to configure the chunkSize . Declaration public HighCompressionCompressingCodec(int chunkSize, bool withSegmentSuffix) Parameters Type Name Description System.Int32 chunkSize System.Boolean withSegmentSuffix Properties | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Compressing.html",
    "title": "Namespace Lucene.Net.Codecs.Compressing | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Compressing <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> StoredFieldsFormat that allows cross-document and cross-field compression of stored fields. Classes CompressingCodec A codec that uses for its stored fields and delegates to for everything else. FastCompressingCodec CompressionCodec that uses . FastDecompressionCompressingCodec CompressingCodec that uses . HighCompressionCompressingCodec CompressionCodec that uses ."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.html",
    "title": "Namespace Lucene.Net.Codecs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codecs API: API for customization of the encoding and structure of the index. The Codec API allows you to customise the way the following pieces of index information are stored: * Postings lists - see PostingsFormat * DocValues - see DocValuesFormat * Stored fields - see StoredFieldsFormat * Term vectors - see TermVectorsFormat * FieldInfos - see FieldInfosFormat * SegmentInfo - see SegmentInfoFormat * Norms - see NormsFormat * Live documents - see LiveDocsFormat For some concrete implementations beyond Lucene's official index format, see the Codecs module . Codecs are identified by name through the Java Service Provider Interface. To create your own codec, extend Codec and pass the new codec's name to the super() constructor: public class MyCodec extends Codec { public MyCodec() { super(\"MyCodecName\"); } ... } You will need to register the Codec class so that the {@link java.util.ServiceLoader ServiceLoader} can find it, by including a META-INF/services/org.apache.lucene.codecs.Codec file on your classpath that contains the package-qualified name of your codec. If you just want to customise the PostingsFormat , or use different postings formats for different fields, then you can register your custom postings format in the same way (in META-INF/services/org.apache.lucene.codecs.PostingsFormat), and then extend the default Lucene46Codec and override #getPostingsFormatForField(String) to return your custom postings format. Similarly, if you just want to customise the DocValuesFormat per-field, have a look at #getDocValuesFormatForField(String) . Classes MissingOrdRemapper A utility class to write missing values for SORTED as if they were the empty string (to simulate pre-Lucene4.5 dv behavior for testing old codecs). TestCodecFactory LUCENENET specific class used to add the codecs from the test framework. TestDocValuesFormatFactory LUCENENET specific class used to add the DocValuesFormats from the test framework. TestPostingsFormatFactory LUCENENET specific class used to add the PostingsFormats from the test framework."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene3x.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene3x.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene3x | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene3x <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codec to support Lucene 3.x indexes (readonly) Classes PreFlexRWCodec Writes 3.x-like indexes (not perfect emulation yet) for testing only! This is a Lucene.NET EXPERIMENTAL API, use at your own risk PreFlexRWSkipListWriter PreFlexRW skiplist implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene3x.PreFlexRWCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene3x.PreFlexRWCodec.html",
    "title": "Class PreFlexRWCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PreFlexRWCodec Writes 3.x-like indexes (not perfect emulation yet) for testing only! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PreFlexRWCodec Namespace : Lucene.Net.Codecs.Lucene3x Assembly : Lucene.Net.TestFramework.dll Syntax public class PreFlexRWCodec : Lucene3xCodec Properties | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene3x.PreFlexRWSkipListWriter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene3x.PreFlexRWSkipListWriter.html",
    "title": "Class PreFlexRWSkipListWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PreFlexRWSkipListWriter PreFlexRW skiplist implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PreFlexRWSkipListWriter Namespace : Lucene.Net.Codecs.Lucene3x Assembly : Lucene.Net.TestFramework.dll Syntax public class PreFlexRWSkipListWriter : MultiLevelSkipListWriter Constructors | Improve this Doc View Source PreFlexRWSkipListWriter(Int32, Int32, Int32, IndexOutput, IndexOutput) Declaration public PreFlexRWSkipListWriter(int skipInterval, int numberOfSkipLevels, int docCount, IndexOutput freqOutput, IndexOutput proxOutput) Parameters Type Name Description System.Int32 skipInterval System.Int32 numberOfSkipLevels System.Int32 docCount IndexOutput freqOutput IndexOutput proxOutput Methods | Improve this Doc View Source ResetSkip() Declaration public override void ResetSkip() | Improve this Doc View Source SetSkipData(Int32, Boolean, Int32) Sets the values for the current skip data. Declaration public virtual void SetSkipData(int doc, bool storePayloads, int payloadLength) Parameters Type Name Description System.Int32 doc System.Boolean storePayloads System.Int32 payloadLength | Improve this Doc View Source WriteSkipData(Int32, IndexOutput) Declaration protected override void WriteSkipData(int level, IndexOutput skipBuffer) Parameters Type Name Description System.Int32 level IndexOutput skipBuffer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene40 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene40 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene 4.0 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .frq Contains the list of docs which contain each term along with frequency Positions .prx Stores position information about where a term occurs in the index Norms .nrm.cfs, .nrm.cfe Encodes length and boost factors for docs and fields Per-Document Values .dv.cfs, .dv.cfe Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene40FieldInfosWriter Lucene 4.0 FieldInfos writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40PostingsWriter Concrete class that writes the 4.0 frq/prx postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40RWCodec Read-write version of for testing. Lucene40RWDocValuesFormat Read-write version of for testing. Lucene40RWNormsFormat Read-write version of for testing. Lucene40RWPostingsFormat Read-write version of for testing. Lucene40SkipListWriter Implements the skip list writer for the 4.0 posting list format that stores positions and payloads."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40FieldInfosWriter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40FieldInfosWriter.html",
    "title": "Class Lucene40FieldInfosWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40FieldInfosWriter Lucene 4.0 FieldInfos writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene40FieldInfosWriter Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene40FieldInfosWriter : FieldInfosWriter Constructors | Improve this Doc View Source Lucene40FieldInfosWriter() Sole constructor. Declaration public Lucene40FieldInfosWriter() Methods | Improve this Doc View Source DocValuesByte(DocValuesType, String) 4.0-style docvalues byte Declaration public virtual byte DocValuesByte(DocValuesType type, string legacyTypeAtt) Parameters Type Name Description DocValuesType type System.String legacyTypeAtt Returns Type Description System.Byte | Improve this Doc View Source Write(Directory, String, String, FieldInfos, IOContext) Declaration public override void Write(Directory directory, string segmentName, string segmentSuffix, FieldInfos infos, IOContext context) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix FieldInfos infos IOContext context"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40PostingsWriter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40PostingsWriter.html",
    "title": "Class Lucene40PostingsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40PostingsWriter Concrete class that writes the 4.0 frq/prx postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene40PostingsWriter Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class Lucene40PostingsWriter : PostingsWriterBase Constructors | Improve this Doc View Source Lucene40PostingsWriter(SegmentWriteState) Creates a Lucene40PostingsWriter , with the Lucene.Net.Codecs.Lucene40.Lucene40PostingsWriter.DEFAULT_SKIP_INTERVAL . Declaration public Lucene40PostingsWriter(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state | Improve this Doc View Source Lucene40PostingsWriter(SegmentWriteState, Int32) Creates a Lucene40PostingsWriter , with the specified skipInterval . Declaration public Lucene40PostingsWriter(SegmentWriteState state, int skipInterval) Parameters Type Name Description SegmentWriteState state System.Int32 skipInterval Methods | Improve this Doc View Source AddPosition(Int32, BytesRef, Int32, Int32) Add a new position & payload . Declaration public override void AddPosition(int position, BytesRef payload, int startOffset, int endOffset) Parameters Type Name Description System.Int32 position BytesRef payload System.Int32 startOffset System.Int32 endOffset | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) Declaration public override void EncodeTerm(long[] empty, DataOutput out, FieldInfo fieldInfo, BlockTermState state, bool absolute) Parameters Type Name Description System.Int64 [] empty DataOutput out FieldInfo fieldInfo BlockTermState state System.Boolean absolute | Improve this Doc View Source FinishDoc() Declaration public override void FinishDoc() | Improve this Doc View Source FinishTerm(BlockTermState) Called when we are done adding docs to this term. Declaration public override void FinishTerm(BlockTermState state) Parameters Type Name Description BlockTermState state | Improve this Doc View Source Init(IndexOutput) Declaration public override void Init(IndexOutput termsOut) Parameters Type Name Description IndexOutput termsOut | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState | Improve this Doc View Source SetField(FieldInfo) Declaration public override int SetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description System.Int32 | Improve this Doc View Source StartDoc(Int32, Int32) Declaration public override void StartDoc(int docID, int termDocFreq) Parameters Type Name Description System.Int32 docID System.Int32 termDocFreq | Improve this Doc View Source StartTerm() Declaration public override void StartTerm()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWCodec.html",
    "title": "Class Lucene40RWCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40RWCodec Read-write version of for testing. Inheritance System.Object Lucene40RWCodec Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class Lucene40RWCodec : Lucene40Codec Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWDocValuesFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWDocValuesFormat.html",
    "title": "Class Lucene40RWDocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40RWDocValuesFormat Read-write version of for testing. Inheritance System.Object Lucene40RWDocValuesFormat Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene40RWDocValuesFormat : Lucene40DocValuesFormat Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWNormsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWNormsFormat.html",
    "title": "Class Lucene40RWNormsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40RWNormsFormat Read-write version of for testing. Inheritance System.Object Lucene40RWNormsFormat Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene40RWNormsFormat : Lucene40NormsFormat Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40RWPostingsFormat.html",
    "title": "Class Lucene40RWPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40RWPostingsFormat Read-write version of for testing. Inheritance System.Object Lucene40RWPostingsFormat Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene40RWPostingsFormat : Lucene40PostingsFormat Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40SkipListWriter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene40.Lucene40SkipListWriter.html",
    "title": "Class Lucene40SkipListWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40SkipListWriter Implements the skip list writer for the 4.0 posting list format that stores positions and payloads. Inheritance System.Object Lucene40SkipListWriter Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene40SkipListWriter : MultiLevelSkipListWriter Constructors | Improve this Doc View Source Lucene40SkipListWriter(Int32, Int32, Int32, IndexOutput, IndexOutput) Sole constructor. Declaration public Lucene40SkipListWriter(int skipInterval, int numberOfSkipLevels, int docCount, IndexOutput freqOutput, IndexOutput proxOutput) Parameters Type Name Description System.Int32 skipInterval System.Int32 numberOfSkipLevels System.Int32 docCount IndexOutput freqOutput IndexOutput proxOutput Methods | Improve this Doc View Source ResetSkip() Declaration public override void ResetSkip() | Improve this Doc View Source SetSkipData(Int32, Boolean, Int32, Boolean, Int32) Sets the values for the current skip data. Declaration public virtual void SetSkipData(int doc, bool storePayloads, int payloadLength, bool storeOffsets, int offsetLength) Parameters Type Name Description System.Int32 doc System.Boolean storePayloads System.Int32 payloadLength System.Boolean storeOffsets System.Int32 offsetLength | Improve this Doc View Source WriteSkipData(Int32, IndexOutput) Declaration protected override void WriteSkipData(int level, IndexOutput skipBuffer) Parameters Type Name Description System.Int32 level IndexOutput skipBuffer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene41 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene41 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene 4.1 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .doc Contains the list of docs which contain each term along with frequency Positions .pos Stores position information about where a term occurs in the index Payloads .pay Stores additional per-position metadata information such as character offsets and user payloads Norms .nrm.cfs, .nrm.cfe Encodes length and boost factors for docs and fields Per-Document Values .dv.cfs, .dv.cfe Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. In version 4.1, the format of the postings list changed to use either of FOR compression or variable-byte encoding, depending upon the frequency of the term. Terms appearing only once were changed to inline directly into the term dictionary. Stored fields are compressed by default. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene41RWCodec Read-write version of for testing."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41.Lucene41RWCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41.Lucene41RWCodec.html",
    "title": "Class Lucene41RWCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41RWCodec Read-write version of for testing. Inheritance System.Object Lucene41RWCodec Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene41RWCodec : Lucene41Codec Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41Ords.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41Ords.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene41Ords | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene41Ords <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codec for testing that supports #ord() Classes Lucene41WithOrds Customized version of that uses FixedGapTermsIndexWriter ."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41Ords.Lucene41WithOrds.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene41Ords.Lucene41WithOrds.html",
    "title": "Class Lucene41WithOrds | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41WithOrds Customized version of that uses FixedGapTermsIndexWriter . Inheritance System.Object Lucene41WithOrds Namespace : Lucene.Net.Codecs.Lucene41Ords Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class Lucene41WithOrds : PostingsFormat Constructors | Improve this Doc View Source Lucene41WithOrds() Declaration public Lucene41WithOrds() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene42 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene42 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene 4.2 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .doc Contains the list of docs which contain each term along with frequency Positions .pos Stores position information about where a term occurs in the index Payloads .pay Stores additional per-position metadata information such as character offsets and user payloads Norms .nvd, .nvm Encodes length and boost factors for docs and fields Per-Document Values .dvd, .dvm Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. In version 4.1, the format of the postings list changed to use either of FOR compression or variable-byte encoding, depending upon the frequency of the term. Terms appearing only once were changed to inline directly into the term dictionary. Stored fields are compressed by default. In version 4.2, term vectors are compressed by default. DocValues has a new multi-valued type (SortedSet), that can be used for faceting/grouping/joining on multi-valued fields. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene42FieldInfosWriter Lucene 4.2 writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene42RWCodec Read-write version of for testing. Lucene42RWDocValuesFormat Read-write version of for testing."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.Lucene42FieldInfosWriter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.Lucene42FieldInfosWriter.html",
    "title": "Class Lucene42FieldInfosWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene42FieldInfosWriter Lucene 4.2 writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene42FieldInfosWriter Namespace : Lucene.Net.Codecs.Lucene42 Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class Lucene42FieldInfosWriter : FieldInfosWriter Constructors | Improve this Doc View Source Lucene42FieldInfosWriter() Sole constructor. Declaration public Lucene42FieldInfosWriter() Methods | Improve this Doc View Source Write(Directory, String, String, FieldInfos, IOContext) Declaration public override void Write(Directory directory, string segmentName, string segmentSuffix, FieldInfos infos, IOContext context) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix FieldInfos infos IOContext context"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.Lucene42RWCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.Lucene42RWCodec.html",
    "title": "Class Lucene42RWCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene42RWCodec Read-write version of for testing. Inheritance System.Object Lucene42RWCodec Namespace : Lucene.Net.Codecs.Lucene42 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene42RWCodec : Lucene42Codec Properties | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Methods | Improve this Doc View Source GetDocValuesFormatForField(String) Declaration public override DocValuesFormat GetDocValuesFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description DocValuesFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.Lucene42RWDocValuesFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene42.Lucene42RWDocValuesFormat.html",
    "title": "Class Lucene42RWDocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene42RWDocValuesFormat Read-write version of for testing. Inheritance System.Object Lucene42RWDocValuesFormat Namespace : Lucene.Net.Codecs.Lucene42 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene42RWDocValuesFormat : Lucene42DocValuesFormat Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene45.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene45.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene45 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene45 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene 4.5 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .doc Contains the list of docs which contain each term along with frequency Positions .pos Stores position information about where a term occurs in the index Payloads .pay Stores additional per-position metadata information such as character offsets and user payloads Norms .nvd, .nvm Encodes length and boost factors for docs and fields Per-Document Values .dvd, .dvm Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. In version 4.1, the format of the postings list changed to use either of FOR compression or variable-byte encoding, depending upon the frequency of the term. Terms appearing only once were changed to inline directly into the term dictionary. Stored fields are compressed by default. In version 4.2, term vectors are compressed by default. DocValues has a new multi-valued type (SortedSet), that can be used for faceting/grouping/joining on multi-valued fields. In version 4.5, DocValues were extended to explicitly represent missing values. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene45RWCodec Read-write version of for testing."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene45.Lucene45RWCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.Lucene45.Lucene45RWCodec.html",
    "title": "Class Lucene45RWCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45RWCodec Read-write version of for testing. Inheritance System.Object Lucene45RWCodec Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.TestFramework.dll Syntax public class Lucene45RWCodec : Lucene45Codec Properties | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MissingOrdRemapper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MissingOrdRemapper.html",
    "title": "Class MissingOrdRemapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MissingOrdRemapper A utility class to write missing values for SORTED as if they were the empty string (to simulate pre-Lucene4.5 dv behavior for testing old codecs). Inheritance System.Object MissingOrdRemapper Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.TestFramework.dll Syntax public class MissingOrdRemapper : object Methods | Improve this Doc View Source InsertEmptyValue(IEnumerable<BytesRef>) Insert an empty byte[] to the front of this enumerable. Declaration public static IEnumerable<BytesRef> InsertEmptyValue(IEnumerable<BytesRef> iterable) Parameters Type Name Description IEnumerable < BytesRef > iterable Returns Type Description IEnumerable < BytesRef > | Improve this Doc View Source MapAllOrds(IEnumerable<Nullable<Int64>>) Remaps every ord+1 on this enumerable. Declaration public static IEnumerable<long?> MapAllOrds(IEnumerable<long?> iterable) Parameters Type Name Description IEnumerable < System.Nullable < System.Int64 >> iterable Returns Type Description IEnumerable < System.Nullable < System.Int64 >> | Improve this Doc View Source MapMissingToOrd0(IEnumerable<Nullable<Int64>>) Remaps ord -1 to ord 0 on this enumerable. Declaration public static IEnumerable<long?> MapMissingToOrd0(IEnumerable<long?> iterable) Parameters Type Name Description IEnumerable < System.Nullable < System.Int64 >> iterable Returns Type Description IEnumerable < System.Nullable < System.Int64 >>"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.html",
    "title": "Namespace Lucene.Net.Codecs.MockIntBlock | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.MockIntBlock <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Integer encoder implementations for testing. Classes MockFixedInt32BlockPostingsFormat A silly test codec to verify core support for fixed sized int block encoders is working. The int encoder used here just writes each block as a series of vInt. MockFixedInt32BlockPostingsFormat.MockInt32Factory Encodes blocks as vInts of a fixed block size. MockVariableInt32BlockPostingsFormat A silly test codec to verify core support for variable sized int block encoders is working. The int encoder used here writes baseBlockSize ints at once, if the first int is <= 3, else 2* baseBlockSize. MockVariableInt32BlockPostingsFormat.MockInt32Factory If the first value is <= 3, writes baseBlockSize vInts at once, otherwise writes 2*baseBlockSize vInts."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockFixedInt32BlockPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockFixedInt32BlockPostingsFormat.html",
    "title": "Class MockFixedInt32BlockPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockFixedInt32BlockPostingsFormat A silly test codec to verify core support for fixed sized int block encoders is working. The int encoder used here just writes each block as a series of vInt. Inheritance System.Object MockFixedInt32BlockPostingsFormat Namespace : Lucene.Net.Codecs.MockIntBlock Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockFixedInt32BlockPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source MockFixedInt32BlockPostingsFormat() Declaration public MockFixedInt32BlockPostingsFormat() | Improve this Doc View Source MockFixedInt32BlockPostingsFormat(Int32) Declaration public MockFixedInt32BlockPostingsFormat(int blockSize) Parameters Type Name Description System.Int32 blockSize Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer | Improve this Doc View Source GetInt32Factory() Declaration public Int32StreamFactory GetInt32Factory() Returns Type Description Int32StreamFactory | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockFixedInt32BlockPostingsFormat.MockInt32Factory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockFixedInt32BlockPostingsFormat.MockInt32Factory.html",
    "title": "Class MockFixedInt32BlockPostingsFormat.MockInt32Factory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockFixedInt32BlockPostingsFormat.MockInt32Factory Encodes blocks as vInts of a fixed block size. Inheritance System.Object Int32StreamFactory MockFixedInt32BlockPostingsFormat.MockInt32Factory Inherited Members Int32StreamFactory.OpenInput(Directory, String, IOContext) Int32StreamFactory.CreateOutput(Directory, String, IOContext) Namespace : Lucene.Net.Codecs.MockIntBlock Assembly : Lucene.Net.TestFramework.dll Syntax public class MockInt32Factory : Int32StreamFactory Constructors | Improve this Doc View Source MockInt32Factory(Int32) Declaration public MockInt32Factory(int blockSize) Parameters Type Name Description System.Int32 blockSize Methods | Improve this Doc View Source CreateOutput(Directory, String, IOContext) Declaration public override Int32IndexOutput CreateOutput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexOutput | Improve this Doc View Source OpenInput(Directory, String, IOContext) Declaration public override Int32IndexInput OpenInput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexInput"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockVariableInt32BlockPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockVariableInt32BlockPostingsFormat.html",
    "title": "Class MockVariableInt32BlockPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockVariableInt32BlockPostingsFormat A silly test codec to verify core support for variable sized int block encoders is working. The int encoder used here writes baseBlockSize ints at once, if the first int is <= 3, else 2* baseBlockSize. Inheritance System.Object MockVariableInt32BlockPostingsFormat Namespace : Lucene.Net.Codecs.MockIntBlock Assembly : Lucene.Net.TestFramework.dll Syntax public class MockVariableInt32BlockPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source MockVariableInt32BlockPostingsFormat() Declaration public MockVariableInt32BlockPostingsFormat() | Improve this Doc View Source MockVariableInt32BlockPostingsFormat(Int32) Declaration public MockVariableInt32BlockPostingsFormat(int baseBlockSize) Parameters Type Name Description System.Int32 baseBlockSize Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockVariableInt32BlockPostingsFormat.MockInt32Factory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockIntBlock.MockVariableInt32BlockPostingsFormat.MockInt32Factory.html",
    "title": "Class MockVariableInt32BlockPostingsFormat.MockInt32Factory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockVariableInt32BlockPostingsFormat.MockInt32Factory If the first value is <= 3, writes baseBlockSize vInts at once, otherwise writes 2*baseBlockSize vInts. Inheritance System.Object Int32StreamFactory MockVariableInt32BlockPostingsFormat.MockInt32Factory Inherited Members Int32StreamFactory.OpenInput(Directory, String, IOContext) Int32StreamFactory.CreateOutput(Directory, String, IOContext) Namespace : Lucene.Net.Codecs.MockIntBlock Assembly : Lucene.Net.TestFramework.dll Syntax public class MockInt32Factory : Int32StreamFactory Constructors | Improve this Doc View Source MockInt32Factory(Int32) Declaration public MockInt32Factory(int baseBlockSize) Parameters Type Name Description System.Int32 baseBlockSize Methods | Improve this Doc View Source CreateOutput(Directory, String, IOContext) Declaration public override Int32IndexOutput CreateOutput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexOutput | Improve this Doc View Source OpenInput(Directory, String, IOContext) Declaration public override Int32IndexInput OpenInput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexInput"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockRandom.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockRandom.html",
    "title": "Namespace Lucene.Net.Codecs.MockRandom | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.MockRandom <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Frankenstein codec for testing that pieces together random components. Classes MockRandomPostingsFormat Randomly combines terms index impl w/ postings impls."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockRandom.MockRandomPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockRandom.MockRandomPostingsFormat.html",
    "title": "Class MockRandomPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockRandomPostingsFormat Randomly combines terms index impl w/ postings impls. Inheritance System.Object MockRandomPostingsFormat Namespace : Lucene.Net.Codecs.MockRandom Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockRandomPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source MockRandomPostingsFormat() Declaration public MockRandomPostingsFormat() | Improve this Doc View Source MockRandomPostingsFormat(Random) Declaration public MockRandomPostingsFormat(Random random) Parameters Type Name Description Random random Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.html",
    "title": "Namespace Lucene.Net.Codecs.MockSep | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.MockSep <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Very simple implementations of Lucene.Net.Codecs.Sep for testing. Classes MockSepPostingsFormat A silly codec that simply writes each file separately as single vInts. Don't use this (performance will be poor)! This is here just to test the core sep codec classes. MockSingleInt32Factory Encodes ints directly as vInts with MockSingleInt32IndexOutput . This is a Lucene.NET EXPERIMENTAL API, use at your own risk MockSingleInt32IndexInput Reads IndexInputs written with MockSingleInt32IndexOutput . NOTE: this class is just for demonstration purposes(it is a very slow way to read a block of ints). This is a Lucene.NET EXPERIMENTAL API, use at your own risk MockSingleInt32IndexInput.MockReader Just reads a vInt directly from the file. MockSingleInt32IndexOutput Writes ints directly to the file (not in blocks) as vInt. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSepPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSepPostingsFormat.html",
    "title": "Class MockSepPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockSepPostingsFormat A silly codec that simply writes each file separately as single vInts. Don't use this (performance will be poor)! This is here just to test the core sep codec classes. Inheritance System.Object MockSepPostingsFormat Namespace : Lucene.Net.Codecs.MockSep Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class MockSepPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source MockSepPostingsFormat() Declaration public MockSepPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32Factory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32Factory.html",
    "title": "Class MockSingleInt32Factory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockSingleInt32Factory Encodes ints directly as vInts with MockSingleInt32IndexOutput . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32StreamFactory MockSingleInt32Factory Inherited Members Int32StreamFactory.OpenInput(Directory, String, IOContext) Int32StreamFactory.CreateOutput(Directory, String, IOContext) Namespace : Lucene.Net.Codecs.MockSep Assembly : Lucene.Net.TestFramework.dll Syntax public class MockSingleInt32Factory : Int32StreamFactory Methods | Improve this Doc View Source CreateOutput(Directory, String, IOContext) Declaration public override Int32IndexOutput CreateOutput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexOutput | Improve this Doc View Source OpenInput(Directory, String, IOContext) Declaration public override Int32IndexInput OpenInput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexInput"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32IndexInput.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32IndexInput.html",
    "title": "Class MockSingleInt32IndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockSingleInt32IndexInput Reads IndexInputs written with MockSingleInt32IndexOutput . NOTE: this class is just for demonstration purposes(it is a very slow way to read a block of ints). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexInput MockSingleInt32IndexInput Inherited Members Int32IndexInput.Dispose() Namespace : Lucene.Net.Codecs.MockSep Assembly : Lucene.Net.TestFramework.dll Syntax public class MockSingleInt32IndexInput : Int32IndexInput Constructors | Improve this Doc View Source MockSingleInt32IndexInput(Directory, String, IOContext) Declaration public MockSingleInt32IndexInput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexInput.Dispose(Boolean) | Improve this Doc View Source GetIndex() Declaration public override Int32IndexInput.Index GetIndex() Returns Type Description Int32IndexInput.Index Overrides Int32IndexInput.GetIndex() | Improve this Doc View Source GetReader() Declaration public override Int32IndexInput.Reader GetReader() Returns Type Description Int32IndexInput.Reader Overrides Int32IndexInput.GetReader()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32IndexInput.MockReader.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32IndexInput.MockReader.html",
    "title": "Class MockSingleInt32IndexInput.MockReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockSingleInt32IndexInput.MockReader Just reads a vInt directly from the file. Inheritance System.Object Int32IndexInput.Reader MockSingleInt32IndexInput.MockReader Namespace : Lucene.Net.Codecs.MockSep Assembly : Lucene.Net.TestFramework.dll Syntax public class MockReader : Int32IndexInput.Reader Constructors | Improve this Doc View Source MockReader(IndexInput) Declaration public MockReader(IndexInput in) Parameters Type Name Description IndexInput in Methods | Improve this Doc View Source Next() Reads next single int. Declaration public override int Next() Returns Type Description System.Int32 Overrides Int32IndexInput.Reader.Next()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32IndexOutput.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.MockSep.MockSingleInt32IndexOutput.html",
    "title": "Class MockSingleInt32IndexOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockSingleInt32IndexOutput Writes ints directly to the file (not in blocks) as vInt. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexOutput MockSingleInt32IndexOutput Inherited Members Int32IndexOutput.Dispose() Namespace : Lucene.Net.Codecs.MockSep Assembly : Lucene.Net.TestFramework.dll Syntax public class MockSingleInt32IndexOutput : Int32IndexOutput Constructors | Improve this Doc View Source MockSingleInt32IndexOutput(Directory, String, IOContext) Declaration public MockSingleInt32IndexOutput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexOutput.Dispose(Boolean) | Improve this Doc View Source GetIndex() Declaration public override Int32IndexOutput.Index GetIndex() Returns Type Description Int32IndexOutput.Index Overrides Int32IndexOutput.GetIndex() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source Write(Int32) Declaration public override void Write(int v) Parameters Type Name Description System.Int32 v Overrides Int32IndexOutput.Write(Int32)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.NestedPulsing.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.NestedPulsing.html",
    "title": "Namespace Lucene.Net.Codecs.NestedPulsing | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.NestedPulsing <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codec for testing that wraps PulsingPostingsFormat with itself. Classes NestedPulsingPostingsFormat Pulsing(1, Pulsing(2, Lucene41)) This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.NestedPulsing.NestedPulsingPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.NestedPulsing.NestedPulsingPostingsFormat.html",
    "title": "Class NestedPulsingPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NestedPulsingPostingsFormat Pulsing(1, Pulsing(2, Lucene41)) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NestedPulsingPostingsFormat Namespace : Lucene.Net.Codecs.NestedPulsing Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class NestedPulsingPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source NestedPulsingPostingsFormat() Declaration public NestedPulsingPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.RAMOnly.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.RAMOnly.html",
    "title": "Namespace Lucene.Net.Codecs.RAMOnly | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.RAMOnly <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codec for testing that never writes to disk. Classes RAMOnlyPostingsFormat Stores all postings data in RAM, but writes a small token (header + single int) to identify which \"slot\" the index is using in RAM dictionary. NOTE: this codec sorts terms by reverse-unicode-order!"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.RAMOnly.RAMOnlyPostingsFormat.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.RAMOnly.RAMOnlyPostingsFormat.html",
    "title": "Class RAMOnlyPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RAMOnlyPostingsFormat Stores all postings data in RAM, but writes a small token (header + single int) to identify which \"slot\" the index is using in RAM dictionary. NOTE: this codec sorts terms by reverse-unicode-order! Inheritance System.Object RAMOnlyPostingsFormat Namespace : Lucene.Net.Codecs.RAMOnly Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class RAMOnlyPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source RAMOnlyPostingsFormat() Declaration public RAMOnlyPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState writeState) Parameters Type Name Description SegmentWriteState writeState Returns Type Description FieldsConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState readState) Parameters Type Name Description SegmentReadState readState Returns Type Description FieldsProducer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.TestCodecFactory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.TestCodecFactory.html",
    "title": "Class TestCodecFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TestCodecFactory LUCENENET specific class used to add the codecs from the test framework. Inheritance System.Object TestCodecFactory Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.TestFramework.dll Syntax public class TestCodecFactory : DefaultCodecFactory Methods | Improve this Doc View Source Initialize() Declaration protected override void Initialize() | Improve this Doc View Source IsServiceType(Type) Declaration protected override bool IsServiceType(Type type) Parameters Type Name Description Type type Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.TestDocValuesFormatFactory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.TestDocValuesFormatFactory.html",
    "title": "Class TestDocValuesFormatFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TestDocValuesFormatFactory LUCENENET specific class used to add the DocValuesFormats from the test framework. Inheritance System.Object TestDocValuesFormatFactory Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.TestFramework.dll Syntax public class TestDocValuesFormatFactory : DefaultDocValuesFormatFactory Methods | Improve this Doc View Source Initialize() Declaration protected override void Initialize()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.TestPostingsFormatFactory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Codecs.TestPostingsFormatFactory.html",
    "title": "Class TestPostingsFormatFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TestPostingsFormatFactory LUCENENET specific class used to add the PostingsFormats from the test framework. Inheritance System.Object TestPostingsFormatFactory Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.TestFramework.dll Syntax public class TestPostingsFormatFactory : DefaultPostingsFormatFactory Methods | Improve this Doc View Source Initialize() Declaration protected override void Initialize()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Diagnostics.AssertionException.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Diagnostics.AssertionException.html",
    "title": "Class AssertionException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertionException Thrown to indicate that an assertion has failed. Inheritance System.Object AssertionException Namespace : Lucene.Net.Diagnostics Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertionException : Exception Constructors | Improve this Doc View Source AssertionException() Constructs an AssertionException with no detail message. Declaration public AssertionException() | Improve this Doc View Source AssertionException(String) Constructs an AssertionException with the provided message . Declaration public AssertionException(string message) Parameters Type Name Description System.String message Value to be used as the assertion message. | Improve this Doc View Source AssertionException(String, Exception) Constructs an AssertionException with the provided message and innerException . Declaration public AssertionException(string message, Exception innerException) Parameters Type Name Description System.String message Value to be used as the assertion message. Exception innerException The exception that is the cause of the current exception, or a null reference ( Nothing in Visual Basic) if no inner exception is specified."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Diagnostics.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Diagnostics.html",
    "title": "Namespace Lucene.Net.Diagnostics | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Diagnostics Classes AssertionException Thrown to indicate that an assertion has failed."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.html",
    "title": "Lucene.Net | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Top-level package. Classes RandomExtensions Extensions to in order to randomly generate types and specially formatted strings that assist with testing custom extensions to Lucene.Net."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AlcoholicMergePolicy.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AlcoholicMergePolicy.html",
    "title": "Class AlcoholicMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AlcoholicMergePolicy Merge policy for testing, it is like an alcoholic. It drinks (merges) at night, and randomly decides what to drink. During the daytime it sleeps. If tests pass with this, then they are likely to pass with any bizarro merge policy users might write. It is a fine bottle of champagne (Ordered by Martijn). Inheritance System.Object AlcoholicMergePolicy Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AlcoholicMergePolicy : LogMergePolicy Constructors | Improve this Doc View Source AlcoholicMergePolicy(TimeZoneInfo, Random) Declaration public AlcoholicMergePolicy(TimeZoneInfo timeZone, Random random) Parameters Type Name Description TimeZoneInfo timeZone Random random Methods | Improve this Doc View Source Size(SegmentCommitInfo) Declaration protected override long Size(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AllDeletedFilterReader.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AllDeletedFilterReader.html",
    "title": "Class AllDeletedFilterReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AllDeletedFilterReader Filters the incoming reader and makes all documents appear deleted. Inheritance System.Object AllDeletedFilterReader Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AllDeletedFilterReader : FilterAtomicReader Constructors | Improve this Doc View Source AllDeletedFilterReader(AtomicReader) Declaration public AllDeletedFilterReader(AtomicReader in) Parameters Type Name Description AtomicReader in Properties | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits | Improve this Doc View Source NumDocs Declaration public override int NumDocs { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingAtomicReader.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingAtomicReader.html",
    "title": "Class AssertingAtomicReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingAtomicReader A that can be used to apply additional checks for tests. Inheritance System.Object AssertingAtomicReader Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingAtomicReader : FilterAtomicReader Constructors | Improve this Doc View Source AssertingAtomicReader(AtomicReader) Declaration public AssertingAtomicReader(AtomicReader in) Parameters Type Name Description AtomicReader in Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Declaration public override object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object | Improve this Doc View Source CoreCacheKey Declaration public override object CoreCacheKey { get; } Property Value Type Description System.Object | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Methods | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingBinaryDocValues.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingBinaryDocValues.html",
    "title": "Class AssertingBinaryDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingBinaryDocValues Wraps a but with additional asserts Inheritance System.Object AssertingBinaryDocValues Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingBinaryDocValues : BinaryDocValues Constructors | Improve this Doc View Source AssertingBinaryDocValues(BinaryDocValues, Int32) Declaration public AssertingBinaryDocValues(BinaryDocValues in, int maxDoc) Parameters Type Name Description BinaryDocValues in System.Int32 maxDoc Methods | Improve this Doc View Source Get(Int32, BytesRef) Declaration public override void Get(int docID, BytesRef result) Parameters Type Name Description System.Int32 docID BytesRef result"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingBits.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingBits.html",
    "title": "Class AssertingBits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingBits Wraps a but with additional asserts Inheritance System.Object AssertingBits Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingBits : IBits Constructors | Improve this Doc View Source AssertingBits(IBits) Declaration public AssertingBits(IBits in) Parameters Type Name Description IBits in Properties | Improve this Doc View Source Length Declaration public virtual int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32) Declaration public virtual bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingDirectoryReader.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingDirectoryReader.html",
    "title": "Class AssertingDirectoryReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingDirectoryReader A that wraps all its subreaders with AssertingAtomicReader Inheritance System.Object AssertingDirectoryReader Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingDirectoryReader : FilterDirectoryReader Constructors | Improve this Doc View Source AssertingDirectoryReader(DirectoryReader) Declaration public AssertingDirectoryReader(DirectoryReader in) Parameters Type Name Description DirectoryReader in Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Declaration public override object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object | Improve this Doc View Source CoreCacheKey Declaration public override object CoreCacheKey { get; } Property Value Type Description System.Object Methods | Improve this Doc View Source DoWrapDirectoryReader(DirectoryReader) Declaration protected override DirectoryReader DoWrapDirectoryReader(DirectoryReader in) Parameters Type Name Description DirectoryReader in Returns Type Description DirectoryReader"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingDocsEnum.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingDocsEnum.html",
    "title": "Class AssertingDocsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingDocsEnum Wraps a with additional checks Inheritance System.Object AssertingDocsEnum Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingDocsEnum : FilterAtomicReader.FilterDocsEnum Constructors | Improve this Doc View Source AssertingDocsEnum(DocsEnum) Declaration public AssertingDocsEnum(DocsEnum in) Parameters Type Name Description DocsEnum in | Improve this Doc View Source AssertingDocsEnum(DocsEnum, Boolean) Declaration public AssertingDocsEnum(DocsEnum in, bool failOnUnsupportedDocID) Parameters Type Name Description DocsEnum in System.Boolean failOnUnsupportedDocID Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingFields.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingFields.html",
    "title": "Class AssertingFields | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingFields Wraps a but with additional asserts Inheritance System.Object AssertingFields Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingFields : FilterAtomicReader.FilterFields Constructors | Improve this Doc View Source AssertingFields(Fields) Declaration public AssertingFields(Fields input) Parameters Type Name Description Fields input Methods | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description IEnumerator < System.String > | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingNumericDocValues.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingNumericDocValues.html",
    "title": "Class AssertingNumericDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingNumericDocValues Wraps a but with additional asserts Inheritance System.Object AssertingNumericDocValues Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingNumericDocValues : NumericDocValues Constructors | Improve this Doc View Source AssertingNumericDocValues(NumericDocValues, Int32) Declaration public AssertingNumericDocValues(NumericDocValues in, int maxDoc) Parameters Type Name Description NumericDocValues in System.Int32 maxDoc Methods | Improve this Doc View Source Get(Int32) Declaration public override long Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int64"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingSortedDocValues.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingSortedDocValues.html",
    "title": "Class AssertingSortedDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingSortedDocValues Wraps a but with additional asserts Inheritance System.Object AssertingSortedDocValues Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingSortedDocValues : SortedDocValues Constructors | Improve this Doc View Source AssertingSortedDocValues(SortedDocValues, Int32) Declaration public AssertingSortedDocValues(SortedDocValues in, int maxDoc) Parameters Type Name Description SortedDocValues in System.Int32 maxDoc Properties | Improve this Doc View Source ValueCount Declaration public override int ValueCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32, BytesRef) Declaration public override void Get(int docID, BytesRef result) Parameters Type Name Description System.Int32 docID BytesRef result | Improve this Doc View Source GetOrd(Int32) Declaration public override int GetOrd(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int32 | Improve this Doc View Source LookupOrd(Int32, BytesRef) Declaration public override void LookupOrd(int ord, BytesRef result) Parameters Type Name Description System.Int32 ord BytesRef result | Improve this Doc View Source LookupTerm(BytesRef) Declaration public override int LookupTerm(BytesRef key) Parameters Type Name Description BytesRef key Returns Type Description System.Int32"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingSortedSetDocValues.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingSortedSetDocValues.html",
    "title": "Class AssertingSortedSetDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingSortedSetDocValues Wraps a but with additional asserts Inheritance System.Object AssertingSortedSetDocValues Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingSortedSetDocValues : SortedSetDocValues Constructors | Improve this Doc View Source AssertingSortedSetDocValues(SortedSetDocValues, Int32) Declaration public AssertingSortedSetDocValues(SortedSetDocValues in, int maxDoc) Parameters Type Name Description SortedSetDocValues in System.Int32 maxDoc Properties | Improve this Doc View Source ValueCount Declaration public override long ValueCount { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source LookupOrd(Int64, BytesRef) Declaration public override void LookupOrd(long ord, BytesRef result) Parameters Type Name Description System.Int64 ord BytesRef result | Improve this Doc View Source LookupTerm(BytesRef) Declaration public override long LookupTerm(BytesRef key) Parameters Type Name Description BytesRef key Returns Type Description System.Int64 | Improve this Doc View Source NextOrd() Declaration public override long NextOrd() Returns Type Description System.Int64 | Improve this Doc View Source SetDocument(Int32) Declaration public override void SetDocument(int docID) Parameters Type Name Description System.Int32 docID"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingTerms.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.AssertingTerms.html",
    "title": "Class AssertingTerms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingTerms Wraps a but with additional asserts Inheritance System.Object AssertingTerms Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingTerms : FilterAtomicReader.FilterTerms Constructors | Improve this Doc View Source AssertingTerms(Terms) Declaration public AssertingTerms(Terms input) Parameters Type Name Description Terms input Methods | Improve this Doc View Source GetIterator(TermsEnum) Declaration public override TermsEnum GetIterator(TermsEnum reuse) Parameters Type Name Description TermsEnum reuse Returns Type Description TermsEnum | Improve this Doc View Source Intersect(CompiledAutomaton, BytesRef) Declaration public override TermsEnum Intersect(CompiledAutomaton automaton, BytesRef bytes) Parameters Type Name Description CompiledAutomaton automaton BytesRef bytes Returns Type Description TermsEnum"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseCompressingDocValuesFormatTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseCompressingDocValuesFormatTestCase.html",
    "title": "Class BaseCompressingDocValuesFormatTestCase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseCompressingDocValuesFormatTestCase Extends BaseDocValuesFormatTestCase to add compression checks. Inheritance System.Object LuceneTestCase BaseIndexFileFormatTestCase BaseDocValuesFormatTestCase BaseCompressingDocValuesFormatTestCase Inherited Members BaseDocValuesFormatTestCase.AddRandomFields(Document) BaseDocValuesFormatTestCase.TestOneNumber() BaseDocValuesFormatTestCase.TestOneSingle() BaseDocValuesFormatTestCase.TestTwoNumbers() BaseDocValuesFormatTestCase.TestTwoBinaryValues() BaseDocValuesFormatTestCase.TestTwoFieldsMixed() BaseDocValuesFormatTestCase.TestThreeFieldsMixed() BaseDocValuesFormatTestCase.TestThreeFieldsMixed2() BaseDocValuesFormatTestCase.TestTwoDocumentsNumeric() BaseDocValuesFormatTestCase.TestTwoDocumentsMerged() BaseDocValuesFormatTestCase.TestBigNumericRange() BaseDocValuesFormatTestCase.TestBigNumericRange2() BaseDocValuesFormatTestCase.TestBytes() BaseDocValuesFormatTestCase.TestBytesTwoDocumentsMerged() BaseDocValuesFormatTestCase.TestSortedBytes() BaseDocValuesFormatTestCase.TestSortedBytesTwoDocuments() BaseDocValuesFormatTestCase.TestSortedBytesThreeDocuments() BaseDocValuesFormatTestCase.TestSortedBytesTwoDocumentsMerged() BaseDocValuesFormatTestCase.TestSortedMergeAwayAllValues() BaseDocValuesFormatTestCase.TestBytesWithNewline() BaseDocValuesFormatTestCase.TestMissingSortedBytes() BaseDocValuesFormatTestCase.TestSortedTermsEnum() BaseDocValuesFormatTestCase.TestEmptySortedBytes() BaseDocValuesFormatTestCase.TestEmptyBytes() BaseDocValuesFormatTestCase.TestVeryLargeButLegalBytes() BaseDocValuesFormatTestCase.TestVeryLargeButLegalSortedBytes() BaseDocValuesFormatTestCase.TestCodecUsesOwnBytes() BaseDocValuesFormatTestCase.TestCodecUsesOwnSortedBytes() BaseDocValuesFormatTestCase.TestCodecUsesOwnBytesEachTime() BaseDocValuesFormatTestCase.TestCodecUsesOwnSortedBytesEachTime() BaseDocValuesFormatTestCase.TestDocValuesSimple() BaseDocValuesFormatTestCase.TestRandomSortedBytes() BaseDocValuesFormatTestCase.TestBooleanNumericsVsStoredFields() BaseDocValuesFormatTestCase.TestByteNumericsVsStoredFields() BaseDocValuesFormatTestCase.TestByteMissingVsFieldCache() BaseDocValuesFormatTestCase.TestInt16NumericsVsStoredFields() BaseDocValuesFormatTestCase.TestInt16MissingVsFieldCache() BaseDocValuesFormatTestCase.TestInt32NumericsVsStoredFields() BaseDocValuesFormatTestCase.TestInt32MissingVsFieldCache() BaseDocValuesFormatTestCase.TestInt64NumericsVsStoredFields() BaseDocValuesFormatTestCase.TestInt64MissingVsFieldCache() BaseDocValuesFormatTestCase.TestBinaryFixedLengthVsStoredFields() BaseDocValuesFormatTestCase.TestBinaryVariableLengthVsStoredFields() BaseDocValuesFormatTestCase.TestSortedFixedLengthVsStoredFields() BaseDocValuesFormatTestCase.TestSortedFixedLengthVsFieldCache() BaseDocValuesFormatTestCase.TestSortedVariableLengthVsFieldCache() BaseDocValuesFormatTestCase.TestSortedVariableLengthVsStoredFields() BaseDocValuesFormatTestCase.TestSortedSetOneValue() BaseDocValuesFormatTestCase.TestSortedSetTwoFields() BaseDocValuesFormatTestCase.TestSortedSetTwoDocumentsMerged() BaseDocValuesFormatTestCase.TestSortedSetTwoValues() BaseDocValuesFormatTestCase.TestSortedSetTwoValuesUnordered() BaseDocValuesFormatTestCase.TestSortedSetThreeValuesTwoDocs() BaseDocValuesFormatTestCase.TestSortedSetTwoDocumentsLastMissing() BaseDocValuesFormatTestCase.TestSortedSetTwoDocumentsLastMissingMerge() BaseDocValuesFormatTestCase.TestSortedSetTwoDocumentsFirstMissing() BaseDocValuesFormatTestCase.TestSortedSetTwoDocumentsFirstMissingMerge() BaseDocValuesFormatTestCase.TestSortedSetMergeAwayAllValues() BaseDocValuesFormatTestCase.TestSortedSetTermsEnum() BaseDocValuesFormatTestCase.TestSortedSetFixedLengthVsStoredFields() BaseDocValuesFormatTestCase.TestSortedSetVariableLengthVsStoredFields() BaseDocValuesFormatTestCase.TestSortedSetFixedLengthSingleValuedVsStoredFields() BaseDocValuesFormatTestCase.TestSortedSetVariableLengthSingleValuedVsStoredFields() BaseDocValuesFormatTestCase.TestSortedSetFixedLengthVsUninvertedField() BaseDocValuesFormatTestCase.TestSortedSetVariableLengthVsUninvertedField() BaseDocValuesFormatTestCase.TestGCDCompression() BaseDocValuesFormatTestCase.TestZeros() BaseDocValuesFormatTestCase.TestZeroOrMin() BaseDocValuesFormatTestCase.TestTwoNumbersOneMissing() BaseDocValuesFormatTestCase.TestTwoNumbersOneMissingWithMerging() BaseDocValuesFormatTestCase.TestThreeNumbersOneMissingWithMerging() BaseDocValuesFormatTestCase.TestTwoBytesOneMissing() BaseDocValuesFormatTestCase.TestTwoBytesOneMissingWithMerging() BaseDocValuesFormatTestCase.TestThreeBytesOneMissingWithMerging() BaseDocValuesFormatTestCase.TestHugeBinaryValues() BaseDocValuesFormatTestCase.TestHugeBinaryValueLimit() BaseDocValuesFormatTestCase.TestThreads() BaseDocValuesFormatTestCase.TestThreads2() BaseDocValuesFormatTestCase.TestEmptyBinaryValueOnPageSizes() BaseDocValuesFormatTestCase.CodecAcceptsHugeBinaryValues(String) BaseIndexFileFormatTestCase.GetCodec() BaseIndexFileFormatTestCase.SetUp() BaseIndexFileFormatTestCase.TearDown() BaseIndexFileFormatTestCase.ExcludedExtensionsFromByteCounts BaseIndexFileFormatTestCase.TestMergeStability() LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseCompressingDocValuesFormatTestCase : BaseDocValuesFormatTestCase Methods | Improve this Doc View Source TestDateCompression() Declaration public virtual void TestDateCompression() | Improve this Doc View Source TestSingleBigValueCompression() Declaration public virtual void TestSingleBigValueCompression() | Improve this Doc View Source TestUniqueValuesCompression() Declaration public virtual void TestUniqueValuesCompression()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseDocValuesFormatTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseDocValuesFormatTestCase.html",
    "title": "Class BaseDocValuesFormatTestCase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseDocValuesFormatTestCase Abstract class to do basic tests for a . NOTE: this test focuses on the docvalues impl, nothing else. The [stretch] goal is for this test to be so thorough in testing a new that if this test passes, then all Lucene/Solr tests should also pass. Ie, if there is some bug in a given that this test fails to catch then this test needs to be improved! Inheritance System.Object LuceneTestCase BaseIndexFileFormatTestCase BaseDocValuesFormatTestCase BaseCompressingDocValuesFormatTestCase Inherited Members BaseIndexFileFormatTestCase.GetCodec() BaseIndexFileFormatTestCase.SetUp() BaseIndexFileFormatTestCase.TearDown() BaseIndexFileFormatTestCase.ExcludedExtensionsFromByteCounts BaseIndexFileFormatTestCase.TestMergeStability() LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseDocValuesFormatTestCase : BaseIndexFileFormatTestCase Methods | Improve this Doc View Source AddRandomFields(Document) Declaration protected override void AddRandomFields(Document doc) Parameters Type Name Description Document doc Overrides BaseIndexFileFormatTestCase.AddRandomFields(Document) | Improve this Doc View Source CodecAcceptsHugeBinaryValues(String) Declaration protected virtual bool CodecAcceptsHugeBinaryValues(string field) Parameters Type Name Description System.String field Returns Type Description System.Boolean | Improve this Doc View Source TestBigNumericRange() Declaration public virtual void TestBigNumericRange() | Improve this Doc View Source TestBigNumericRange2() Declaration public virtual void TestBigNumericRange2() | Improve this Doc View Source TestBinaryFixedLengthVsStoredFields() Declaration public virtual void TestBinaryFixedLengthVsStoredFields() | Improve this Doc View Source TestBinaryVariableLengthVsStoredFields() Declaration public virtual void TestBinaryVariableLengthVsStoredFields() | Improve this Doc View Source TestBooleanNumericsVsStoredFields() Declaration public virtual void TestBooleanNumericsVsStoredFields() | Improve this Doc View Source TestByteMissingVsFieldCache() Declaration public virtual void TestByteMissingVsFieldCache() | Improve this Doc View Source TestByteNumericsVsStoredFields() Declaration public virtual void TestByteNumericsVsStoredFields() | Improve this Doc View Source TestBytes() Declaration public virtual void TestBytes() | Improve this Doc View Source TestBytesTwoDocumentsMerged() Declaration public virtual void TestBytesTwoDocumentsMerged() | Improve this Doc View Source TestBytesWithNewline() Declaration public virtual void TestBytesWithNewline() | Improve this Doc View Source TestCodecUsesOwnBytes() Declaration public virtual void TestCodecUsesOwnBytes() | Improve this Doc View Source TestCodecUsesOwnBytesEachTime() Declaration public virtual void TestCodecUsesOwnBytesEachTime() | Improve this Doc View Source TestCodecUsesOwnSortedBytes() Declaration public virtual void TestCodecUsesOwnSortedBytes() | Improve this Doc View Source TestCodecUsesOwnSortedBytesEachTime() Declaration public virtual void TestCodecUsesOwnSortedBytesEachTime() | Improve this Doc View Source TestDocValuesSimple() Simple test case to show how to use the API Declaration public virtual void TestDocValuesSimple() | Improve this Doc View Source TestEmptyBinaryValueOnPageSizes() Declaration public virtual void TestEmptyBinaryValueOnPageSizes() | Improve this Doc View Source TestEmptyBytes() Declaration public virtual void TestEmptyBytes() | Improve this Doc View Source TestEmptySortedBytes() Declaration public virtual void TestEmptySortedBytes() | Improve this Doc View Source TestGCDCompression() Declaration public virtual void TestGCDCompression() | Improve this Doc View Source TestHugeBinaryValueLimit() Declaration public virtual void TestHugeBinaryValueLimit() | Improve this Doc View Source TestHugeBinaryValues() Declaration public virtual void TestHugeBinaryValues() | Improve this Doc View Source TestInt16MissingVsFieldCache() Declaration public virtual void TestInt16MissingVsFieldCache() | Improve this Doc View Source TestInt16NumericsVsStoredFields() Declaration public virtual void TestInt16NumericsVsStoredFields() | Improve this Doc View Source TestInt32MissingVsFieldCache() Declaration public virtual void TestInt32MissingVsFieldCache() | Improve this Doc View Source TestInt32NumericsVsStoredFields() Declaration public virtual void TestInt32NumericsVsStoredFields() | Improve this Doc View Source TestInt64MissingVsFieldCache() Declaration public virtual void TestInt64MissingVsFieldCache() | Improve this Doc View Source TestInt64NumericsVsStoredFields() Declaration public virtual void TestInt64NumericsVsStoredFields() | Improve this Doc View Source TestMissingSortedBytes() Declaration public virtual void TestMissingSortedBytes() | Improve this Doc View Source TestOneNumber() Declaration public virtual void TestOneNumber() | Improve this Doc View Source TestOneSingle() Declaration public virtual void TestOneSingle() | Improve this Doc View Source TestRandomSortedBytes() Declaration public virtual void TestRandomSortedBytes() | Improve this Doc View Source TestSortedBytes() Declaration public virtual void TestSortedBytes() | Improve this Doc View Source TestSortedBytesThreeDocuments() Declaration public virtual void TestSortedBytesThreeDocuments() | Improve this Doc View Source TestSortedBytesTwoDocuments() Declaration public virtual void TestSortedBytesTwoDocuments() | Improve this Doc View Source TestSortedBytesTwoDocumentsMerged() Declaration public virtual void TestSortedBytesTwoDocumentsMerged() | Improve this Doc View Source TestSortedFixedLengthVsFieldCache() Declaration public virtual void TestSortedFixedLengthVsFieldCache() | Improve this Doc View Source TestSortedFixedLengthVsStoredFields() Declaration public virtual void TestSortedFixedLengthVsStoredFields() | Improve this Doc View Source TestSortedMergeAwayAllValues() Declaration public virtual void TestSortedMergeAwayAllValues() | Improve this Doc View Source TestSortedSetFixedLengthSingleValuedVsStoredFields() Declaration public virtual void TestSortedSetFixedLengthSingleValuedVsStoredFields() | Improve this Doc View Source TestSortedSetFixedLengthVsStoredFields() Declaration public virtual void TestSortedSetFixedLengthVsStoredFields() | Improve this Doc View Source TestSortedSetFixedLengthVsUninvertedField() Declaration public virtual void TestSortedSetFixedLengthVsUninvertedField() | Improve this Doc View Source TestSortedSetMergeAwayAllValues() Declaration public virtual void TestSortedSetMergeAwayAllValues() | Improve this Doc View Source TestSortedSetOneValue() Declaration public virtual void TestSortedSetOneValue() | Improve this Doc View Source TestSortedSetTermsEnum() Declaration public virtual void TestSortedSetTermsEnum() | Improve this Doc View Source TestSortedSetThreeValuesTwoDocs() Declaration public virtual void TestSortedSetThreeValuesTwoDocs() | Improve this Doc View Source TestSortedSetTwoDocumentsFirstMissing() Declaration public virtual void TestSortedSetTwoDocumentsFirstMissing() | Improve this Doc View Source TestSortedSetTwoDocumentsFirstMissingMerge() Declaration public virtual void TestSortedSetTwoDocumentsFirstMissingMerge() | Improve this Doc View Source TestSortedSetTwoDocumentsLastMissing() Declaration public virtual void TestSortedSetTwoDocumentsLastMissing() | Improve this Doc View Source TestSortedSetTwoDocumentsLastMissingMerge() Declaration public virtual void TestSortedSetTwoDocumentsLastMissingMerge() | Improve this Doc View Source TestSortedSetTwoDocumentsMerged() Declaration public virtual void TestSortedSetTwoDocumentsMerged() | Improve this Doc View Source TestSortedSetTwoFields() Declaration public virtual void TestSortedSetTwoFields() | Improve this Doc View Source TestSortedSetTwoValues() Declaration public virtual void TestSortedSetTwoValues() | Improve this Doc View Source TestSortedSetTwoValuesUnordered() Declaration public virtual void TestSortedSetTwoValuesUnordered() | Improve this Doc View Source TestSortedSetVariableLengthSingleValuedVsStoredFields() Declaration public virtual void TestSortedSetVariableLengthSingleValuedVsStoredFields() | Improve this Doc View Source TestSortedSetVariableLengthVsStoredFields() Declaration public virtual void TestSortedSetVariableLengthVsStoredFields() | Improve this Doc View Source TestSortedSetVariableLengthVsUninvertedField() Declaration public virtual void TestSortedSetVariableLengthVsUninvertedField() | Improve this Doc View Source TestSortedTermsEnum() Declaration public virtual void TestSortedTermsEnum() | Improve this Doc View Source TestSortedVariableLengthVsFieldCache() Declaration public virtual void TestSortedVariableLengthVsFieldCache() | Improve this Doc View Source TestSortedVariableLengthVsStoredFields() Declaration public virtual void TestSortedVariableLengthVsStoredFields() | Improve this Doc View Source TestThreads() Tests dv against stored fields with threads (binary/numeric/sorted, no missing) Declaration public virtual void TestThreads() | Improve this Doc View Source TestThreads2() Tests dv against stored fields with threads (all types + missing) Declaration public virtual void TestThreads2() | Improve this Doc View Source TestThreeBytesOneMissingWithMerging() Declaration public virtual void TestThreeBytesOneMissingWithMerging() | Improve this Doc View Source TestThreeFieldsMixed() Declaration public virtual void TestThreeFieldsMixed() | Improve this Doc View Source TestThreeFieldsMixed2() Declaration public virtual void TestThreeFieldsMixed2() | Improve this Doc View Source TestThreeNumbersOneMissingWithMerging() Declaration public virtual void TestThreeNumbersOneMissingWithMerging() | Improve this Doc View Source TestTwoBinaryValues() Declaration public virtual void TestTwoBinaryValues() | Improve this Doc View Source TestTwoBytesOneMissing() Declaration public virtual void TestTwoBytesOneMissing() | Improve this Doc View Source TestTwoBytesOneMissingWithMerging() Declaration public virtual void TestTwoBytesOneMissingWithMerging() | Improve this Doc View Source TestTwoDocumentsMerged() Declaration public virtual void TestTwoDocumentsMerged() | Improve this Doc View Source TestTwoDocumentsNumeric() Declaration public virtual void TestTwoDocumentsNumeric() | Improve this Doc View Source TestTwoFieldsMixed() Declaration public virtual void TestTwoFieldsMixed() | Improve this Doc View Source TestTwoNumbers() Declaration public virtual void TestTwoNumbers() | Improve this Doc View Source TestTwoNumbersOneMissing() Declaration public virtual void TestTwoNumbersOneMissing() | Improve this Doc View Source TestTwoNumbersOneMissingWithMerging() Declaration public virtual void TestTwoNumbersOneMissingWithMerging() | Improve this Doc View Source TestVeryLargeButLegalBytes() Declaration public virtual void TestVeryLargeButLegalBytes() | Improve this Doc View Source TestVeryLargeButLegalSortedBytes() Declaration public virtual void TestVeryLargeButLegalSortedBytes() | Improve this Doc View Source TestZeroOrMin() Declaration public virtual void TestZeroOrMin() | Improve this Doc View Source TestZeros() Declaration public virtual void TestZeros()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseIndexFileFormatTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseIndexFileFormatTestCase.html",
    "title": "Class BaseIndexFileFormatTestCase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseIndexFileFormatTestCase Common tests to all index formats. Inheritance System.Object LuceneTestCase BaseIndexFileFormatTestCase BaseDocValuesFormatTestCase BasePostingsFormatTestCase BaseStoredFieldsFormatTestCase BaseTermVectorsFormatTestCase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseIndexFileFormatTestCase : LuceneTestCase Properties | Improve this Doc View Source ExcludedExtensionsFromByteCounts Return the list of extensions that should be excluded from byte counts when comparing indices that store the same content. Declaration protected virtual ICollection<string> ExcludedExtensionsFromByteCounts { get; } Property Value Type Description ICollection < System.String > Methods | Improve this Doc View Source AddRandomFields(Document) Add random fields to the provided document. Declaration protected abstract void AddRandomFields(Document doc) Parameters Type Name Description Document doc | Improve this Doc View Source GetCodec() Returns the codec to run tests against Declaration protected abstract Codec GetCodec() Returns Type Description Codec | Improve this Doc View Source SetUp() Declaration public override void SetUp() Overrides LuceneTestCase.SetUp() | Improve this Doc View Source TearDown() Declaration public override void TearDown() Overrides LuceneTestCase.TearDown() | Improve this Doc View Source TestMergeStability() The purpose of this test is to make sure that bulk merge doesn't accumulate useless data over runs. Declaration public virtual void TestMergeStability()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseMergePolicyTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseMergePolicyTestCase.html",
    "title": "Class BaseMergePolicyTestCase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseMergePolicyTestCase Base test case for . Inheritance System.Object LuceneTestCase BaseMergePolicyTestCase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseMergePolicyTestCase : LuceneTestCase Methods | Improve this Doc View Source NewMergePolicy() Create a new instance. Declaration protected abstract MergePolicy NewMergePolicy() Returns Type Description MergePolicy | Improve this Doc View Source TestForceMergeNotNeeded() Declaration public virtual void TestForceMergeNotNeeded()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BasePostingsFormatTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BasePostingsFormatTestCase.html",
    "title": "Class BasePostingsFormatTestCase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasePostingsFormatTestCase Abstract class to do basic tests for a . NOTE: this test focuses on the postings (docs/freqs/positions/payloads/offsets) impl, not the terms dict. The [stretch] goal is for this test to be so thorough in testing a new that if this test passes, then all Lucene/Solr tests should also pass. Ie, if there is some bug in a given that this test fails to catch then this test needs to be improved! Inheritance System.Object LuceneTestCase BaseIndexFileFormatTestCase BasePostingsFormatTestCase Inherited Members BaseIndexFileFormatTestCase.GetCodec() BaseIndexFileFormatTestCase.SetUp() BaseIndexFileFormatTestCase.TearDown() BaseIndexFileFormatTestCase.ExcludedExtensionsFromByteCounts BaseIndexFileFormatTestCase.TestMergeStability() LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BasePostingsFormatTestCase : BaseIndexFileFormatTestCase Methods | Improve this Doc View Source AddRandomFields(Document) Declaration protected override void AddRandomFields(Document doc) Parameters Type Name Description Document doc Overrides BaseIndexFileFormatTestCase.AddRandomFields(Document) | Improve this Doc View Source AfterClass() Declaration public override void AfterClass() Overrides LuceneTestCase.AfterClass() | Improve this Doc View Source BeforeClass() Declaration public override void BeforeClass() Overrides LuceneTestCase.BeforeClass() | Improve this Doc View Source TestDocsAndFreqs() Declaration public virtual void TestDocsAndFreqs() | Improve this Doc View Source TestDocsAndFreqsAndPositions() Declaration public virtual void TestDocsAndFreqsAndPositions() | Improve this Doc View Source TestDocsAndFreqsAndPositionsAndOffsets() Declaration public virtual void TestDocsAndFreqsAndPositionsAndOffsets() | Improve this Doc View Source TestDocsAndFreqsAndPositionsAndOffsetsAndPayloads() Declaration public virtual void TestDocsAndFreqsAndPositionsAndOffsetsAndPayloads() | Improve this Doc View Source TestDocsAndFreqsAndPositionsAndPayloads() Declaration public virtual void TestDocsAndFreqsAndPositionsAndPayloads() | Improve this Doc View Source TestDocsOnly() Declaration public virtual void TestDocsOnly() | Improve this Doc View Source TestRandom() Declaration public virtual void TestRandom()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseStoredFieldsFormatTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseStoredFieldsFormatTestCase.html",
    "title": "Class BaseStoredFieldsFormatTestCase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseStoredFieldsFormatTestCase Base class aiming at testing . To test a new format, all you need is to register a new which uses it and extend this class and override GetCodec() . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LuceneTestCase BaseIndexFileFormatTestCase BaseStoredFieldsFormatTestCase Inherited Members BaseIndexFileFormatTestCase.GetCodec() BaseIndexFileFormatTestCase.SetUp() BaseIndexFileFormatTestCase.TearDown() BaseIndexFileFormatTestCase.ExcludedExtensionsFromByteCounts BaseIndexFileFormatTestCase.TestMergeStability() LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseStoredFieldsFormatTestCase : BaseIndexFileFormatTestCase Methods | Improve this Doc View Source AddRandomFields(Document) Declaration protected override void AddRandomFields(Document d) Parameters Type Name Description Document d Overrides BaseIndexFileFormatTestCase.AddRandomFields(Document) | Improve this Doc View Source TestBigDocuments() Declaration public virtual void TestBigDocuments() | Improve this Doc View Source TestBinaryFieldOffsetLength() Declaration public virtual void TestBinaryFieldOffsetLength() | Improve this Doc View Source TestBulkMergeWithDeletes() Declaration public virtual void TestBulkMergeWithDeletes() | Improve this Doc View Source TestConcurrentReads() Declaration public virtual void TestConcurrentReads() | Improve this Doc View Source TestEmptyDocs() Declaration public virtual void TestEmptyDocs() | Improve this Doc View Source TestIndexedBit() Declaration public virtual void TestIndexedBit() | Improve this Doc View Source TestNumericField() Declaration public virtual void TestNumericField() | Improve this Doc View Source TestRandomStoredFields() Declaration public virtual void TestRandomStoredFields() | Improve this Doc View Source TestReadSkip() Declaration public virtual void TestReadSkip() | Improve this Doc View Source TestStoredFieldsOrder() Declaration public virtual void TestStoredFieldsOrder() | Improve this Doc View Source TestWriteReadMerge() Declaration public virtual void TestWriteReadMerge()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.html",
    "title": "Class BaseTermVectorsFormatTestCase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseTermVectorsFormatTestCase Base class aiming at testing . To test a new format, all you need is to register a new which uses it and extend this class and override GetCodec() . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LuceneTestCase BaseIndexFileFormatTestCase BaseTermVectorsFormatTestCase Inherited Members BaseIndexFileFormatTestCase.GetCodec() BaseIndexFileFormatTestCase.SetUp() BaseIndexFileFormatTestCase.TearDown() BaseIndexFileFormatTestCase.ExcludedExtensionsFromByteCounts BaseIndexFileFormatTestCase.TestMergeStability() LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseTermVectorsFormatTestCase : BaseIndexFileFormatTestCase Methods | Improve this Doc View Source AddId(Document, String) Declaration protected virtual Document AddId(Document doc, string id) Parameters Type Name Description Document doc System.String id Returns Type Description Document | Improve this Doc View Source AddRandomFields(Document) Declaration protected override void AddRandomFields(Document doc) Parameters Type Name Description Document doc Overrides BaseIndexFileFormatTestCase.AddRandomFields(Document) | Improve this Doc View Source AssertEquals(BaseTermVectorsFormatTestCase.RandomDocument, Fields) Declaration protected virtual void AssertEquals(BaseTermVectorsFormatTestCase.RandomDocument doc, Fields fields) Parameters Type Name Description BaseTermVectorsFormatTestCase.RandomDocument doc Fields fields | Improve this Doc View Source AssertEquals(BaseTermVectorsFormatTestCase.RandomTokenStream, FieldType, Terms) Declaration protected virtual void AssertEquals(BaseTermVectorsFormatTestCase.RandomTokenStream tk, FieldType ft, Terms terms) Parameters Type Name Description BaseTermVectorsFormatTestCase.RandomTokenStream tk FieldType ft Terms terms | Improve this Doc View Source DocID(IndexReader, String) Declaration protected virtual int DocID(IndexReader reader, string id) Parameters Type Name Description IndexReader reader System.String id Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object, Object) Declaration protected static bool Equals(object o1, object o2) Parameters Type Name Description System.Object o1 System.Object o2 Returns Type Description System.Boolean | Improve this Doc View Source FieldType(BaseTermVectorsFormatTestCase.Options) Declaration protected virtual FieldType FieldType(BaseTermVectorsFormatTestCase.Options options) Parameters Type Name Description BaseTermVectorsFormatTestCase.Options options Returns Type Description FieldType | Improve this Doc View Source RandomOptions() Declaration protected virtual BaseTermVectorsFormatTestCase.Options RandomOptions() Returns Type Description BaseTermVectorsFormatTestCase.Options | Improve this Doc View Source RandomPayload() Declaration protected virtual BytesRef RandomPayload() Returns Type Description BytesRef | Improve this Doc View Source TestClone() Declaration public virtual void TestClone() | Improve this Doc View Source TestHighFreqs() Declaration public virtual void TestHighFreqs() | Improve this Doc View Source TestLotsOfFields() Declaration public virtual void TestLotsOfFields() | Improve this Doc View Source TestMerge() Declaration public virtual void TestMerge() | Improve this Doc View Source TestMixedOptions() Declaration public virtual void TestMixedOptions() | Improve this Doc View Source TestRandom() Declaration public virtual void TestRandom() | Improve this Doc View Source TestRareVectors() Declaration public virtual void TestRareVectors() | Improve this Doc View Source ValidOptions() Declaration protected virtual IEnumerable<BaseTermVectorsFormatTestCase.Options> ValidOptions() Returns Type Description IEnumerable < BaseTermVectorsFormatTestCase.Options > | Improve this Doc View Source ValidOptions(BaseTermVectorsFormatTestCase.Options, BaseTermVectorsFormatTestCase.Options) Declaration protected virtual IEnumerable<BaseTermVectorsFormatTestCase.Options> ValidOptions(BaseTermVectorsFormatTestCase.Options startInc, BaseTermVectorsFormatTestCase.Options endInc) Parameters Type Name Description BaseTermVectorsFormatTestCase.Options startInc BaseTermVectorsFormatTestCase.Options endInc Returns Type Description IEnumerable < BaseTermVectorsFormatTestCase.Options >"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.Options.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.Options.html",
    "title": "Enum BaseTermVectorsFormatTestCase.Options | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum BaseTermVectorsFormatTestCase.Options A combination of term vectors options. Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax protected enum Options : int Fields Name Description NONE OFFSETS POSITIONS POSITIONS_AND_OFFSETS POSITIONS_AND_OFFSETS_AND_PAYLOADS POSITIONS_AND_PAYLOADS"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.RandomDocument.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.RandomDocument.html",
    "title": "Class BaseTermVectorsFormatTestCase.RandomDocument | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseTermVectorsFormatTestCase.RandomDocument Inheritance System.Object BaseTermVectorsFormatTestCase.RandomDocument Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax protected class RandomDocument : object Constructors | Improve this Doc View Source RandomDocument(BaseTermVectorsFormatTestCase, Int32, Int32, BaseTermVectorsFormatTestCase.Options, String[], String[], BytesRef[]) Declaration protected RandomDocument(BaseTermVectorsFormatTestCase outerInstance, int fieldCount, int maxTermCount, BaseTermVectorsFormatTestCase.Options options, string[] fieldNames, string[] sampleTerms, BytesRef[] sampleTermBytes) Parameters Type Name Description BaseTermVectorsFormatTestCase outerInstance System.Int32 fieldCount System.Int32 maxTermCount BaseTermVectorsFormatTestCase.Options options System.String [] fieldNames System.String [] sampleTerms BytesRef [] sampleTermBytes Methods | Improve this Doc View Source ToDocument() Declaration public virtual Document ToDocument() Returns Type Description Document"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.RandomDocumentFactory.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.RandomDocumentFactory.html",
    "title": "Class BaseTermVectorsFormatTestCase.RandomDocumentFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseTermVectorsFormatTestCase.RandomDocumentFactory Inheritance System.Object BaseTermVectorsFormatTestCase.RandomDocumentFactory Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax protected class RandomDocumentFactory : object Constructors | Improve this Doc View Source RandomDocumentFactory(BaseTermVectorsFormatTestCase, Int32, Int32) Declaration protected RandomDocumentFactory(BaseTermVectorsFormatTestCase outerInstance, int distinctFieldNames, int disctinctTerms) Parameters Type Name Description BaseTermVectorsFormatTestCase outerInstance System.Int32 distinctFieldNames System.Int32 disctinctTerms Methods | Improve this Doc View Source NewDocument(Int32, Int32, BaseTermVectorsFormatTestCase.Options) Declaration public virtual BaseTermVectorsFormatTestCase.RandomDocument NewDocument(int fieldCount, int maxTermCount, BaseTermVectorsFormatTestCase.Options options) Parameters Type Name Description System.Int32 fieldCount System.Int32 maxTermCount BaseTermVectorsFormatTestCase.Options options Returns Type Description BaseTermVectorsFormatTestCase.RandomDocument"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.RandomTokenStream.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.BaseTermVectorsFormatTestCase.RandomTokenStream.html",
    "title": "Class BaseTermVectorsFormatTestCase.RandomTokenStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseTermVectorsFormatTestCase.RandomTokenStream Inheritance System.Object BaseTermVectorsFormatTestCase.RandomTokenStream Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax protected class RandomTokenStream : TokenStream Constructors | Improve this Doc View Source RandomTokenStream(BaseTermVectorsFormatTestCase, Int32, String[], BytesRef[]) Declaration protected RandomTokenStream(BaseTermVectorsFormatTestCase outerInstance, int len, string[] sampleTerms, BytesRef[] sampleTermBytes) Parameters Type Name Description BaseTermVectorsFormatTestCase outerInstance System.Int32 len System.String [] sampleTerms BytesRef [] sampleTermBytes | Improve this Doc View Source RandomTokenStream(BaseTermVectorsFormatTestCase, Int32, String[], BytesRef[], Boolean) Declaration protected RandomTokenStream(BaseTermVectorsFormatTestCase outerInstance, int len, string[] sampleTerms, BytesRef[] sampleTermBytes, bool offsetsGoBackwards) Parameters Type Name Description BaseTermVectorsFormatTestCase outerInstance System.Int32 len System.String [] sampleTerms BytesRef [] sampleTermBytes System.Boolean offsetsGoBackwards Methods | Improve this Doc View Source HasPayloads() Declaration public virtual bool HasPayloads() Returns Type Description System.Boolean | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.FieldFilterAtomicReader.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.FieldFilterAtomicReader.html",
    "title": "Class FieldFilterAtomicReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldFilterAtomicReader A that exposes only a subset of fields from the underlying wrapped reader. Inheritance System.Object FieldFilterAtomicReader Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class FieldFilterAtomicReader : FilterAtomicReader Constructors | Improve this Doc View Source FieldFilterAtomicReader(AtomicReader, ISet<String>, Boolean) Declaration public FieldFilterAtomicReader(AtomicReader in, ISet<string> fields, bool negate) Parameters Type Name Description AtomicReader in ISet < System.String > fields System.Boolean negate Properties | Improve this Doc View Source FieldInfos Declaration public override FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Methods | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.html",
    "title": "Namespace Lucene.Net.Index | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Index <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Misc index tools and index support. Classes AlcoholicMergePolicy Merge policy for testing, it is like an alcoholic. It drinks (merges) at night, and randomly decides what to drink. During the daytime it sleeps. If tests pass with this, then they are likely to pass with any bizarro merge policy users might write. It is a fine bottle of champagne (Ordered by Martijn). AllDeletedFilterReader Filters the incoming reader and makes all documents appear deleted. AssertingAtomicReader A that can be used to apply additional checks for tests. AssertingBinaryDocValues Wraps a but with additional asserts AssertingBits Wraps a but with additional asserts AssertingDirectoryReader A that wraps all its subreaders with AssertingAtomicReader AssertingDocsEnum Wraps a with additional checks AssertingFields Wraps a but with additional asserts AssertingNumericDocValues Wraps a but with additional asserts AssertingSortedDocValues Wraps a but with additional asserts AssertingSortedSetDocValues Wraps a but with additional asserts AssertingTerms Wraps a but with additional asserts BaseCompressingDocValuesFormatTestCase Extends BaseDocValuesFormatTestCase to add compression checks. BaseDocValuesFormatTestCase Abstract class to do basic tests for a . NOTE: this test focuses on the docvalues impl, nothing else. The [stretch] goal is for this test to be so thorough in testing a new that if this test passes, then all Lucene/Solr tests should also pass. Ie, if there is some bug in a given that this test fails to catch then this test needs to be improved! BaseIndexFileFormatTestCase Common tests to all index formats. BaseMergePolicyTestCase Base test case for . BasePostingsFormatTestCase Abstract class to do basic tests for a . NOTE: this test focuses on the postings (docs/freqs/positions/payloads/offsets) impl, not the terms dict. The [stretch] goal is for this test to be so thorough in testing a new that if this test passes, then all Lucene/Solr tests should also pass. Ie, if there is some bug in a given that this test fails to catch then this test needs to be improved! BaseStoredFieldsFormatTestCase Base class aiming at testing . To test a new format, all you need is to register a new which uses it and extend this class and override GetCodec() . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BaseTermVectorsFormatTestCase Base class aiming at testing . To test a new format, all you need is to register a new which uses it and extend this class and override GetCodec() . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BaseTermVectorsFormatTestCase.RandomDocument BaseTermVectorsFormatTestCase.RandomDocumentFactory BaseTermVectorsFormatTestCase.RandomTokenStream FieldFilterAtomicReader A that exposes only a subset of fields from the underlying wrapped reader. MockIndexInput backed by a byte[] for testing. MockRandomMergePolicy that makes random decisions for testing. RandomCodec that assigns per-field random s. The same field/format assignment will happen regardless of order, a hash is computed up front that determines the mapping. This means fields can be put into things like s and added to documents in different orders and the test will still be deterministic and reproducable. RandomIndexWriter Silly class that randomizes the indexing experience. EG it may swap in a different merge policy/scheduler; may commit periodically; may or may not forceMerge in the end, may flush by doc count instead of RAM, etc. TestPointInfoStream ThreadedIndexingAndSearchingTestCase Utility class that spawns multiple indexing and searching threads. Interfaces ITestPoint Simple interface that is executed for each TP component message. See also MockIndexWriter(Directory, IndexWriterConfig, ITestPoint) . Enums BaseTermVectorsFormatTestCase.Options A combination of term vectors options."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.ITestPoint.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.ITestPoint.html",
    "title": "Interface ITestPoint | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITestPoint Simple interface that is executed for each TP component message. See also MockIndexWriter(Directory, IndexWriterConfig, ITestPoint) . Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public interface ITestPoint Methods | Improve this Doc View Source Apply(String) Declaration void Apply(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.MockIndexInput.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.MockIndexInput.html",
    "title": "Class MockIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockIndexInput backed by a byte[] for testing. Inheritance System.Object MockIndexInput Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class MockIndexInput : BufferedIndexInput Constructors | Improve this Doc View Source MockIndexInput(Byte[]) Declaration public MockIndexInput(byte[] bytes) Parameters Type Name Description System.Byte [] bytes Properties | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source ReadInternal(Byte[], Int32, Int32) Declaration protected override void ReadInternal(byte[] dest, int destOffset, int len) Parameters Type Name Description System.Byte [] dest System.Int32 destOffset System.Int32 len | Improve this Doc View Source SeekInternal(Int64) Declaration protected override void SeekInternal(long pos) Parameters Type Name Description System.Int64 pos"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.MockRandomMergePolicy.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.MockRandomMergePolicy.html",
    "title": "Class MockRandomMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockRandomMergePolicy that makes random decisions for testing. Inheritance System.Object MockRandomMergePolicy Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class MockRandomMergePolicy : MergePolicy Constructors | Improve this Doc View Source MockRandomMergePolicy(Random) Declaration public MockRandomMergePolicy(Random random) Parameters Type Name Description Random random Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Declaration public override MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos Returns Type Description MergeSpecification | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Declaration public override MergeSpecification FindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos segmentInfos System.Int32 maxSegmentCount IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergeSpecification | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Declaration public override MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos segmentInfos Returns Type Description MergeSpecification | Improve this Doc View Source UseCompoundFile(SegmentInfos, SegmentCommitInfo) Declaration public override bool UseCompoundFile(SegmentInfos infos, SegmentCommitInfo mergedInfo) Parameters Type Name Description SegmentInfos infos SegmentCommitInfo mergedInfo Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.RandomCodec.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.RandomCodec.html",
    "title": "Class RandomCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RandomCodec that assigns per-field random s. The same field/format assignment will happen regardless of order, a hash is computed up front that determines the mapping. This means fields can be put into things like s and added to documents in different orders and the test will still be deterministic and reproducable. Inheritance System.Object RandomCodec Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class RandomCodec : Lucene46Codec Constructors | Improve this Doc View Source RandomCodec(Random) Declaration public RandomCodec(Random random) Parameters Type Name Description Random random | Improve this Doc View Source RandomCodec(Random, ISet<String>) Declaration public RandomCodec(Random random, ISet<string> avoidCodecs) Parameters Type Name Description Random random ISet < System.String > avoidCodecs Properties | Improve this Doc View Source DvFormatNames unique set of docvalues format names this codec knows about Declaration public ISet<string> DvFormatNames { get; set; } Property Value Type Description ISet < System.String > | Improve this Doc View Source FormatNames unique set of format names this codec knows about Declaration public ISet<string> FormatNames { get; set; } Property Value Type Description ISet < System.String > Methods | Improve this Doc View Source GetDocValuesFormatForField(String) Declaration public override DocValuesFormat GetDocValuesFormatForField(string name) Parameters Type Name Description System.String name Returns Type Description DocValuesFormat | Improve this Doc View Source GetPostingsFormatForField(String) Declaration public override PostingsFormat GetPostingsFormatForField(string name) Parameters Type Name Description System.String name Returns Type Description PostingsFormat | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.RandomIndexWriter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.RandomIndexWriter.html",
    "title": "Class RandomIndexWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RandomIndexWriter Silly class that randomizes the indexing experience. EG it may swap in a different merge policy/scheduler; may commit periodically; may or may not forceMerge in the end, may flush by doc count instead of RAM, etc. Inheritance System.Object RandomIndexWriter Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public class RandomIndexWriter : IDisposable Constructors | Improve this Doc View Source RandomIndexWriter(Random, Directory) Create a RandomIndexWriter with a random config: Uses TEST_VERSION_CURRENT and MockAnalyzer . Declaration public RandomIndexWriter(Random r, Directory dir) Parameters Type Name Description Random r Directory dir | Improve this Doc View Source RandomIndexWriter(Random, Directory, Analyzer) Create a RandomIndexWriter with a random config: Uses TEST_VERSION_CURRENT . Declaration public RandomIndexWriter(Random r, Directory dir, Analyzer a) Parameters Type Name Description Random r Directory dir Analyzer a | Improve this Doc View Source RandomIndexWriter(Random, Directory, IndexWriterConfig) Creates a RandomIndexWriter with the provided config Declaration public RandomIndexWriter(Random r, Directory dir, IndexWriterConfig c) Parameters Type Name Description Random r Directory dir IndexWriterConfig c | Improve this Doc View Source RandomIndexWriter(Random, Directory, LuceneVersion, Analyzer) Creates a RandomIndexWriter with a random config. Declaration public RandomIndexWriter(Random r, Directory dir, LuceneVersion v, Analyzer a) Parameters Type Name Description Random r Directory dir LuceneVersion v Analyzer a Properties | Improve this Doc View Source DoRandomForceMerge Declaration public virtual bool DoRandomForceMerge { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source DoRandomForceMergeAssert Declaration public virtual bool DoRandomForceMergeAssert { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IndexWriter Declaration public IndexWriter IndexWriter { get; set; } Property Value Type Description IndexWriter | Improve this Doc View Source MaxDoc Declaration public virtual int MaxDoc { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumDocs Declaration public virtual int NumDocs { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>) Adds a Document. Declaration public virtual void AddDocument(IEnumerable<IIndexableField> doc) Parameters Type Name Description IEnumerable < IIndexableField > doc | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>, Analyzer) Declaration public virtual void AddDocument(IEnumerable<IIndexableField> doc, Analyzer a) Parameters Type Name Description IEnumerable < IIndexableField > doc Analyzer a | Improve this Doc View Source AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) Declaration public virtual void AddDocuments(IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description IEnumerable < IEnumerable < IIndexableField >> docs | Improve this Doc View Source AddIndexes(Directory[]) Declaration public virtual void AddIndexes(params Directory[] dirs) Parameters Type Name Description Directory [] dirs | Improve this Doc View Source AddIndexes(IndexReader[]) Declaration public virtual void AddIndexes(params IndexReader[] readers) Parameters Type Name Description IndexReader [] readers | Improve this Doc View Source Commit() Declaration public virtual void Commit() | Improve this Doc View Source DeleteAll() Declaration public virtual void DeleteAll() | Improve this Doc View Source DeleteDocuments(Query) Declaration public virtual void DeleteDocuments(Query q) Parameters Type Name Description Query q | Improve this Doc View Source DeleteDocuments(Term) Declaration public virtual void DeleteDocuments(Term term) Parameters Type Name Description Term term | Improve this Doc View Source Dispose() Dispose this writer. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Dispose this writer. Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source ForceMerge(Int32) Forces a forceMerge. NOTE: this should be avoided in tests unless absolutely necessary, as it will result in less test coverage. Declaration public virtual void ForceMerge(int maxSegmentCount) Parameters Type Name Description System.Int32 maxSegmentCount | Improve this Doc View Source ForceMergeDeletes() Declaration public virtual void ForceMergeDeletes() | Improve this Doc View Source ForceMergeDeletes(Boolean) Declaration public virtual void ForceMergeDeletes(bool doWait) Parameters Type Name Description System.Boolean doWait | Improve this Doc View Source GetReader() Declaration public virtual DirectoryReader GetReader() Returns Type Description DirectoryReader | Improve this Doc View Source GetReader(Boolean) Declaration public virtual DirectoryReader GetReader(bool applyDeletions) Parameters Type Name Description System.Boolean applyDeletions Returns Type Description DirectoryReader | Improve this Doc View Source MockIndexWriter(Directory, IndexWriterConfig, ITestPoint) Declaration public static IndexWriter MockIndexWriter(Directory dir, IndexWriterConfig conf, ITestPoint testPoint) Parameters Type Name Description Directory dir IndexWriterConfig conf ITestPoint testPoint Returns Type Description IndexWriter | Improve this Doc View Source MockIndexWriter(Directory, IndexWriterConfig, Random) Declaration public static IndexWriter MockIndexWriter(Directory dir, IndexWriterConfig conf, Random r) Parameters Type Name Description Directory dir IndexWriterConfig conf Random r Returns Type Description IndexWriter | Improve this Doc View Source UpdateBinaryDocValue(Term, String, BytesRef) Declaration public virtual void UpdateBinaryDocValue(Term term, string field, BytesRef value) Parameters Type Name Description Term term System.String field BytesRef value | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>) Updates a document. Declaration public virtual void UpdateDocument(Term t, IEnumerable<IIndexableField> doc) Parameters Type Name Description Term t IEnumerable < IIndexableField > doc | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) Declaration public virtual void UpdateDocuments(Term delTerm, IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description Term delTerm IEnumerable < IEnumerable < IIndexableField >> docs | Improve this Doc View Source UpdateNumericDocValue(Term, String, Nullable<Int64>) Declaration public virtual void UpdateNumericDocValue(Term term, string field, long? value) Parameters Type Name Description Term term System.String field System.Nullable < System.Int64 > value"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.TestPointInfoStream.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.TestPointInfoStream.html",
    "title": "Class TestPointInfoStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TestPointInfoStream Inheritance System.Object TestPointInfoStream Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class TestPointInfoStream : InfoStream Constructors | Improve this Doc View Source TestPointInfoStream(InfoStream, ITestPoint) Declaration public TestPointInfoStream(InfoStream delegate, ITestPoint testPoint) Parameters Type Name Description InfoStream delegate ITestPoint testPoint Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source IsEnabled(String) Declaration public override bool IsEnabled(string component) Parameters Type Name Description System.String component Returns Type Description System.Boolean | Improve this Doc View Source Message(String, String) Declaration public override void Message(string component, string message) Parameters Type Name Description System.String component System.String message"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Index.ThreadedIndexingAndSearchingTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Index.ThreadedIndexingAndSearchingTestCase.html",
    "title": "Class ThreadedIndexingAndSearchingTestCase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThreadedIndexingAndSearchingTestCase Utility class that spawns multiple indexing and searching threads. Inheritance System.Object LuceneTestCase ThreadedIndexingAndSearchingTestCase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Index Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class ThreadedIndexingAndSearchingTestCase : LuceneTestCase Fields | Improve this Doc View Source m_addCount Declaration protected readonly AtomicInt32 m_addCount Field Value Type Description AtomicInt32 | Improve this Doc View Source m_assertMergedSegmentsWarmed Declaration protected bool m_assertMergedSegmentsWarmed Field Value Type Description System.Boolean | Improve this Doc View Source m_delCount Declaration protected readonly AtomicInt32 m_delCount Field Value Type Description AtomicInt32 | Improve this Doc View Source m_dir Declaration protected Directory m_dir Field Value Type Description Directory | Improve this Doc View Source m_failed Declaration protected readonly AtomicBoolean m_failed Field Value Type Description AtomicBoolean | Improve this Doc View Source m_packCount Declaration protected readonly AtomicInt32 m_packCount Field Value Type Description AtomicInt32 | Improve this Doc View Source m_writer Declaration protected IndexWriter m_writer Field Value Type Description IndexWriter Methods | Improve this Doc View Source AddDocument(Term, IEnumerable<IIndexableField>) Declaration protected virtual void AddDocument(Term id, IEnumerable<IIndexableField> doc) Parameters Type Name Description Term id IEnumerable < IIndexableField > doc | Improve this Doc View Source AddDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) Declaration protected virtual void AddDocuments(Term id, IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description Term id IEnumerable < IEnumerable < IIndexableField >> docs | Improve this Doc View Source DeleteDocuments(Term) Declaration protected virtual void DeleteDocuments(Term term) Parameters Type Name Description Term term | Improve this Doc View Source DoAfterIndexingThreadDone() Declaration protected virtual void DoAfterIndexingThreadDone() | Improve this Doc View Source DoAfterWriter(TaskScheduler) Declaration protected virtual void DoAfterWriter(TaskScheduler es) Parameters Type Name Description TaskScheduler es | Improve this Doc View Source DoClose() Declaration protected virtual void DoClose() | Improve this Doc View Source DoSearching(TaskScheduler, Int64) Declaration protected abstract void DoSearching(TaskScheduler es, long stopTime) Parameters Type Name Description TaskScheduler es System.Int64 stopTime | Improve this Doc View Source GetCurrentSearcher() Declaration protected abstract IndexSearcher GetCurrentSearcher() Returns Type Description IndexSearcher | Improve this Doc View Source GetDirectory(Directory) Declaration protected virtual Directory GetDirectory(Directory in) Parameters Type Name Description Directory in Returns Type Description Directory | Improve this Doc View Source GetFinalSearcher() Declaration protected abstract IndexSearcher GetFinalSearcher() Returns Type Description IndexSearcher | Improve this Doc View Source ReleaseSearcher(IndexSearcher) Declaration protected virtual void ReleaseSearcher(IndexSearcher s) Parameters Type Name Description IndexSearcher s | Improve this Doc View Source RunSearchThreads(Int64) Declaration protected virtual void RunSearchThreads(long stopTime) Parameters Type Name Description System.Int64 stopTime | Improve this Doc View Source RunTest(String) Declaration public virtual void RunTest(string testName) Parameters Type Name Description System.String testName | Improve this Doc View Source SmokeTestSearcher(IndexSearcher) Declaration protected virtual void SmokeTestSearcher(IndexSearcher s) Parameters Type Name Description IndexSearcher s | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>) Declaration protected virtual void UpdateDocument(Term term, IEnumerable<IIndexableField> doc) Parameters Type Name Description Term term IEnumerable < IIndexableField > doc | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) Declaration protected virtual void UpdateDocuments(Term id, IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description Term id IEnumerable < IEnumerable < IIndexableField >> docs"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.RandomExtensions.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.RandomExtensions.html",
    "title": "Class RandomExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RandomExtensions Extensions to in order to randomly generate types and specially formatted strings that assist with testing custom extensions to Lucene.Net. Inheritance System.Object RandomExtensions Namespace : Lucene.Net Assembly : Lucene.Net.TestFramework.dll Syntax public static class RandomExtensions : object Methods | Improve this Doc View Source NextAnalysisString(Random, Int32, Boolean) Declaration public static string NextAnalysisString(this Random random, int maxLength, bool simple) Parameters Type Name Description Random random System.Int32 maxLength System.Boolean simple Returns Type Description System.String | Improve this Doc View Source NextBoolean(Random) Generates a random , with a random distribution of approximately 50/50. Declaration public static bool NextBoolean(this Random random) Parameters Type Name Description Random random This . Returns Type Description System.Boolean A random . | Improve this Doc View Source NextFilterStrategy(Random) Declaration public static FilteredQuery.FilterStrategy NextFilterStrategy(this Random random) Parameters Type Name Description Random random Returns Type Description FilteredQuery.FilterStrategy | Improve this Doc View Source NextFixedByteLengthUnicodeString(Random, Int32) Returns random string, with a given UTF-8 byte length . Declaration public static string NextFixedByteLengthUnicodeString(this Random random, int length) Parameters Type Name Description Random random System.Int32 length Returns Type Description System.String | Improve this Doc View Source NextFixedLengthUnicodeString(Random, Char[], Int32, Int32) Fills provided char[] with valid random unicode code unit sequence. Declaration public static void NextFixedLengthUnicodeString(this Random random, char[] chars, int offset, int length) Parameters Type Name Description Random random System.Char [] chars System.Int32 offset System.Int32 length | Improve this Doc View Source NextFrom<T>(Random, ICollection<T>) Pick a random object from the collection . Declaration public static T NextFrom<T>(this Random random, ICollection<T> collection) Parameters Type Name Description Random random ICollection <T> collection Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source NextHtmlishString(Random, Int32) Returns a random HTML-like string. Declaration public static string NextHtmlishString(this Random random, int numElements) Parameters Type Name Description Random random System.Int32 numElements Returns Type Description System.String | Improve this Doc View Source NextInt64(Random) Generates a random . Declaration public static long NextInt64(this Random random) Parameters Type Name Description Random random This . Returns Type Description System.Int64 A random . | Improve this Doc View Source NextInt64(Random, Int64, Int64) Generates a random . start and end are BOTH inclusive. Declaration public static long NextInt64(this Random random, long start, long end) Parameters Type Name Description Random random This . System.Int64 start The inclusive start. System.Int64 end The inclusive end. Returns Type Description System.Int64 A random . | Improve this Doc View Source NextRealisticUnicodeString(Random) Returns random string of length between 0-20 codepoints, all codepoints within the same unicode block. Declaration public static string NextRealisticUnicodeString(this Random random) Parameters Type Name Description Random random Returns Type Description System.String | Improve this Doc View Source NextRealisticUnicodeString(Random, Int32) Returns random string of length up to maxLength codepoints, all codepoints within the same unicode block. Declaration public static string NextRealisticUnicodeString(this Random random, int maxLength) Parameters Type Name Description Random random System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source NextRealisticUnicodeString(Random, Int32, Int32) Returns random string of length between min and max codepoints, all codepoints within the same unicode block. Declaration public static string NextRealisticUnicodeString(this Random random, int minLength, int maxLength) Parameters Type Name Description Random random System.Int32 minLength System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source NextRecasedString(Random, String) Randomly upcases, downcases, or leaves intact each code point in the given string. Declaration public static string NextRecasedString(this Random random, string str) Parameters Type Name Description Random random System.String str Returns Type Description System.String | Improve this Doc View Source NextRegex(Random) Returns a valid (compiling) instance with random stuff inside. Be careful when applying random patterns to longer strings as certain types of patterns may explode into exponential times in backtracking implementations (such as Java's). Declaration public static Regex NextRegex(this Random random) Parameters Type Name Description Random random Returns Type Description Regex | Improve this Doc View Source NextRegexishString(Random) Returns a thats \"regexish\" (contains lots of operators typically found in regular expressions) If you call this enough times, you might get a valid regex! Declaration public static string NextRegexishString(this Random random) Parameters Type Name Description Random random Returns Type Description System.String | Improve this Doc View Source NextRegexishString(Random, Int32) Returns a thats \"regexish\" (contains lots of operators typically found in regular expressions) If you call this enough times, you might get a valid regex! Note: to avoid practically endless backtracking patterns we replace asterisk and plus operators with bounded repetitions. See LUCENE-4111 for more info. Declaration public static string NextRegexishString(this Random random, int maxLength) Parameters Type Name Description Random random System.Int32 maxLength A hint about maximum length of the regexpish string. It may be exceeded by a few characters. Returns Type Description System.String | Improve this Doc View Source NextSimpleString(Random) Returns a random string consisting only of lowercase characters 'a' through 'z', between 0 and 20 characters in length. Declaration public static string NextSimpleString(this Random random) Parameters Type Name Description Random random Returns Type Description System.String | Improve this Doc View Source NextSimpleString(Random, Int32) Returns a random string consisting only of lowercase characters 'a' through 'z'. Declaration public static string NextSimpleString(this Random random, int maxLength) Parameters Type Name Description Random random System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source NextSimpleString(Random, Int32, Int32) Returns a random string consisting only of lowercase characters 'a' through 'z'. Declaration public static string NextSimpleString(this Random random, int minLength, int maxLength) Parameters Type Name Description Random random System.Int32 minLength System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source NextSimpleStringRange(Random, Char, Char, Int32) Returns a random string consisting only of characters between minChar and maxChar . Declaration public static string NextSimpleStringRange(this Random random, char minChar, char maxChar, int maxLength) Parameters Type Name Description Random random System.Char minChar System.Char maxChar System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source NextSingle(Random) Generates a random . Declaration public static float NextSingle(this Random random) Parameters Type Name Description Random random This . Returns Type Description System.Single A random . | Improve this Doc View Source NextSubString(Random, Int32, Boolean) Declaration public static string NextSubString(this Random random, int wordLength, bool simple) Parameters Type Name Description Random random System.Int32 wordLength System.Boolean simple Returns Type Description System.String | Improve this Doc View Source NextUnicodeString(Random) Returns random string, including full unicode range. Declaration public static string NextUnicodeString(this Random random) Parameters Type Name Description Random random Returns Type Description System.String | Improve this Doc View Source NextUnicodeString(Random, Int32) Returns a random string up to a certain length. Declaration public static string NextUnicodeString(this Random random, int maxLength) Parameters Type Name Description Random random System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source NextWhitespace(Random, Int32, Int32) Returns a random string in the specified length range consisting entirely of whitespace characters. Declaration public static string NextWhitespace(this Random random, int minLength, int maxLength) Parameters Type Name Description Random random System.Int32 minLength System.Int32 maxLength Returns Type Description System.String See Also WHITESPACE_CHARACTERS"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.html",
    "title": "Namespace Lucene.Net.Randomized.Generators | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Randomized.Generators Classes RandomBytes Random byte sequence generators. RandomInts Utility class for random integer and integer sequences. RandomPicks Random selections of objects."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.RandomBytes.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.RandomBytes.html",
    "title": "Class RandomBytes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RandomBytes Random byte sequence generators. Inheritance System.Object RandomBytes Namespace : Lucene.Net.Randomized.Generators Assembly : Lucene.Net.TestFramework.dll Syntax public static class RandomBytes : object Methods | Improve this Doc View Source RandomBytesOfLength(Random, Int32) Declaration public static byte[] RandomBytesOfLength(Random r, int length) Parameters Type Name Description Random r Random generator. System.Int32 length The length of the byte array. Can be zero. Returns Type Description System.Byte [] Returns a byte array with random content. | Improve this Doc View Source RandomBytesOfLengthBetween(Random, Int32, Int32) Declaration public static byte[] RandomBytesOfLengthBetween(Random r, int minLength, int maxLength) Parameters Type Name Description Random r Random generator. System.Int32 minLength The minimum length of the byte array. Can be zero. System.Int32 maxLength The maximum length of the byte array. Can be zero. Returns Type Description System.Byte [] Returns a byte array with random content."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.RandomInts.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.RandomInts.html",
    "title": "Class RandomInts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RandomInts Utility class for random integer and integer sequences. Inheritance System.Object RandomInts Namespace : Lucene.Net.Randomized.Generators Assembly : Lucene.Net.TestFramework.dll Syntax public static class RandomInts : object Methods | Improve this Doc View Source RandomInt32Between(Random, Int32, Int32) A random integer from min to max (inclusive). Declaration public static int RandomInt32Between(Random random, int min, int max) Parameters Type Name Description Random random System.Int32 min System.Int32 max Returns Type Description System.Int32"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.RandomPicks.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.Generators.RandomPicks.html",
    "title": "Class RandomPicks | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RandomPicks Random selections of objects. Inheritance System.Object RandomPicks Namespace : Lucene.Net.Randomized.Generators Assembly : Lucene.Net.TestFramework.dll Syntax public static class RandomPicks : object Methods | Improve this Doc View Source RandomFrom<T>(Random, ICollection<T>) Pick a random object from the collection . Declaration public static T RandomFrom<T>(Random random, ICollection<T> collection) Parameters Type Name Description Random random ICollection <T> collection Returns Type Description T Type Parameters Name Description T"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.html",
    "title": "Namespace Lucene.Net.Randomized | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Randomized Classes RandomizedTest Common scaffolding for subclassing randomized tests."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.RandomizedTest.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Randomized.RandomizedTest.html",
    "title": "Class RandomizedTest | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RandomizedTest Common scaffolding for subclassing randomized tests. Inheritance System.Object RandomizedTest Namespace : Lucene.Net.Randomized Assembly : Lucene.Net.TestFramework.dll Syntax public static class RandomizedTest : object Methods | Improve this Doc View Source AssumeFalse(String, Boolean) Declaration public static void AssumeFalse(string msg, bool condition) Parameters Type Name Description System.String msg Message to be included in the exception's string. System.Boolean condition If true an is thrown by this method and the test case (should be) ignored (or rather technically, flagged as a failure not passing a certain assumption). Tests that are assumption-failures do not break builds (again: typically). | Improve this Doc View Source AssumeNoException(String, Exception) Assume t is null . Declaration public static void AssumeNoException(string msg, Exception t) Parameters Type Name Description System.String msg Exception t | Improve this Doc View Source AssumeTrue(String, Boolean) Declaration public static void AssumeTrue(string msg, bool condition) Parameters Type Name Description System.String msg Message to be included in the exception's string. System.Boolean condition If false an is thrown by this method and the test case (should be) ignored (or rather technically, flagged as a failure not passing a certain assumption). Tests that are assumption-failures do not break builds (again: typically)."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingBulkOutOfOrderScorer.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingBulkOutOfOrderScorer.html",
    "title": "Class AssertingBulkOutOfOrderScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingBulkOutOfOrderScorer A crazy that wraps another but shuffles the order of the collected documents. Inheritance System.Object AssertingBulkOutOfOrderScorer Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingBulkOutOfOrderScorer : BulkScorer Constructors | Improve this Doc View Source AssertingBulkOutOfOrderScorer(Random, BulkScorer) Declaration public AssertingBulkOutOfOrderScorer(Random random, BulkScorer in) Parameters Type Name Description Random random BulkScorer in Methods | Improve this Doc View Source Score(ICollector) Declaration public override void Score(ICollector collector) Parameters Type Name Description ICollector collector | Improve this Doc View Source Score(ICollector, Int32) Declaration public override bool Score(ICollector collector, int max) Parameters Type Name Description ICollector collector System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingBulkScorer.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingBulkScorer.html",
    "title": "Class AssertingBulkScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingBulkScorer Wraps a with additional checks. Inheritance System.Object AssertingBulkScorer Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingBulkScorer : BulkScorer Properties | Improve this Doc View Source In Declaration public virtual BulkScorer In { get; } Property Value Type Description BulkScorer Methods | Improve this Doc View Source Score(ICollector) Declaration public override void Score(ICollector collector) Parameters Type Name Description ICollector collector | Improve this Doc View Source Score(ICollector, Int32) Declaration public override bool Score(ICollector collector, int max) Parameters Type Name Description ICollector collector System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source ShouldWrap(BulkScorer) Declaration public static bool ShouldWrap(BulkScorer inScorer) Parameters Type Name Description BulkScorer inScorer Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source Wrap(Random, BulkScorer) Declaration public static BulkScorer Wrap(Random random, BulkScorer other) Parameters Type Name Description Random random BulkScorer other Returns Type Description BulkScorer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingCollector.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingCollector.html",
    "title": "Class AssertingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingCollector Wraps another and checks that AcceptsDocsOutOfOrder is respected. Inheritance System.Object AssertingCollector Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingCollector : ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer | Improve this Doc View Source Wrap(Random, ICollector, Boolean) Declaration public static ICollector Wrap(Random random, ICollector other, bool inOrder) Parameters Type Name Description Random random ICollector other System.Boolean inOrder Returns Type Description ICollector"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingIndexSearcher.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingIndexSearcher.html",
    "title": "Class AssertingIndexSearcher | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingIndexSearcher Helper class that adds some extra checks to ensure correct usage of and . Inheritance System.Object AssertingIndexSearcher Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingIndexSearcher : IndexSearcher Constructors | Improve this Doc View Source AssertingIndexSearcher(Random, IndexReader) Declaration public AssertingIndexSearcher(Random random, IndexReader r) Parameters Type Name Description Random random IndexReader r | Improve this Doc View Source AssertingIndexSearcher(Random, IndexReader, TaskScheduler) Declaration public AssertingIndexSearcher(Random random, IndexReader r, TaskScheduler ex) Parameters Type Name Description Random random IndexReader r TaskScheduler ex | Improve this Doc View Source AssertingIndexSearcher(Random, IndexReaderContext) Declaration public AssertingIndexSearcher(Random random, IndexReaderContext context) Parameters Type Name Description Random random IndexReaderContext context | Improve this Doc View Source AssertingIndexSearcher(Random, IndexReaderContext, TaskScheduler) Declaration public AssertingIndexSearcher(Random random, IndexReaderContext context, TaskScheduler ex) Parameters Type Name Description Random random IndexReaderContext context TaskScheduler ex Methods | Improve this Doc View Source CreateNormalizedWeight(Query) Ensures, that the returned is not normalized again, which may produce wrong scores. Declaration public override Weight CreateNormalizedWeight(Query query) Parameters Type Name Description Query query Returns Type Description Weight | Improve this Doc View Source Rewrite(Query) Declaration public override Query Rewrite(Query original) Parameters Type Name Description Query original Returns Type Description Query | Improve this Doc View Source Search(IList<AtomicReaderContext>, Weight, ICollector) Declaration protected override void Search(IList<AtomicReaderContext> leaves, Weight weight, ICollector collector) Parameters Type Name Description IList < AtomicReaderContext > leaves Weight weight ICollector collector | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source WrapFilter(Query, Filter) Declaration protected override Query WrapFilter(Query query, Filter filter) Parameters Type Name Description Query query Filter filter Returns Type Description Query"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingQuery.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingQuery.html",
    "title": "Class AssertingQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingQuery Assertion-enabled query. Inheritance System.Object AssertingQuery Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingQuery : Query Constructors | Improve this Doc View Source AssertingQuery(Random, Query) Sole constructor. Declaration public AssertingQuery(Random random, Query in) Parameters Type Name Description Random random Query in Properties | Improve this Doc View Source Boost Declaration public override float Boost { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String | Improve this Doc View Source Wrap(Random, Query) Wrap a query if necessary. Declaration public static Query Wrap(Random random, Query query) Parameters Type Name Description Random random Query query Returns Type Description Query"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingScorer.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.AssertingScorer.html",
    "title": "Class AssertingScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssertingScorer Wraps a with additional checks. Inheritance System.Object AssertingScorer Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class AssertingScorer : Scorer Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 | Improve this Doc View Source In Declaration public virtual Scorer In { get; } Property Value Type Description Scorer Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 | Improve this Doc View Source GetChildren() Declaration public override ICollection<ChildScorer> GetChildren() Returns Type Description ICollection < ChildScorer > | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source Wrap(Random, Scorer) Declaration public static Scorer Wrap(Random random, Scorer other) Parameters Type Name Description Random random Scorer other Returns Type Description Scorer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.CheckHits.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.CheckHits.html",
    "title": "Class CheckHits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckHits Utility class for asserting expected hits in tests. Inheritance System.Object CheckHits Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public static class CheckHits : object Fields | Improve this Doc View Source EXPLAIN_SCORE_TOLERANCE_DELTA Some explains methods calculate their values though a slightly different order of operations from the actual scoring method ... this allows for a small amount of relative variation Declaration public static float EXPLAIN_SCORE_TOLERANCE_DELTA Field Value Type Description System.Single | Improve this Doc View Source EXPLAIN_SCORE_TOLERANCE_MINIMUM In general we use a relative epsilon, but some tests do crazy things like boost documents with 0, creating tiny tiny scores where the relative difference is large but the absolute difference is tiny. we ensure the the epsilon is always at least this big. Declaration public static float EXPLAIN_SCORE_TOLERANCE_MINIMUM Field Value Type Description System.Single Methods | Improve this Doc View Source CheckDocIds(String, Int32[], ScoreDoc[]) Tests that a Hits has an expected order of documents. Declaration public static void CheckDocIds(string mes, int[] results, ScoreDoc[] hits) Parameters Type Name Description System.String mes System.Int32 [] results ScoreDoc [] hits | Improve this Doc View Source CheckEqual(Query, ScoreDoc[], ScoreDoc[]) Declaration public static void CheckEqual(Query query, ScoreDoc[] hits1, ScoreDoc[] hits2) Parameters Type Name Description Query query ScoreDoc [] hits1 ScoreDoc [] hits2 | Improve this Doc View Source CheckExplanations(Query, String, IndexSearcher) Asserts that the explanation value for every document matching a query corresponds with the true score. See for a \"deep\" testing of the explanation details. Declaration public static void CheckExplanations(Query query, string defaultFieldName, IndexSearcher searcher) Parameters Type Name Description Query query The query to test. System.String defaultFieldName Used for displaing the query in assertion messages. IndexSearcher searcher The searcher to test the query against. See Also ExplanationAsserter | Improve this Doc View Source CheckExplanations(Query, String, IndexSearcher, Boolean) Asserts that the explanation value for every document matching a query corresponds with the true score. Optionally does \"deep\" testing of the explanation details. Declaration public static void CheckExplanations(Query query, string defaultFieldName, IndexSearcher searcher, bool deep) Parameters Type Name Description Query query The query to test. System.String defaultFieldName Used for displaing the query in assertion messages. IndexSearcher searcher The searcher to test the query against. System.Boolean deep Indicates whether a deep comparison of sub-Explanation details should be executed. See Also ExplanationAsserter | Improve this Doc View Source CheckHitCollector(Random, Query, String, IndexSearcher, Int32[]) Tests that a query matches the an expected set of documents using a HitCollector. Note that when using the HitCollector API, documents will be collected if they \"match\" regardless of what their score is. Declaration public static void CheckHitCollector(Random random, Query query, string defaultFieldName, IndexSearcher searcher, int[] results) Parameters Type Name Description Random random Query query The query to test. System.String defaultFieldName Used for displaying the query in assertion messages. IndexSearcher searcher The searcher to test the query against. System.Int32 [] results A list of documentIds that must match the query. See Also DoCheckHits(Random, Query, String, IndexSearcher, Int32[]) | Improve this Doc View Source CheckHitsQuery(Query, ScoreDoc[], ScoreDoc[], Int32[]) Tests that two queries have an expected order of documents, and that the two queries have the same score values. Declaration public static void CheckHitsQuery(Query query, ScoreDoc[] hits1, ScoreDoc[] hits2, int[] results) Parameters Type Name Description Query query ScoreDoc [] hits1 ScoreDoc [] hits2 System.Int32 [] results | Improve this Doc View Source CheckNoMatchExplanations(Query, String, IndexSearcher, Int32[]) Tests that all documents up to maxDoc which are not in the expected result set, have an explanation which indicates that the document does not match Declaration public static void CheckNoMatchExplanations(Query q, string defaultFieldName, IndexSearcher searcher, int[] results) Parameters Type Name Description Query q System.String defaultFieldName IndexSearcher searcher System.Int32 [] results | Improve this Doc View Source DoCheckHits(Random, Query, String, IndexSearcher, Int32[]) Tests that a query matches the an expected set of documents using Hits. Note that when using the Hits API, documents will only be returned if they have a positive normalized score. Declaration public static void DoCheckHits(Random random, Query query, string defaultFieldName, IndexSearcher searcher, int[] results) Parameters Type Name Description Random random Query query the query to test System.String defaultFieldName used for displaing the query in assertion messages IndexSearcher searcher the searcher to test the query against System.Int32 [] results a list of documentIds that must match the query See Also CheckHitCollector(Random, Query, String, IndexSearcher, Int32[]) | Improve this Doc View Source ExplainToleranceDelta(Single, Single) Returns a reasonable epsilon for comparing two floats, where minor differences are acceptable such as score vs. explain. Declaration public static float ExplainToleranceDelta(float f1, float f2) Parameters Type Name Description System.Single f1 System.Single f2 Returns Type Description System.Single | Improve this Doc View Source Hits2str(ScoreDoc[], ScoreDoc[], Int32, Int32) Declaration public static string Hits2str(ScoreDoc[] hits1, ScoreDoc[] hits2, int start, int end) Parameters Type Name Description ScoreDoc [] hits1 ScoreDoc [] hits2 System.Int32 start System.Int32 end Returns Type Description System.String | Improve this Doc View Source TopDocsString(TopDocs, Int32, Int32) Declaration public static string TopDocsString(TopDocs docs, int start, int end) Parameters Type Name Description TopDocs docs System.Int32 start System.Int32 end Returns Type Description System.String | Improve this Doc View Source VerifyExplanation(String, Int32, Single, Boolean, Explanation) Assert that an explanation has the expected score, and optionally that its sub-details max/sum/factor match to that score. Declaration public static void VerifyExplanation(string q, int doc, float score, bool deep, Explanation expl) Parameters Type Name Description System.String q String representation of the query for assertion messages. System.Int32 doc Document ID for assertion messages. System.Single score Real score value of doc with query q . System.Boolean deep Indicates whether a deep comparison of sub-Explanation details should be executed. Explanation expl The to match against score."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.ExplanationAsserter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.ExplanationAsserter.html",
    "title": "Class ExplanationAsserter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExplanationAsserter Asserts that the score explanation for every document matching a query corresponds with the true score. NOTE: this HitCollector should only be used with the and specified at when it is constructed. Inheritance System.Object ExplanationAsserter Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class ExplanationAsserter : ICollector Constructors | Improve this Doc View Source ExplanationAsserter(Query, String, IndexSearcher) Constructs an instance which does shallow tests on the Explanation Declaration public ExplanationAsserter(Query q, string defaultFieldName, IndexSearcher s) Parameters Type Name Description Query q System.String defaultFieldName IndexSearcher s | Improve this Doc View Source ExplanationAsserter(Query, String, IndexSearcher, Boolean) Declaration public ExplanationAsserter(Query q, string defaultFieldName, IndexSearcher s, bool deep) Parameters Type Name Description Query q System.String defaultFieldName IndexSearcher s System.Boolean deep Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer See Also VerifyExplanation(String, Int32, Single, Boolean, Explanation)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.ExplanationAssertingSearcher.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.ExplanationAssertingSearcher.html",
    "title": "Class ExplanationAssertingSearcher | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExplanationAssertingSearcher An that implicitly checks hte explanation of every match whenever it executes a search. Inheritance System.Object ExplanationAssertingSearcher Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class ExplanationAssertingSearcher : IndexSearcher Constructors | Improve this Doc View Source ExplanationAssertingSearcher(IndexReader) Declaration public ExplanationAssertingSearcher(IndexReader r) Parameters Type Name Description IndexReader r Methods | Improve this Doc View Source CheckExplanations(Query) Declaration protected virtual void CheckExplanations(Query q) Parameters Type Name Description Query q | Improve this Doc View Source Search(Query, Filter, ICollector) Declaration public override void Search(Query query, Filter filter, ICollector results) Parameters Type Name Description Query query Filter filter ICollector results | Improve this Doc View Source Search(Query, Filter, Int32) Declaration public override TopDocs Search(Query query, Filter filter, int n) Parameters Type Name Description Query query Filter filter System.Int32 n Returns Type Description TopDocs | Improve this Doc View Source Search(Query, Filter, Int32, Sort) Declaration public override TopFieldDocs Search(Query query, Filter filter, int n, Sort sort) Parameters Type Name Description Query query Filter filter System.Int32 n Sort sort Returns Type Description TopFieldDocs | Improve this Doc View Source Search(Query, ICollector) Declaration public override void Search(Query query, ICollector results) Parameters Type Name Description Query query ICollector results See Also ExplanationAsserter"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.FCInvisibleMultiReader.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.FCInvisibleMultiReader.html",
    "title": "Class FCInvisibleMultiReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FCInvisibleMultiReader This is a that can be used for randomly wrapping other readers without creating insanity. The trick is to use an opaque/fake cache key. Inheritance System.Object FCInvisibleMultiReader Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class FCInvisibleMultiReader : MultiReader Constructors | Improve this Doc View Source FCInvisibleMultiReader(IndexReader[]) Declaration public FCInvisibleMultiReader(params IndexReader[] readers) Parameters Type Name Description IndexReader [] readers Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Declaration public override object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object | Improve this Doc View Source CoreCacheKey Declaration public override object CoreCacheKey { get; } Property Value Type Description System.Object"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.html",
    "title": "Namespace Lucene.Net.Search | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Code to search indices. Table Of Contents Search Basics 2. The Query Classes 3. Scoring: Introduction 4. Scoring: Basics 5. Changing the Scoring 6. Appendix: Search Algorithm Search Basics Lucene offers a wide variety of Query implementations, most of which are in this package, its subpackages ( spans , payloads ), or the queries module . These implementations can be combined in a wide variety of ways to provide complex querying capabilities along with information about where matches took place in the document collection. The Query Classes section below highlights some of the more important Query classes. For details on implementing your own Query class, see Custom Queries -- Expert Level below. To perform a search, applications usually call #search(Query,int) or #search(Query,Filter,int) . Once a Query has been created and submitted to the IndexSearcher , the scoring process begins. After some infrastructure setup, control finally passes to the Weight implementation and its Scorer or BulkScore instances. See the Algorithm section for more notes on the process. <!-- TODO: this page over-links the same things too many times --> Query Classes [TermQuery](xref:Lucene.Net.Search.TermQuery) Of the various implementations of Query , the TermQuery is the easiest to understand and the most often used in applications. A TermQuery matches all the documents that contain the specified Term , which is a word that occurs in a certain Field . Thus, a TermQuery identifies and scores all Document s that have a Field with the specified string in it. Constructing a TermQuery is as simple as: TermQuery tq = new TermQuery(new Term(\"fieldName\", \"term\")); In this example, the Query identifies all Document s that have the Field named \"fieldName\" containing the word \"term\" . [BooleanQuery](xref:Lucene.Net.Search.BooleanQuery) Things start to get interesting when one combines multiple TermQuery instances into a BooleanQuery . A BooleanQuery contains multiple BooleanClause s, where each clause contains a sub-query ( Query instance) and an operator (from BooleanClause.Occur ) describing how that sub-query is combined with the other clauses: 1. SHOULD — Use this operator when a clause can occur in the result set, but is not required. If a query is made up of all SHOULD clauses, then every document in the result set matches at least one of these clauses. 2. MUST — Use this operator when a clause is required to occur in the result set. Every document in the result set will match all such clauses. 3. NOT — Use this operator when a clause must not occur in the result set. No document in the result set will match any such clauses. Boolean queries are constructed by adding two or more BooleanClause instances. If too many clauses are added, a TooManyClauses exception will be thrown during searching. This most often occurs when a Query is rewritten into a BooleanQuery with many TermQuery clauses, for example by WildcardQuery . The default setting for the maximum number of clauses 1024, but this can be changed via the static method #setMaxClauseCount(int) . Phrases Another common search is to find documents containing certain phrases. This is handled three different ways: PhraseQuery — Matches a sequence of Term s. PhraseQuery uses a slop factor to determine how many positions may occur between any two terms in the phrase and still be considered a match. The slop is 0 by default, meaning the phrase must match exactly. MultiPhraseQuery — A more general form of PhraseQuery that accepts multiple Terms for a position in the phrase. For example, this can be used to perform phrase queries that also incorporate synonyms. 3. SpanNearQuery — Matches a sequence of other SpanQuery instances. SpanNearQuery allows for much more complicated phrase queries since it is constructed from other SpanQuery instances, instead of only TermQuery instances. [TermRangeQuery](xref:Lucene.Net.Search.TermRangeQuery) The TermRangeQuery matches all documents that occur in the exclusive range of a lower Term and an upper Term according to TermsEnum.getComparator . It is not intended for numerical ranges; use NumericRangeQuery instead. For example, one could find all documents that have terms beginning with the letters a through c . [NumericRangeQuery](xref:Lucene.Net.Search.NumericRangeQuery) The NumericRangeQuery matches all documents that occur in a numeric range. For NumericRangeQuery to work, you must index the values using a one of the numeric fields ( IntField , LongField , FloatField , or DoubleField ). [PrefixQuery](xref:Lucene.Net.Search.PrefixQuery), [WildcardQuery](xref:Lucene.Net.Search.WildcardQuery), [RegexpQuery](xref:Lucene.Net.Search.RegexpQuery) While the PrefixQuery has a different implementation, it is essentially a special case of the WildcardQuery . The PrefixQuery allows an application to identify all documents with terms that begin with a certain string. The WildcardQuery generalizes this by allowing for the use of (matches 0 or more characters) and ? (matches exactly one character) wildcards. Note that the WildcardQuery can be quite slow. Also note that WildcardQuery should not start with and ? , as these are extremely slow. Some QueryParsers may not allow this by default, but provide a setAllowLeadingWildcard method to remove that protection. The RegexpQuery is even more general than WildcardQuery, allowing an application to identify all documents with terms that match a regular expression pattern. [FuzzyQuery](xref:Lucene.Net.Search.FuzzyQuery) A FuzzyQuery matches documents that contain terms similar to the specified term. Similarity is determined using Levenshtein (edit) distance . This type of query can be useful when accounting for spelling variations in the collection. Scoring — Introduction Lucene scoring is the heart of why we all love Lucene. It is blazingly fast and it hides almost all of the complexity from the user. In a nutshell, it works. At least, that is, until it doesn't work, or doesn't work as one would expect it to work. Then we are left digging into Lucene internals or asking for help on java-user@lucene.apache.org to figure out why a document with five of our query terms scores lower than a different document with only one of the query terms. While this document won't answer your specific scoring issues, it will, hopefully, point you to the places that can help you figure out the what and why of Lucene scoring. Lucene scoring supports a number of pluggable information retrieval models , including: * Vector Space Model (VSM) * Probablistic Models such as Okapi BM25 and DFR * Language models These models can be plugged in via the Similarity API , and offer extension hooks and parameters for tuning. In general, Lucene first finds the documents that need to be scored based on boolean logic in the Query specification, and then ranks this subset of matching documents via the retrieval model. For some valuable references on VSM and IR in general refer to Lucene Wiki IR references . The rest of this document will cover Scoring basics and explain how to change your Similarity . Next, it will cover ways you can customize the lucene internals in Custom Queries -- Expert Level , which gives details on implementing your own Query class and related functionality. Finally, we will finish up with some reference material in the Appendix . Scoring — Basics Scoring is very much dependent on the way documents are indexed, so it is important to understand indexing. (see Lucene overview before continuing on with this section) Be sure to use the useful Doc) to understand how the score for a certain matching document was computed. Generally, the Query determines which documents match (a binary decision), while the Similarity determines how to assign scores to the matching documents. Fields and Documents In Lucene, the objects we are scoring are Document s. A Document is a collection of Field s. Each Field has semantics about how it is created and stored ( Tokenized , Stored , etc). It is important to note that Lucene scoring works on Fields and then combines the results to return Documents. This is important because two Documents with the exact same content, but one having the content in two Fields and the other in one Field may return different scores for the same query due to length normalization. Score Boosting Lucene allows influencing search results by \"boosting\" at different times: * Index-time boost by calling Field.setBoost before a document is added to the index. * Query-time boost by setting a boost on a query clause, calling Query.setBoost . Indexing time boosts are pre-processed for storage efficiency and written to storage for a field as follows: * All boosts of that field (i.e. all boosts under the same field name in that doc) are multiplied. * The boost is then encoded into a normalization value by the Similarity object at index-time: ComputeNorm . The actual encoding depends upon the Similarity implementation, but note that most use a lossy encoding (such as multiplying the boost with document length or similar, packed into a single byte!). * Decoding of any index-time normalization values and integration into the document's score is also performed at search time by the Similarity. Changing Scoring — Similarity Changing Similarity is an easy way to influence scoring, this is done at index-time with IndexWriterConfig.setSimilarity and at query-time with IndexSearcher.setSimilarity . Be sure to use the same Similarity at query-time as at index-time (so that norms are encoded/decoded correctly); Lucene makes no effort to verify this. You can influence scoring by configuring a different built-in Similarity implementation, or by tweaking its parameters, subclassing it to override behavior. Some implementations also offer a modular API which you can extend by plugging in a different component (e.g. term frequency normalizer). Finally, you can extend the low level Similarity directly to implement a new retrieval model, or to use external scoring factors particular to your application. For example, a custom Similarity can access per-document values via FieldCache or NumericDocValues and integrate them into the score. See the Lucene.Net.Search.Similarities package documentation for information on the built-in available scoring models and extending or changing Similarity. Custom Queries — Expert Level Custom queries are an expert level task, so tread carefully and be prepared to share your code if you want help. With the warning out of the way, it is possible to change a lot more than just the Similarity when it comes to matching and scoring in Lucene. Lucene's search is a complex mechanism that is grounded by three main classes : 1. Query — The abstract object representation of the user's information need. 2. Weight — The internal interface representation of the user's Query, so that Query objects may be reused. This is global (across all segments of the index) and generally will require global statistics (such as docFreq for a given term across all segments). 3. Scorer — An abstract class containing common functionality for scoring. Provides both scoring and explanation capabilities. This is created per-segment. 4. BulkScorer — An abstract class that scores a range of documents. A default implementation simply iterates through the hits from Scorer , but some queries such as BooleanQuery have more efficient implementations. Details on each of these classes, and their children, can be found in the subsections below. The Query Class In some sense, the Query class is where it all begins. Without a Query, there would be nothing to score. Furthermore, the Query class is the catalyst for the other scoring classes as it is often responsible for creating them or coordinating the functionality between them. The Query class has several methods that are important for derived classes: 1. Searcher) — A Weight is the internal representation of the Query, so each Query implementation must provide an implementation of Weight. See the subsection on The Weight Interface below for details on implementing the Weight interface. 2. Reader) — Rewrites queries into primitive queries. Primitive queries are: TermQuery , BooleanQuery , and other queries that implement Searcher) The Weight Interface The Weight interface provides an internal representation of the Query so that it can be reused. Any IndexSearcher dependent state should be stored in the Weight implementation, not in the Query class. The interface defines five methods that must be implemented: 1. GetQuery — Pointer to the Query that this Weight represents. 2. GetValueForNormalization — A weight can return a floating point value to indicate its magnitude for query normalization. Typically a weight such as TermWeight that scores via a Similarity will just defer to the Similarity's implementation: SimWeight#getValueForNormalization . For example, with Lucene's classic vector-space formula , this is implemented as the sum of squared weights: ` 3. [TopLevelBoost)](xref:Lucene.Net.Search.Weight#methods) — Performs query normalization: * topLevelBoost : A query-boost factor from any wrapping queries that should be multiplied into every document's score. For example, a TermQuery that is wrapped within a BooleanQuery with a boost of 5 would receive this value at this time. This allows the TermQuery (the leaf node in this case) to compute this up-front a single time (e.g. by multiplying into the IDF), rather than for every document. * norm`: Passes in a a normalization factor which may allow for comparing scores between queries. Typically a weight such as TermWeight that scores via a Similarity will just defer to the Similarity's implementation: SimWeight#normalize . 4. AcceptDocs) — Construct a new Scorer for this Weight. See The Scorer Class below for help defining a Scorer. As the name implies, the Scorer is responsible for doing the actual scoring of documents given the Query. 5. AcceptDocs) — Construct a new BulkScorer for this Weight. See The BulkScorer Class below for help defining a BulkScorer. This is an optional method, and most queries do not implement it. 6. Doc) — Provide a means for explaining why a given document was scored the way it was. Typically a weight such as TermWeight that scores via a Similarity will make use of the Similarity's implementation: Freq) . The Scorer Class The Scorer abstract class provides common scoring functionality for all Scorer implementations and is the heart of the Lucene scoring process. The Scorer defines the following abstract (some of them are not yet abstract, but will be in future versions and should be considered as such now) methods which must be implemented (some of them inherited from DocIdSetIterator ): 1. NextDoc — Advances to the next document that matches this Query, returning true if and only if there is another document that matches. 2. DocID — Returns the id of the Document that contains the match. 3. Score — Return the score of the current document. This value can be determined in any appropriate way for an application. For instance, the TermScorer simply defers to the configured Similarity: Freq) . 4. Freq — Returns the number of matches for the current document. This value can be determined in any appropriate way for an application. For instance, the TermScorer simply defers to the term frequency from the inverted index: DocsEnum.freq . 5. Advance — Skip ahead in the document matches to the document whose id is greater than or equal to the passed in value. In many instances, advance can be implemented more efficiently than simply looping through all the matching documents until the target document is identified. 6. GetChildren — Returns any child subscorers underneath this scorer. This allows for users to navigate the scorer hierarchy and receive more fine-grained details on the scoring process. The BulkScorer Class The BulkScorer scores a range of documents. There is only one abstract method: 1. Score — Score all documents up to but not including the specified max document. Why would I want to add my own Query? In a nutshell, you want to add your own custom Query implementation when you think that Lucene's aren't appropriate for the task that you want to do. You might be doing some cutting edge research or you need more information back out of Lucene (similar to Doug adding SpanQuery functionality). Appendix: Search Algorithm This section is mostly notes on stepping through the Scoring process and serves as fertilizer for the earlier sections. In the typical search application, a Query is passed to the IndexSearcher , beginning the scoring process. Once inside the IndexSearcher, a Collector is used for the scoring and sorting of the search results. These important objects are involved in a search: 1. The Weight object of the Query. The Weight object is an internal representation of the Query that allows the Query to be reused by the IndexSearcher. 2. The IndexSearcher that initiated the call. 3. A Filter for limiting the result set. Note, the Filter may be null. 4. A Sort object for specifying how to sort the results if the standard score-based sort method is not desired. Assuming we are not sorting (since sorting doesn't affect the raw Lucene score), we call one of the search methods of the IndexSearcher, passing in the Weight object created by IndexSearcher.createNormalizedWeight , Filter and the number of results we want. This method returns a TopDocs object, which is an internal collection of search results. The IndexSearcher creates a TopScoreDocCollector and passes it along with the Weight, Filter to another expert search method (for more on the Collector mechanism, see IndexSearcher ). The TopScoreDocCollector uses a PriorityQueue to collect the top results for the search. If a Filter is being used, some initial setup is done to determine which docs to include. Otherwise, we ask the Weight for a Scorer for each IndexReader segment and proceed by calling BulkScorer.score . At last, we are actually going to score some documents. The score method takes in the Collector (most likely the TopScoreDocCollector or TopFieldCollector) and does its business.Of course, here is where things get involved. The Scorer that is returned by the Weight object depends on what type of Query was submitted. In most real world applications with multiple query terms, the Scorer is going to be a BooleanScorer2 created from BooleanWeight (see the section on custom queries for info on changing this). Assuming a BooleanScorer2, we first initialize the Coordinator, which is used to apply the coord() factor. We then get a internal Scorer based on the required, optional and prohibited parts of the query. Using this internal Scorer, the BooleanScorer2 then proceeds into a while loop based on the Scorer.nextDoc method. The nextDoc() method advances to the next document matching the query. This is an abstract method in the Scorer class and is thus overridden by all derived implementations. If you have a simple OR query your internal Scorer is most likely a DisjunctionSumScorer, which essentially combines the scorers from the sub scorers of the OR'd terms. Classes AssertingBulkOutOfOrderScorer A crazy that wraps another but shuffles the order of the collected documents. AssertingBulkScorer Wraps a with additional checks. AssertingCollector Wraps another and checks that AcceptsDocsOutOfOrder is respected. AssertingIndexSearcher Helper class that adds some extra checks to ensure correct usage of and . AssertingQuery Assertion-enabled query. AssertingScorer Wraps a with additional checks. CheckHits Utility class for asserting expected hits in tests. ExplanationAsserter Asserts that the score explanation for every document matching a query corresponds with the true score. NOTE: this HitCollector should only be used with the and specified at when it is constructed. ExplanationAssertingSearcher An that implicitly checks hte explanation of every match whenever it executes a search. FCInvisibleMultiReader This is a that can be used for randomly wrapping other readers without creating insanity. The trick is to use an opaque/fake cache key. QueryUtils Utility class for sanity-checking queries. RandomSimilarityProvider Similarity implementation that randomizes Similarity implementations per-field. The choices are 'sticky', so the selected algorithm is always used for the same field. SearchEquivalenceTestBase Simple base class for checking search equivalence. Extend it, and write tests that create RandomTerm() s (all terms are single characters a-z), and use AssertSameSet(Query, Query) and AssertSubsetOf(Query, Query) . SearcherExpiredException Thrown when the lease for a searcher has expired. SetCollector Just collects document ids into a set. ShardSearchingTestBase Base test class for simulating distributed search across multiple shards. ShardSearchingTestBase.NodeState ShardSearchingTestBase.NodeState.ShardIndexSearcher Matches docs in the local shard but scores based on aggregated stats (\"mock distributed scoring\") from all nodes. ShardSearchingTestBase.SearcherAndVersion An and associated version (lease)"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.QueryUtils.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.QueryUtils.html",
    "title": "Class QueryUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryUtils Utility class for sanity-checking queries. Inheritance System.Object QueryUtils Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public static class QueryUtils : object Methods | Improve this Doc View Source Check(Query) Check the types of things query objects should be able to do. Declaration public static void Check(Query q) Parameters Type Name Description Query q | Improve this Doc View Source Check(Random, Query, IndexSearcher) Various query sanity checks on a searcher, some checks are only done for instance of . Declaration public static void Check(Random random, Query q1, IndexSearcher s) Parameters Type Name Description Random random A random instance (usually Random ). Query q1 A . IndexSearcher s An . See Also Check(Query) CheckFirstSkipTo(Query, IndexSearcher) CheckSkipTo(Query, IndexSearcher) CheckExplanations(Query, IndexSearcher) CheckEqual(Query, Query) | Improve this Doc View Source Check(Random, Query, IndexSearcher, Boolean) Declaration public static void Check(Random random, Query q1, IndexSearcher s, bool wrap) Parameters Type Name Description Random random Query q1 IndexSearcher s System.Boolean wrap | Improve this Doc View Source CheckEqual(Query, Query) Declaration public static void CheckEqual(Query q1, Query q2) Parameters Type Name Description Query q1 Query q2 | Improve this Doc View Source CheckExplanations(Query, IndexSearcher) Deep check that explanations of a query 'score' correctly. Declaration public static void CheckExplanations(Query q, IndexSearcher s) Parameters Type Name Description Query q IndexSearcher s | Improve this Doc View Source CheckFirstSkipTo(Query, IndexSearcher) Check that first skip on just created scorers always goes to the right doc. Declaration public static void CheckFirstSkipTo(Query q, IndexSearcher s) Parameters Type Name Description Query q IndexSearcher s | Improve this Doc View Source CheckHashEquals(Query) Check very basic and . Declaration public static void CheckHashEquals(Query q) Parameters Type Name Description Query q | Improve this Doc View Source CheckSkipTo(Query, IndexSearcher) Alternate scorer skipTo(),skipTo(),next(),next(),skipTo(),skipTo(), etc and ensure a hitcollector receives same docs and scores. Declaration public static void CheckSkipTo(Query q, IndexSearcher s) Parameters Type Name Description Query q IndexSearcher s | Improve this Doc View Source CheckUnequal(Query, Query) Declaration public static void CheckUnequal(Query q1, Query q2) Parameters Type Name Description Query q1 Query q2 | Improve this Doc View Source PurgeFieldCache(IndexReader) Declaration public static void PurgeFieldCache(IndexReader r) Parameters Type Name Description IndexReader r | Improve this Doc View Source WrapUnderlyingReader(Random, IndexSearcher, Int32) Given an , returns a new whose is a containing the of the original , as well as several \"empty\" s -- some of which will have deleted documents in them. This new should behave exactly the same as the original . Declaration public static IndexSearcher WrapUnderlyingReader(Random random, IndexSearcher s, int edge) Parameters Type Name Description Random random IndexSearcher s The searcher to wrap. System.Int32 edge If negative, s will be the first sub; if 0, s will be in the middle, if positive s will be the last sub. Returns Type Description IndexSearcher"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.RandomSimilarityProvider.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.RandomSimilarityProvider.html",
    "title": "Class RandomSimilarityProvider | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RandomSimilarityProvider Similarity implementation that randomizes Similarity implementations per-field. The choices are 'sticky', so the selected algorithm is always used for the same field. Inheritance System.Object RandomSimilarityProvider Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class RandomSimilarityProvider : PerFieldSimilarityWrapper Constructors | Improve this Doc View Source RandomSimilarityProvider(Random) Declaration public RandomSimilarityProvider(Random random) Parameters Type Name Description Random random Methods | Improve this Doc View Source Coord(Int32, Int32) Declaration public override float Coord(int overlap, int maxOverlap) Parameters Type Name Description System.Int32 overlap System.Int32 maxOverlap Returns Type Description System.Single | Improve this Doc View Source Get(String) Declaration public override Similarity Get(string field) Parameters Type Name Description System.String field Returns Type Description Similarity | Improve this Doc View Source QueryNorm(Single) Declaration public override float QueryNorm(float sumOfSquaredWeights) Parameters Type Name Description System.Single sumOfSquaredWeights Returns Type Description System.Single | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.SearchEquivalenceTestBase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.SearchEquivalenceTestBase.html",
    "title": "Class SearchEquivalenceTestBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchEquivalenceTestBase Simple base class for checking search equivalence. Extend it, and write tests that create RandomTerm() s (all terms are single characters a-z), and use AssertSameSet(Query, Query) and AssertSubsetOf(Query, Query) . Inheritance System.Object LuceneTestCase SearchEquivalenceTestBase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class SearchEquivalenceTestBase : LuceneTestCase Fields | Improve this Doc View Source m_analyzer Declaration protected static Analyzer m_analyzer Field Value Type Description Analyzer | Improve this Doc View Source m_directory Declaration protected static Directory m_directory Field Value Type Description Directory | Improve this Doc View Source m_reader Declaration protected static IndexReader m_reader Field Value Type Description IndexReader | Improve this Doc View Source m_s1 Declaration protected static IndexSearcher m_s1 Field Value Type Description IndexSearcher | Improve this Doc View Source m_s2 Declaration protected static IndexSearcher m_s2 Field Value Type Description IndexSearcher | Improve this Doc View Source m_stopword Declaration protected static string m_stopword Field Value Type Description System.String Methods | Improve this Doc View Source AfterClass() Declaration public override void AfterClass() Overrides LuceneTestCase.AfterClass() | Improve this Doc View Source AssertSameSet(Query, Query) Asserts that the documents returned by q1 are the same as of those returned by q2 . Declaration public virtual void AssertSameSet(Query q1, Query q2) Parameters Type Name Description Query q1 Query q2 | Improve this Doc View Source AssertSubsetOf(Query, Query) Asserts that the documents returned by q1 are a subset of those returned by q2 . Declaration public virtual void AssertSubsetOf(Query q1, Query q2) Parameters Type Name Description Query q1 Query q2 | Improve this Doc View Source AssertSubsetOf(Query, Query, Filter) Asserts that the documents returned by q1 are a subset of those returned by q2 . Both queries will be filtered by filter . Declaration protected virtual void AssertSubsetOf(Query q1, Query q2, Filter filter) Parameters Type Name Description Query q1 Query q2 Filter filter | Improve this Doc View Source BeforeClass() Declaration public override void BeforeClass() Overrides LuceneTestCase.BeforeClass() | Improve this Doc View Source RandomFilter() Returns a random filter over the document set. Declaration protected virtual Filter RandomFilter() Returns Type Description Filter | Improve this Doc View Source RandomTerm() Returns a term suitable for searching. Terms are single characters in lowercase (a-z). Declaration protected virtual Term RandomTerm() Returns Type Description Term"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.SearcherExpiredException.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.SearcherExpiredException.html",
    "title": "Class SearcherExpiredException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearcherExpiredException Thrown when the lease for a searcher has expired. Inheritance System.Object SearcherExpiredException Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class SearcherExpiredException : Exception Constructors | Improve this Doc View Source SearcherExpiredException(String) Declaration public SearcherExpiredException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.SetCollector.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.SetCollector.html",
    "title": "Class SetCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SetCollector Just collects document ids into a set. Inheritance System.Object SetCollector Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class SetCollector : ICollector Constructors | Improve this Doc View Source SetCollector(ISet<Nullable<Int32>>) Declaration public SetCollector(ISet<int?> bag) Parameters Type Name Description ISet < System.Nullable < System.Int32 >> bag Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.html",
    "title": "Class ShardSearchingTestBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShardSearchingTestBase Base test class for simulating distributed search across multiple shards. Inheritance System.Object LuceneTestCase ShardSearchingTestBase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class ShardSearchingTestBase : LuceneTestCase Fields | Improve this Doc View Source m_nodes Declaration protected ShardSearchingTestBase.NodeState[] m_nodes Field Value Type Description ShardSearchingTestBase.NodeState [] Methods | Improve this Doc View Source Finish() Declaration protected virtual void Finish() | Improve this Doc View Source Start(Int32, Double, Int32) Declaration protected virtual void Start(int numNodes, double runTimeSec, int maxSearcherAgeSeconds) Parameters Type Name Description System.Int32 numNodes System.Double runTimeSec System.Int32 maxSearcherAgeSeconds"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.NodeState.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.NodeState.html",
    "title": "Class ShardSearchingTestBase.NodeState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShardSearchingTestBase.NodeState Inheritance System.Object ShardSearchingTestBase.NodeState Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax protected sealed class NodeState : IDisposable Constructors | Improve this Doc View Source NodeState(ShardSearchingTestBase, Random, Int32, Int32) Declaration public NodeState(ShardSearchingTestBase shardSearchingTestBase, Random random, int nodeID, int numNodes) Parameters Type Name Description ShardSearchingTestBase shardSearchingTestBase Random random System.Int32 nodeID System.Int32 numNodes Properties | Improve this Doc View Source Dir Declaration public Directory Dir { get; } Property Value Type Description Directory | Improve this Doc View Source Mgr Declaration public SearcherManager Mgr { get; } Property Value Type Description SearcherManager | Improve this Doc View Source MyNodeID Declaration public int MyNodeID { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Searchers Declaration public SearcherLifetimeManager Searchers { get; } Property Value Type Description SearcherLifetimeManager | Improve this Doc View Source Writer Declaration public IndexWriter Writer { get; } Property Value Type Description IndexWriter Methods | Improve this Doc View Source Acquire() Declaration public ShardSearchingTestBase.NodeState.ShardIndexSearcher Acquire() Returns Type Description ShardSearchingTestBase.NodeState.ShardIndexSearcher | Improve this Doc View Source Acquire(Int64[]) Declaration public ShardSearchingTestBase.NodeState.ShardIndexSearcher Acquire(long[] nodeVersions) Parameters Type Name Description System.Int64 [] nodeVersions Returns Type Description ShardSearchingTestBase.NodeState.ShardIndexSearcher | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source GetCurrentNodeVersions() Declaration public long[] GetCurrentNodeVersions() Returns Type Description System.Int64 [] | Improve this Doc View Source InitSearcher(Int64[]) Declaration public void InitSearcher(long[] nodeVersions) Parameters Type Name Description System.Int64 [] nodeVersions | Improve this Doc View Source Release(ShardSearchingTestBase.NodeState.ShardIndexSearcher) Declaration public void Release(ShardSearchingTestBase.NodeState.ShardIndexSearcher s) Parameters Type Name Description ShardSearchingTestBase.NodeState.ShardIndexSearcher s | Improve this Doc View Source Reopen() Declaration public void Reopen() | Improve this Doc View Source UpdateNodeVersion(Int32, Int64) Declaration public void UpdateNodeVersion(int nodeID, long version) Parameters Type Name Description System.Int32 nodeID System.Int64 version"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.NodeState.ShardIndexSearcher.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.NodeState.ShardIndexSearcher.html",
    "title": "Class ShardSearchingTestBase.NodeState.ShardIndexSearcher | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShardSearchingTestBase.NodeState.ShardIndexSearcher Matches docs in the local shard but scores based on aggregated stats (\"mock distributed scoring\") from all nodes. Inheritance System.Object ShardSearchingTestBase.NodeState.ShardIndexSearcher Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax public class ShardIndexSearcher : IndexSearcher Constructors | Improve this Doc View Source ShardIndexSearcher(ShardSearchingTestBase.NodeState, Int64[], IndexReader, Int32) Declaration public ShardIndexSearcher(ShardSearchingTestBase.NodeState nodeState, long[] nodeVersions, IndexReader localReader, int nodeID) Parameters Type Name Description ShardSearchingTestBase.NodeState nodeState System.Int64 [] nodeVersions IndexReader localReader System.Int32 nodeID Properties | Improve this Doc View Source MyNodeID Declaration public int MyNodeID { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CollectionStatistics(String) Declaration public override CollectionStatistics CollectionStatistics(string field) Parameters Type Name Description System.String field Returns Type Description CollectionStatistics | Improve this Doc View Source GetNodeVersions() Declaration public long[] GetNodeVersions() Returns Type Description System.Int64 [] | Improve this Doc View Source LocalSearch(Query, Int32) Declaration public virtual TopDocs LocalSearch(Query query, int numHits) Parameters Type Name Description Query query System.Int32 numHits Returns Type Description TopDocs | Improve this Doc View Source LocalSearch(Query, Int32, Sort) Declaration public virtual TopFieldDocs LocalSearch(Query query, int numHits, Sort sort) Parameters Type Name Description Query query System.Int32 numHits Sort sort Returns Type Description TopFieldDocs | Improve this Doc View Source LocalSearchAfter(ScoreDoc, Query, Int32) Declaration public virtual TopDocs LocalSearchAfter(ScoreDoc after, Query query, int numHits) Parameters Type Name Description ScoreDoc after Query query System.Int32 numHits Returns Type Description TopDocs | Improve this Doc View Source Rewrite(Query) Declaration public override Query Rewrite(Query original) Parameters Type Name Description Query original Returns Type Description Query | Improve this Doc View Source Search(Query, Int32) Declaration public override TopDocs Search(Query query, int numHits) Parameters Type Name Description Query query System.Int32 numHits Returns Type Description TopDocs | Improve this Doc View Source Search(Query, Int32, Sort) Declaration public override TopFieldDocs Search(Query query, int numHits, Sort sort) Parameters Type Name Description Query query System.Int32 numHits Sort sort Returns Type Description TopFieldDocs | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Int32) Declaration public override TopDocs SearchAfter(ScoreDoc after, Query query, int numHits) Parameters Type Name Description ScoreDoc after Query query System.Int32 numHits Returns Type Description TopDocs | Improve this Doc View Source TermStatistics(Term, TermContext) Declaration public override TermStatistics TermStatistics(Term term, TermContext context) Parameters Type Name Description Term term TermContext context Returns Type Description TermStatistics"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.SearcherAndVersion.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Search.ShardSearchingTestBase.SearcherAndVersion.html",
    "title": "Class ShardSearchingTestBase.SearcherAndVersion | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShardSearchingTestBase.SearcherAndVersion An and associated version (lease) Inheritance System.Object ShardSearchingTestBase.SearcherAndVersion Namespace : Lucene.Net.Search Assembly : Lucene.Net.TestFramework.dll Syntax protected class SearcherAndVersion : object Constructors | Improve this Doc View Source SearcherAndVersion(IndexSearcher, Int64) Declaration public SearcherAndVersion(IndexSearcher searcher, long version) Parameters Type Name Description IndexSearcher searcher System.Int64 version Properties | Improve this Doc View Source Searcher Declaration public IndexSearcher Searcher { get; } Property Value Type Description IndexSearcher | Improve this Doc View Source Version Declaration public long Version { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.BaseDirectoryTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.BaseDirectoryTestCase.html",
    "title": "Class BaseDirectoryTestCase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseDirectoryTestCase Base class for per-Directory tests. Inheritance System.Object LuceneTestCase BaseDirectoryTestCase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Store Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseDirectoryTestCase : LuceneTestCase Methods | Improve this Doc View Source GetDirectory(DirectoryInfo) A subclass returns the to be tested; if it's an FS-based directory it should point to the specified path, else it can ignore it. Declaration protected abstract Directory GetDirectory(DirectoryInfo path) Parameters Type Name Description DirectoryInfo path Returns Type Description Directory | Improve this Doc View Source TestByte() Declaration public virtual void TestByte() | Improve this Doc View Source TestChecksum() Declaration public virtual void TestChecksum() | Improve this Doc View Source TestCopyBytes() Declaration public virtual void TestCopyBytes() | Improve this Doc View Source TestCopyBytesWithThreads() Declaration public virtual void TestCopyBytesWithThreads() | Improve this Doc View Source TestDeleteFile() Declaration public virtual void TestDeleteFile() | Improve this Doc View Source TestDetectClose() Make sure directory throws if you try to after disposing. Declaration public virtual void TestDetectClose() | Improve this Doc View Source TestFileExistsInListAfterCreated() LUCENE-1468: once we create an output, we should see it in the dir listing. Declaration public virtual void TestFileExistsInListAfterCreated() | Improve this Doc View Source TestFsyncDoesntCreateNewFiles() Declaration public virtual void TestFsyncDoesntCreateNewFiles() | Improve this Doc View Source TestIllegalEOF() Declaration public virtual void TestIllegalEOF() | Improve this Doc View Source TestInt16() Declaration public virtual void TestInt16() | Improve this Doc View Source TestInt32() Declaration public virtual void TestInt32() | Improve this Doc View Source TestInt64() Declaration public virtual void TestInt64() | Improve this Doc View Source TestLargeWrites() This test that writes larger than the size of the buffer output will correctly increment the file pointer. Declaration public virtual void TestLargeWrites() | Improve this Doc View Source TestNoDir() Declaration public virtual void TestNoDir() | Improve this Doc View Source TestSeekToEndOfFile() Declaration public virtual void TestSeekToEndOfFile() | Improve this Doc View Source TestSeekToEOFThenBack() Declaration public void TestSeekToEOFThenBack() | Improve this Doc View Source TestString() Declaration public virtual void TestString() | Improve this Doc View Source TestVInt32() Declaration public virtual void TestVInt32() | Improve this Doc View Source TestVInt64() Declaration public virtual void TestVInt64()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.BaseDirectoryWrapper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.BaseDirectoryWrapper.html",
    "title": "Class BaseDirectoryWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseDirectoryWrapper Calls check index on dispose. Inheritance System.Object BaseDirectoryWrapper MockDirectoryWrapper Namespace : Lucene.Net.Store Assembly : Lucene.Net.TestFramework.dll Syntax public class BaseDirectoryWrapper : FilterDirectory Constructors | Improve this Doc View Source BaseDirectoryWrapper(Directory) Declaration public BaseDirectoryWrapper(Directory delegate) Parameters Type Name Description Directory delegate Properties | Improve this Doc View Source CheckIndexOnDispose Set whether or not checkindex should be run on dispose Declaration public virtual bool CheckIndexOnDispose { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source CrossCheckTermVectorsOnDispose Declaration public virtual bool CrossCheckTermVectorsOnDispose { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsOpen Declaration public virtual bool IsOpen { get; protected set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Copy(Directory, String, String, IOContext) Declaration public override void Copy(Directory to, string src, string dest, IOContext context) Parameters Type Name Description Directory to System.String src System.String dest IOContext context | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInputSlicer | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.Failure.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.Failure.html",
    "title": "Class Failure | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Failure Objects that represent fail-able conditions. Objects of a derived class are created and registered with the mock directory. After register, each object will be invoked once for each first write of a file, giving the object a chance to throw an . Inheritance System.Object Failure Namespace : Lucene.Net.Store Assembly : Lucene.Net.TestFramework.dll Syntax public class Failure : object Fields | Improve this Doc View Source m_doFail Declaration protected bool m_doFail Field Value Type Description System.Boolean Methods | Improve this Doc View Source ClearDoFail() Declaration public virtual void ClearDoFail() | Improve this Doc View Source Eval(MockDirectoryWrapper) Eval is called on the first write of every new file. Declaration public virtual void Eval(MockDirectoryWrapper dir) Parameters Type Name Description MockDirectoryWrapper dir | Improve this Doc View Source Reset() Reset should set the state of the failure to its default (freshly constructed) state. Reset is convenient for tests that want to create one failure object and then reuse it in multiple cases. This, combined with the fact that Failure subclasses are often anonymous classes makes reset difficult to do otherwise. A typical example of use is Failure failure = new Failure() { ... }; ... mock.FailOn(failure.Reset()) Declaration public virtual Failure Reset() Returns Type Description Failure | Improve this Doc View Source SetDoFail() Declaration public virtual void SetDoFail()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.FakeIOException.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.FakeIOException.html",
    "title": "Class FakeIOException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FakeIOException Use this when throwing fake , e.g. from Failure . Inheritance System.Object FakeIOException Namespace : Lucene.Net.Store Assembly : Lucene.Net.TestFramework.dll Syntax public class FakeIOException : IOException Constructors | Improve this Doc View Source FakeIOException() Declaration public FakeIOException()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.html",
    "title": "Namespace Lucene.Net.Store | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Store <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Binary i/o API, used for all index data. Classes BaseDirectoryTestCase Base class for per-Directory tests. BaseDirectoryWrapper Calls check index on dispose. Failure Objects that represent fail-able conditions. Objects of a derived class are created and registered with the mock directory. After register, each object will be invoked once for each first write of a file, giving the object a chance to throw an . FakeIOException Use this when throwing fake , e.g. from Failure . MockDirectoryWrapper This is a Directory Wrapper that adds methods intended to be used only by unit tests. It also adds a number of features useful for testing: Instances created by NewDirectory() are tracked to ensure they are disposed by the test. When a MockDirectoryWrapper is disposed, it will throw an exception if it has any open files against it (with a stacktrace indicating where they were opened from). When a MockDirectoryWrapper is disposed, it runs to test if the index was corrupted. MockDirectoryWrapper simulates some \"features\" of Windows, such as refusing to write/delete to open files. MockIndexInputWrapper Used by MockDirectoryWrapper to create an input stream that keeps track of when it's been disposed. MockIndexOutputWrapper Used by MockDirectoryWrapper to create an output stream that will throw an on fake disk full, track max disk space actually used, and maybe throw random s. MockLockFactoryWrapper Used by MockDirectoryWrapper to wrap another factory and track open locks. TestHelper This class provides access to namespace-level features defined in the Store namespace. It is used for testing only. Enums Throttling Enum for controlling hard disk throttling. Set via Throttling WARNING: can make tests very slow."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockDirectoryWrapper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockDirectoryWrapper.html",
    "title": "Class MockDirectoryWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockDirectoryWrapper This is a Directory Wrapper that adds methods intended to be used only by unit tests. It also adds a number of features useful for testing: Instances created by NewDirectory() are tracked to ensure they are disposed by the test. When a MockDirectoryWrapper is disposed, it will throw an exception if it has any open files against it (with a stacktrace indicating where they were opened from). When a MockDirectoryWrapper is disposed, it runs to test if the index was corrupted. MockDirectoryWrapper simulates some \"features\" of Windows, such as refusing to write/delete to open files. Inheritance System.Object BaseDirectoryWrapper MockDirectoryWrapper Inherited Members BaseDirectoryWrapper.IsOpen BaseDirectoryWrapper.CheckIndexOnDispose BaseDirectoryWrapper.CrossCheckTermVectorsOnDispose Namespace : Lucene.Net.Store Assembly : Lucene.Net.TestFramework.dll Syntax public class MockDirectoryWrapper : BaseDirectoryWrapper Constructors | Improve this Doc View Source MockDirectoryWrapper(Random, Directory) Declaration public MockDirectoryWrapper(Random random, Directory delegate) Parameters Type Name Description Random random Directory delegate Fields | Improve this Doc View Source m_lockFactory Declaration protected LockFactory m_lockFactory Field Value Type Description LockFactory Properties | Improve this Doc View Source AllowRandomFileNotFoundException If set to true (the default), when we throw random on OpenInput(String, IOContext) or CreateOutput(String, IOContext) , we may sometimes throw . Declaration public virtual bool AllowRandomFileNotFoundException { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source AllowReadingFilesStillOpenForWrite If set to true, you can open an inputstream on a file that is still open for writes. Declaration public virtual bool AllowReadingFilesStillOpenForWrite { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source AssertNoDeleteOpenFile Trip a test assert if there is an attempt to delete an open file. Declaration public virtual bool AssertNoDeleteOpenFile { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source AssertNoUnreferencedFilesOnClose Declaration public virtual bool AssertNoUnreferencedFilesOnClose { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source FailOnCreateOutput Declaration public virtual bool FailOnCreateOutput { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source FailOnOpenInput Declaration public virtual bool FailOnOpenInput { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source InputCloneCount Declaration public virtual int InputCloneCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source LockFactory Declaration public override LockFactory LockFactory { get; } Property Value Type Description LockFactory | Improve this Doc View Source MaxSizeInBytes Declaration public virtual long MaxSizeInBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source MaxUsedSizeInBytes Returns the peek actual storage used (bytes) in this directory. Declaration public virtual long MaxUsedSizeInBytes { get; } Property Value Type Description System.Int64 | Improve this Doc View Source NoDeleteOpenFile Emulate Windows whereby deleting an open file is not allowed (raise ). Declaration public virtual bool NoDeleteOpenFile { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source PreventDoubleWrite If set to true, we throw an if the same file is opened by CreateOutput(String, IOContext) , ever. Declaration public virtual bool PreventDoubleWrite { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source RandomIOExceptionRate If 0.0, no exceptions will be thrown. Else this should be a double 0.0 - 1.0. We will randomly throw an on the first write to a based on this probability. Declaration public virtual double RandomIOExceptionRate { get; set; } Property Value Type Description System.Double | Improve this Doc View Source RandomIOExceptionRateOnOpen If 0.0, no exceptions will be thrown during OpenInput(String, IOContext) and CreateOutput(String, IOContext) . Else this should be a double 0.0 - 1.0 and we will randomly throw an in OpenInput(String, IOContext) and CreateOutput(String, IOContext) with this probability. Declaration public virtual double RandomIOExceptionRateOnOpen { get; set; } Property Value Type Description System.Double | Improve this Doc View Source Throttling Declaration public virtual Throttling Throttling { get; set; } Property Value Type Description Throttling | Improve this Doc View Source TrackDiskUsage Declaration public virtual bool TrackDiskUsage { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source WrapLockFactory Set to false if you want to return the pure lockfactory and not wrap it with MockLockFactoryWrapper . Be careful if you turn this off: MockDirectoryWrapper might no longer be able to detect if you forget to close an , and spit out horribly scary confusing exceptions instead of simply telling you that. Declaration public virtual bool WrapLockFactory { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source ClearCrash() Declaration public virtual void ClearCrash() | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string name) Parameters Type Name Description System.String name | Improve this Doc View Source Copy(Directory, String, String, IOContext) Declaration public override void Copy(Directory to, string src, string dest, IOContext context) Parameters Type Name Description Directory to System.String src System.String dest IOContext context Overrides BaseDirectoryWrapper.Copy(Directory, String, String, IOContext) | Improve this Doc View Source Crash() Simulates a crash of OS or machine by overwriting unsynced files. Declaration public virtual void Crash() | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInputSlicer Overrides BaseDirectoryWrapper.CreateSlicer(String, IOContext) | Improve this Doc View Source DeleteFile(String) Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides BaseDirectoryWrapper.Dispose(Boolean) | Improve this Doc View Source FailOn(Failure) Add a Failure object to the list of objects to be evaluated at every potential failure point. Declaration public virtual void FailOn(Failure fail) Parameters Type Name Description Failure fail | Improve this Doc View Source FileExists(String) Declaration public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean | Improve this Doc View Source FileLength(String) Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 | Improve this Doc View Source GetLockID() Declaration public override string GetLockID() Returns Type Description System.String | Improve this Doc View Source GetOpenDeletedFiles() Declaration public virtual ICollection<string> GetOpenDeletedFiles() Returns Type Description ICollection < System.String > | Improve this Doc View Source GetRecomputedActualSizeInBytes() Like GetRecomputedSizeInBytes() , but, uses actual file lengths rather than buffer allocations (which are quantized up to nearest (now 1024) bytes. Declaration public long GetRecomputedActualSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source GetRecomputedSizeInBytes() Provided for testing purposes. Use GetSizeInBytes() instead. Declaration public long GetRecomputedSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source GetSizeInBytes() Declaration public long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source ListAll() Declaration public override string[] ListAll() Returns Type Description System.String [] | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string name) Parameters Type Name Description System.String name Returns Type Description Lock | Improve this Doc View Source OpenInput(String, IOContext) Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput | Improve this Doc View Source RemoveIndexInput(IndexInput, String) Declaration public virtual void RemoveIndexInput(IndexInput in, string name) Parameters Type Name Description IndexInput in System.String name | Improve this Doc View Source RemoveIndexOutput(IndexOutput, String) Declaration public virtual void RemoveIndexOutput(IndexOutput out, string name) Parameters Type Name Description IndexOutput out System.String name | Improve this Doc View Source ResetMaxUsedSizeInBytes() Declaration public virtual void ResetMaxUsedSizeInBytes() | Improve this Doc View Source SetLockFactory(LockFactory) Declaration public override void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description ICollection < System.String > names"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockIndexInputWrapper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockIndexInputWrapper.html",
    "title": "Class MockIndexInputWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockIndexInputWrapper Used by MockDirectoryWrapper to create an input stream that keeps track of when it's been disposed. Inheritance System.Object MockIndexInputWrapper Namespace : Lucene.Net.Store Assembly : Lucene.Net.TestFramework.dll Syntax public class MockIndexInputWrapper : IndexInput Constructors | Improve this Doc View Source MockIndexInputWrapper(MockDirectoryWrapper, String, IndexInput) Construct an empty output buffer. Declaration public MockIndexInputWrapper(MockDirectoryWrapper dir, string name, IndexInput delegate) Parameters Type Name Description MockDirectoryWrapper dir System.String name IndexInput delegate Properties | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32, Boolean) Declaration public override void ReadBytes(byte[] b, int offset, int len, bool useBuffer) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len System.Boolean useBuffer | Improve this Doc View Source ReadInt16() NOTE: this was readShort() in Lucene Declaration public override short ReadInt16() Returns Type Description System.Int16 | Improve this Doc View Source ReadInt32() NOTE: this was readInt() in Lucene Declaration public override int ReadInt32() Returns Type Description System.Int32 | Improve this Doc View Source ReadInt64() NOTE: this was readLong() in Lucene Declaration public override long ReadInt64() Returns Type Description System.Int64 | Improve this Doc View Source ReadString() Declaration public override string ReadString() Returns Type Description System.String | Improve this Doc View Source ReadStringStringMap() Declaration public override IDictionary<string, string> ReadStringStringMap() Returns Type Description IDictionary < System.String , System.String > | Improve this Doc View Source ReadVInt32() NOTE: this was readVInt() in Lucene Declaration public override int ReadVInt32() Returns Type Description System.Int32 | Improve this Doc View Source ReadVInt64() NOTE: this was readVLong() in Lucene Declaration public override long ReadVInt64() Returns Type Description System.Int64 | Improve this Doc View Source Seek(Int64) Declaration public override void Seek(long pos) Parameters Type Name Description System.Int64 pos | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockIndexOutputWrapper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockIndexOutputWrapper.html",
    "title": "Class MockIndexOutputWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockIndexOutputWrapper Used by MockDirectoryWrapper to create an output stream that will throw an on fake disk full, track max disk space actually used, and maybe throw random s. Inheritance System.Object MockIndexOutputWrapper Namespace : Lucene.Net.Store Assembly : Lucene.Net.TestFramework.dll Syntax public class MockIndexOutputWrapper : IndexOutput Constructors | Improve this Doc View Source MockIndexOutputWrapper(MockDirectoryWrapper, IndexOutput, String) Construct an empty output buffer. Declaration public MockIndexOutputWrapper(MockDirectoryWrapper dir, IndexOutput delegate, string name) Parameters Type Name Description MockDirectoryWrapper dir IndexOutput delegate System.String name Properties | Improve this Doc View Source Checksum Declaration public override long Checksum { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Length Declaration public override long Length { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CopyBytes(DataInput, Int64) Declaration public override void CopyBytes(DataInput input, long numBytes) Parameters Type Name Description DataInput input System.Int64 numBytes | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Flush() Declaration public override void Flush() | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 | Improve this Doc View Source Seek(Int64) Declaration public override void Seek(long pos) Parameters Type Name Description System.Int64 pos | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockLockFactoryWrapper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.MockLockFactoryWrapper.html",
    "title": "Class MockLockFactoryWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MockLockFactoryWrapper Used by MockDirectoryWrapper to wrap another factory and track open locks. Inheritance System.Object MockLockFactoryWrapper Namespace : Lucene.Net.Store Assembly : Lucene.Net.TestFramework.dll Syntax public class MockLockFactoryWrapper : LockFactory Constructors | Improve this Doc View Source MockLockFactoryWrapper(MockDirectoryWrapper, LockFactory) Declaration public MockLockFactoryWrapper(MockDirectoryWrapper dir, LockFactory delegate) Parameters Type Name Description MockDirectoryWrapper dir LockFactory delegate Properties | Improve this Doc View Source LockPrefix Declaration public override string LockPrefix { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.TestHelper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.TestHelper.html",
    "title": "Class TestHelper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TestHelper This class provides access to namespace-level features defined in the Store namespace. It is used for testing only. Inheritance System.Object TestHelper Namespace : Lucene.Net.Store Assembly : Lucene.Net.TestFramework.dll Syntax public static class TestHelper : object Methods | Improve this Doc View Source IsSimpleFSIndexInput(IndexInput) Returns true if the instance of the provided input stream is actually an . Declaration public static bool IsSimpleFSIndexInput(IndexInput is) Parameters Type Name Description IndexInput is Returns Type Description System.Boolean | Improve this Doc View Source IsSimpleFSIndexInputClone(IndexInput) Returns true if the provided input stream is an and is a clone, that is it does not own its underlying file descriptor. Declaration public static bool IsSimpleFSIndexInputClone(IndexInput is) Parameters Type Name Description IndexInput is Returns Type Description System.Boolean | Improve this Doc View Source IsSimpleFSIndexInputOpen(IndexInput) Given an instance of , this method returns true if the underlying file descriptor is valid, and false otherwise. this can be used to determine if the OS file has been closed. The descriptor becomes invalid when the non-clone instance of the that owns this descriptor is disposed. However, the descriptor may possibly become invalid in other ways as well. Declaration public static bool IsSimpleFSIndexInputOpen(IndexInput is) Parameters Type Name Description IndexInput is Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Store.Throttling.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Store.Throttling.html",
    "title": "Enum Throttling | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Throttling Enum for controlling hard disk throttling. Set via Throttling WARNING: can make tests very slow. Namespace : Lucene.Net.Store Assembly : Lucene.Net.TestFramework.dll Syntax public enum Throttling : int Fields Name Description ALWAYS always emulate a slow hard disk. could be very slow! NEVER never throttle output SOMETIMES sometimes (2% of the time) emulate a slow hard disk."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Support.AbstractBeforeAfterRule.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Support.AbstractBeforeAfterRule.html",
    "title": "Class AbstractBeforeAfterRule | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractBeforeAfterRule LUCENENET specific for mimicking the JUnit rule functionality. We simplify things by just running the rules inside LuceneTestCase. Inheritance System.Object AbstractBeforeAfterRule Namespace : Lucene.Net.Support Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class AbstractBeforeAfterRule : object Methods | Improve this Doc View Source After(LuceneTestCase) Declaration public virtual void After(LuceneTestCase testInstance) Parameters Type Name Description LuceneTestCase testInstance | Improve this Doc View Source Before(LuceneTestCase) Declaration public virtual void Before(LuceneTestCase testInstance) Parameters Type Name Description LuceneTestCase testInstance"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Support.ApiScanTestBase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Support.ApiScanTestBase.html",
    "title": "Class ApiScanTestBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ApiScanTestBase LUCENENET specific - functionality for scanning the API to ensure naming and .NET conventions are followed consistently. Inheritance System.Object LuceneTestCase ApiScanTestBase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Support Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class ApiScanTestBase : LuceneTestCase Methods | Improve this Doc View Source TestClassNames(Type) Declaration public virtual void TestClassNames(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestForMembersAcceptingOrReturningIEnumerable(Type) Declaration public virtual void TestForMembersAcceptingOrReturningIEnumerable(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestForMembersAcceptingOrReturningIEnumerable(Type, String) Declaration public virtual void TestForMembersAcceptingOrReturningIEnumerable(Type typeFromTargetAssembly, string exceptionRegex) Parameters Type Name Description Type typeFromTargetAssembly System.String exceptionRegex | Improve this Doc View Source TestForMembersAcceptingOrReturningListOrDictionary(Type) Declaration public virtual void TestForMembersAcceptingOrReturningListOrDictionary(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestForMembersAcceptingOrReturningListOrDictionary(Type, String) Declaration public virtual void TestForMembersAcceptingOrReturningListOrDictionary(Type typeFromTargetAssembly, string exceptionRegex) Parameters Type Name Description Type typeFromTargetAssembly System.String exceptionRegex | Improve this Doc View Source TestForMethodsThatReturnWritableArray(Type) Declaration public virtual void TestForMethodsThatReturnWritableArray(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestForPropertiesThatReturnArray(Type) Declaration public virtual void TestForPropertiesThatReturnArray(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestForPropertiesWithNoGetter(Type) Declaration public virtual void TestForPropertiesWithNoGetter(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestForPublicMembersContainingComparer(Type) Declaration public virtual void TestForPublicMembersContainingComparer(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestForPublicMembersContainingNonNetNumeric(Type) Declaration public virtual void TestForPublicMembersContainingNonNetNumeric(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestForPublicMembersNamedSize(Type) Declaration public virtual void TestForPublicMembersNamedSize(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestForPublicMembersWithNullableEnum(Type) Declaration public virtual void TestForPublicMembersWithNullableEnum(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestForTypesContainingNonNetNumeric(Type) Declaration public virtual void TestForTypesContainingNonNetNumeric(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestInterfaceNames(Type) Declaration public virtual void TestInterfaceNames(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestMethodParameterNames(Type) Declaration public virtual void TestMethodParameterNames(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestPrivateFieldNames(Type) Declaration public virtual void TestPrivateFieldNames(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestPrivateFieldNames(Type, String) Declaration public virtual void TestPrivateFieldNames(Type typeFromTargetAssembly, string exceptionRegex) Parameters Type Name Description Type typeFromTargetAssembly System.String exceptionRegex | Improve this Doc View Source TestProtectedFieldNames(Type) Declaration public virtual void TestProtectedFieldNames(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly | Improve this Doc View Source TestPublicFields(Type) Declaration public virtual void TestPublicFields(Type typeFromTargetAssembly) Parameters Type Name Description Type typeFromTargetAssembly"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Support.CultureInfoSupport.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Support.CultureInfoSupport.html",
    "title": "Class CultureInfoSupport | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CultureInfoSupport Inheritance System.Object CultureInfoSupport Namespace : Lucene.Net.Support Assembly : Lucene.Net.TestFramework.dll Syntax public static class CultureInfoSupport : object Methods | Improve this Doc View Source GetNeutralAndSpecificCultures() Declaration public static CultureInfo[] GetNeutralAndSpecificCultures() Returns Type Description CultureInfo []"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Support.ExceptionSerializationTestBase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Support.ExceptionSerializationTestBase.html",
    "title": "Class ExceptionSerializationTestBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExceptionSerializationTestBase Inheritance System.Object LuceneTestCase ExceptionSerializationTestBase Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Support Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class ExceptionSerializationTestBase : LuceneTestCase Methods | Improve this Doc View Source TryInstantiate(Type) Declaration protected static object TryInstantiate(Type type) Parameters Type Name Description Type type Returns Type Description System.Object | Improve this Doc View Source TypeCanSerialize<T>(T) Declaration protected static bool TypeCanSerialize<T>(T exception) Parameters Type Name Description T exception Returns Type Description System.Boolean Type Parameters Name Description T"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Support.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Support.html",
    "title": "Namespace Lucene.Net.Support | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Support Classes AbstractBeforeAfterRule LUCENENET specific for mimicking the JUnit rule functionality. We simplify things by just running the rules inside LuceneTestCase. ApiScanTestBase LUCENENET specific - functionality for scanning the API to ensure naming and .NET conventions are followed consistently. CultureInfoSupport ExceptionSerializationTestBase"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.TestFramework.Analysis.CrankyTokenFilter.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.TestFramework.Analysis.CrankyTokenFilter.html",
    "title": "Class CrankyTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CrankyTokenFilter Throws from random methods. This can be used to simulate a buggy analyzer in , where we must delete the document but not abort everything in the buffer. Inheritance System.Object CrankyTokenFilter Namespace : Lucene.Net.TestFramework.Analysis Assembly : Lucene.Net.TestFramework.dll Syntax public sealed class CrankyTokenFilter : TokenFilter Constructors | Improve this Doc View Source CrankyTokenFilter(TokenStream, Random) Creates a new CrankyTokenFilter . Declaration public CrankyTokenFilter(TokenStream input, Random random) Parameters Type Name Description TokenStream input Random random Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source End() Declaration public override void End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override void Reset()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.TestFramework.Analysis.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.TestFramework.Analysis.html",
    "title": "Namespace Lucene.Net.TestFramework.Analysis | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.TestFramework.Analysis Classes CrankyTokenFilter Throws from random methods. This can be used to simulate a buggy analyzer in , where we must delete the document but not abort everything in the buffer."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.Automaton.AutomatonTestUtil.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.Automaton.AutomatonTestUtil.html",
    "title": "Class AutomatonTestUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AutomatonTestUtil Utilities for testing automata. Capable of generating random regular expressions, and automata, and also provides a number of very basic unoptimized implementations (*slow) for testing. Inheritance System.Object AutomatonTestUtil Namespace : Automaton Assembly : Lucene.Net.TestFramework.dll Syntax public static class AutomatonTestUtil : object Methods | Improve this Doc View Source AssertNoDetachedStates(Automaton) Checks that an automaton has no detached states that are unreachable from the initial state. Declaration public static void AssertNoDetachedStates(Automaton a) Parameters Type Name Description Automaton a | Improve this Doc View Source DeterminizeSimple(Automaton) Simple, original brics implementation of Determinize() Declaration public static void DeterminizeSimple(Automaton a) Parameters Type Name Description Automaton a | Improve this Doc View Source DeterminizeSimple(Automaton, ISet<State>) Simple, original brics implementation of Determinize() Determinizes the given automaton using the given set of initial states. Declaration public static void DeterminizeSimple(Automaton a, ISet<State> initialset) Parameters Type Name Description Automaton a ISet < State > initialset | Improve this Doc View Source IsFiniteSlow(Automaton) Returns true if the language of this automaton is finite. WARNING: this method is slow, it will blow up if the automaton is large. this is only used to test the correctness of our faster implementation. Declaration public static bool IsFiniteSlow(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source MinimizeSimple(Automaton) Simple, original brics implementation of Brzozowski Minimize() Declaration public static void MinimizeSimple(Automaton a) Parameters Type Name Description Automaton a | Improve this Doc View Source RandomAutomaton(Random) Return a random NFA/DFA for testing. Declaration public static Automaton RandomAutomaton(Random random) Parameters Type Name Description Random random Returns Type Description Automaton | Improve this Doc View Source RandomRegexp(Random) Returns random string, including full unicode range. Declaration public static string RandomRegexp(Random r) Parameters Type Name Description Random r Returns Type Description System.String"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.Automaton.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.Automaton.html",
    "title": "Namespace Lucene.Net.Util.Automaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Automaton <!-- dk.brics.automaton Copyright (c) 2001-2009 Anders Moeller All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> Finite-state automaton for regular expressions. This package contains a full DFA/NFA implementation with Unicode alphabet and support for all standard (and a number of non-standard) regular expression operations. The most commonly used functionality is located in the classes Automaton and RegExp . For more information, go to the package home page at http://www.brics.dk/automaton/ . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Classes AutomatonTestUtil Utilities for testing automata. Capable of generating random regular expressions, and automata, and also provides a number of very basic unoptimized implementations (*slow) for testing. RandomAcceptedStrings Lets you retrieve random strings accepted by an Lucene.Net.Util.Automaton . Once created, call GetRandomAcceptedString(Random) to get a new string (in UTF-32 codepoints)."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.Automaton.RandomAcceptedStrings.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.Automaton.RandomAcceptedStrings.html",
    "title": "Class RandomAcceptedStrings | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RandomAcceptedStrings Lets you retrieve random strings accepted by an Lucene.Net.Util.Automaton . Once created, call GetRandomAcceptedString(Random) to get a new string (in UTF-32 codepoints). Inheritance System.Object RandomAcceptedStrings Namespace : Automaton Assembly : Lucene.Net.TestFramework.dll Syntax public class RandomAcceptedStrings : object Constructors | Improve this Doc View Source RandomAcceptedStrings(Automaton) Declaration public RandomAcceptedStrings(Automaton a) Parameters Type Name Description Automaton a Methods | Improve this Doc View Source GetRandomAcceptedString(Random) Declaration public int[] GetRandomAcceptedString(Random r) Parameters Type Name Description Random r Returns Type Description System.Int32 []"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.BaseDocIdSetTestCase-1.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.BaseDocIdSetTestCase-1.html",
    "title": "Class BaseDocIdSetTestCase<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseDocIdSetTestCase<T> Base test class for s. Inheritance System.Object LuceneTestCase BaseDocIdSetTestCase<T> Inherited Members LuceneTestCase.TEST_VERSION_CURRENT LuceneTestCase.VERBOSE LuceneTestCase.INFOSTREAM LuceneTestCase.RANDOM_MULTIPLIER LuceneTestCase.DEFAULT_LINE_DOCS_FILE LuceneTestCase.JENKINS_LARGE_LINE_DOCS_FILE LuceneTestCase.TEST_CODEC LuceneTestCase.TEST_POSTINGSFORMAT LuceneTestCase.TEST_DOCVALUESFORMAT LuceneTestCase.TEST_DIRECTORY LuceneTestCase.TEST_LINE_DOCS_FILE LuceneTestCase.LEAVE_TEMPORARY LuceneTestCase.DoesntSupportOffsets LuceneTestCase.OldFormatImpersonationIsActive LuceneTestCase.SuiteFailureMarker LuceneTestCase.SetUp() LuceneTestCase.TearDown() LuceneTestCase.CodecFactory LuceneTestCase.DocValuesFormatFactory LuceneTestCase.PostingsFormatFactory LuceneTestCase.BeforeClass() LuceneTestCase.AfterClass() LuceneTestCase.Random LuceneTestCase.GetTestClass() LuceneTestCase.TestName LuceneTestCase.GetOnlySegmentReader(DirectoryReader) LuceneTestCase.AssertSaneFieldCaches(String) LuceneTestCase.AtLeast(Random, Int32) LuceneTestCase.AtLeast(Int32) LuceneTestCase.Rarely(Random) LuceneTestCase.Rarely() LuceneTestCase.Usually(Random) LuceneTestCase.Usually() LuceneTestCase.AssumeTrue(String, Boolean) LuceneTestCase.AssumeFalse(String, Boolean) LuceneTestCase.AssumeNoException(String, Exception) LuceneTestCase.AsSet(Object[]) LuceneTestCase.DumpEnumerator(String, IEnumerator, TextWriter) LuceneTestCase.DumpArray(String, Object[], TextWriter) LuceneTestCase.NewIndexWriterConfig(LuceneVersion, Analyzer) LuceneTestCase.NewIndexWriterConfig(Random, LuceneVersion, Analyzer) LuceneTestCase.NewMergePolicy(Random) LuceneTestCase.NewMergePolicy() LuceneTestCase.NewLogMergePolicy() LuceneTestCase.NewTieredMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy() LuceneTestCase.NewAlcoholicMergePolicy(Random, TimeZoneInfo) LuceneTestCase.NewLogMergePolicy(Random) LuceneTestCase.NewTieredMergePolicy(Random) LuceneTestCase.NewLogMergePolicy(Boolean) LuceneTestCase.NewLogMergePolicy(Boolean, Int32) LuceneTestCase.NewLogMergePolicy(Int32) LuceneTestCase.NewDirectory() LuceneTestCase.NewDirectory(Random) LuceneTestCase.NewMockDirectory() LuceneTestCase.NewMockDirectory(Random) LuceneTestCase.NewMockFSDirectory(DirectoryInfo) LuceneTestCase.NewDirectory(Directory) LuceneTestCase.NewFSDirectory(DirectoryInfo) LuceneTestCase.NewFSDirectory(DirectoryInfo, LockFactory) LuceneTestCase.NewDirectory(Random, Directory) LuceneTestCase.NewStringField(String, String, Field.Store) LuceneTestCase.NewTextField(String, String, Field.Store) LuceneTestCase.NewStringField(Random, String, String, Field.Store) LuceneTestCase.NewTextField(Random, String, String, Field.Store) LuceneTestCase.NewField(String, String, FieldType) LuceneTestCase.NewField(Random, String, String, FieldType) LuceneTestCase.RandomCulture(Random) LuceneTestCase.RandomTimeZone(Random) LuceneTestCase.CultureForName(String) LuceneTestCase.DefaultCodecSupportsDocValues LuceneTestCase.MaybeWrapReader(IndexReader) LuceneTestCase.NewIOContext(Random) LuceneTestCase.NewIOContext(Random, IOContext) LuceneTestCase.NewSearcher(IndexReader) LuceneTestCase.NewSearcher(IndexReader, Boolean) LuceneTestCase.NewSearcher(IndexReader, Boolean, Boolean) LuceneTestCase.GetDataFile(String) LuceneTestCase.DefaultCodecSupportsMissingDocValues LuceneTestCase.DefaultCodecSupportsSortedSet LuceneTestCase.DefaultCodecSupportsDocsWithField LuceneTestCase.DefaultCodecSupportsFieldUpdates LuceneTestCase.AssertReaderEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertReaderStatisticsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) LuceneTestCase.AssertFieldStatisticsEquals(String, Fields, Fields) LuceneTestCase.AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) LuceneTestCase.AssertTermsStatisticsEquals(String, Terms, Terms) LuceneTestCase.AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) LuceneTestCase.AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) LuceneTestCase.AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) LuceneTestCase.AssertTermStatsEquals(String, TermsEnum, TermsEnum) LuceneTestCase.AssertNormsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertStoredFieldEquals(String, IIndexableField, IIndexableField) LuceneTestCase.AssertTermVectorsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) LuceneTestCase.AssertDeletedDocsEquals(String, IndexReader, IndexReader) LuceneTestCase.AssertFieldInfosEquals(String, IndexReader, IndexReader) LuceneTestCase.SlowFileExists(Directory, String) LuceneTestCase.CreateTempDir() LuceneTestCase.CreateTempDir(String) LuceneTestCase.CreateTempFile(String, String) LuceneTestCase.CreateTempFile() LuceneTestCase.GetFullMethodName(String) LuceneTestCase.RandomGaussian() Namespace : Lucene.Net.Util Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class BaseDocIdSetTestCase<T> : LuceneTestCase where T : DocIdSet Type Parameters Name Description T Methods | Improve this Doc View Source AssertEquals(Int32, BitArray, T) Assert that the content of the is the same as the content of the . Declaration public virtual void AssertEquals(int numBits, BitArray ds1, T ds2) Parameters Type Name Description System.Int32 numBits BitArray ds1 T ds2 | Improve this Doc View Source CopyOf(BitArray, Int32) Create a copy of the given which has length bits. Declaration public abstract T CopyOf(BitArray bs, int length) Parameters Type Name Description BitArray bs System.Int32 length Returns Type Description T | Improve this Doc View Source RandomSet(Int32, Int32) Create a random set which has numBitsSet of its numBits bits set. Declaration protected static BitArray RandomSet(int numBits, int numBitsSet) Parameters Type Name Description System.Int32 numBits System.Int32 numBitsSet Returns Type Description BitArray | Improve this Doc View Source RandomSet(Int32, Single) Same as RandomSet(Int32, Int32) but given a load factor. Declaration protected static BitArray RandomSet(int numBits, float percentSet) Parameters Type Name Description System.Int32 numBits System.Single percentSet Returns Type Description BitArray | Improve this Doc View Source Test1Bit() Test length=1. Declaration public virtual void Test1Bit() | Improve this Doc View Source Test2Bits() Test length=2. Declaration public virtual void Test2Bits() | Improve this Doc View Source TestAgainstBitSet() Compare the content of the set against a . Declaration public virtual void TestAgainstBitSet() | Improve this Doc View Source TestNoBit() Test length=0. Declaration public virtual void TestNoBit()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.English.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.English.html",
    "title": "Class English | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class English Converts numbers to english strings for testing. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object English Namespace : Lucene.Net.Util Assembly : Lucene.Net.TestFramework.dll Syntax public static class English : object Methods | Improve this Doc View Source Int32ToEnglish(Int32) Declaration public static string Int32ToEnglish(int i) Parameters Type Name Description System.Int32 i Returns Type Description System.String | Improve this Doc View Source Int32ToEnglish(Int32, StringBuilder) Declaration public static void Int32ToEnglish(int i, StringBuilder result) Parameters Type Name Description System.Int32 i StringBuilder result | Improve this Doc View Source Int64ToEnglish(Int64) Declaration public static string Int64ToEnglish(long i) Parameters Type Name Description System.Int64 i Returns Type Description System.String | Improve this Doc View Source Int64ToEnglish(Int64, StringBuilder) Declaration public static void Int64ToEnglish(long i, StringBuilder result) Parameters Type Name Description System.Int64 i StringBuilder result | Improve this Doc View Source ToEnglish(Int32) Declaration public static string ToEnglish(this int i) Parameters Type Name Description System.Int32 i Returns Type Description System.String | Improve this Doc View Source ToEnglish(Int32, StringBuilder) Declaration public static void ToEnglish(this int i, StringBuilder result) Parameters Type Name Description System.Int32 i StringBuilder result | Improve this Doc View Source ToEnglish(Int64) Declaration public static string ToEnglish(this long i) Parameters Type Name Description System.Int64 i Returns Type Description System.String | Improve this Doc View Source ToEnglish(Int64, StringBuilder) Declaration public static void ToEnglish(this long i, StringBuilder result) Parameters Type Name Description System.Int64 i StringBuilder result"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.FailOnNonBulkMergesInfoStream.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.FailOnNonBulkMergesInfoStream.html",
    "title": "Class FailOnNonBulkMergesInfoStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FailOnNonBulkMergesInfoStream Hackidy-Häck-Hack to cause a test to fail on non-bulk merges Inheritance System.Object FailOnNonBulkMergesInfoStream Namespace : Lucene.Net.Util Assembly : Lucene.Net.TestFramework.dll Syntax public class FailOnNonBulkMergesInfoStream : InfoStream Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source IsEnabled(String) Declaration public override bool IsEnabled(string component) Parameters Type Name Description System.String component Returns Type Description System.Boolean | Improve this Doc View Source Message(String, String) Declaration public override void Message(string component, string message) Parameters Type Name Description System.String component System.String message"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.Fst.FSTTester-1.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.Fst.FSTTester-1.html",
    "title": "Class FSTTester<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTTester<T> Helper class to test FSTs. Inheritance System.Object FSTTester<T> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.TestFramework.dll Syntax public class FSTTester<T> : object Type Parameters Name Description T Constructors | Improve this Doc View Source FSTTester(Random, Directory, Int32, IList<InputOutput<T>>, Outputs<T>, Boolean) Declaration public FSTTester(Random random, Directory dir, int inputMode, IList<InputOutput<T>> pairs, Outputs<T> outputs, bool doReverseLookup) Parameters Type Name Description Random random Directory dir System.Int32 inputMode IList < InputOutput <T>> pairs Outputs <T> outputs System.Boolean doReverseLookup Methods | Improve this Doc View Source DoTest(Boolean) Declaration public virtual void DoTest(bool testPruning) Parameters Type Name Description System.Boolean testPruning | Improve this Doc View Source OutputsEqual(T, T) Declaration protected virtual bool OutputsEqual(T a, T b) Parameters Type Name Description T a T b Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.Fst.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.Fst.html",
    "title": "Namespace Lucene.Net.Util.Fst | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Fst <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Misc FST classes. Classes FSTTester<T> Helper class to test FSTs. InputOutput<T> Holds one input/output pair."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.Fst.InputOutput-1.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.Fst.InputOutput-1.html",
    "title": "Class InputOutput<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InputOutput<T> Holds one input/output pair. Inheritance System.Object InputOutput<T> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.TestFramework.dll Syntax public class InputOutput<T> : IComparable<InputOutput<T>> Type Parameters Name Description T Constructors | Improve this Doc View Source InputOutput(Int32sRef, T) Declaration public InputOutput(Int32sRef input, T output) Parameters Type Name Description Int32sRef input T output Properties | Improve this Doc View Source Input Declaration public Int32sRef Input { get; } Property Value Type Description Int32sRef | Improve this Doc View Source Output Declaration public T Output { get; } Property Value Type Description T Methods | Improve this Doc View Source CompareTo(InputOutput<T>) Declaration public virtual int CompareTo(InputOutput<T> other) Parameters Type Name Description InputOutput <T> other Returns Type Description System.Int32"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.html",
    "title": "Namespace Lucene.Net.Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Util <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Some utility classes. Classes BaseDocIdSetTestCase<T> Base test class for s. English Converts numbers to english strings for testing. This is a Lucene.NET INTERNAL API, use at your own risk FailOnNonBulkMergesInfoStream Hackidy-Häck-Hack to cause a test to fail on non-bulk merges LineFileDocs Minimal port of benchmark's LneDocSource + DocMaker, so tests can enum docs from a line file created by benchmark's WriteLineDoc task LuceneTestCase LUCENENET specific extensions to LuceneTestCase to make it easier to port tests from Java with fewer changes. LuceneTestCase.ConcurrentMergeSchedulerFactories Contains a list of all the Func<IConcurrentMergeSchedulers> to be tested. Delegate method allows them to be created on their target thread instead of the test thread and also ensures a separate instance is created in each case (which can affect the result of the test). LUCENENET specific for injection into tests (i.e. using NUnit.Framework.ValueSourceAttribute) LuceneTestCase.SuppressCodecsAttribute Annotation for test classes that should avoid certain codec types (because they are expensive, for example). LuceneTestCase.SuppressTempFileChecksAttribute Marks any suites which are known not to close all the temporary files. This may prevent temp files and folders from being cleaned up after the suite is completed. NullInfoStream Prints nothing. Just to make sure tests pass w/ and without enabled without actually making noise. This is a Lucene.NET EXPERIMENTAL API, use at your own risk StackTraceHelper LUCENENET specific class to normalize stack trace behavior between different .NET Framework and .NET Standard 1.x, which did not support the StackTrace class. TestUtil General utility methods for Lucene unit tests. ThrottledIndexOutput Intentionally slow for testing. TimeUnits Time unit constants for use in annotations."
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.LineFileDocs.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.LineFileDocs.html",
    "title": "Class LineFileDocs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LineFileDocs Minimal port of benchmark's LneDocSource + DocMaker, so tests can enum docs from a line file created by benchmark's WriteLineDoc task Inheritance System.Object LineFileDocs Namespace : Lucene.Net.Util Assembly : Lucene.Net.TestFramework.dll Syntax public class LineFileDocs : IDisposable Constructors | Improve this Doc View Source LineFileDocs(Random) Declaration public LineFileDocs(Random random) Parameters Type Name Description Random random | Improve this Doc View Source LineFileDocs(Random, Boolean) Declaration public LineFileDocs(Random random, bool useDocValues) Parameters Type Name Description Random random System.Boolean useDocValues | Improve this Doc View Source LineFileDocs(Random, String, Boolean) If forever is true, we rewind the file at EOF (repeat the docs over and over) Declaration public LineFileDocs(Random random, string path, bool useDocValues) Parameters Type Name Description Random random System.String path System.Boolean useDocValues Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source NextDoc() Note: Document instance is re-used per-thread Declaration public virtual Document NextDoc() Returns Type Description Document | Improve this Doc View Source Reset(Random) Declaration public virtual void Reset(Random random) Parameters Type Name Description Random random"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.ConcurrentMergeSchedulerFactories.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.ConcurrentMergeSchedulerFactories.html",
    "title": "Class LuceneTestCase.ConcurrentMergeSchedulerFactories | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LuceneTestCase.ConcurrentMergeSchedulerFactories Contains a list of all the Func<IConcurrentMergeSchedulers> to be tested. Delegate method allows them to be created on their target thread instead of the test thread and also ensures a separate instance is created in each case (which can affect the result of the test). LUCENENET specific for injection into tests (i.e. using NUnit.Framework.ValueSourceAttribute) Inheritance System.Object LuceneTestCase.ConcurrentMergeSchedulerFactories Namespace : Lucene.Net.Util Assembly : Lucene.Net.TestFramework.dll Syntax public static class ConcurrentMergeSchedulerFactories : object Fields | Improve this Doc View Source Values Declaration public static readonly Func<IConcurrentMergeScheduler>[] Values Field Value Type Description Func < IConcurrentMergeScheduler >[]"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.html",
    "title": "Class LuceneTestCase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LuceneTestCase LUCENENET specific extensions to LuceneTestCase to make it easier to port tests from Java with fewer changes. Inheritance System.Object LuceneTestCase BaseTokenStreamTestCase CollationTestBase BaseIndexFileFormatTestCase BaseMergePolicyTestCase ThreadedIndexingAndSearchingTestCase SearchEquivalenceTestBase ShardSearchingTestBase BaseDirectoryTestCase ApiScanTestBase ExceptionSerializationTestBase BaseDocIdSetTestCase<T> Namespace : Lucene.Net.Util Assembly : Lucene.Net.TestFramework.dll Syntax public abstract class LuceneTestCase : object Fields | Improve this Doc View Source DEFAULT_LINE_DOCS_FILE TODO: javadoc? Declaration public static readonly string DEFAULT_LINE_DOCS_FILE Field Value Type Description System.String | Improve this Doc View Source INFOSTREAM TODO: javadoc? Declaration public static readonly bool INFOSTREAM Field Value Type Description System.Boolean | Improve this Doc View Source JENKINS_LARGE_LINE_DOCS_FILE TODO: javadoc? Declaration public static readonly string JENKINS_LARGE_LINE_DOCS_FILE Field Value Type Description System.String | Improve this Doc View Source LEAVE_TEMPORARY Leave temporary files on disk, even on successful runs. Declaration public static readonly bool LEAVE_TEMPORARY Field Value Type Description System.Boolean | Improve this Doc View Source RANDOM_MULTIPLIER A random multiplier which you should use when writing random tests: multiply it by the number of iterations to scale your tests (for nightly builds). Declaration public static readonly int RANDOM_MULTIPLIER Field Value Type Description System.Int32 | Improve this Doc View Source SuiteFailureMarker Suite failure marker (any error in the test or suite scope). Declaration public static readonly bool SuiteFailureMarker Field Value Type Description System.Boolean | Improve this Doc View Source TEST_CODEC Gets the codec to run tests with. Declaration public static readonly string TEST_CODEC Field Value Type Description System.String | Improve this Doc View Source TEST_DIRECTORY Gets the directory to run tests with Declaration public static readonly string TEST_DIRECTORY Field Value Type Description System.String | Improve this Doc View Source TEST_DOCVALUESFORMAT Gets the docValuesFormat to run tests with Declaration public static readonly string TEST_DOCVALUESFORMAT Field Value Type Description System.String | Improve this Doc View Source TEST_LINE_DOCS_FILE The line file used by LineFileDocs Declaration public static readonly string TEST_LINE_DOCS_FILE Field Value Type Description System.String | Improve this Doc View Source TEST_POSTINGSFORMAT Gets the postingsFormat to run tests with. Declaration public static readonly string TEST_POSTINGSFORMAT Field Value Type Description System.String | Improve this Doc View Source TEST_VERSION_CURRENT Use this constant when creating Analyzers and any other version-dependent stuff. NOTE: Change this when development starts for new Lucene version: Declaration public static readonly LuceneVersion TEST_VERSION_CURRENT Field Value Type Description LuceneVersion | Improve this Doc View Source VERBOSE True if and only if tests are run in verbose mode. If this flag is false tests are not expected to print any messages. Declaration public static readonly bool VERBOSE Field Value Type Description System.Boolean Properties | Improve this Doc View Source CodecFactory Declaration public static ICodecFactory CodecFactory { get; set; } Property Value Type Description ICodecFactory | Improve this Doc View Source DefaultCodecSupportsDocsWithField Returns true if the codec \"supports\" docsWithField (other codecs return MatchAllBits, because you couldnt write missing values before) Declaration public static bool DefaultCodecSupportsDocsWithField { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DefaultCodecSupportsDocValues Declaration public static bool DefaultCodecSupportsDocValues { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DefaultCodecSupportsFieldUpdates Returns true if the codec \"supports\" field updates. Declaration public static bool DefaultCodecSupportsFieldUpdates { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DefaultCodecSupportsMissingDocValues Returns true if the default codec supports single valued docvalues with missing values Declaration public static bool DefaultCodecSupportsMissingDocValues { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DefaultCodecSupportsSortedSet Returns true if the default codec supports SORTED_SET docvalues Declaration public static bool DefaultCodecSupportsSortedSet { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DocValuesFormatFactory Declaration public static IDocValuesFormatFactory DocValuesFormatFactory { get; set; } Property Value Type Description IDocValuesFormatFactory | Improve this Doc View Source DoesntSupportOffsets Declaration protected static ICollection<string> DoesntSupportOffsets { get; } Property Value Type Description ICollection < System.String > | Improve this Doc View Source OldFormatImpersonationIsActive When true , Codecs for old Lucene version will support writing indexes in that format. Defaults to false , can be disabled by specific tests on demand. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static bool OldFormatImpersonationIsActive { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source PostingsFormatFactory Declaration public static IPostingsFormatFactory PostingsFormatFactory { get; set; } Property Value Type Description IPostingsFormatFactory | Improve this Doc View Source Random Access to the current instance. It is safe to use this method from multiple threads, etc., but it should be called while within a runner's scope (so no static initializers). The returned instance will be different when this method is called inside a BeforeClass() hook (static suite scope) and within / hooks or test methods. The returned instance must not be shared with other threads or cross a single scope's boundary. For example, a acquired within a test method shouldn't be reused for another test case. There is an overhead connected with getting the for a particular context and thread. It is better to cache the locally if tight loops with multiple invocations are present or create a derivative local for millions of calls like this: Random random = new Random(Random.Next()); // tight loop with many invocations. Declaration public static Random Random { get; } Property Value Type Description Random | Improve this Doc View Source TestName Return the name of the currently executing test case. Declaration public virtual string TestName { get; } Property Value Type Description System.String Methods | Improve this Doc View Source AfterClass() Tears down random defaults and cleans up temporary files. If you override this method, be sure to call base.AfterClass() AFTER tearing down your test fixture. Declaration public virtual void AfterClass() | Improve this Doc View Source AssertDeletedDocsEquals(String, IndexReader, IndexReader) Declaration public virtual void AssertDeletedDocsEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AssertDocsAndPositionsEnumEquals(String, DocsAndPositionsEnum, DocsAndPositionsEnum) Checks docs + freqs + positions + payloads, sequentially. Declaration public virtual void AssertDocsAndPositionsEnumEquals(string info, DocsAndPositionsEnum leftDocs, DocsAndPositionsEnum rightDocs) Parameters Type Name Description System.String info DocsAndPositionsEnum leftDocs DocsAndPositionsEnum rightDocs | Improve this Doc View Source AssertDocsEnumEquals(String, DocsEnum, DocsEnum, Boolean) Checks docs + freqs, sequentially. Declaration public virtual void AssertDocsEnumEquals(string info, DocsEnum leftDocs, DocsEnum rightDocs, bool hasFreqs) Parameters Type Name Description System.String info DocsEnum leftDocs DocsEnum rightDocs System.Boolean hasFreqs | Improve this Doc View Source AssertDocsSkippingEquals(String, IndexReader, Int32, DocsEnum, DocsEnum, Boolean) Checks advancing docs. Declaration public virtual void AssertDocsSkippingEquals(string info, IndexReader leftReader, int docFreq, DocsEnum leftDocs, DocsEnum rightDocs, bool hasFreqs) Parameters Type Name Description System.String info IndexReader leftReader System.Int32 docFreq DocsEnum leftDocs DocsEnum rightDocs System.Boolean hasFreqs | Improve this Doc View Source AssertDocValuesEquals(String, IndexReader, IndexReader) Checks that docvalues across all fields are equivalent. Declaration public virtual void AssertDocValuesEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AssertDocValuesEquals(String, Int32, NumericDocValues, NumericDocValues) Declaration public virtual void AssertDocValuesEquals(string info, int num, NumericDocValues leftDocValues, NumericDocValues rightDocValues) Parameters Type Name Description System.String info System.Int32 num NumericDocValues leftDocValues NumericDocValues rightDocValues | Improve this Doc View Source AssertFieldInfosEquals(String, IndexReader, IndexReader) Declaration public virtual void AssertFieldInfosEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AssertFieldsEquals(String, IndexReader, Fields, Fields, Boolean) Fields API equivalency. Declaration public virtual void AssertFieldsEquals(string info, IndexReader leftReader, Fields leftFields, Fields rightFields, bool deep) Parameters Type Name Description System.String info IndexReader leftReader Fields leftFields Fields rightFields System.Boolean deep | Improve this Doc View Source AssertFieldStatisticsEquals(String, Fields, Fields) Checks that top-level statistics on are the same. Declaration public virtual void AssertFieldStatisticsEquals(string info, Fields leftFields, Fields rightFields) Parameters Type Name Description System.String info Fields leftFields Fields rightFields | Improve this Doc View Source AssertNormsEquals(String, IndexReader, IndexReader) Checks that norms are the same across all fields. Declaration public virtual void AssertNormsEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AssertPositionsSkippingEquals(String, IndexReader, Int32, DocsAndPositionsEnum, DocsAndPositionsEnum) Checks advancing docs + positions. Declaration public virtual void AssertPositionsSkippingEquals(string info, IndexReader leftReader, int docFreq, DocsAndPositionsEnum leftDocs, DocsAndPositionsEnum rightDocs) Parameters Type Name Description System.String info IndexReader leftReader System.Int32 docFreq DocsAndPositionsEnum leftDocs DocsAndPositionsEnum rightDocs | Improve this Doc View Source AssertReaderEquals(String, IndexReader, IndexReader) Declaration public virtual void AssertReaderEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AssertReaderStatisticsEquals(String, IndexReader, IndexReader) Checks that reader-level statistics are the same. Declaration public virtual void AssertReaderStatisticsEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AssertSaneFieldCaches(String) Asserts that does not detect any problems with . If any problems are found, they are logged to (allong with the msg) when the Assertion is thrown. This method is called by TearDown() after every test method, however s scoped inside test methods may be garbage collected prior to this method being called, causing errors to be overlooked. Tests are encouraged to keep their s scoped at the class level, or to explicitly call this method directly in the same scope as the . Declaration protected static void AssertSaneFieldCaches(string msg) Parameters Type Name Description System.String msg | Improve this Doc View Source AssertStoredFieldEquals(String, IIndexableField, IIndexableField) Checks that two stored fields are equivalent. Declaration public virtual void AssertStoredFieldEquals(string info, IIndexableField leftField, IIndexableField rightField) Parameters Type Name Description System.String info IIndexableField leftField IIndexableField rightField | Improve this Doc View Source AssertStoredFieldsEquals(String, IndexReader, IndexReader) Checks that stored fields of all documents are the same. Declaration public virtual void AssertStoredFieldsEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AssertTermsEnumEquals(String, IndexReader, TermsEnum, TermsEnum, Boolean) Checks the terms enum sequentially. If deep is false, it does a 'shallow' test that doesnt go down to the docsenums. Declaration public virtual void AssertTermsEnumEquals(string info, IndexReader leftReader, TermsEnum leftTermsEnum, TermsEnum rightTermsEnum, bool deep) Parameters Type Name Description System.String info IndexReader leftReader TermsEnum leftTermsEnum TermsEnum rightTermsEnum System.Boolean deep | Improve this Doc View Source AssertTermsEquals(String, IndexReader, Terms, Terms, Boolean) API equivalency. Declaration public virtual void AssertTermsEquals(string info, IndexReader leftReader, Terms leftTerms, Terms rightTerms, bool deep) Parameters Type Name Description System.String info IndexReader leftReader Terms leftTerms Terms rightTerms System.Boolean deep | Improve this Doc View Source AssertTermsStatisticsEquals(String, Terms, Terms) Checks collection-level statistics on . Declaration public virtual void AssertTermsStatisticsEquals(string info, Terms leftTerms, Terms rightTerms) Parameters Type Name Description System.String info Terms leftTerms Terms rightTerms | Improve this Doc View Source AssertTermStatsEquals(String, TermsEnum, TermsEnum) Checks term-level statistics. Declaration public virtual void AssertTermStatsEquals(string info, TermsEnum leftTermsEnum, TermsEnum rightTermsEnum) Parameters Type Name Description System.String info TermsEnum leftTermsEnum TermsEnum rightTermsEnum | Improve this Doc View Source AssertTermVectorsEquals(String, IndexReader, IndexReader) Checks that term vectors across all fields are equivalent. Declaration public virtual void AssertTermVectorsEquals(string info, IndexReader leftReader, IndexReader rightReader) Parameters Type Name Description System.String info IndexReader leftReader IndexReader rightReader | Improve this Doc View Source AsSet(Object[]) Return args as a instance. The order of elements is not preserved in enumerators. Declaration public static ISet<object> AsSet(params object[] args) Parameters Type Name Description System.Object [] args Returns Type Description ISet < System.Object > | Improve this Doc View Source AssumeFalse(String, Boolean) Declaration public static void AssumeFalse(string msg, bool condition) Parameters Type Name Description System.String msg System.Boolean condition | Improve this Doc View Source AssumeNoException(String, Exception) Declaration public static void AssumeNoException(string msg, Exception e) Parameters Type Name Description System.String msg Exception e | Improve this Doc View Source AssumeTrue(String, Boolean) Declaration public static void AssumeTrue(string msg, bool condition) Parameters Type Name Description System.String msg System.Boolean condition | Improve this Doc View Source AtLeast(Random, Int32) Returns a number of at least i The actual number returned will be influenced by whether Lucene.Net.Util.LuceneTestCase.TEST_NIGHTLY is active and RANDOM_MULTIPLIER , but also with some random fudge. Declaration public static int AtLeast(Random random, int i) Parameters Type Name Description Random random System.Int32 i Returns Type Description System.Int32 | Improve this Doc View Source AtLeast(Int32) Declaration public static int AtLeast(int i) Parameters Type Name Description System.Int32 i Returns Type Description System.Int32 | Improve this Doc View Source BeforeClass() Sets up dependency injection of codec factories for running the test class, and also picks random defaults for culture, time zone, similarity, and default codec. If you override this method, be sure to call base.BeforeClass() BEFORE setting up your test fixture. Declaration public virtual void BeforeClass() | Improve this Doc View Source CreateTempDir() Creates an empty, temporary folder (when the name of the folder is of no importance). Declaration public static DirectoryInfo CreateTempDir() Returns Type Description DirectoryInfo See Also CreateTempDir(String) | Improve this Doc View Source CreateTempDir(String) Creates an empty, temporary folder with the given name prefix under the system's . The folder will be automatically removed after the test class completes successfully. The test should close any file handles that would prevent the folder from being removed. Declaration public static DirectoryInfo CreateTempDir(string prefix) Parameters Type Name Description System.String prefix Returns Type Description DirectoryInfo | Improve this Doc View Source CreateTempFile() Creates an empty temporary file. Declaration public static FileInfo CreateTempFile() Returns Type Description FileInfo | Improve this Doc View Source CreateTempFile(String, String) Creates an empty file with the given prefix and suffix under the system's . The file will be automatically removed after the test class completes successfully. The test should close any file handles that would prevent the folder from being removed. Declaration public static FileInfo CreateTempFile(string prefix, string suffix) Parameters Type Name Description System.String prefix System.String suffix Returns Type Description FileInfo | Improve this Doc View Source CultureForName(String) return a object equivalent to its programmatic name. Declaration public static CultureInfo CultureForName(string localeName) Parameters Type Name Description System.String localeName Returns Type Description CultureInfo | Improve this Doc View Source DumpArray(String, Object[], TextWriter) Convenience method for logging an array. Wraps the array in an enumerator and delegates to DumpEnumerator(String, IEnumerator, TextWriter) Declaration public static void DumpArray(string label, object[] objs, TextWriter stream) Parameters Type Name Description System.String label System.Object [] objs TextWriter stream See Also DumpEnumerator(String, IEnumerator, TextWriter) | Improve this Doc View Source DumpEnumerator(String, IEnumerator, TextWriter) Convenience method for logging an enumerator. Declaration public static void DumpEnumerator(string label, IEnumerator iter, TextWriter stream) Parameters Type Name Description System.String label String logged before/after the items in the enumerator. IEnumerator iter Each element is ToString()ed and logged on it's own line. If iter is null this is logged differnetly then an empty enumerator. TextWriter stream Stream to log messages to. | Improve this Doc View Source GetDataFile(String) Gets a resource from the classpath as . This method should only be used, if a real file is needed. To get a stream, code should prefer using this.GetType().Assembly and this.GetType() . Declaration protected virtual Stream GetDataFile(string name) Parameters Type Name Description System.String name Returns Type Description Stream | Improve this Doc View Source GetFullMethodName(String) Declaration protected string GetFullMethodName(string memberName = \"\") Parameters Type Name Description System.String memberName Returns Type Description System.String | Improve this Doc View Source GetOnlySegmentReader(DirectoryReader) Some tests expect the directory to contain a single segment, and want to do tests on that segment's reader. This is an utility method to help them. Declaration public static SegmentReader GetOnlySegmentReader(DirectoryReader reader) Parameters Type Name Description DirectoryReader reader Returns Type Description SegmentReader | Improve this Doc View Source GetTestClass() Return the current type being tested. Declaration public static Type GetTestClass() Returns Type Description Type | Improve this Doc View Source MaybeWrapReader(IndexReader) Sometimes wrap the as slow, parallel or filter reader (or combinations of that) Declaration public static IndexReader MaybeWrapReader(IndexReader r) Parameters Type Name Description IndexReader r Returns Type Description IndexReader | Improve this Doc View Source NewAlcoholicMergePolicy() Declaration public static AlcoholicMergePolicy NewAlcoholicMergePolicy() Returns Type Description AlcoholicMergePolicy | Improve this Doc View Source NewAlcoholicMergePolicy(Random, TimeZoneInfo) Declaration public static AlcoholicMergePolicy NewAlcoholicMergePolicy(Random random, TimeZoneInfo timeZone) Parameters Type Name Description Random random TimeZoneInfo timeZone Returns Type Description AlcoholicMergePolicy | Improve this Doc View Source NewDirectory() Returns a new instance. Use this when the test does not care about the specific implementation (most tests). The is wrapped with BaseDirectoryWrapper . This means usually it will be picky, such as ensuring that you properly dispose it and close all open files in your test. It will emulate some features of Windows, such as not allowing open files to be overwritten. Declaration public static BaseDirectoryWrapper NewDirectory() Returns Type Description BaseDirectoryWrapper | Improve this Doc View Source NewDirectory(Directory) Returns a new instance, with contents copied from the provided directory. See NewDirectory() for more information. Declaration public static BaseDirectoryWrapper NewDirectory(Directory d) Parameters Type Name Description Directory d Returns Type Description BaseDirectoryWrapper | Improve this Doc View Source NewDirectory(Random) Returns a new instance, using the specified random . See NewDirectory() for more information. Declaration public static BaseDirectoryWrapper NewDirectory(Random random) Parameters Type Name Description Random random Returns Type Description BaseDirectoryWrapper | Improve this Doc View Source NewDirectory(Random, Directory) Returns a new instance, using the specified random with contents copied from the provided directory . See NewDirectory() for more information. Declaration public static BaseDirectoryWrapper NewDirectory(Random random, Directory directory) Parameters Type Name Description Random random Directory directory Returns Type Description BaseDirectoryWrapper | Improve this Doc View Source NewField(Random, String, String, FieldType) Declaration public static Field NewField(Random random, string name, string value, FieldType type) Parameters Type Name Description Random random System.String name System.String value FieldType type Returns Type Description Field | Improve this Doc View Source NewField(String, String, FieldType) Declaration public static Field NewField(string name, string value, FieldType type) Parameters Type Name Description System.String name System.String value FieldType type Returns Type Description Field | Improve this Doc View Source NewFSDirectory(DirectoryInfo) Returns a new instance over the given file, which must be a folder. Declaration public static BaseDirectoryWrapper NewFSDirectory(DirectoryInfo d) Parameters Type Name Description DirectoryInfo d Returns Type Description BaseDirectoryWrapper | Improve this Doc View Source NewFSDirectory(DirectoryInfo, LockFactory) Returns a new instance over the given file, which must be a folder. Declaration public static BaseDirectoryWrapper NewFSDirectory(DirectoryInfo d, LockFactory lf) Parameters Type Name Description DirectoryInfo d LockFactory lf Returns Type Description BaseDirectoryWrapper | Improve this Doc View Source NewIndexWriterConfig(LuceneVersion, Analyzer) Create a new with random defaults. Declaration public static IndexWriterConfig NewIndexWriterConfig(LuceneVersion v, Analyzer a) Parameters Type Name Description LuceneVersion v Analyzer a Returns Type Description IndexWriterConfig | Improve this Doc View Source NewIndexWriterConfig(Random, LuceneVersion, Analyzer) Create a new with random defaults using the specified random . Declaration public static IndexWriterConfig NewIndexWriterConfig(Random random, LuceneVersion v, Analyzer a) Parameters Type Name Description Random random A random instance (usually Random ). LuceneVersion v Analyzer a Returns Type Description IndexWriterConfig | Improve this Doc View Source NewIOContext(Random) TODO: javadoc Declaration public static IOContext NewIOContext(Random random) Parameters Type Name Description Random random Returns Type Description IOContext | Improve this Doc View Source NewIOContext(Random, IOContext) TODO: javadoc Declaration public static IOContext NewIOContext(Random random, IOContext oldContext) Parameters Type Name Description Random random IOContext oldContext Returns Type Description IOContext | Improve this Doc View Source NewLogMergePolicy() Declaration public static LogMergePolicy NewLogMergePolicy() Returns Type Description LogMergePolicy | Improve this Doc View Source NewLogMergePolicy(Random) Declaration public static LogMergePolicy NewLogMergePolicy(Random random) Parameters Type Name Description Random random Returns Type Description LogMergePolicy | Improve this Doc View Source NewLogMergePolicy(Boolean) Declaration public static MergePolicy NewLogMergePolicy(bool useCFS) Parameters Type Name Description System.Boolean useCFS Returns Type Description MergePolicy | Improve this Doc View Source NewLogMergePolicy(Boolean, Int32) Declaration public static MergePolicy NewLogMergePolicy(bool useCFS, int mergeFactor) Parameters Type Name Description System.Boolean useCFS System.Int32 mergeFactor Returns Type Description MergePolicy | Improve this Doc View Source NewLogMergePolicy(Int32) Declaration public static MergePolicy NewLogMergePolicy(int mergeFactor) Parameters Type Name Description System.Int32 mergeFactor Returns Type Description MergePolicy | Improve this Doc View Source NewMergePolicy() Declaration public static MergePolicy NewMergePolicy() Returns Type Description MergePolicy | Improve this Doc View Source NewMergePolicy(Random) Declaration public static MergePolicy NewMergePolicy(Random r) Parameters Type Name Description Random r Returns Type Description MergePolicy | Improve this Doc View Source NewMockDirectory() Declaration public static MockDirectoryWrapper NewMockDirectory() Returns Type Description MockDirectoryWrapper | Improve this Doc View Source NewMockDirectory(Random) Declaration public static MockDirectoryWrapper NewMockDirectory(Random random) Parameters Type Name Description Random random Returns Type Description MockDirectoryWrapper | Improve this Doc View Source NewMockFSDirectory(DirectoryInfo) Declaration public static MockDirectoryWrapper NewMockFSDirectory(DirectoryInfo d) Parameters Type Name Description DirectoryInfo d Returns Type Description MockDirectoryWrapper | Improve this Doc View Source NewSearcher(IndexReader) Create a new searcher over the reader. this searcher might randomly use threads. Declaration public static IndexSearcher NewSearcher(IndexReader r) Parameters Type Name Description IndexReader r Returns Type Description IndexSearcher | Improve this Doc View Source NewSearcher(IndexReader, Boolean) Create a new searcher over the reader. This searcher might randomly use threads. Declaration public static IndexSearcher NewSearcher(IndexReader r, bool maybeWrap) Parameters Type Name Description IndexReader r System.Boolean maybeWrap Returns Type Description IndexSearcher | Improve this Doc View Source NewSearcher(IndexReader, Boolean, Boolean) Create a new searcher over the reader. This searcher might randomly use threads. If maybeWrap is true, this searcher might wrap the reader with one that returns null for . If wrapWithAssertions is true, this searcher might be an AssertingIndexSearcher instance. Declaration public static IndexSearcher NewSearcher(IndexReader r, bool maybeWrap, bool wrapWithAssertions) Parameters Type Name Description IndexReader r System.Boolean maybeWrap System.Boolean wrapWithAssertions Returns Type Description IndexSearcher | Improve this Doc View Source NewStringField(Random, String, String, Field.Store) Declaration public static Field NewStringField(Random random, string name, string value, Field.Store stored) Parameters Type Name Description Random random System.String name System.String value Field.Store stored Returns Type Description Field | Improve this Doc View Source NewStringField(String, String, Field.Store) Declaration public static Field NewStringField(string name, string value, Field.Store stored) Parameters Type Name Description System.String name System.String value Field.Store stored Returns Type Description Field | Improve this Doc View Source NewTextField(Random, String, String, Field.Store) Declaration public static Field NewTextField(Random random, string name, string value, Field.Store stored) Parameters Type Name Description Random random System.String name System.String value Field.Store stored Returns Type Description Field | Improve this Doc View Source NewTextField(String, String, Field.Store) Declaration public static Field NewTextField(string name, string value, Field.Store stored) Parameters Type Name Description System.String name System.String value Field.Store stored Returns Type Description Field | Improve this Doc View Source NewTieredMergePolicy() Declaration public static TieredMergePolicy NewTieredMergePolicy() Returns Type Description TieredMergePolicy | Improve this Doc View Source NewTieredMergePolicy(Random) Declaration public static TieredMergePolicy NewTieredMergePolicy(Random random) Parameters Type Name Description Random random Returns Type Description TieredMergePolicy | Improve this Doc View Source RandomCulture(Random) Return a random from the available cultures on the system. See https://issues.apache.org/jira/browse/LUCENE-4020 . Declaration public static CultureInfo RandomCulture(Random random) Parameters Type Name Description Random random Returns Type Description CultureInfo | Improve this Doc View Source RandomGaussian() Returns the next pseudorandom, Gaussian (\"normally\") distributed double value with mean 0.0 and standard deviation 1.0 from this random number generator's sequence. The general contract of nextGaussian is that one value, chosen from (approximately) the usual normal distribution with mean 0.0 and standard deviation 1.0 , is pseudorandomly generated and returned. This uses the polar method of G. E. P. Box, M. E. Muller, and G. Marsaglia, as described by Donald E. Knuth in The Art of Computer Programming , Volume 3: Seminumerical Algorithms , section 3.4.1, subsection C, algorithm P. Note that it generates two independent values at the cost of only one call to StrictMath.log and one call to StrictMath.sqrt . Declaration public double RandomGaussian() Returns Type Description System.Double The next pseudorandom, Gaussian (\"normally\") distributed value with mean 0.0 and standard deviation 1.0 from this random number generator's sequence. | Improve this Doc View Source RandomTimeZone(Random) Return a random from the available timezones on the system See https://issues.apache.org/jira/browse/LUCENE-4020 . Declaration public static TimeZoneInfo RandomTimeZone(Random random) Parameters Type Name Description Random random Returns Type Description TimeZoneInfo | Improve this Doc View Source Rarely() Declaration public static bool Rarely() Returns Type Description System.Boolean | Improve this Doc View Source Rarely(Random) Returns true if something should happen rarely, The actual number returned will be influenced by whether Lucene.Net.Util.LuceneTestCase.TEST_NIGHTLY is active and RANDOM_MULTIPLIER . Declaration public static bool Rarely(Random random) Parameters Type Name Description Random random Returns Type Description System.Boolean | Improve this Doc View Source SetUp() For subclasses to override. Overrides must call base.SetUp() . Declaration public virtual void SetUp() | Improve this Doc View Source SlowFileExists(Directory, String) Returns true if the file exists (can be opened), false if it cannot be opened, and (unlike .NET's ) if there's some unexpected error. Declaration public static bool SlowFileExists(Directory dir, string fileName) Parameters Type Name Description Directory dir System.String fileName Returns Type Description System.Boolean | Improve this Doc View Source TearDown() For subclasses to override. Overrides must call base.TearDown() . Declaration public virtual void TearDown() | Improve this Doc View Source Usually() Declaration public static bool Usually() Returns Type Description System.Boolean | Improve this Doc View Source Usually(Random) Declaration public static bool Usually(Random random) Parameters Type Name Description Random random Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.SuppressCodecsAttribute.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.SuppressCodecsAttribute.html",
    "title": "Class LuceneTestCase.SuppressCodecsAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LuceneTestCase.SuppressCodecsAttribute Annotation for test classes that should avoid certain codec types (because they are expensive, for example). Inheritance System.Object LuceneTestCase.SuppressCodecsAttribute Namespace : Lucene.Net.Util Assembly : Lucene.Net.TestFramework.dll Syntax public class SuppressCodecsAttribute : System.Attribute Constructors | Improve this Doc View Source SuppressCodecsAttribute(String) Constructor for CLS compliance. Declaration public SuppressCodecsAttribute(string codecs) Parameters Type Name Description System.String codecs A comma-deliminated set of codec names. | Improve this Doc View Source SuppressCodecsAttribute(String[]) Declaration public SuppressCodecsAttribute(params string[] value) Parameters Type Name Description System.String [] value Properties | Improve this Doc View Source Value Declaration public string[] Value { get; } Property Value Type Description System.String []"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.SuppressTempFileChecksAttribute.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.LuceneTestCase.SuppressTempFileChecksAttribute.html",
    "title": "Class LuceneTestCase.SuppressTempFileChecksAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LuceneTestCase.SuppressTempFileChecksAttribute Marks any suites which are known not to close all the temporary files. This may prevent temp files and folders from being cleaned up after the suite is completed. Inheritance System.Object LuceneTestCase.SuppressTempFileChecksAttribute Namespace : Lucene.Net.Util Assembly : Lucene.Net.TestFramework.dll Syntax public class SuppressTempFileChecksAttribute : System.Attribute Properties | Improve this Doc View Source BugUrl Point to issue tracker entry. Declaration public virtual string BugUrl { get; set; } Property Value Type Description System.String See Also CreateTempDir ()"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.NullInfoStream.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.NullInfoStream.html",
    "title": "Class NullInfoStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NullInfoStream Prints nothing. Just to make sure tests pass w/ and without enabled without actually making noise. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NullInfoStream Namespace : Lucene.Net.Util Assembly : Lucene.Net.TestFramework.dll Syntax public class NullInfoStream : InfoStream Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source IsEnabled(String) Declaration public override bool IsEnabled(string component) Parameters Type Name Description System.String component Returns Type Description System.Boolean | Improve this Doc View Source Message(String, String) Declaration public override void Message(string component, string message) Parameters Type Name Description System.String component System.String message"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.StackTraceHelper.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.StackTraceHelper.html",
    "title": "Class StackTraceHelper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StackTraceHelper LUCENENET specific class to normalize stack trace behavior between different .NET Framework and .NET Standard 1.x, which did not support the StackTrace class. Inheritance System.Object StackTraceHelper Namespace : Lucene.Net.Util Assembly : Lucene.Net.TestFramework.dll Syntax public static class StackTraceHelper : object Methods | Improve this Doc View Source DoesStackTraceContainMethod(String) Matches the StackTrace for a method name. IMPORTANT: To make the tests pass in release mode, the method(s) named here must be decorated with [MethodImpl(MethodImplOptions.NoInlining)] . Declaration public static bool DoesStackTraceContainMethod(string methodName) Parameters Type Name Description System.String methodName Returns Type Description System.Boolean | Improve this Doc View Source DoesStackTraceContainMethod(String, String) Matches the StackTrace for a particular class (not fully-qualified) and method name. IMPORTANT: To make the tests pass in release mode, the method(s) named here must be decorated with [MethodImpl(MethodImplOptions.NoInlining)] . Declaration public static bool DoesStackTraceContainMethod(string className, string methodName) Parameters Type Name Description System.String className System.String methodName Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.TestUtil.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.TestUtil.html",
    "title": "Class TestUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TestUtil General utility methods for Lucene unit tests. Inheritance System.Object TestUtil Namespace : Lucene.Net.Util Assembly : Lucene.Net.TestFramework.dll Syntax public static class TestUtil : object Fields | Improve this Doc View Source WHITESPACE_CHARACTERS List of characters that match . Declaration public static readonly char[] WHITESPACE_CHARACTERS Field Value Type Description System.Char [] Methods | Improve this Doc View Source AlwaysDocValuesFormat(DocValuesFormat) Return a that can read any of the default codecs and formats, but always writes in the specified format. Declaration public static Codec AlwaysDocValuesFormat(DocValuesFormat format) Parameters Type Name Description DocValuesFormat format Returns Type Description Codec | Improve this Doc View Source AlwaysPostingsFormat(PostingsFormat) Return a that can read any of the default codecs and formats, but always writes in the specified format. Declaration public static Codec AlwaysPostingsFormat(PostingsFormat format) Parameters Type Name Description PostingsFormat format Returns Type Description Codec | Improve this Doc View Source AnyFilesExceptWriteLock(Directory) Declaration public static bool AnyFilesExceptWriteLock(Directory dir) Parameters Type Name Description Directory dir Returns Type Description System.Boolean | Improve this Doc View Source AssertAttributeReflection(Attribute, IDictionary<String, Object>) Checks some basic behaviour of an . Declaration public static void AssertAttributeReflection(Attribute att, IDictionary<string, object> reflectedValues) Parameters Type Name Description Attribute att to reflect IDictionary < System.String , System.Object > reflectedValues Contains a with \"AttributeSubclassType/key\" as values. | Improve this Doc View Source AssertEquals(TopDocs, TopDocs) Declaration public static void AssertEquals(TopDocs expected, TopDocs actual) Parameters Type Name Description TopDocs expected TopDocs actual | Improve this Doc View Source BytesToCharSequence(BytesRef, Random) Declaration public static ICharSequence BytesToCharSequence(BytesRef ref, Random random) Parameters Type Name Description BytesRef ref Random random Returns Type Description ICharSequence | Improve this Doc View Source CheckIndex(Directory) This runs the tool on the index in. If any issues are hit, an is thrown; else, true is returned. Declaration public static CheckIndex.Status CheckIndex(Directory dir) Parameters Type Name Description Directory dir Returns Type Description CheckIndex.Status | Improve this Doc View Source CheckIndex(Directory, Boolean) Declaration public static CheckIndex.Status CheckIndex(Directory dir, bool crossCheckTermVectors) Parameters Type Name Description Directory dir System.Boolean crossCheckTermVectors Returns Type Description CheckIndex.Status | Improve this Doc View Source CheckReader(AtomicReader, Boolean) Declaration public static void CheckReader(AtomicReader reader, bool crossCheckTermVectors) Parameters Type Name Description AtomicReader reader System.Boolean crossCheckTermVectors | Improve this Doc View Source CheckReader(IndexReader) This runs the tool on the . If any issues are hit, an is thrown. Declaration public static void CheckReader(IndexReader reader) Parameters Type Name Description IndexReader reader | Improve this Doc View Source CloneDocument(Document) Declaration public static Document CloneDocument(Document doc1) Parameters Type Name Description Document doc1 Returns Type Description Document | Improve this Doc View Source Docs(Random, IndexReader, String, BytesRef, IBits, DocsEnum, DocsFlags) Returns a , but randomly sometimes uses a , . Returns null if field/term doesn't exist. Declaration public static DocsEnum Docs(Random random, IndexReader r, string field, BytesRef term, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description Random random IndexReader r System.String field BytesRef term IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum | Improve this Doc View Source Docs(Random, TermsEnum, IBits, DocsEnum, DocsFlags) Returns a from a positioned , but randomly sometimes uses a , . Declaration public static DocsEnum Docs(Random random, TermsEnum termsEnum, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description Random random TermsEnum termsEnum IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum | Improve this Doc View Source FieldSupportsHugeBinaryDocValues(String) Declaration public static bool FieldSupportsHugeBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description System.Boolean | Improve this Doc View Source GetDocValuesFormat(Codec, String) Declaration public static string GetDocValuesFormat(Codec codec, string field) Parameters Type Name Description Codec codec System.String field Returns Type Description System.String | Improve this Doc View Source GetDocValuesFormat(String) Declaration public static string GetDocValuesFormat(string field) Parameters Type Name Description System.String field Returns Type Description System.String | Improve this Doc View Source GetPostingsFormat(Codec, String) Declaration public static string GetPostingsFormat(Codec codec, string field) Parameters Type Name Description Codec codec System.String field Returns Type Description System.String | Improve this Doc View Source GetPostingsFormat(String) Declaration public static string GetPostingsFormat(string field) Parameters Type Name Description System.String field Returns Type Description System.String | Improve this Doc View Source NextInt32(Random, Int32, Int32) start and end are BOTH inclusive Declaration public static int NextInt32(Random r, int start, int end) Parameters Type Name Description Random r System.Int32 start System.Int32 end Returns Type Description System.Int32 | Improve this Doc View Source NextInt64(Random, Int64, Int64) start and end are BOTH inclusive Declaration public static long NextInt64(Random r, long start, long end) Parameters Type Name Description Random r System.Int64 start System.Int64 end Returns Type Description System.Int64 | Improve this Doc View Source RandomAnalysisString(Random, Int32, Boolean) Declaration public static string RandomAnalysisString(Random random, int maxLength, bool simple) Parameters Type Name Description Random random System.Int32 maxLength System.Boolean simple Returns Type Description System.String | Improve this Doc View Source RandomFilterStrategy(Random) Declaration public static FilteredQuery.FilterStrategy RandomFilterStrategy(Random random) Parameters Type Name Description Random random Returns Type Description FilteredQuery.FilterStrategy | Improve this Doc View Source RandomFixedByteLengthUnicodeString(Random, Int32) Returns random string, with a given UTF-8 byte length . Declaration public static string RandomFixedByteLengthUnicodeString(Random r, int length) Parameters Type Name Description Random r System.Int32 length Returns Type Description System.String | Improve this Doc View Source RandomFixedLengthUnicodeString(Random, Char[], Int32, Int32) Fills provided char[] with valid random unicode code unit sequence. Declaration public static void RandomFixedLengthUnicodeString(Random random, char[] chars, int offset, int length) Parameters Type Name Description Random random System.Char [] chars System.Int32 offset System.Int32 length | Improve this Doc View Source RandomHtmlishString(Random, Int32) Returns a random HTML-like string. Declaration public static string RandomHtmlishString(Random random, int numElements) Parameters Type Name Description Random random System.Int32 numElements Returns Type Description System.String | Improve this Doc View Source RandomlyRecaseString(Random, String) Randomly upcases, downcases, or leaves intact each code point in the given string. Declaration public static string RandomlyRecaseString(Random random, string str) Parameters Type Name Description Random random System.String str Returns Type Description System.String | Improve this Doc View Source RandomRealisticUnicodeString(Random) Returns random string of length between 0-20 codepoints, all codepoints within the same unicode block. Declaration public static string RandomRealisticUnicodeString(Random r) Parameters Type Name Description Random r Returns Type Description System.String | Improve this Doc View Source RandomRealisticUnicodeString(Random, Int32) Returns random string of length up to maxLength codepoints, all codepoints within the same unicode block. Declaration public static string RandomRealisticUnicodeString(Random r, int maxLength) Parameters Type Name Description Random r System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source RandomRealisticUnicodeString(Random, Int32, Int32) Returns random string of length between min and max codepoints, all codepoints within the same unicode block. Declaration public static string RandomRealisticUnicodeString(Random r, int minLength, int maxLength) Parameters Type Name Description Random r System.Int32 minLength System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source RandomRegex(Random) Returns a valid (compiling) instance with random stuff inside. Be careful when applying random patterns to longer strings as certain types of patterns may explode into exponential times in backtracking implementations (such as Java's). Declaration public static Regex RandomRegex(Random random) Parameters Type Name Description Random random Returns Type Description Regex | Improve this Doc View Source RandomRegexpishString(Random) Returns a thats \"regexpish\" (contains lots of operators typically found in regular expressions) If you call this enough times, you might get a valid regex! Declaration public static string RandomRegexpishString(Random r) Parameters Type Name Description Random r Returns Type Description System.String | Improve this Doc View Source RandomRegexpishString(Random, Int32) Returns a thats \"regexpish\" (contains lots of operators typically found in regular expressions) If you call this enough times, you might get a valid regex! Note: to avoid practically endless backtracking patterns we replace asterisk and plus operators with bounded repetitions. See LUCENE-4111 for more info. Declaration public static string RandomRegexpishString(Random r, int maxLength) Parameters Type Name Description Random r System.Int32 maxLength A hint about maximum length of the regexpish string. It may be exceeded by a few characters. Returns Type Description System.String | Improve this Doc View Source RandomSimpleString(Random) Returns a random string consisting only of lowercase characters 'a' through 'z', between 0 and 20 characters in length. Declaration public static string RandomSimpleString(Random r) Parameters Type Name Description Random r Returns Type Description System.String | Improve this Doc View Source RandomSimpleString(Random, Int32) Returns a random string consisting only of lowercase characters 'a' through 'z'. Declaration public static string RandomSimpleString(Random r, int maxLength) Parameters Type Name Description Random r System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source RandomSimpleString(Random, Int32, Int32) Returns a random string consisting only of lowercase characters 'a' through 'z'. Declaration public static string RandomSimpleString(Random r, int minLength, int maxLength) Parameters Type Name Description Random r System.Int32 minLength System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source RandomSimpleStringRange(Random, Char, Char, Int32) Returns a random string consisting only of characters between minChar and maxChar . Declaration public static string RandomSimpleStringRange(Random r, char minChar, char maxChar, int maxLength) Parameters Type Name Description Random r System.Char minChar System.Char maxChar System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source RandomSubString(Random, Int32, Boolean) Declaration public static string RandomSubString(Random random, int wordLength, bool simple) Parameters Type Name Description Random random System.Int32 wordLength System.Boolean simple Returns Type Description System.String | Improve this Doc View Source RandomUnicodeString(Random) Returns random string, including full unicode range. Declaration public static string RandomUnicodeString(Random r) Parameters Type Name Description Random r Returns Type Description System.String | Improve this Doc View Source RandomUnicodeString(Random, Int32) Returns a random string up to a certain length. Declaration public static string RandomUnicodeString(Random r, int maxLength) Parameters Type Name Description Random r System.Int32 maxLength Returns Type Description System.String | Improve this Doc View Source RandomWhitespace(Random, Int32, Int32) Returns a random string in the specified length range consisting entirely of whitespace characters. Declaration public static string RandomWhitespace(Random r, int minLength, int maxLength) Parameters Type Name Description Random r System.Int32 minLength System.Int32 maxLength Returns Type Description System.String See Also WHITESPACE_CHARACTERS | Improve this Doc View Source ReduceOpenFiles(IndexWriter) Just tries to configure things to keep the open file count lowish. Declaration public static void ReduceOpenFiles(IndexWriter w) Parameters Type Name Description IndexWriter w | Improve this Doc View Source Rm(DirectoryInfo[]) Deletes one or more files or directories (and everything underneath it). Declaration public static void Rm(params DirectoryInfo[] locations) Parameters Type Name Description DirectoryInfo [] locations | Improve this Doc View Source StringToCharSequence(String, Random) Declaration public static ICharSequence StringToCharSequence(string string, Random random) Parameters Type Name Description System.String string Random random Returns Type Description ICharSequence | Improve this Doc View Source SyncConcurrentMerges(IMergeScheduler) Declaration public static void SyncConcurrentMerges(IMergeScheduler ms) Parameters Type Name Description IMergeScheduler ms | Improve this Doc View Source SyncConcurrentMerges(IndexWriter) Declaration public static void SyncConcurrentMerges(IndexWriter writer) Parameters Type Name Description IndexWriter writer | Improve this Doc View Source Unzip(Stream, DirectoryInfo) Convenience method unzipping zipFileStream into destDir , cleaning up destDir first. Declaration public static void Unzip(Stream zipFileStream, DirectoryInfo destDir) Parameters Type Name Description Stream zipFileStream DirectoryInfo destDir"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.ThrottledIndexOutput.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.ThrottledIndexOutput.html",
    "title": "Class ThrottledIndexOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThrottledIndexOutput Intentionally slow for testing. Inheritance System.Object ThrottledIndexOutput Namespace : Lucene.Net.Util Assembly : Lucene.Net.TestFramework.dll Syntax public class ThrottledIndexOutput : IndexOutput Constructors | Improve this Doc View Source ThrottledIndexOutput(Int32, Int64, IndexOutput) Declaration public ThrottledIndexOutput(int bytesPerSecond, long delayInMillis, IndexOutput delegate) Parameters Type Name Description System.Int32 bytesPerSecond System.Int64 delayInMillis IndexOutput delegate | Improve this Doc View Source ThrottledIndexOutput(Int32, Int64, Int32, IndexOutput) Declaration public ThrottledIndexOutput(int bytesPerSecond, long delays, int minBytesWritten, IndexOutput delegate) Parameters Type Name Description System.Int32 bytesPerSecond System.Int64 delays System.Int32 minBytesWritten IndexOutput delegate | Improve this Doc View Source ThrottledIndexOutput(Int32, Int64, Int64, Int64, Int64, IndexOutput) Declaration public ThrottledIndexOutput(int bytesPerSecond, long flushDelayMillis, long closeDelayMillis, long seekDelayMillis, long minBytesWritten, IndexOutput delegate) Parameters Type Name Description System.Int32 bytesPerSecond System.Int64 flushDelayMillis System.Int64 closeDelayMillis System.Int64 seekDelayMillis System.Int64 minBytesWritten IndexOutput delegate Fields | Improve this Doc View Source DEFAULT_MIN_WRITTEN_BYTES Declaration public const int DEFAULT_MIN_WRITTEN_BYTES = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source Checksum Declaration public override long Checksum { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Length Declaration public override long Length { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CopyBytes(DataInput, Int64) Declaration public override void CopyBytes(DataInput input, long numBytes) Parameters Type Name Description DataInput input System.Int64 numBytes | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Flush() Declaration public override void Flush() | Improve this Doc View Source GetDelay(Boolean) Declaration protected virtual long GetDelay(bool closing) Parameters Type Name Description System.Boolean closing Returns Type Description System.Int64 | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 | Improve this Doc View Source MBitsToBytes(Int32) Declaration public static int MBitsToBytes(int mbits) Parameters Type Name Description System.Int32 mbits Returns Type Description System.Int32 | Improve this Doc View Source NewFromDelegate(IndexOutput) Declaration public virtual ThrottledIndexOutput NewFromDelegate(IndexOutput output) Parameters Type Name Description IndexOutput output Returns Type Description ThrottledIndexOutput | Improve this Doc View Source Seek(Int64) Declaration public override void Seek(long pos) Parameters Type Name Description System.Int64 pos | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length"
  },
  "api/Lucene.Net.TestFramework/Lucene.Net.Util.TimeUnits.html": {
    "href": "api/Lucene.Net.TestFramework/Lucene.Net.Util.TimeUnits.html",
    "title": "Class TimeUnits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TimeUnits Time unit constants for use in annotations. Inheritance System.Object TimeUnits Namespace : Lucene.Net.Util Assembly : Lucene.Net.TestFramework.dll Syntax public static class TimeUnits : object Fields | Improve this Doc View Source HOUR 1 hour in milliseconds Declaration public const int HOUR = null Field Value Type Description System.Int32 | Improve this Doc View Source MINUTE 1 minute in milliseconds Declaration public const int MINUTE = null Field Value Type Description System.Int32 | Improve this Doc View Source SECOND 1 second in milliseconds Declaration public const int SECOND = null Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.TestFramework/overview.html": {
    "href": "api/Lucene.Net.TestFramework/overview.html",
    "title": "Lucene.Net.TestFramework | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Lucene.Net.TestFramework <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The Lucene Test Framework is used by Lucene as the basis for its tests. The framework can also be used for testing third-party code that uses the Lucene API."
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.GlobalReuseStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.GlobalReuseStrategy.html",
    "title": "Class Analyzer.GlobalReuseStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Analyzer.GlobalReuseStrategy Implementation of ReuseStrategy that reuses the same components for every field. Inheritance System.Object ReuseStrategy Analyzer.GlobalReuseStrategy Inherited Members ReuseStrategy.GetStoredValue(Analyzer) ReuseStrategy.SetStoredValue(Analyzer, Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public sealed class GlobalReuseStrategy : ReuseStrategy Constructors | Improve this Doc View Source GlobalReuseStrategy() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public GlobalReuseStrategy() Methods | Improve this Doc View Source GetReusableComponents(Analyzer, String) Declaration public override TokenStreamComponents GetReusableComponents(Analyzer analyzer, string fieldName) Parameters Type Name Description Analyzer analyzer System.String fieldName Returns Type Description TokenStreamComponents Overrides ReuseStrategy.GetReusableComponents(Analyzer, String) | Improve this Doc View Source SetReusableComponents(Analyzer, String, TokenStreamComponents) Declaration public override void SetReusableComponents(Analyzer analyzer, string fieldName, TokenStreamComponents components) Parameters Type Name Description Analyzer analyzer System.String fieldName TokenStreamComponents components Overrides ReuseStrategy.SetReusableComponents(Analyzer, String, TokenStreamComponents)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.html",
    "title": "Class Analyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Analyzer An Analyzer builds TokenStream s, which analyze text. It thus represents a policy for extracting index terms from text. In order to define what analysis is done, subclasses must define their TokenStreamComponents in CreateComponents(String, TextReader) . The components are then reused in each call to GetTokenStream(String, TextReader) . Simple example: Analyzer analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }); For more examples, see the Lucene.Net.Analysis namespace documentation. For some concrete implementations bundled with Lucene, look in the analysis modules: Common: Analyzers for indexing content in different languages and domains. ICU: Exposes functionality from ICU to Apache Lucene. Kuromoji: Morphological analyzer for Japanese text. Morfologik: Dictionary-driven lemmatization for the Polish language. Phonetic: Analysis for indexing phonetic signatures (for sounds-alike search). Smart Chinese: Analyzer for Simplified Chinese, which indexes words. Stempel: Algorithmic Stemmer for the Polish Language. UIMA: Analysis integration with Apache UIMA. Inheritance System.Object Analyzer AnalyzerWrapper Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class Analyzer : IDisposable Constructors | Improve this Doc View Source Analyzer() Create a new Analyzer , reusing the same set of components per-thread across calls to GetTokenStream(String, TextReader) . Declaration public Analyzer() | Improve this Doc View Source Analyzer(ReuseStrategy) Expert: create a new Analyzer with a custom ReuseStrategy . NOTE: if you just want to reuse on a per-field basis, its easier to use a subclass of AnalyzerWrapper such as Lucene.Net.Analysis.Common.Miscellaneous.PerFieldAnalyzerWrapper instead. Declaration public Analyzer(ReuseStrategy reuseStrategy) Parameters Type Name Description ReuseStrategy reuseStrategy Fields | Improve this Doc View Source GLOBAL_REUSE_STRATEGY A predefined ReuseStrategy that reuses the same components for every field. Declaration public static readonly ReuseStrategy GLOBAL_REUSE_STRATEGY Field Value Type Description ReuseStrategy | Improve this Doc View Source PER_FIELD_REUSE_STRATEGY A predefined ReuseStrategy that reuses components per-field by maintaining a Map of TokenStreamComponents per field name. Declaration public static readonly ReuseStrategy PER_FIELD_REUSE_STRATEGY Field Value Type Description ReuseStrategy Properties | Improve this Doc View Source Strategy Returns the used ReuseStrategy . Declaration public ReuseStrategy Strategy { get; } Property Value Type Description ReuseStrategy Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a new TokenStreamComponents instance for this analyzer. Declaration protected abstract TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName the name of the fields content passed to the TokenStreamComponents sink as a reader TextReader reader the reader passed to the Tokenizer constructor Returns Type Description TokenStreamComponents the TokenStreamComponents for this analyzer. | Improve this Doc View Source Dispose() Frees persistent resources used by this Analyzer Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Frees persistent resources used by this Analyzer Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetOffsetGap(String) Just like GetPositionIncrementGap(String) , except for Token offsets instead. By default this returns 1. this method is only called if the field produced at least one token for indexing. Declaration public virtual int GetOffsetGap(string fieldName) Parameters Type Name Description System.String fieldName the field just indexed Returns Type Description System.Int32 offset gap, added to the next token emitted from GetTokenStream(String, TextReader) . this value must be >= 0 . | Improve this Doc View Source GetPositionIncrementGap(String) Invoked before indexing a IIndexableField instance if terms have already been added to that field. This allows custom analyzers to place an automatic position increment gap between IIndexableField instances using the same field name. The default value position increment gap is 0. With a 0 position increment gap and the typical default token position increment of 1, all terms in a field, including across IIndexableField instances, are in successive positions, allowing exact PhraseQuery matches, for instance, across IIndexableField instance boundaries. Declaration public virtual int GetPositionIncrementGap(string fieldName) Parameters Type Name Description System.String fieldName IIndexableField name being indexed. Returns Type Description System.Int32 position increment gap, added to the next token emitted from GetTokenStream(String, TextReader) . this value must be >= 0 . | Improve this Doc View Source GetTokenStream(String, String) Returns a TokenStream suitable for fieldName , tokenizing the contents of text . This method uses CreateComponents(String, TextReader) to obtain an instance of TokenStreamComponents . It returns the sink of the components and stores the components internally. Subsequent calls to this method will reuse the previously stored components after resetting them through SetReader(TextReader) . NOTE: After calling this method, the consumer must follow the workflow described in TokenStream to properly consume its contents. See the Lucene.Net.Analysis namespace documentation for some examples demonstrating this. Declaration public TokenStream GetTokenStream(string fieldName, string text) Parameters Type Name Description System.String fieldName the name of the field the created TokenStream is used for System.String text the the streams source reads from Returns Type Description TokenStream TokenStream for iterating the analyzed content of reader See Also GetTokenStream(String, TextReader) | Improve this Doc View Source GetTokenStream(String, TextReader) Returns a TokenStream suitable for fieldName , tokenizing the contents of text . This method uses CreateComponents(String, TextReader) to obtain an instance of TokenStreamComponents . It returns the sink of the components and stores the components internally. Subsequent calls to this method will reuse the previously stored components after resetting them through SetReader(TextReader) . NOTE: After calling this method, the consumer must follow the workflow described in TokenStream to properly consume its contents. See the Lucene.Net.Analysis namespace documentation for some examples demonstrating this. Declaration public TokenStream GetTokenStream(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName the name of the field the created TokenStream is used for TextReader reader the reader the streams source reads from Returns Type Description TokenStream TokenStream for iterating the analyzed content of See Also GetTokenStream(String, String) | Improve this Doc View Source InitReader(String, TextReader) Override this if you want to add a CharFilter chain. The default implementation returns reader unchanged. Declaration protected virtual TextReader InitReader(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName IIndexableField name being indexed TextReader reader original Returns Type Description TextReader reader, optionally decorated with CharFilter (s) | Improve this Doc View Source NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Creates a new instance with the ability to specify the body of the CreateComponents(String, TextReader) method through the createComponents parameter. Simple example: var analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }); LUCENENET specific Declaration public static Analyzer NewAnonymous(Func<string, TextReader, TokenStreamComponents> createComponents) Parameters Type Name Description Func < System.String , TextReader , TokenStreamComponents > createComponents A delegate method that represents (is called by) the CreateComponents(String, TextReader) method. It accepts a fieldName and a reader and returns the TokenStreamComponents for this analyzer. Returns Type Description Analyzer A new Lucene.Net.Analysis.Analyzer.AnonymousAnalyzer instance. | Improve this Doc View Source NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Creates a new instance with the ability to specify the body of the CreateComponents(String, TextReader) method through the createComponents parameter and the body of the InitReader(String, TextReader) method through the initReader parameter. Simple example: var analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }, initReader: (fieldName, reader) => { return new HTMLStripCharFilter(reader); }); LUCENENET specific Declaration public static Analyzer NewAnonymous(Func<string, TextReader, TokenStreamComponents> createComponents, Func<string, TextReader, TextReader> initReader) Parameters Type Name Description Func < System.String , TextReader , TokenStreamComponents > createComponents A delegate method that represents (is called by) the CreateComponents(String, TextReader) method. It accepts a fieldName and a reader and returns the TokenStreamComponents for this analyzer. Func < System.String , TextReader , TextReader > initReader A delegate method that represents (is called by) the InitReader(String, TextReader) method. It accepts a fieldName and a reader and returns the that can be modified or wrapped by the initReader method. Returns Type Description Analyzer A new Lucene.Net.Analysis.Analyzer.AnonymousAnalyzer instance. | Improve this Doc View Source NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Creates a new instance with the ability to specify the body of the CreateComponents(String, TextReader) method through the createComponents parameter, the body of the InitReader(String, TextReader) method through the initReader parameter, and allows the use of a ReuseStrategy . Simple example: var analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }, initReader: (fieldName, reader) => { return new HTMLStripCharFilter(reader); }, reuseStrategy); LUCENENET specific Declaration public static Analyzer NewAnonymous(Func<string, TextReader, TokenStreamComponents> createComponents, Func<string, TextReader, TextReader> initReader, ReuseStrategy reuseStrategy) Parameters Type Name Description Func < System.String , TextReader , TokenStreamComponents > createComponents A delegate method that represents (is called by) the CreateComponents(String, TextReader) method. It accepts a fieldName and a reader and returns the TokenStreamComponents for this analyzer. Func < System.String , TextReader , TextReader > initReader A delegate method that represents (is called by) the InitReader(String, TextReader) method. It accepts a fieldName and a reader and returns the that can be modified or wrapped by the initReader method. ReuseStrategy reuseStrategy A custom ReuseStrategy instance. Returns Type Description Analyzer A new Lucene.Net.Analysis.Analyzer.AnonymousAnalyzer instance. | Improve this Doc View Source NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Creates a new instance with the ability to specify the body of the CreateComponents(String, TextReader) method through the createComponents parameter and allows the use of a ReuseStrategy . Simple example: var analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }, reuseStrategy); LUCENENET specific Declaration public static Analyzer NewAnonymous(Func<string, TextReader, TokenStreamComponents> createComponents, ReuseStrategy reuseStrategy) Parameters Type Name Description Func < System.String , TextReader , TokenStreamComponents > createComponents An delegate method that represents (is called by) the CreateComponents(String, TextReader) method. It accepts a fieldName and a reader and returns the TokenStreamComponents for this analyzer. ReuseStrategy reuseStrategy A custom ReuseStrategy instance. Returns Type Description Analyzer A new Lucene.Net.Analysis.Analyzer.AnonymousAnalyzer instance."
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.PerFieldReuseStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.PerFieldReuseStrategy.html",
    "title": "Class Analyzer.PerFieldReuseStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Analyzer.PerFieldReuseStrategy Implementation of ReuseStrategy that reuses components per-field by maintaining a Map of TokenStreamComponents per field name. Inheritance System.Object ReuseStrategy Analyzer.PerFieldReuseStrategy Inherited Members ReuseStrategy.GetStoredValue(Analyzer) ReuseStrategy.SetStoredValue(Analyzer, Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public class PerFieldReuseStrategy : ReuseStrategy Constructors | Improve this Doc View Source PerFieldReuseStrategy() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public PerFieldReuseStrategy() Methods | Improve this Doc View Source GetReusableComponents(Analyzer, String) Declaration public override TokenStreamComponents GetReusableComponents(Analyzer analyzer, string fieldName) Parameters Type Name Description Analyzer analyzer System.String fieldName Returns Type Description TokenStreamComponents Overrides ReuseStrategy.GetReusableComponents(Analyzer, String) | Improve this Doc View Source SetReusableComponents(Analyzer, String, TokenStreamComponents) Declaration public override void SetReusableComponents(Analyzer analyzer, string fieldName, TokenStreamComponents components) Parameters Type Name Description Analyzer analyzer System.String fieldName TokenStreamComponents components Overrides ReuseStrategy.SetReusableComponents(Analyzer, String, TokenStreamComponents)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.AnalyzerWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.AnalyzerWrapper.html",
    "title": "Class AnalyzerWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnalyzerWrapper Extension to Analyzer suitable for Analyzer s which wrap other Analyzer s. GetWrappedAnalyzer(String) allows the Analyzer to wrap multiple Analyzer s which are selected on a per field basis. WrapComponents(String, TokenStreamComponents) allows the TokenStreamComponents of the wrapped Analyzer to then be wrapped (such as adding a new TokenFilter to form new TokenStreamComponents ). Inheritance System.Object Analyzer AnalyzerWrapper Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class AnalyzerWrapper : Analyzer Constructors | Improve this Doc View Source AnalyzerWrapper() Creates a new AnalyzerWrapper . Since the ReuseStrategy of the wrapped Analyzer s are unknown, PER_FIELD_REUSE_STRATEGY is assumed. Declaration protected AnalyzerWrapper() | Improve this Doc View Source AnalyzerWrapper(ReuseStrategy) Creates a new AnalyzerWrapper with the given reuse strategy. If you want to wrap a single delegate Analyzer you can probably reuse its strategy when instantiating this subclass: base(innerAnalyzer.Strategy) . If you choose different analyzers per field, use PER_FIELD_REUSE_STRATEGY . Declaration protected AnalyzerWrapper(ReuseStrategy reuseStrategy) Parameters Type Name Description ReuseStrategy reuseStrategy See Also Strategy Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override sealed TokenStreamComponents CreateComponents(string fieldName, TextReader aReader) Parameters Type Name Description System.String fieldName TextReader aReader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) | Improve this Doc View Source GetOffsetGap(String) Declaration public override int GetOffsetGap(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Int32 Overrides Analyzer.GetOffsetGap(String) | Improve this Doc View Source GetPositionIncrementGap(String) Declaration public override int GetPositionIncrementGap(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Int32 Overrides Analyzer.GetPositionIncrementGap(String) | Improve this Doc View Source GetWrappedAnalyzer(String) Retrieves the wrapped Analyzer appropriate for analyzing the field with the given name Declaration protected abstract Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Name of the field which is to be analyzed Returns Type Description Analyzer Analyzer for the field with the given name. Assumed to be non-null | Improve this Doc View Source InitReader(String, TextReader) Declaration protected override TextReader InitReader(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName TextReader reader Returns Type Description TextReader Overrides Analyzer.InitReader(String, TextReader) | Improve this Doc View Source WrapComponents(String, TokenStreamComponents) Wraps / alters the given TokenStreamComponents , taken from the wrapped Analyzer , to form new components. It is through this method that new TokenFilter s can be added by AnalyzerWrapper s. By default, the given components are returned. Declaration protected virtual TokenStreamComponents WrapComponents(string fieldName, TokenStreamComponents components) Parameters Type Name Description System.String fieldName Name of the field which is to be analyzed TokenStreamComponents components TokenStreamComponents taken from the wrapped Analyzer Returns Type Description TokenStreamComponents Wrapped / altered TokenStreamComponents . | Improve this Doc View Source WrapReader(String, TextReader) Wraps / alters the given . Through this method AnalyzerWrapper s can implement InitReader(String, TextReader) . By default, the given reader is returned. Declaration protected virtual TextReader WrapReader(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName name of the field which is to be analyzed TextReader reader the reader to wrap Returns Type Description TextReader the wrapped reader"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.CachingTokenFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.CachingTokenFilter.html",
    "title": "Class CachingTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CachingTokenFilter This class can be used if the token attributes of a TokenStream are intended to be consumed more than once. It caches all token attribute states locally in a List. CachingTokenFilter implements the optional method Reset() , which repositions the stream to the first Token . Inheritance System.Object AttributeSource TokenStream TokenFilter CachingTokenFilter Implements IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public sealed class CachingTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CachingTokenFilter(TokenStream) Create a new CachingTokenFilter around input , caching its token attributes, which can be replayed again after a call to Reset() . Declaration public CachingTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Rewinds the iterator to the beginning of the cached list. Note that this does not call Reset() on the wrapped tokenstream ever, even the first time. You should Reset() the inner tokenstream before wrapping it with CachingTokenFilter . Declaration public override void Reset() Overrides TokenFilter.Reset() Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.CharFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.CharFilter.html",
    "title": "Class CharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharFilter Subclasses of CharFilter can be chained to filter a They can be used as with additional offset correction. Tokenizer s will automatically use CorrectOffset(Int32) if a CharFilter subclass is used. This class is abstract: at a minimum you must implement , transforming the input in some way from m_input , and Correct(Int32) to adjust the offsets to match the originals. You can optionally provide more efficient implementations of additional methods like , but this is not required. For examples and integration with Analyzer , see the Lucene.Net.Analysis namespace documentation. Inheritance System.Object CharFilter Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class CharFilter : TextReader Constructors | Improve this Doc View Source CharFilter(TextReader) Create a new CharFilter wrapping the provided reader. Declaration public CharFilter(TextReader input) Parameters Type Name Description TextReader input a , can also be a CharFilter for chaining. Fields | Improve this Doc View Source m_input The underlying character-input stream. Declaration protected readonly TextReader m_input Field Value Type Description TextReader Properties | Improve this Doc View Source IsMarkSupported Tells whether this stream supports the Mark(Int32) operation. The default implementation always returns false. Subclasses should override this method. LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual bool IsMarkSupported { get; } Property Value Type Description System.Boolean true if and only if this stream supports the mark operation. | Improve this Doc View Source IsReady Tells whether this stream is ready to be read. True if the next is guaranteed not to block for input, false otherwise. Note that returning false does not guarantee that the next read will block. LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual bool IsReady { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Correct(Int32) Subclasses override to correct the current offset. Declaration protected abstract int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff current offset Returns Type Description System.Int32 corrected offset | Improve this Doc View Source CorrectOffset(Int32) Chains the corrected offset through the input CharFilter (s). Declaration public int CorrectOffset(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 | Improve this Doc View Source Dispose(Boolean) Closes the underlying input stream. NOTE: The default implementation closes the input , so be sure to call base.Dispose(disposing) when overriding this method. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Mark(Int32) Marks the present position in the stream. Subsequent calls to Reset() will attempt to reposition the stream to this point. Not all character-input streams support the Mark(Int32) operation. LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual void Mark(int readAheadLimit) Parameters Type Name Description System.Int32 readAheadLimit Limit on the number of characters that may be read while still preserving the mark. After reading this many characters, attempting to reset the stream may fail. | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public abstract override int Read(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Returns Type Description System.Int32 | Improve this Doc View Source Reset() LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual void Reset() | Improve this Doc View Source Skip(Int32) Skips characters. This method will block until some characters are available, an I/O error occurs, or the end of the stream is reached. LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual long Skip(int n) Parameters Type Name Description System.Int32 n The number of characters to skip Returns Type Description System.Int64 The number of characters actually skipped"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.html",
    "title": "Namespace Lucene.Net.Analysis | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> API and code to convert text into indexable/searchable tokens. Covers Analyzer and related classes. Parsing? Tokenization? Analysis! Lucene, an indexing and search library, accepts only plain text input. Parsing Applications that build their search capabilities upon Lucene may support documents in various formats – HTML, XML, PDF, Word – just to name a few. Lucene does not care about the Parsing of these and other document formats, and it is the responsibility of the application using Lucene to use an appropriate Parser to convert the original format into plain text before passing that plain text to Lucene. Tokenization Plain text passed to Lucene for indexing goes through a process generally called tokenization. Tokenization is the process of breaking input text into small indexing elements – tokens. The way input text is broken into tokens heavily influences how people will then be able to search for that text. For instance, sentences beginnings and endings can be identified to provide for more accurate phrase and proximity searches (though sentence identification is not provided by Lucene). In some cases simply breaking the input text into tokens is not enough – a deeper Analysis may be needed. Lucene includes both pre- and post-tokenization analysis facilities. Pre-tokenization analysis can include (but is not limited to) stripping HTML markup, and transforming or removing text matching arbitrary patterns or sets of fixed strings. There are many post-tokenization steps that can be done, including (but not limited to): Stemming – Replacing words with their stems. For instance with English stemming \"bikes\" is replaced with \"bike\"; now query \"bike\" can find both documents containing \"bike\" and those containing \"bikes\". Stop Words Filtering – Common words like \"the\", \"and\" and \"a\" rarely add any value to a search. Removing them shrinks the index size and increases performance. It may also reduce some \"noise\" and actually improve search quality. Text Normalization – Stripping accents and other character markings can make for better searching. Synonym Expansion – Adding in synonyms at the same token position as the current word can mean better matching when users search with words in the synonym set. Core Analysis The analysis package provides the mechanism to convert Strings and Readers into tokens that can be indexed by Lucene. There are four main classes in the package from which all analysis processes are derived. These are: Analyzer – An Analyzer is responsible for building a TokenStream which can be consumed by the indexing and searching processes. See below for more information on implementing your own Analyzer. CharFilter – CharFilter extends {@link java.io.Reader} to perform pre-tokenization substitutions, deletions, and/or insertions on an input Reader's text, while providing corrected character offsets to account for these modifications. This capability allows highlighting to function over the original text when indexed tokens are created from CharFilter-modified text with offsets that are not the same as those in the original text. Tokenizers' constructors and reset() methods accept a CharFilter. CharFilters may be chained to perform multiple pre-tokenization modifications. Tokenizer – A Tokenizer is a TokenStream and is responsible for breaking up incoming text into tokens. In most cases, an Analyzer will use a Tokenizer as the first step in the analysis process. However, to modify text prior to tokenization, use a CharStream subclass (see above). TokenFilter – A TokenFilter is also a TokenStream and is responsible for modifying tokens that have been created by the Tokenizer. Common modifications performed by a TokenFilter are: deletion, stemming, synonym injection, and down casing. Not all Analyzers require TokenFilters. Hints, Tips and Traps The synergy between Analyzer and Tokenizer is sometimes confusing. To ease this confusion, some clarifications: The Analyzer is responsible for the entire task of creating tokens out of the input text, while the Tokenizer is only responsible for breaking the input text into tokens. Very likely, tokens created by the Tokenizer would be modified or even omitted by the Analyzer (via one or more TokenFilter s) before being returned. Tokenizer is a TokenStream , but Analyzer is not. Analyzer is \"field aware\", but Tokenizer is not. Lucene Java provides a number of analysis capabilities, the most commonly used one being the StandardAnalyzer. Many applications will have a long and industrious life with nothing more than the StandardAnalyzer. However, there are a few other classes/packages that are worth mentioning: PerFieldAnalyzerWrapper – Most Analyzers perform the same operation on all Field s. The PerFieldAnalyzerWrapper can be used to associate a different Analyzer with different Field s. The analysis library located at the root of the Lucene distribution has a number of different Analyzer implementations to solve a variety of different problems related to searching. Many of the Analyzers are designed to analyze non-English languages. There are a variety of Tokenizer and TokenFilter implementations in this package. Take a look around, chances are someone has implemented what you need. Analysis is one of the main causes of performance degradation during indexing. Simply put, the more you analyze the slower the indexing (in most cases). Perhaps your application would be just fine using the simple WhitespaceTokenizer combined with a StopFilter. The benchmark/ library can be useful for testing out the speed of the analysis process. Invoking the Analyzer Applications usually do not invoke analysis – Lucene does it for them: At indexing, as a consequence of AddDocument , the Analyzer in effect for indexing is invoked for each indexed field of the added document. At search, a QueryParser may invoke the Analyzer during parsing. Note that for some queries, analysis does not take place, e.g. wildcard queries. However an application might invoke Analysis of any text for testing or for any other purpose, something like: Version matchVersion = Version.LUCENE_XY; // Substitute desired Lucene version for XY Analyzer analyzer = new StandardAnalyzer(matchVersion); // or any other analyzer TokenStream ts = analyzer.tokenStream(\"myfield\", new StringReader(\"some text goes here\")); OffsetAttribute offsetAtt = ts.addAttribute(OffsetAttribute.class); try { ts.reset(); // Resets this stream to the beginning. (Required) while (ts.incrementToken()) { // Use [#reflectAsString(boolean)](xref:Lucene.Net.Util.AttributeSource) // for token stream debugging. System.out.println(\"token: \" + ts.reflectAsString(true)); System.out.println(\"token start offset: \" + offsetAtt.startOffset()); System.out.println(\" token end offset: \" + offsetAtt.endOffset()); } ts.end(); // Perform end-of-stream operations, e.g. set the final offset. } finally { ts.close(); // Release resources associated with this stream. } Indexing Analysis vs. Search Analysis Selecting the \"correct\" analyzer is crucial for search quality, and can also affect indexing and search performance. The \"correct\" analyzer differs between applications. Lucene java's wiki page AnalysisParalysis provides some data on \"analyzing your analyzer\". Here are some rules of thumb: 1. Test test test... (did we say test?) 2. Beware of over analysis – might hurt indexing performance. 3. Start with same analyzer for indexing and search, otherwise searches would not find what they are supposed to... 4. In some cases a different analyzer is required for indexing and search, for instance: * Certain searches require more stop words to be filtered. (I.e. more than those that were filtered at indexing.) * Query expansion by synonyms, acronyms, auto spell correction, etc. This might sometimes require a modified analyzer – see the next section on how to do that. Implementing your own Analyzer Creating your own Analyzer is straightforward. Your Analyzer can wrap existing analysis components — CharFilter(s) (optional) , a Tokenizer, and TokenFilter(s) (optional) — or components you create, or a combination of existing and newly created components. Before pursuing this approach, you may find it worthwhile to explore the analyzers-common library and/or ask on the java-user@lucene.apache.org mailing list first to see if what you need already exists. If you are still committed to creating your own Analyzer, have a look at the source code of any one of the many samples located in this package. The following sections discuss some aspects of implementing your own analyzer. Field Section Boundaries When Document.add is called multiple times for the same field name, we could say that each such call creates a new section for that field in that document. In fact, a separate call to TokenStream would take place for each of these so called \"sections\". However, the default Analyzer behavior is to treat all these sections as one large section. This allows phrase search and proximity search to seamlessly cross boundaries between these \"sections\". In other words, if a certain field \"f\" is added like this: document.add(new Field(\"f\",\"first ends\",...); document.add(new Field(\"f\",\"starts two\",...); indexWriter.addDocument(document); Then, a phrase search for \"ends starts\" would find that document. Where desired, this behavior can be modified by introducing a \"position gap\" between consecutive field \"sections\", simply by overriding Analyzer.getPositionIncrementGap : Version matchVersion = Version.LUCENE_XY; // Substitute desired Lucene version for XY Analyzer myAnalyzer = new StandardAnalyzer(matchVersion) { public int getPositionIncrementGap(String fieldName) { return 10; } }; Token Position Increments By default, all tokens created by Analyzers and Tokenizers have a Increment of one. This means that the position stored for that token in the index would be one more than that of the previous token. Recall that phrase and proximity searches rely on position info. If the selected analyzer filters the stop words \"is\" and \"the\", then for a document containing the string \"blue is the sky\", only the tokens \"blue\", \"sky\" are indexed, with position(\"sky\") = 3 + position(\"blue\"). Now, a phrase query \"blue is the sky\" would find that document, because the same analyzer filters the same stop words from that query. But the phrase query \"blue sky\" would not find that document because the position increment between \"blue\" and \"sky\" is only 1. If this behavior does not fit the application needs, the query parser needs to be configured to not take position increments into account when generating phrase queries. Note that a StopFilter MUST increment the position increment in order not to generate corrupt tokenstream graphs. Here is the logic used by StopFilter to increment positions when filtering out tokens: public TokenStream tokenStream(final String fieldName, Reader reader) { final TokenStream ts = someAnalyzer.tokenStream(fieldName, reader); TokenStream res = new TokenStream() { CharTermAttribute termAtt = addAttribute(CharTermAttribute.class); PositionIncrementAttribute posIncrAtt = addAttribute(PositionIncrementAttribute.class); public boolean incrementToken() throws IOException { int extraIncrement = 0; while (true) { boolean hasNext = ts.incrementToken(); if (hasNext) { if (stopWords.contains(termAtt.toString())) { extraIncrement += posIncrAtt.getPositionIncrement(); // filter this word continue; } if (extraIncrement>0) { posIncrAtt.setPositionIncrement(posIncrAtt.getPositionIncrement()+extraIncrement); } } return hasNext; } } }; return res; } A few more use cases for modifying position increments are: Inhibiting phrase and proximity matches in sentence boundaries – for this, a tokenizer that identifies a new sentence can add 1 to the position increment of the first token of the new sentence. Injecting synonyms – here, synonyms of a token should be added after that token, and their position increment should be set to 0. As result, all synonyms of a token would be considered to appear in exactly the same position as that token, and so would they be seen by phrase and proximity searches. Token Position Length By default, all tokens created by Analyzers and Tokenizers have a Length of one. This means that the token occupies a single position. This attribute is not indexed and thus not taken into account for positional queries, but is used by eg. suggesters. The main use case for positions lengths is multi-word synonyms. With single-word synonyms, setting the position increment to 0 is enough to denote the fact that two words are synonyms, for example: Term red magenta Position increment 1 0 Given that position(magenta) = 0 + position(red), they are at the same position, so anything working with analyzers will return the exact same result if you replace \"magenta\" with \"red\" in the input. However, multi-word synonyms are more tricky. Let's say that you want to build a TokenStream where \"IBM\" is a synonym of \"Internal Business Machines\". Position increments are not enough anymore: Term IBM International Business Machines Position increment 1 0 1 1 The problem with this token stream is that \"IBM\" is at the same position as \"International\" although it is a synonym with \"International Business Machines\" as a whole. Setting the position increment of \"Business\" and \"Machines\" to 0 wouldn't help as it would mean than \"International\" is a synonym of \"Business\". The only way to solve this issue is to make \"IBM\" span across 3 positions, this is where position lengths come to rescue. Term IBM International Business Machines Position increment 1 0 1 1 Position length 3 1 1 1 This new attribute makes clear that \"IBM\" and \"International Business Machines\" start and end at the same positions. How to not write corrupt token streams There are a few rules to observe when writing custom Tokenizers and TokenFilters: The first position increment must be > 0. Positions must not go backward. Tokens that have the same start position must have the same start offset. Tokens that have the same end position (taking into account the position length) must have the same end offset. Tokenizers must call #clearAttributes() in incrementToken(). Tokenizers must override #end() , and pass the final offset (the total number of input characters processed) to both parameters of Int) . Although these rules might seem easy to follow, problems can quickly happen when chaining badly implemented filters that play with positions and offsets, such as synonym or n-grams filters. Here are good practices for writing correct filters: Token filters should not modify offsets. If you feel that your filter would need to modify offsets, then it should probably be implemented as a tokenizer. Token filters should not insert positions. If a filter needs to add tokens, then they should all have a position increment of 0. When they add tokens, token filters should call #clearAttributes() first. When they remove tokens, token filters should increment the position increment of the following token. Token filters should preserve position lengths. TokenStream API \"Flexible Indexing\" summarizes the effort of making the Lucene indexer pluggable and extensible for custom index formats. A fully customizable indexer means that users will be able to store custom data structures on disk. Therefore an API is necessary that can transport custom types of data from the documents to the indexer. Attribute and AttributeSource Classes Attribute and AttributeSource serve as the basis upon which the analysis elements of \"Flexible Indexing\" are implemented. An Attribute holds a particular piece of information about a text token. For example, CharTermAttribute contains the term text of a token, and OffsetAttribute contains the start and end character offsets of a token. An AttributeSource is a collection of Attributes with a restriction: there may be only one instance of each attribute type. TokenStream now extends AttributeSource, which means that one can add Attributes to a TokenStream. Since TokenFilter extends TokenStream, all filters are also AttributeSources. Lucene provides seven Attributes out of the box: CharTermAttribute The term text of a token. Implements {@link java.lang.CharSequence} (providing methods length() and charAt(), and allowing e.g. for direct use with regular expression {@link java.util.regex.Matcher}s) and {@link java.lang.Appendable} (allowing the term text to be appended to.) OffsetAttribute The start and end offset of a token in characters. PositionIncrementAttribute See above for detailed information about position increment. PositionLengthAttribute The number of positions occupied by a token. PayloadAttribute The payload that a Token can optionally have. TypeAttribute The type of the token. Default is 'word'. FlagsAttribute Optional flags a token can have. KeywordAttribute Keyword-aware TokenStreams/-Filters skip modification of tokens that return true from this attribute's isKeyword() method. More Requirements for Analysis Component Classes Due to the historical development of the API, there are some perhaps less than obvious requirements to implement analysis components classes. Token Stream Lifetime The code fragment of the analysis workflow protocol above shows a token stream being obtained, used, and then left for garbage. However, that does not mean that the components of that token stream will, in fact, be discarded. The default is just the opposite. Analyzer applies a reuse strategy to the tokenizer and the token filters. It will reuse them. For each new input, it calls #setReader(java.io.Reader) to set the input. Your components must be prepared for this scenario, as described below. Tokenizer You should create your tokenizer class by extending Tokenizer . Your tokenizer must never make direct use of the {@link java.io.Reader} supplied to its constructor(s). (A future release of Apache Lucene may remove the reader parameters from the Tokenizer constructors.) Tokenizer wraps the reader in an object that helps enforce that applications comply with the analysis workflow . Thus, your class should only reference the input via the protected 'input' field of Tokenizer. Your tokenizer must override #end() . Your implementation must call super.end() . It must set a correct final offset into the offset attribute, and finish up and other attributes to reflect the end of the stream. If your tokenizer overrides #reset() or #close() , it must call the corresponding superclass method. Token Filter You should create your token filter class by extending TokenFilter . If your token filter overrides #reset() , #end() or #close() , it must call the corresponding superclass method. Creating delegates Forwarding classes (those which extend Tokenizer but delegate selected logic to another tokenizer) must also set the reader to the delegate in the overridden #reset() method, e.g.: public class ForwardingTokenizer extends Tokenizer { private Tokenizer delegate; ... {@literal @Override} public void reset() { super.reset(); delegate.setReader(this.input); delegate.reset(); } } Testing Your Analysis Component The lucene-test-framework component defines BaseTokenStreamTestCase . By extending this class, you can create JUnit tests that validate that your Analyzer and/or analysis components correctly implement the protocol. The checkRandomData methods of that class are particularly effective in flushing out errors. Using the TokenStream API There are a few important things to know in order to use the new API efficiently which are summarized here. You may want to walk through the example below first and come back to this section afterwards. Please keep in mind that an AttributeSource can only have one instance of a particular Attribute. Furthermore, if a chain of a TokenStream and multiple TokenFilters is used, then all TokenFilters in that chain share the Attributes with the TokenStream. Attribute instances are reused for all tokens of a document. Thus, a TokenStream/-Filter needs to update the appropriate Attribute(s) in incrementToken(). The consumer, commonly the Lucene indexer, consumes the data in the Attributes and then calls incrementToken() again until it returns false, which indicates that the end of the stream was reached. This means that in each call of incrementToken() a TokenStream/-Filter can safely overwrite the data in the Attribute instances. For performance reasons a TokenStream/-Filter should add/get Attributes during instantiation; i.e., create an attribute in the constructor and store references to it in an instance variable. Using an instance variable instead of calling addAttribute()/getAttribute() in incrementToken() will avoid attribute lookups for every token in the document. All methods in AttributeSource are idempotent, which means calling them multiple times always yields the same result. This is especially important to know for addAttribute(). The method takes the type ( Class ) of an Attribute as an argument and returns an instance . If an Attribute of the same type was previously added, then the already existing instance is returned, otherwise a new instance is created and returned. Therefore TokenStreams/-Filters can safely call addAttribute() with the same Attribute type multiple times. Even consumers of TokenStreams should normally call addAttribute() instead of getAttribute(), because it would not fail if the TokenStream does not have this Attribute (getAttribute() would throw an IllegalArgumentException, if the Attribute is missing). More advanced code could simply check with hasAttribute(), if a TokenStream has it, and may conditionally leave out processing for extra performance. Example In this example we will create a WhiteSpaceTokenizer and use a LengthFilter to suppress all words that have only two or fewer characters. The LengthFilter is part of the Lucene core and its implementation will be explained here to illustrate the usage of the TokenStream API. Then we will develop a custom Attribute, a PartOfSpeechAttribute, and add another filter to the chain which utilizes the new custom attribute, and call it PartOfSpeechTaggingFilter. Whitespace tokenization public class MyAnalyzer extends Analyzer { private Version matchVersion; public MyAnalyzer(Version matchVersion) { this.matchVersion = matchVersion; } {@literal @Override} protected TokenStreamComponents createComponents(String fieldName, Reader reader) { return new TokenStreamComponents(new WhitespaceTokenizer(matchVersion, reader)); } public static void main(String[] args) throws IOException { // text to tokenize final String text = \"This is a demo of the TokenStream API\"; Version matchVersion = Version.LUCENE_XY; // Substitute desired Lucene version for XY MyAnalyzer analyzer = new MyAnalyzer(matchVersion); TokenStream stream = analyzer.tokenStream(\"field\", new StringReader(text)); // get the CharTermAttribute from the TokenStream CharTermAttribute termAtt = stream.addAttribute(CharTermAttribute.class); try { stream.reset(); // print all tokens until stream is exhausted while (stream.incrementToken()) { System.out.println(termAtt.toString()); } stream.end(); } finally { stream.close(); } } } In this easy example a simple white space tokenization is performed. In main() a loop consumes the stream and prints the term text of the tokens by accessing the CharTermAttribute that the WhitespaceTokenizer provides. Here is the output: This is a demo of the new TokenStream API Adding a LengthFilter We want to suppress all tokens that have 2 or less characters. We can do that easily by adding a LengthFilter to the chain. Only the createComponents() method in our analyzer needs to be changed: {@literal @Override} protected TokenStreamComponents createComponents(String fieldName, Reader reader) { final Tokenizer source = new WhitespaceTokenizer(matchVersion, reader); TokenStream result = new LengthFilter(true, source, 3, Integer.MAX_VALUE); return new TokenStreamComponents(source, result); } Note how now only words with 3 or more characters are contained in the output: This demo the new TokenStream API Now let's take a look how the LengthFilter is implemented: public final class LengthFilter extends FilteringTokenFilter { private final int min; private final int max; private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class); /** Create a new LengthFilter. This will filter out tokens whose CharTermAttribute is either too short (< min) or too long (> max). @param version the Lucene match version @param in the TokenStream to consume @param min the minimum length @param max the maximum length */ public LengthFilter(Version version, TokenStream in, int min, int max) { super(version, in); this.min = min; this.max = max; } {@literal @Override} public boolean accept() { final int len = termAtt.length(); return (len >= min && len <= max);=\"\" }=\"\" }=\"\"></=> In LengthFilter, the CharTermAttribute is added and stored in the instance variable termAtt . Remember that there can only be a single instance of CharTermAttribute in the chain, so in our example the addAttribute() call in LengthFilter returns the CharTermAttribute that the WhitespaceTokenizer already added. The tokens are retrieved from the input stream in FilteringTokenFilter's incrementToken() method (see below), which calls LengthFilter's accept() method. By looking at the term text in the CharTermAttribute, the length of the term can be determined and tokens that are either too short or too long are skipped. Note how accept() can efficiently access the instance variable; no attribute lookup is necessary. The same is true for the consumer, which can simply use local references to the Attributes. LengthFilter extends FilteringTokenFilter: public abstract class FilteringTokenFilter extends TokenFilter { private final PositionIncrementAttribute posIncrAtt = addAttribute(PositionIncrementAttribute.class); /** Create a new FilteringTokenFilter. @param in the TokenStream to consume */ public FilteringTokenFilter(Version version, TokenStream in) { super(in); } /** Override this method and return if the current input token should be returned by incrementToken. */ protected abstract boolean accept() throws IOException; {@literal @Override} public final boolean incrementToken() throws IOException { int skippedPositions = 0; while (input.incrementToken()) { if (accept()) { if (skippedPositions != 0) { posIncrAtt.setPositionIncrement(posIncrAtt.getPositionIncrement() + skippedPositions); } return true; } skippedPositions += posIncrAtt.getPositionIncrement(); } // reached EOS -- return false return false; } {@literal @Override} public void reset() throws IOException { super.reset(); } } Adding a custom Attribute Now we're going to implement our own custom Attribute for part-of-speech tagging and call it consequently PartOfSpeechAttribute . First we need to define the interface of the new Attribute: public interface PartOfSpeechAttribute extends Attribute { public static enum PartOfSpeech { Noun, Verb, Adjective, Adverb, Pronoun, Preposition, Conjunction, Article, Unknown } public void setPartOfSpeech(PartOfSpeech pos); public PartOfSpeech getPartOfSpeech(); } Now we also need to write the implementing class. The name of that class is important here: By default, Lucene checks if there is a class with the name of the Attribute with the suffix 'Impl'. In this example, we would consequently call the implementing class PartOfSpeechAttributeImpl . This should be the usual behavior. However, there is also an expert-API that allows changing these naming conventions: AttributeSource.AttributeFactory . The factory accepts an Attribute interface as argument and returns an actual instance. You can implement your own factory if you need to change the default behavior. Now here is the actual class that implements our new Attribute. Notice that the class has to extend <xref:Lucene.Net.Util.AttributeImpl>: public final class PartOfSpeechAttributeImpl extends AttributeImpl implements PartOfSpeechAttribute { private PartOfSpeech pos = PartOfSpeech.Unknown; public void setPartOfSpeech(PartOfSpeech pos) { this.pos = pos; } public PartOfSpeech getPartOfSpeech() { return pos; } {@literal @Override} public void clear() { pos = PartOfSpeech.Unknown; } {@literal @Override} public void copyTo(AttributeImpl target) { ((PartOfSpeechAttribute) target).setPartOfSpeech(pos); } } This is a simple Attribute implementation has only a single variable that stores the part-of-speech of a token. It extends the AttributeImpl class and therefore implements its abstract methods clear() and copyTo() . Now we need a TokenFilter that can set this new PartOfSpeechAttribute for each token. In this example we show a very naive filter that tags every word with a leading upper-case letter as a 'Noun' and all other words as 'Unknown'. public static class PartOfSpeechTaggingFilter extends TokenFilter { PartOfSpeechAttribute posAtt = addAttribute(PartOfSpeechAttribute.class); CharTermAttribute termAtt = addAttribute(CharTermAttribute.class); protected PartOfSpeechTaggingFilter(TokenStream input) { super(input); } public boolean incrementToken() throws IOException { if (!input.incrementToken()) {return false;} posAtt.setPartOfSpeech(determinePOS(termAtt.buffer(), 0, termAtt.length())); return true; } // determine the part of speech for the given term protected PartOfSpeech determinePOS(char[] term, int offset, int length) { // naive implementation that tags every uppercased word as noun if (length > 0 && Character.isUpperCase(term[0])) { return PartOfSpeech.Noun; } return PartOfSpeech.Unknown; } } Just like the LengthFilter, this new filter stores references to the attributes it needs in instance variables. Notice how you only need to pass in the interface of the new Attribute and instantiating the correct class is automatically taken care of. Now we need to add the filter to the chain in MyAnalyzer: {@literal @Override} protected TokenStreamComponents createComponents(String fieldName, Reader reader) { final Tokenizer source = new WhitespaceTokenizer(matchVersion, reader); TokenStream result = new LengthFilter(true, source, 3, Integer.MAX_VALUE); result = new PartOfSpeechTaggingFilter(result); return new TokenStreamComponents(source, result); } Now let's look at the output: This demo the new TokenStream API Apparently it hasn't changed, which shows that adding a custom attribute to a TokenStream/Filter chain does not affect any existing consumers, simply because they don't know the new Attribute. Now let's change the consumer to make use of the new PartOfSpeechAttribute and print it out: public static void main(String[] args) throws IOException { // text to tokenize final String text = \"This is a demo of the TokenStream API\"; MyAnalyzer analyzer = new MyAnalyzer(); TokenStream stream = analyzer.tokenStream(\"field\", new StringReader(text)); // get the CharTermAttribute from the TokenStream CharTermAttribute termAtt = stream.addAttribute(CharTermAttribute.class); // get the PartOfSpeechAttribute from the TokenStream PartOfSpeechAttribute posAtt = stream.addAttribute(PartOfSpeechAttribute.class); try { stream.reset(); // print all tokens until stream is exhausted while (stream.incrementToken()) { System.out.println(termAtt.toString() + \": \" + posAtt.getPartOfSpeech()); } stream.end(); } finally { stream.close(); } } The change that was made is to get the PartOfSpeechAttribute from the TokenStream and print out its contents in the while loop that consumes the stream. Here is the new output: This: Noun demo: Unknown the: Unknown new: Unknown TokenStream: Noun API: Noun Each word is now followed by its assigned PartOfSpeech tag. Of course this is a naive part-of-speech tagging. The word 'This' should not even be tagged as noun; it is only spelled capitalized because it is the first word of a sentence. Actually this is a good opportunity for an exercise. To practice the usage of the new API the reader could now write an Attribute and TokenFilter that can specify for each word if it was the first token of a sentence or not. Then the PartOfSpeechTaggingFilter can make use of this knowledge and only tag capitalized words as nouns if not the first word of a sentence (we know, this is still not a correct behavior, but hey, it's a good exercise). As a small hint, this is how the new Attribute class could begin: public class FirstTokenOfSentenceAttributeImpl extends AttributeImpl implements FirstTokenOfSentenceAttribute { private boolean firstToken; public void setFirstToken(boolean firstToken) { this.firstToken = firstToken; } public boolean getFirstToken() { return firstToken; } {@literal @Override} public void clear() { firstToken = false; } ... Adding a CharFilter chain Analyzers take Java {@link java.io.Reader}s as input. Of course you can wrap your Readers with {@link java.io.FilterReader}s to manipulate content, but this would have the big disadvantage that character offsets might be inconsistent with your original text. CharFilter is designed to allow you to pre-process input like a FilterReader would, but also preserve the original offsets associated with those characters. This way mechanisms like highlighting still work correctly. CharFilters can be chained. Example: public class MyAnalyzer extends Analyzer { {@literal @Override} protected TokenStreamComponents createComponents(String fieldName, Reader reader) { return new TokenStreamComponents(new MyTokenizer(reader)); } {@literal @Override} protected Reader initReader(String fieldName, Reader reader) { // wrap the Reader in a CharFilter chain. return new SecondCharFilter(new FirstCharFilter(reader)); } } Classes Analyzer An Analyzer builds TokenStream s, which analyze text. It thus represents a policy for extracting index terms from text. In order to define what analysis is done, subclasses must define their TokenStreamComponents in CreateComponents(String, TextReader) . The components are then reused in each call to GetTokenStream(String, TextReader) . Simple example: Analyzer analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }); For more examples, see the Lucene.Net.Analysis namespace documentation. For some concrete implementations bundled with Lucene, look in the analysis modules: Common: Analyzers for indexing content in different languages and domains. ICU: Exposes functionality from ICU to Apache Lucene. Kuromoji: Morphological analyzer for Japanese text. Morfologik: Dictionary-driven lemmatization for the Polish language. Phonetic: Analysis for indexing phonetic signatures (for sounds-alike search). Smart Chinese: Analyzer for Simplified Chinese, which indexes words. Stempel: Algorithmic Stemmer for the Polish Language. UIMA: Analysis integration with Apache UIMA. Analyzer.GlobalReuseStrategy Implementation of ReuseStrategy that reuses the same components for every field. Analyzer.PerFieldReuseStrategy Implementation of ReuseStrategy that reuses components per-field by maintaining a Map of TokenStreamComponents per field name. AnalyzerWrapper Extension to Analyzer suitable for Analyzer s which wrap other Analyzer s. GetWrappedAnalyzer(String) allows the Analyzer to wrap multiple Analyzer s which are selected on a per field basis. WrapComponents(String, TokenStreamComponents) allows the TokenStreamComponents of the wrapped Analyzer to then be wrapped (such as adding a new TokenFilter to form new TokenStreamComponents ). CachingTokenFilter This class can be used if the token attributes of a TokenStream are intended to be consumed more than once. It caches all token attribute states locally in a List. CachingTokenFilter implements the optional method Reset() , which repositions the stream to the first Token . CharFilter Subclasses of CharFilter can be chained to filter a They can be used as with additional offset correction. Tokenizer s will automatically use CorrectOffset(Int32) if a CharFilter subclass is used. This class is abstract: at a minimum you must implement , transforming the input in some way from m_input , and Correct(Int32) to adjust the offsets to match the originals. You can optionally provide more efficient implementations of additional methods like , but this is not required. For examples and integration with Analyzer , see the Lucene.Net.Analysis namespace documentation. NumericTokenStream Expert: this class provides a TokenStream for indexing numeric values that can be used by NumericRangeQuery or NumericRangeFilter . Note that for simple usage, Int32Field , Int64Field , SingleField or DoubleField is recommended. These fields disable norms and term freqs, as they are not usually needed during searching. If you need to change these settings, you should use this class. Here's an example usage, for an field: IndexableFieldType fieldType = new IndexableFieldType(TextField.TYPE_NOT_STORED) { OmitNorms = true, IndexOptions = IndexOptions.DOCS_ONLY }; Field field = new Field(name, new NumericTokenStream(precisionStep).SetInt32Value(value), fieldType); document.Add(field); For optimal performance, re-use the TokenStream and Field instance for more than one document: NumericTokenStream stream = new NumericTokenStream(precisionStep); IndexableFieldType fieldType = new IndexableFieldType(TextField.TYPE_NOT_STORED) { OmitNorms = true, IndexOptions = IndexOptions.DOCS_ONLY }; Field field = new Field(name, stream, fieldType); Document document = new Document(); document.Add(field); for(all documents) { stream.SetInt32Value(value) writer.AddDocument(document); } this stream is not intended to be used in analyzers; it's more for iterating the different precisions during indexing a specific numeric value. NOTE : as token streams are only consumed once the document is added to the index, if you index more than one numeric field, use a separate NumericTokenStream instance for each. See NumericRangeQuery for more details on the precisionStep parameter as well as how numeric fields work under the hood. @since 2.9 NumericTokenStream.NumericTermAttribute Implementation of NumericTokenStream.INumericTermAttribute . @lucene.internal @since 4.0 ReusableStringReader Internal class to enable reuse of the string reader by GetTokenStream(String, String) ReuseStrategy Strategy defining how TokenStreamComponents are reused per call to GetTokenStream(String, TextReader) . Token A Token is an occurrence of a term from the text of a field. It consists of a term's text, the start and end offset of the term in the text of the field, and a type string. The start and end offsets permit applications to re-associate a token with its source text, e.g., to display highlighted query terms in a document browser, or to show matching text fragments in a KWIC (KeyWord In Context) display, etc. The type is a string, assigned by a lexical analyzer (a.k.a. tokenizer), naming the lexical or syntactic class that the token belongs to. For example an end of sentence marker token might be implemented with type \"eos\". The default token type is \"word\". A Token can optionally have metadata (a.k.a. payload) in the form of a variable length byte array. Use GetPayload() to retrieve the payloads from the index. NOTE: As of 2.9, Token implements all IAttribute interfaces that are part of core Lucene and can be found in the Lucene.Net.Analysis.TokenAttributes namespace. Even though it is not necessary to use Token anymore, with the new TokenStream API it can be used as convenience class that implements all IAttribute s, which is especially useful to easily switch from the old to the new TokenStream API. Tokenizer s and TokenFilter s should try to re-use a Token instance when possible for best performance, by implementing the IncrementToken() API. Failing that, to create a new Token you should first use one of the constructors that starts with null text. To load the token from a char[] use CopyBuffer(Char[], Int32, Int32) . To load from a use SetEmpty() followed by Append(String) or Append(String, Int32, Int32) . Alternatively you can get the Token 's termBuffer by calling either Buffer , if you know that your text is shorter than the capacity of the termBuffer or ResizeBuffer(Int32) , if there is any possibility that you may need to grow the buffer. Fill in the characters of your term into this buffer, with if loading from a string, or with , and finally call SetLength(Int32) to set the length of the term text. See LUCENE-969 for details. Typical Token reuse patterns: Copying text from a string (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(string, startOffset, endOffset[, type]); Copying some text from a string (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(string, 0, string.Length, startOffset, endOffset[, type]); Copying text from char[] buffer (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(buffer, 0, buffer.Length, startOffset, endOffset[, type]); Copying some text from a char[] buffer (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(buffer, start, end - start, startOffset, endOffset[, type]); Copying from one one Token to another (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(source.Buffer, 0, source.Length, source.StartOffset, source.EndOffset[, source.Type]); A few things to note: Clear() initializes all of the fields to default values. this was changed in contrast to Lucene 2.4, but should affect no one. Because TokenStream s can be chained, one cannot assume that the Token 's current type is correct. The startOffset and endOffset represent the start and offset in the source text, so be careful in adjusting them. When caching a reusable token, clone it. When injecting a cached token into a stream that can be reset, clone it again. Please note: With Lucene 3.1, the ToString() method had to be changed to match the ICharSequence interface introduced by the interface ICharTermAttribute . this method now only prints the term text, no additional information anymore. Token.TokenAttributeFactory Expert: Creates a Token.TokenAttributeFactory returning Token as instance for the basic attributes and for all other attributes calls the given delegate factory. @since 3.0 TokenFilter A TokenFilter is a TokenStream whose input is another TokenStream . This is an abstract class; subclasses must override IncrementToken() . Tokenizer A Tokenizer is a TokenStream whose input is a . This is an abstract class; subclasses must override IncrementToken() NOTE: Subclasses overriding IncrementToken() must call ClearAttributes() before setting attributes. TokenStream A TokenStream enumerates the sequence of tokens, either from Field s of a Document or from query text. this is an abstract class; concrete subclasses are: Tokenizer , a TokenStream whose input is a ; and TokenFilter , a TokenStream whose input is another TokenStream . A new TokenStream API has been introduced with Lucene 2.9. this API has moved from being Token -based to IAttribute -based. While Token still exists in 2.9 as a convenience class, the preferred way to store the information of a Token is to use s. TokenStream now extends AttributeSource , which provides access to all of the token IAttribute s for the TokenStream . Note that only one instance per is created and reused for every token. This approach reduces object creation and allows local caching of references to the s. See IncrementToken() for further details. The workflow of the new TokenStream API is as follows: Instantiation of TokenStream / TokenFilter s which add/get attributes to/from the AttributeSource . The consumer calls Reset() . The consumer retrieves attributes from the stream and stores local references to all attributes it wants to access. The consumer calls IncrementToken() until it returns false consuming the attributes after each call. The consumer calls End() so that any end-of-stream operations can be performed. The consumer calls Dispose() to release any resource when finished using the TokenStream . To make sure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . You can find some example code for the new API in the analysis documentation. Sometimes it is desirable to capture a current state of a TokenStream , e.g., for buffering purposes (see CachingTokenFilter , TeeSinkTokenFilter). For this usecase CaptureState() and RestoreState(AttributeSource.State) can be used. The TokenStream -API in Lucene is based on the decorator pattern. Therefore all non-abstract subclasses must be sealed or have at least a sealed implementation of IncrementToken() ! This is checked when assertions are enabled. TokenStreamComponents This class encapsulates the outer components of a token stream. It provides access to the source ( Tokenizer ) and the outer end (sink), an instance of TokenFilter which also serves as the TokenStream returned by GetTokenStream(String, TextReader) . TokenStreamToAutomaton Consumes a TokenStream and creates an Automaton where the transition labels are UTF8 bytes (or Unicode code points if unicodeArcs is true) from the ITermToBytesRefAttribute . Between tokens we insert POS_SEP and for holes we insert HOLE . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces NumericTokenStream.INumericTermAttribute Expert: Use this attribute to get the details of the currently generated token. @lucene.experimental @since 4.0"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.html",
    "title": "Class NumericTokenStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericTokenStream Expert: this class provides a TokenStream for indexing numeric values that can be used by NumericRangeQuery or NumericRangeFilter . Note that for simple usage, Int32Field , Int64Field , SingleField or DoubleField is recommended. These fields disable norms and term freqs, as they are not usually needed during searching. If you need to change these settings, you should use this class. Here's an example usage, for an field: IndexableFieldType fieldType = new IndexableFieldType(TextField.TYPE_NOT_STORED) { OmitNorms = true, IndexOptions = IndexOptions.DOCS_ONLY }; Field field = new Field(name, new NumericTokenStream(precisionStep).SetInt32Value(value), fieldType); document.Add(field); For optimal performance, re-use the TokenStream and Field instance for more than one document: NumericTokenStream stream = new NumericTokenStream(precisionStep); IndexableFieldType fieldType = new IndexableFieldType(TextField.TYPE_NOT_STORED) { OmitNorms = true, IndexOptions = IndexOptions.DOCS_ONLY }; Field field = new Field(name, stream, fieldType); Document document = new Document(); document.Add(field); for(all documents) { stream.SetInt32Value(value) writer.AddDocument(document); } this stream is not intended to be used in analyzers; it's more for iterating the different precisions during indexing a specific numeric value. NOTE : as token streams are only consumed once the document is added to the index, if you index more than one numeric field, use a separate NumericTokenStream instance for each. See NumericRangeQuery for more details on the precisionStep parameter as well as how numeric fields work under the hood. @since 2.9 Inheritance System.Object AttributeSource TokenStream NumericTokenStream Implements IDisposable Inherited Members TokenStream.End() TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public sealed class NumericTokenStream : TokenStream, IDisposable Constructors | Improve this Doc View Source NumericTokenStream() Creates a token stream for numeric values using the default Lucene.Net.Analysis.NumericTokenStream.precisionStep PRECISION_STEP_DEFAULT (4). The stream is not yet initialized, before using set a value using the various Set ??? Value() methods. Declaration public NumericTokenStream() | Improve this Doc View Source NumericTokenStream(AttributeSource.AttributeFactory, Int32) Expert: Creates a token stream for numeric values with the specified precisionStep using the given AttributeSource.AttributeFactory . The stream is not yet initialized, before using set a value using the various Set ??? Value() methods. Declaration public NumericTokenStream(AttributeSource.AttributeFactory factory, int precisionStep) Parameters Type Name Description AttributeSource.AttributeFactory factory System.Int32 precisionStep | Improve this Doc View Source NumericTokenStream(Int32) Creates a token stream for numeric values with the specified precisionStep . The stream is not yet initialized, before using set a value using the various Set ??? Value() methods. Declaration public NumericTokenStream(int precisionStep) Parameters Type Name Description System.Int32 precisionStep Fields | Improve this Doc View Source TOKEN_TYPE_FULL_PREC The full precision token gets this token type assigned. Declaration public const string TOKEN_TYPE_FULL_PREC = null Field Value Type Description System.String | Improve this Doc View Source TOKEN_TYPE_LOWER_PREC The lower precision tokens gets this token type assigned. Declaration public const string TOKEN_TYPE_LOWER_PREC = null Field Value Type Description System.String Properties | Improve this Doc View Source PrecisionStep Returns the precision step. Declaration public int PrecisionStep { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source SetDoubleValue(Double) Initializes the token stream with the supplied value. Declaration public NumericTokenStream SetDoubleValue(double value) Parameters Type Name Description System.Double value the value, for which this TokenStream should enumerate tokens. Returns Type Description NumericTokenStream this instance, because of this you can use it the following way: new Field(name, new NumericTokenStream(precisionStep).SetDoubleValue(value)) | Improve this Doc View Source SetInt32Value(Int32) Initializes the token stream with the supplied value. NOTE: This was setIntValue() in Lucene Declaration public NumericTokenStream SetInt32Value(int value) Parameters Type Name Description System.Int32 value the value, for which this TokenStream should enumerate tokens. Returns Type Description NumericTokenStream this instance, because of this you can use it the following way: new Field(name, new NumericTokenStream(precisionStep).SetInt32Value(value)) | Improve this Doc View Source SetInt64Value(Int64) Initializes the token stream with the supplied value. NOTE: This was setLongValue() in Lucene Declaration public NumericTokenStream SetInt64Value(long value) Parameters Type Name Description System.Int64 value the value, for which this TokenStream should enumerate tokens. Returns Type Description NumericTokenStream this instance, because of this you can use it the following way: new Field(name, new NumericTokenStream(precisionStep).SetInt64Value(value)) | Improve this Doc View Source SetSingleValue(Single) Initializes the token stream with the supplied value. NOTE: This was setFloatValue() in Lucene Declaration public NumericTokenStream SetSingleValue(float value) Parameters Type Name Description System.Single value the value, for which this TokenStream should enumerate tokens. Returns Type Description NumericTokenStream this instance, because of this you can use it the following way: new Field(name, new NumericTokenStream(precisionStep).SetSingleValue(value)) Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.INumericTermAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.INumericTermAttribute.html",
    "title": "Interface NumericTokenStream.INumericTermAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface NumericTokenStream.INumericTermAttribute Expert: Use this attribute to get the details of the currently generated token. @lucene.experimental @since 4.0 Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public interface INumericTermAttribute : IAttribute Properties | Improve this Doc View Source RawValue Returns current token's raw value as with all Shift applied, undefined before first token Declaration long RawValue { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Shift Returns current shift value, undefined before first token Declaration int Shift { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source ValueSize Returns value size in bits (32 for , ; 64 for , ) Declaration int ValueSize { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source IncShift() Don't call this method! This is a Lucene.NET INTERNAL API, use at your own risk Declaration int IncShift() Returns Type Description System.Int32 | Improve this Doc View Source Init(Int64, Int32, Int32, Int32) Don't call this method! This is a Lucene.NET INTERNAL API, use at your own risk Declaration void Init(long value, int valSize, int precisionStep, int shift) Parameters Type Name Description System.Int64 value System.Int32 valSize System.Int32 precisionStep System.Int32 shift"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.NumericTermAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.NumericTermAttribute.html",
    "title": "Class NumericTokenStream.NumericTermAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericTokenStream.NumericTermAttribute Implementation of NumericTokenStream.INumericTermAttribute . @lucene.internal @since 4.0 Inheritance System.Object Attribute NumericTokenStream.NumericTermAttribute Implements NumericTokenStream.INumericTermAttribute ITermToBytesRefAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public sealed class NumericTermAttribute : Attribute, NumericTokenStream.INumericTermAttribute, ITermToBytesRefAttribute, IAttribute Constructors | Improve this Doc View Source NumericTermAttribute() Creates, but does not yet initialize this attribute instance Declaration public NumericTermAttribute() See Also Init(Int64, Int32, Int32, Int32) Properties | Improve this Doc View Source BytesRef Declaration public BytesRef BytesRef { get; } Property Value Type Description BytesRef | Improve this Doc View Source RawValue Declaration public long RawValue { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Shift Declaration public int Shift { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source ValueSize Declaration public int ValueSize { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source FillBytesRef() Declaration public void FillBytesRef() | Improve this Doc View Source IncShift() Declaration public int IncShift() Returns Type Description System.Int32 | Improve this Doc View Source Init(Int64, Int32, Int32, Int32) Declaration public void Init(long value, int valueSize, int precisionStep, int shift) Parameters Type Name Description System.Int64 value System.Int32 valueSize System.Int32 precisionStep System.Int32 shift | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) Implements NumericTokenStream.INumericTermAttribute ITermToBytesRefAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.ReusableStringReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.ReusableStringReader.html",
    "title": "Class ReusableStringReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReusableStringReader Internal class to enable reuse of the string reader by GetTokenStream(String, String) Inheritance System.Object ReusableStringReader Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public sealed class ReusableStringReader : System.IO.TextReader Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] c, int off, int len) Parameters Type Name Description System.Char [] c System.Int32 off System.Int32 len Returns Type Description System.Int32 | Improve this Doc View Source ReadToEnd() Declaration public override string ReadToEnd() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.ReuseStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.ReuseStrategy.html",
    "title": "Class ReuseStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReuseStrategy Strategy defining how TokenStreamComponents are reused per call to GetTokenStream(String, TextReader) . Inheritance System.Object ReuseStrategy Analyzer.GlobalReuseStrategy Analyzer.PerFieldReuseStrategy Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class ReuseStrategy : object Methods | Improve this Doc View Source GetReusableComponents(Analyzer, String) Gets the reusable TokenStreamComponents for the field with the given name. Declaration public abstract TokenStreamComponents GetReusableComponents(Analyzer analyzer, string fieldName) Parameters Type Name Description Analyzer analyzer Analyzer from which to get the reused components. Use GetStoredValue(Analyzer) and SetStoredValue(Analyzer, Object) to access the data on the Analyzer . System.String fieldName Name of the field whose reusable TokenStreamComponents are to be retrieved Returns Type Description TokenStreamComponents Reusable TokenStreamComponents for the field, or null if there was no previous components for the field | Improve this Doc View Source GetStoredValue(Analyzer) Returns the currently stored value. Declaration protected object GetStoredValue(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Returns Type Description System.Object Currently stored value or null if no value is stored | Improve this Doc View Source SetReusableComponents(Analyzer, String, TokenStreamComponents) Stores the given TokenStreamComponents as the reusable components for the field with the give name. Declaration public abstract void SetReusableComponents(Analyzer analyzer, string fieldName, TokenStreamComponents components) Parameters Type Name Description Analyzer analyzer Analyzer System.String fieldName Name of the field whose TokenStreamComponents are being set TokenStreamComponents components TokenStreamComponents which are to be reused for the field | Improve this Doc View Source SetStoredValue(Analyzer, Object) Sets the stored value. Declaration protected void SetStoredValue(Analyzer analyzer, object storedValue) Parameters Type Name Description Analyzer analyzer Analyzer System.Object storedValue Value to store"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Token.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Token A Token is an occurrence of a term from the text of a field. It consists of a term's text, the start and end offset of the term in the text of the field, and a type string. The start and end offsets permit applications to re-associate a token with its source text, e.g., to display highlighted query terms in a document browser, or to show matching text fragments in a KWIC (KeyWord In Context) display, etc. The type is a string, assigned by a lexical analyzer (a.k.a. tokenizer), naming the lexical or syntactic class that the token belongs to. For example an end of sentence marker token might be implemented with type \"eos\". The default token type is \"word\". A Token can optionally have metadata (a.k.a. payload) in the form of a variable length byte array. Use GetPayload() to retrieve the payloads from the index. NOTE: As of 2.9, Token implements all IAttribute interfaces that are part of core Lucene and can be found in the Lucene.Net.Analysis.TokenAttributes namespace. Even though it is not necessary to use Token anymore, with the new TokenStream API it can be used as convenience class that implements all IAttribute s, which is especially useful to easily switch from the old to the new TokenStream API. Tokenizer s and TokenFilter s should try to re-use a Token instance when possible for best performance, by implementing the IncrementToken() API. Failing that, to create a new Token you should first use one of the constructors that starts with null text. To load the token from a char[] use CopyBuffer(Char[], Int32, Int32) . To load from a use SetEmpty() followed by Append(String) or Append(String, Int32, Int32) . Alternatively you can get the Token 's termBuffer by calling either Buffer , if you know that your text is shorter than the capacity of the termBuffer or ResizeBuffer(Int32) , if there is any possibility that you may need to grow the buffer. Fill in the characters of your term into this buffer, with if loading from a string, or with , and finally call SetLength(Int32) to set the length of the term text. See LUCENE-969 for details. Typical Token reuse patterns: Copying text from a string (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(string, startOffset, endOffset[, type]); Copying some text from a string (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(string, 0, string.Length, startOffset, endOffset[, type]); Copying text from char[] buffer (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(buffer, 0, buffer.Length, startOffset, endOffset[, type]); Copying some text from a char[] buffer (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(buffer, start, end - start, startOffset, endOffset[, type]); Copying from one one Token to another (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(source.Buffer, 0, source.Length, source.StartOffset, source.EndOffset[, source.Type]); A few things to note: Clear() initializes all of the fields to default values. this was changed in contrast to Lucene 2.4, but should affect no one. Because TokenStream s can be chained, one cannot assume that the Token 's current type is correct. The startOffset and endOffset represent the start and offset in the source text, so be careful in adjusting them. When caching a reusable token, clone it. When injecting a cached token into a stream that can be reset, clone it again. Please note: With Lucene 3.1, the ToString() method had to be changed to match the ICharSequence interface introduced by the interface ICharTermAttribute . this method now only prints the term text, no additional information anymore. Inheritance System.Object Attribute CharTermAttribute Token Implements ICharTermAttribute ICharSequence ITermToBytesRefAttribute ITypeAttribute IPositionIncrementAttribute IFlagsAttribute IOffsetAttribute IPayloadAttribute IPositionLengthAttribute IAttribute Inherited Members CharTermAttribute.CopyBuffer(Char[], Int32, Int32) CharTermAttribute.Buffer CharTermAttribute.ResizeBuffer(Int32) CharTermAttribute.Length CharTermAttribute.SetLength(Int32) CharTermAttribute.SetEmpty() CharTermAttribute.FillBytesRef() CharTermAttribute.BytesRef CharTermAttribute.Item[Int32] CharTermAttribute.SubSequence(Int32, Int32) CharTermAttribute.Append(String, Int32, Int32) CharTermAttribute.Append(Char) CharTermAttribute.Append(Char[]) CharTermAttribute.Append(Char[], Int32, Int32) CharTermAttribute.Append(String) CharTermAttribute.Append(StringBuilder) CharTermAttribute.Append(StringBuilder, Int32, Int32) CharTermAttribute.Append(ICharTermAttribute) CharTermAttribute.Append(ICharSequence) CharTermAttribute.Append(ICharSequence, Int32, Int32) CharTermAttribute.ToString() Attribute.ReflectAsString(Boolean) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public class Token : CharTermAttribute, ICharTermAttribute, ICharSequence, ITermToBytesRefAttribute, ITypeAttribute, IPositionIncrementAttribute, IFlagsAttribute, IOffsetAttribute, IPayloadAttribute, IPositionLengthAttribute, IAttribute Constructors | Improve this Doc View Source Token() Constructs a Token will null text. Declaration public Token() | Improve this Doc View Source Token(Char[], Int32, Int32, Int32, Int32) Constructs a Token with the given term buffer (offset & length), start and end offsets Declaration public Token(char[] startTermBuffer, int termBufferOffset, int termBufferLength, int start, int end) Parameters Type Name Description System.Char [] startTermBuffer buffer containing term text System.Int32 termBufferOffset the index in the buffer of the first character System.Int32 termBufferLength number of valid characters in the buffer System.Int32 start start offset in the source text System.Int32 end end offset in the source text | Improve this Doc View Source Token(Int32, Int32) Constructs a Token with null text and start & end offsets. Declaration public Token(int start, int end) Parameters Type Name Description System.Int32 start start offset in the source text System.Int32 end end offset in the source text | Improve this Doc View Source Token(Int32, Int32, Int32) Constructs a Token with null text and start & end offsets plus flags. NOTE: flags is EXPERIMENTAL. Declaration public Token(int start, int end, int flags) Parameters Type Name Description System.Int32 start start offset in the source text System.Int32 end end offset in the source text System.Int32 flags The bits to set for this token | Improve this Doc View Source Token(Int32, Int32, String) Constructs a Token with null text and start & end offsets plus the Token type. Declaration public Token(int start, int end, string typ) Parameters Type Name Description System.Int32 start start offset in the source text System.Int32 end end offset in the source text System.String typ the lexical type of this Token | Improve this Doc View Source Token(String, Int32, Int32) Constructs a Token with the given term text, and start & end offsets. The type defaults to \"word.\" NOTE: for better indexing speed you should instead use the char[] termBuffer methods to set the term text. Declaration public Token(string text, int start, int end) Parameters Type Name Description System.String text term text System.Int32 start start offset in the source text System.Int32 end end offset in the source text | Improve this Doc View Source Token(String, Int32, Int32, Int32) Constructs a Token with the given text, start and end offsets, & type. NOTE: for better indexing speed you should instead use the char[] termBuffer methods to set the term text. Declaration public Token(string text, int start, int end, int flags) Parameters Type Name Description System.String text term text System.Int32 start start offset in the source text System.Int32 end end offset in the source text System.Int32 flags token type bits | Improve this Doc View Source Token(String, Int32, Int32, String) Constructs a Token with the given text, start and end offsets, & type. NOTE: for better indexing speed you should instead use the char[] termBuffer methods to set the term text. Declaration public Token(string text, int start, int end, string typ) Parameters Type Name Description System.String text term text System.Int32 start start offset in the source text System.Int32 end end offset in the source text System.String typ token type Fields | Improve this Doc View Source TOKEN_ATTRIBUTE_FACTORY Convenience factory that returns Token as implementation for the basic attributes and return the default impl (with \"Impl\" appended) for all other attributes. @since 3.0 Declaration public static readonly AttributeSource.AttributeFactory TOKEN_ATTRIBUTE_FACTORY Field Value Type Description AttributeSource.AttributeFactory Properties | Improve this Doc View Source EndOffset Returns this Token 's ending offset, one greater than the position of the last character corresponding to this token in the source text. The length of the token in the source text is ( EndOffset - StartOffset ). Declaration public int EndOffset { get; } Property Value Type Description System.Int32 See Also SetOffset(Int32, Int32) IOffsetAttribute | Improve this Doc View Source Flags Get the bitset for any bits that have been set. This is completely distinct from Type , although they do share similar purposes. The flags can be used to encode information about the token for use by other TokenFilter s. Declaration public virtual int Flags { get; set; } Property Value Type Description System.Int32 See Also IFlagsAttribute | Improve this Doc View Source Payload Gets or Sets this Token 's payload. Declaration public virtual BytesRef Payload { get; set; } Property Value Type Description BytesRef See Also IPayloadAttribute | Improve this Doc View Source PositionIncrement Gets or Sets the position increment (the distance from the prior term). The default value is one. Declaration public virtual int PositionIncrement { get; set; } Property Value Type Description System.Int32 See Also IPositionIncrementAttribute | Improve this Doc View Source PositionLength Gets or Sets the position length of this Token (how many positions this token spans). The default value is one. Declaration public virtual int PositionLength { get; set; } Property Value Type Description System.Int32 See Also IPositionLengthAttribute | Improve this Doc View Source StartOffset Returns this Token 's starting offset, the position of the first character corresponding to this token in the source text. Note that the difference between EndOffset and StartOffset may not be equal to termText.Length, as the term text may have been altered by a stemmer or some other filter. Declaration public int StartOffset { get; } Property Value Type Description System.Int32 See Also SetOffset(Int32, Int32) IOffsetAttribute | Improve this Doc View Source Type Gets or Sets this Token 's lexical type. Defaults to \"word\". Declaration public string Type { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source Clear() Resets the term text, payload, flags, and positionIncrement, startOffset, endOffset and token type to default. Declaration public override void Clear() Overrides CharTermAttribute.Clear() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides CharTermAttribute.Clone() | Improve this Doc View Source Clone(Char[], Int32, Int32, Int32, Int32) Makes a clone, but replaces the term buffer & start/end offset in the process. This is more efficient than doing a full clone (and then calling CopyBuffer(Char[], Int32, Int32) ) because it saves a wasted copy of the old termBuffer. Declaration public virtual Token Clone(char[] newTermBuffer, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset) Parameters Type Name Description System.Char [] newTermBuffer System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset Returns Type Description Token | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides CharTermAttribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides CharTermAttribute.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides CharTermAttribute.GetHashCode() | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides CharTermAttribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source Reinit(Token) Copy the prototype token's fields into this one. Note: Payloads are shared. Declaration public virtual void Reinit(Token prototype) Parameters Type Name Description Token prototype source Token to copy fields from | Improve this Doc View Source Reinit(Token, Char[], Int32, Int32) Copy the prototype token's fields into this one, with a different term. Note: Payloads are shared. Declaration public virtual void Reinit(Token prototype, char[] newTermBuffer, int offset, int length) Parameters Type Name Description Token prototype existing Token System.Char [] newTermBuffer buffer containing new term text System.Int32 offset the index in the buffer of the first character System.Int32 length number of valid characters in the buffer | Improve this Doc View Source Reinit(Token, String) Copy the prototype token's fields into this one, with a different term. Note: Payloads are shared. Declaration public virtual void Reinit(Token prototype, string newTerm) Parameters Type Name Description Token prototype existing Token System.String newTerm new term text | Improve this Doc View Source Reinit(Char[], Int32, Int32, Int32, Int32) Shorthand for calling Clear() , CopyBuffer(Char[], Int32, Int32) , SetOffset(Int32, Int32) , Type (set) on DEFAULT_TYPE Declaration public virtual Token Reinit(char[] newTermBuffer, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset) Parameters Type Name Description System.Char [] newTermBuffer System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(Char[], Int32, Int32, Int32, Int32, String) Shorthand for calling Clear() , CopyBuffer(Char[], Int32, Int32) , SetOffset(Int32, Int32) , Type (set) Declaration public virtual Token Reinit(char[] newTermBuffer, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset, string newType) Parameters Type Name Description System.Char [] newTermBuffer System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset System.String newType Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(String, Int32, Int32) Shorthand for calling Clear() , Append(String) , SetOffset(Int32, Int32) , Type (set) on DEFAULT_TYPE Declaration public virtual Token Reinit(string newTerm, int newStartOffset, int newEndOffset) Parameters Type Name Description System.String newTerm System.Int32 newStartOffset System.Int32 newEndOffset Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(String, Int32, Int32, Int32, Int32) Shorthand for calling Clear() , Append(String, Int32, Int32) , SetOffset(Int32, Int32) , Type (set) on DEFAULT_TYPE Declaration public virtual Token Reinit(string newTerm, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset) Parameters Type Name Description System.String newTerm System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(String, Int32, Int32, Int32, Int32, String) Shorthand for calling Clear() , Append(String, Int32, Int32) , SetOffset(Int32, Int32) , Type (set) Declaration public virtual Token Reinit(string newTerm, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset, string newType) Parameters Type Name Description System.String newTerm System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset System.String newType Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(String, Int32, Int32, String) Shorthand for calling Clear() , Append(String) , SetOffset(Int32, Int32) , Type (set) Declaration public virtual Token Reinit(string newTerm, int newStartOffset, int newEndOffset, string newType) Parameters Type Name Description System.String newTerm System.Int32 newStartOffset System.Int32 newEndOffset System.String newType Returns Type Description Token this Token instance | Improve this Doc View Source SetOffset(Int32, Int32) Set the starting and ending offset. Declaration public virtual void SetOffset(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset See Also StartOffset EndOffset IOffsetAttribute Implements ICharTermAttribute ICharSequence ITermToBytesRefAttribute ITypeAttribute IPositionIncrementAttribute IFlagsAttribute IOffsetAttribute IPayloadAttribute IPositionLengthAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Token.TokenAttributeFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Token.TokenAttributeFactory.html",
    "title": "Class Token.TokenAttributeFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Token.TokenAttributeFactory Expert: Creates a Token.TokenAttributeFactory returning Token as instance for the basic attributes and for all other attributes calls the given delegate factory. @since 3.0 Inheritance System.Object AttributeSource.AttributeFactory Token.TokenAttributeFactory Inherited Members AttributeSource.AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public sealed class TokenAttributeFactory : AttributeSource.AttributeFactory Constructors | Improve this Doc View Source TokenAttributeFactory(AttributeSource.AttributeFactory) Expert : Creates an AttributeSource.AttributeFactory returning Token as instance for the basic attributes and for all other attributes calls the given delegate factory. Declaration public TokenAttributeFactory(AttributeSource.AttributeFactory delegate) Parameters Type Name Description AttributeSource.AttributeFactory delegate Methods | Improve this Doc View Source CreateAttributeInstance<T>() Declaration public override Attribute CreateAttributeInstance<T>() where T : IAttribute Returns Type Description Attribute Type Parameters Name Description T Overrides AttributeSource.AttributeFactory.CreateAttributeInstance<T>() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.CharTermAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.CharTermAttribute.html",
    "title": "Class CharTermAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharTermAttribute Default implementation of ICharTermAttribute . Inheritance System.Object Attribute CharTermAttribute Token Implements ICharTermAttribute ICharSequence ITermToBytesRefAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class CharTermAttribute : Attribute, ICharTermAttribute, ICharSequence, ITermToBytesRefAttribute, IAttribute Constructors | Improve this Doc View Source CharTermAttribute() Initialize this attribute with empty term text Declaration public CharTermAttribute() Properties | Improve this Doc View Source Buffer Declaration public char[] Buffer { get; } Property Value Type Description System.Char [] | Improve this Doc View Source BytesRef Declaration public virtual BytesRef BytesRef { get; } Property Value Type Description BytesRef | Improve this Doc View Source Item[Int32] Declaration public char this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Declaration public int Length { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Append(ICharTermAttribute) Declaration public ICharTermAttribute Append(ICharTermAttribute ta) Parameters Type Name Description ICharTermAttribute ta Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(ICharSequence) Declaration public ICharTermAttribute Append(ICharSequence csq) Parameters Type Name Description ICharSequence csq Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(ICharSequence, Int32, Int32) Declaration public ICharTermAttribute Append(ICharSequence csq, int start, int end) Parameters Type Name Description ICharSequence csq System.Int32 start System.Int32 end Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(StringBuilder) Declaration public ICharTermAttribute Append(StringBuilder s) Parameters Type Name Description StringBuilder s Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(StringBuilder, Int32, Int32) Declaration public ICharTermAttribute Append(StringBuilder s, int start, int end) Parameters Type Name Description StringBuilder s System.Int32 start System.Int32 end Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(Char) Declaration public ICharTermAttribute Append(char c) Parameters Type Name Description System.Char c Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(Char[]) Declaration public ICharTermAttribute Append(char[] chars) Parameters Type Name Description System.Char [] chars Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(Char[], Int32, Int32) Declaration public ICharTermAttribute Append(char[] chars, int start, int end) Parameters Type Name Description System.Char [] chars System.Int32 start System.Int32 end Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(String) Declaration public ICharTermAttribute Append(string s) Parameters Type Name Description System.String s Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(String, Int32, Int32) Declaration public ICharTermAttribute Append(string csq, int start, int end) Parameters Type Name Description System.String csq System.Int32 start System.Int32 end Returns Type Description ICharTermAttribute | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Attribute.Clone() | Improve this Doc View Source CopyBuffer(Char[], Int32, Int32) Declaration public void CopyBuffer(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source FillBytesRef() Declaration public virtual void FillBytesRef() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source ResizeBuffer(Int32) Declaration public char[] ResizeBuffer(int newSize) Parameters Type Name Description System.Int32 newSize Returns Type Description System.Char [] | Improve this Doc View Source SetEmpty() Declaration public ICharTermAttribute SetEmpty() Returns Type Description ICharTermAttribute | Improve this Doc View Source SetLength(Int32) Declaration public ICharTermAttribute SetLength(int length) Parameters Type Name Description System.Int32 length Returns Type Description ICharTermAttribute | Improve this Doc View Source SubSequence(Int32, Int32) Declaration public ICharSequence SubSequence(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Returns Type Description ICharSequence | Improve this Doc View Source ToString() Returns solely the term text as specified by the ICharSequence interface. this method changed the behavior with Lucene 3.1, before it returned a String representation of the whole term with all attributes. this affects especially the Token subclass. Declaration public override string ToString() Returns Type Description System.String Overrides Attribute.ToString() Implements ICharTermAttribute ICharSequence ITermToBytesRefAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.FlagsAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.FlagsAttribute.html",
    "title": "Class FlagsAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FlagsAttribute Default implementation of IFlagsAttribute . Inheritance System.Object Attribute FlagsAttribute Implements IFlagsAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class FlagsAttribute : Attribute, IFlagsAttribute, IAttribute Constructors | Improve this Doc View Source FlagsAttribute() Initialize this attribute with no bits set Declaration public FlagsAttribute() Properties | Improve this Doc View Source Flags Declaration public virtual int Flags { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Implements IFlagsAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Analysis.TokenAttributes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.TokenAttributes <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> General-purpose attributes for text analysis. Classes CharTermAttribute Default implementation of ICharTermAttribute . FlagsAttribute Default implementation of IFlagsAttribute . KeywordAttribute Default implementation of IKeywordAttribute . OffsetAttribute Default implementation of IOffsetAttribute . PayloadAttribute Default implementation of IPayloadAttribute . PositionIncrementAttribute Default implementation of IPositionIncrementAttribute . PositionLengthAttribute Default implementation of IPositionLengthAttribute . TypeAttribute Default implementation of ITypeAttribute . Interfaces ICharTermAttribute The term text of a Token . IFlagsAttribute This attribute can be used to pass different flags down the Tokenizer chain, eg from one TokenFilter to another one. This is completely distinct from TypeAttribute , although they do share similar purposes. The flags can be used to encode information about the token for use by other TokenFilter s. @lucene.experimental While we think this is here to stay, we may want to change it to be a long. IKeywordAttribute This attribute can be used to mark a token as a keyword. Keyword aware TokenStream s can decide to modify a token based on the return value of IsKeyword if the token is modified. Stemming filters for instance can use this attribute to conditionally skip a term if IsKeyword returns true . IOffsetAttribute The start and end character offset of a Token . IPayloadAttribute The payload of a Token. The payload is stored in the index at each position, and can be used to influence scoring when using Payload-based queries in the Lucene.Net.Search.Payloads and Lucene.Net.Search.Spans namespaces. NOTE: because the payload will be stored at each position, its usually best to use the minimum number of bytes necessary. Some codec implementations may optimize payload storage when all payloads have the same length. IPositionIncrementAttribute Determines the position of this token relative to the previous Token in a TokenStream , used in phrase searching. The default value is one. Some common uses for this are: Set it to zero to put multiple terms in the same position. this is useful if, e.g., a word has multiple stems. Searches for phrases including either stem will match. In this case, all but the first stem's increment should be set to zero: the increment of the first instance should be one. Repeating a token with an increment of zero can also be used to boost the scores of matches on that token. Set it to values greater than one to inhibit exact phrase matches. If, for example, one does not want phrases to match across removed stop words, then one could build a stop word filter that removes stop words and also sets the increment to the number of stop words removed before each non-stop word. Then exact phrase queries will only match when the terms occur with no intervening stop words. IPositionLengthAttribute Determines how many positions this token spans. Very few analyzer components actually produce this attribute, and indexing ignores it, but it's useful to express the graph structure naturally produced by decompounding, word splitting/joining, synonym filtering, etc. NOTE: this is optional, and most analyzers don't change the default value (1). ITermToBytesRefAttribute This attribute is requested by TermsHashPerField to index the contents. This attribute can be used to customize the final byte[] encoding of terms. Consumers of this attribute call BytesRef up-front, and then invoke FillBytesRef() for each term. Example: TermToBytesRefAttribute termAtt = tokenStream.GetAttribute<TermToBytesRefAttribute>; BytesRef bytes = termAtt.BytesRef; while (tokenStream.IncrementToken() { // you must call termAtt.FillBytesRef() before doing something with the bytes. // this encodes the term value (internally it might be a char[], etc) into the bytes. int hashCode = termAtt.FillBytesRef(); if (IsInteresting(bytes)) { // because the bytes are reused by the attribute (like CharTermAttribute's char[] buffer), // you should make a copy if you need persistent access to the bytes, otherwise they will // be rewritten across calls to IncrementToken() DoSomethingWith(new BytesRef(bytes)); } } ... @lucene.experimental this is a very expert API, please use CharTermAttribute and its implementation of this method for UTF-8 terms. ITypeAttribute A Token 's lexical type. The Default value is \"word\"."
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ICharTermAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ICharTermAttribute.html",
    "title": "Interface ICharTermAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICharTermAttribute The term text of a Token . Inherited Members IAttribute.CopyTo(IAttribute) ICharSequence.SubSequence(Int32, Int32) ICharSequence.ToString() Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface ICharTermAttribute : IAttribute, ICharSequence Properties | Improve this Doc View Source Buffer Returns the internal termBuffer character array which you can then directly alter. If the array is too small for your token, use ResizeBuffer(Int32) to increase it. After altering the buffer be sure to call SetLength(Int32) to record the number of valid characters that were placed into the termBuffer. NOTE : The returned buffer may be larger than the valid Length . Declaration char[] Buffer { get; } Property Value Type Description System.Char [] | Improve this Doc View Source Item[Int32] Declaration char this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Gets or Sets the number of valid characters (in the termBuffer array. SetLength(Int32) Declaration int Length { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Append(ICharTermAttribute) Appends the contents of the other ICharTermAttribute to this character sequence. The characters of the ICharTermAttribute argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(ICharTermAttribute termAtt) Parameters Type Name Description ICharTermAttribute termAtt Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(ICharSequence) Appends the contents of the ICharSequence to this character sequence. The characters of the ICharSequence argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(ICharSequence csq) Parameters Type Name Description ICharSequence csq Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(ICharSequence, Int32, Int32) Appends the contents of the ICharSequence to this character sequence, beginning and ending at the specified indices. The characters of the ICharSequence argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(ICharSequence csq, int start, int end) Parameters Type Name Description ICharSequence csq The index of the first character in the subsequence. System.Int32 start The start index of the ICharSequence to begin copying characters. System.Int32 end The index of the character following the last character in the subsequence. Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(StringBuilder) Appends the specified to this character sequence. The characters of the argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(StringBuilder sb) Parameters Type Name Description StringBuilder sb Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(StringBuilder, Int32, Int32) Appends the specified to this character sequence. The characters of the argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(StringBuilder s, int start, int end) Parameters Type Name Description StringBuilder s System.Int32 start System.Int32 end Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added because the .NET data type doesn't implement ICharSequence . | Improve this Doc View Source Append(Char) Appends the supplied to this character sequence. Declaration ICharTermAttribute Append(char c) Parameters Type Name Description System.Char c The to append. Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(Char[]) Appends the contents of the char[] array to this character sequence. The characters of the char[] argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(char[] csq) Parameters Type Name Description System.Char [] csq The char[] array to append. Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added to simulate using the CharBuffer class in Java. | Improve this Doc View Source Append(Char[], Int32, Int32) Appends the contents of the char[] array to this character sequence, beginning and ending at the specified indices. The characters of the char[] argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(char[] csq, int start, int end) Parameters Type Name Description System.Char [] csq The char[] array to append. System.Int32 start The start index of the char[] to begin copying characters. System.Int32 end The index of the character following the last character in the subsequence. Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added to simulate using the CharBuffer class in Java. Note that the CopyBuffer(Char[], Int32, Int32) method provides similar functionality, except for the last argument of this method is an index of the array rather than the length of characters to copy. | Improve this Doc View Source Append(String) Appends the specified to this character sequence. The characters of the argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(string s) Parameters Type Name Description System.String s Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added because the .NET data type doesn't implement ICharSequence . | Improve this Doc View Source Append(String, Int32, Int32) Appends the contents of the to this character sequence, beginning and ending at the specified indices. The characters of the argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(string csq, int start, int end) Parameters Type Name Description System.String csq The index of the first character in the subsequence. System.Int32 start The start index of the to begin copying characters. System.Int32 end The index of the character following the last character in the subsequence. Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added because the .NET data type doesn't implement ICharSequence . | Improve this Doc View Source CopyBuffer(Char[], Int32, Int32) Copies the contents of buffer, starting at offset for length characters, into the termBuffer array. Declaration void CopyBuffer(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer the buffer to copy System.Int32 offset the index in the buffer of the first character to copy System.Int32 length the number of characters to copy | Improve this Doc View Source ResizeBuffer(Int32) Grows the termBuffer to at least size newSize , preserving the existing content. Declaration char[] ResizeBuffer(int newSize) Parameters Type Name Description System.Int32 newSize minimum size of the new termBuffer Returns Type Description System.Char [] newly created termBuffer with length >= newSize | Improve this Doc View Source SetEmpty() Sets the length of the termBuffer to zero. Use this method before appending contents. Declaration ICharTermAttribute SetEmpty() Returns Type Description ICharTermAttribute | Improve this Doc View Source SetLength(Int32) Set number of valid characters (length of the term) in the termBuffer array. Use this to truncate the termBuffer or to synchronize with external manipulation of the termBuffer. Note: to grow the size of the array, use ResizeBuffer(Int32) first. NOTE: This is exactly the same operation as calling the Length setter, the primary difference is that this method returns a reference to the current object so it can be chained. obj.SetLength(30).Append(\"hey you\"); Declaration ICharTermAttribute SetLength(int length) Parameters Type Name Description System.Int32 length the truncated length Returns Type Description ICharTermAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IFlagsAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IFlagsAttribute.html",
    "title": "Interface IFlagsAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFlagsAttribute This attribute can be used to pass different flags down the Tokenizer chain, eg from one TokenFilter to another one. This is completely distinct from TypeAttribute , although they do share similar purposes. The flags can be used to encode information about the token for use by other TokenFilter s. @lucene.experimental While we think this is here to stay, we may want to change it to be a long. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IFlagsAttribute : IAttribute Properties | Improve this Doc View Source Flags Get the bitset for any bits that have been set. This is completely distinct from Type , although they do share similar purposes. The flags can be used to encode information about the token for use by other TokenFilter s. Declaration int Flags { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IKeywordAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IKeywordAttribute.html",
    "title": "Interface IKeywordAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IKeywordAttribute This attribute can be used to mark a token as a keyword. Keyword aware TokenStream s can decide to modify a token based on the return value of IsKeyword if the token is modified. Stemming filters for instance can use this attribute to conditionally skip a term if IsKeyword returns true . Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IKeywordAttribute : IAttribute Properties | Improve this Doc View Source IsKeyword Gets or Sets whether the current token is a keyword. true if the current token is a keyword, otherwise false . Declaration bool IsKeyword { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IOffsetAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IOffsetAttribute.html",
    "title": "Interface IOffsetAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IOffsetAttribute The start and end character offset of a Token . Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IOffsetAttribute : IAttribute Properties | Improve this Doc View Source EndOffset Returns this Token 's ending offset, one greater than the position of the last character corresponding to this token in the source text. The length of the token in the source text is ( EndOffset - StartOffset ). Declaration int EndOffset { get; } Property Value Type Description System.Int32 See Also SetOffset(Int32, Int32) | Improve this Doc View Source StartOffset Returns this Token 's starting offset, the position of the first character corresponding to this token in the source text. Note that the difference between EndOffset and StartOffset may not be equal to termText.Length, as the term text may have been altered by a stemmer or some other filter. Declaration int StartOffset { get; } Property Value Type Description System.Int32 See Also SetOffset(Int32, Int32) Methods | Improve this Doc View Source SetOffset(Int32, Int32) Set the starting and ending offset. Declaration void SetOffset(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset See Also StartOffset EndOffset"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPayloadAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPayloadAttribute.html",
    "title": "Interface IPayloadAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPayloadAttribute The payload of a Token. The payload is stored in the index at each position, and can be used to influence scoring when using Payload-based queries in the Lucene.Net.Search.Payloads and Lucene.Net.Search.Spans namespaces. NOTE: because the payload will be stored at each position, its usually best to use the minimum number of bytes necessary. Some codec implementations may optimize payload storage when all payloads have the same length. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IPayloadAttribute : IAttribute Properties | Improve this Doc View Source Payload Gets or Sets this Token 's payload. Declaration BytesRef Payload { get; set; } Property Value Type Description BytesRef See Also DocsAndPositionsEnum"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPositionIncrementAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPositionIncrementAttribute.html",
    "title": "Interface IPositionIncrementAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPositionIncrementAttribute Determines the position of this token relative to the previous Token in a TokenStream , used in phrase searching. The default value is one. Some common uses for this are: Set it to zero to put multiple terms in the same position. this is useful if, e.g., a word has multiple stems. Searches for phrases including either stem will match. In this case, all but the first stem's increment should be set to zero: the increment of the first instance should be one. Repeating a token with an increment of zero can also be used to boost the scores of matches on that token. Set it to values greater than one to inhibit exact phrase matches. If, for example, one does not want phrases to match across removed stop words, then one could build a stop word filter that removes stop words and also sets the increment to the number of stop words removed before each non-stop word. Then exact phrase queries will only match when the terms occur with no intervening stop words. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IPositionIncrementAttribute : IAttribute Properties | Improve this Doc View Source PositionIncrement Gets or Sets the position increment (the distance from the prior term). The default value is one. Declaration int PositionIncrement { get; set; } Property Value Type Description System.Int32 See Also DocsAndPositionsEnum"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPositionLengthAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPositionLengthAttribute.html",
    "title": "Interface IPositionLengthAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPositionLengthAttribute Determines how many positions this token spans. Very few analyzer components actually produce this attribute, and indexing ignores it, but it's useful to express the graph structure naturally produced by decompounding, word splitting/joining, synonym filtering, etc. NOTE: this is optional, and most analyzers don't change the default value (1). Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IPositionLengthAttribute : IAttribute Properties | Improve this Doc View Source PositionLength Gets or Sets the position length of this Token (how many positions this token spans). The default value is one. Declaration int PositionLength { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ITermToBytesRefAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ITermToBytesRefAttribute.html",
    "title": "Interface ITermToBytesRefAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITermToBytesRefAttribute This attribute is requested by TermsHashPerField to index the contents. This attribute can be used to customize the final byte[] encoding of terms. Consumers of this attribute call BytesRef up-front, and then invoke FillBytesRef() for each term. Example: TermToBytesRefAttribute termAtt = tokenStream.GetAttribute<TermToBytesRefAttribute>; BytesRef bytes = termAtt.BytesRef; while (tokenStream.IncrementToken() { // you must call termAtt.FillBytesRef() before doing something with the bytes. // this encodes the term value (internally it might be a char[], etc) into the bytes. int hashCode = termAtt.FillBytesRef(); if (IsInteresting(bytes)) { // because the bytes are reused by the attribute (like CharTermAttribute's char[] buffer), // you should make a copy if you need persistent access to the bytes, otherwise they will // be rewritten across calls to IncrementToken() DoSomethingWith(new BytesRef(bytes)); } } ... @lucene.experimental this is a very expert API, please use CharTermAttribute and its implementation of this method for UTF-8 terms. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface ITermToBytesRefAttribute : IAttribute Properties | Improve this Doc View Source BytesRef Retrieve this attribute's BytesRef . The bytes are updated from the current term when the consumer calls FillBytesRef() . Declaration BytesRef BytesRef { get; } Property Value Type Description BytesRef this IAttribute s internal BytesRef . Methods | Improve this Doc View Source FillBytesRef() Updates the bytes BytesRef to contain this term's final encoding. Declaration void FillBytesRef()"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ITypeAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ITypeAttribute.html",
    "title": "Interface ITypeAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITypeAttribute A Token 's lexical type. The Default value is \"word\". Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface ITypeAttribute : IAttribute Properties | Improve this Doc View Source Type Gets or Sets the lexical type. Declaration string Type { get; set; } Property Value Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.KeywordAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.KeywordAttribute.html",
    "title": "Class KeywordAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeywordAttribute Default implementation of IKeywordAttribute . Inheritance System.Object Attribute KeywordAttribute Implements IKeywordAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public sealed class KeywordAttribute : Attribute, IKeywordAttribute, IAttribute Constructors | Improve this Doc View Source KeywordAttribute() Initialize this attribute with the keyword value as false. Declaration public KeywordAttribute() Properties | Improve this Doc View Source IsKeyword Declaration public bool IsKeyword { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Implements IKeywordAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.OffsetAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.OffsetAttribute.html",
    "title": "Class OffsetAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OffsetAttribute Default implementation of IOffsetAttribute . Inheritance System.Object Attribute OffsetAttribute Implements IOffsetAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class OffsetAttribute : Attribute, IOffsetAttribute, IAttribute Constructors | Improve this Doc View Source OffsetAttribute() Initialize this attribute with startOffset and endOffset of 0. Declaration public OffsetAttribute() Properties | Improve this Doc View Source EndOffset Declaration public virtual int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source SetOffset(Int32, Int32) Declaration public virtual void SetOffset(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset Implements IOffsetAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PayloadAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PayloadAttribute.html",
    "title": "Class PayloadAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadAttribute Default implementation of IPayloadAttribute . Inheritance System.Object Attribute PayloadAttribute Implements IPayloadAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class PayloadAttribute : Attribute, IPayloadAttribute, IAttribute Constructors | Improve this Doc View Source PayloadAttribute() Initialize this attribute with no payload. Declaration public PayloadAttribute() | Improve this Doc View Source PayloadAttribute(BytesRef) Initialize this attribute with the given payload. Declaration public PayloadAttribute(BytesRef payload) Parameters Type Name Description BytesRef payload Properties | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; set; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Attribute.Clone() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Implements IPayloadAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PositionIncrementAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PositionIncrementAttribute.html",
    "title": "Class PositionIncrementAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PositionIncrementAttribute Default implementation of IPositionIncrementAttribute . Inheritance System.Object Attribute PositionIncrementAttribute Implements IPositionIncrementAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class PositionIncrementAttribute : Attribute, IPositionIncrementAttribute, IAttribute Constructors | Improve this Doc View Source PositionIncrementAttribute() Initialize this attribute with position increment of 1 Declaration public PositionIncrementAttribute() Properties | Improve this Doc View Source PositionIncrement Declaration public virtual int PositionIncrement { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Implements IPositionIncrementAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PositionLengthAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PositionLengthAttribute.html",
    "title": "Class PositionLengthAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PositionLengthAttribute Default implementation of IPositionLengthAttribute . Inheritance System.Object Attribute PositionLengthAttribute Implements IPositionLengthAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class PositionLengthAttribute : Attribute, IPositionLengthAttribute, IAttribute Constructors | Improve this Doc View Source PositionLengthAttribute() Initializes this attribute with position length of 1. Declaration public PositionLengthAttribute() Properties | Improve this Doc View Source PositionLength Declaration public virtual int PositionLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Implements IPositionLengthAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.TypeAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.TypeAttribute.html",
    "title": "Class TypeAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TypeAttribute Default implementation of ITypeAttribute . Inheritance System.Object Attribute TypeAttribute Implements ITypeAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class TypeAttribute : Attribute, ITypeAttribute, IAttribute Constructors | Improve this Doc View Source TypeAttribute() Initialize this attribute with DEFAULT_TYPE Declaration public TypeAttribute() | Improve this Doc View Source TypeAttribute(String) Initialize this attribute with type Declaration public TypeAttribute(string type) Parameters Type Name Description System.String type Fields | Improve this Doc View Source DEFAULT_TYPE the default type Declaration public const string DEFAULT_TYPE = null Field Value Type Description System.String Properties | Improve this Doc View Source Type Declaration public virtual string Type { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Implements ITypeAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenFilter.html",
    "title": "Class TokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenFilter A TokenFilter is a TokenStream whose input is another TokenStream . This is an abstract class; subclasses must override IncrementToken() . Inheritance System.Object AttributeSource TokenStream TokenFilter CachingTokenFilter Implements IDisposable Inherited Members TokenStream.IncrementToken() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class TokenFilter : TokenStream, IDisposable Constructors | Improve this Doc View Source TokenFilter(TokenStream) Construct a token stream filtering the given input. Declaration protected TokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Fields | Improve this Doc View Source m_input The source of tokens for this filter. Declaration protected readonly TokenStream m_input Field Value Type Description TokenStream Methods | Improve this Doc View Source Dispose(Boolean) Releases resources associated with this stream. If you override this method, always call base.Dispose(disposing) , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw on reuse). NOTE: The default implementation chains the call to the input TokenStream, so be sure to call base.Dispose(disposing) when overriding this method. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TokenStream.Dispose(Boolean) | Improve this Doc View Source End() This method is called by the consumer after the last token has been consumed, after IncrementToken() returned false (using the new TokenStream API). Streams implementing the old API should upgrade to use this feature. This method can be used to perform any end-of-stream operations, such as setting the final offset of a stream. The final offset of a stream might differ from the offset of the last token eg in case one or more whitespaces followed after the last token, but a WhitespaceTokenizer was used. Additionally any skipped positions (such as those removed by a stopfilter) can be applied to the position increment, or any adjustment of other attributes where the end-of-stream value may be important. NOTE: The default implementation chains the call to the input TokenStream, so be sure to call base.End() first when overriding this method. Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw on further usage). Declaration public override void Reset() Overrides TokenStream.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements IDisposable See Also TokenStream"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Tokenizer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Tokenizer.html",
    "title": "Class Tokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Tokenizer A Tokenizer is a TokenStream whose input is a . This is an abstract class; subclasses must override IncrementToken() NOTE: Subclasses overriding IncrementToken() must call ClearAttributes() before setting attributes. Inheritance System.Object AttributeSource TokenStream Tokenizer Implements IDisposable Inherited Members TokenStream.IncrementToken() TokenStream.End() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class Tokenizer : TokenStream, IDisposable Constructors | Improve this Doc View Source Tokenizer(AttributeSource.AttributeFactory, TextReader) Construct a token stream processing the given input using the given AttributeSource.AttributeFactory . Declaration protected Tokenizer(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory TextReader input | Improve this Doc View Source Tokenizer(TextReader) Construct a token stream processing the given input. Declaration protected Tokenizer(TextReader input) Parameters Type Name Description TextReader input Fields | Improve this Doc View Source m_input The text source for this Tokenizer . Declaration protected TextReader m_input Field Value Type Description TextReader Methods | Improve this Doc View Source CorrectOffset(Int32) Return the corrected offset. If m_input is a CharFilter subclass this method calls CorrectOffset(Int32) , else returns currentOff . Declaration protected int CorrectOffset(int currentOff) Parameters Type Name Description System.Int32 currentOff offset as seen in the output Returns Type Description System.Int32 corrected offset based on the input See Also CorrectOffset(Int32) | Improve this Doc View Source Dispose(Boolean) Releases resources associated with this stream. If you override this method, always call base.Dispose(disposing) , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw on reuse). Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TokenStream.Dispose(Boolean) Remarks NOTE: The default implementation closes the input , so be sure to call base.Dispose(disposing) when overriding this method. | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source SetReader(TextReader) Expert: Set a new reader on the Tokenizer . Typically, an analyzer (in its tokenStream method) will use this to re-use a previously created tokenizer. Declaration public void SetReader(TextReader input) Parameters Type Name Description TextReader input Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenStream.html",
    "title": "Class TokenStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenStream A TokenStream enumerates the sequence of tokens, either from Field s of a Document or from query text. this is an abstract class; concrete subclasses are: Tokenizer , a TokenStream whose input is a ; and TokenFilter , a TokenStream whose input is another TokenStream . A new TokenStream API has been introduced with Lucene 2.9. this API has moved from being Token -based to IAttribute -based. While Token still exists in 2.9 as a convenience class, the preferred way to store the information of a Token is to use s. TokenStream now extends AttributeSource , which provides access to all of the token IAttribute s for the TokenStream . Note that only one instance per is created and reused for every token. This approach reduces object creation and allows local caching of references to the s. See IncrementToken() for further details. The workflow of the new TokenStream API is as follows: Instantiation of TokenStream / TokenFilter s which add/get attributes to/from the AttributeSource . The consumer calls Reset() . The consumer retrieves attributes from the stream and stores local references to all attributes it wants to access. The consumer calls IncrementToken() until it returns false consuming the attributes after each call. The consumer calls End() so that any end-of-stream operations can be performed. The consumer calls Dispose() to release any resource when finished using the TokenStream . To make sure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . You can find some example code for the new API in the analysis documentation. Sometimes it is desirable to capture a current state of a TokenStream , e.g., for buffering purposes (see CachingTokenFilter , TeeSinkTokenFilter). For this usecase CaptureState() and RestoreState(AttributeSource.State) can be used. The TokenStream -API in Lucene is based on the decorator pattern. Therefore all non-abstract subclasses must be sealed or have at least a sealed implementation of IncrementToken() ! This is checked when assertions are enabled. Inheritance System.Object AttributeSource TokenStream NumericTokenStream TokenFilter Tokenizer Implements IDisposable Inherited Members AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class TokenStream : AttributeSource, IDisposable Constructors | Improve this Doc View Source TokenStream() A TokenStream using the default attribute factory. Declaration protected TokenStream() | Improve this Doc View Source TokenStream(AttributeSource) A TokenStream that uses the same attributes as the supplied one. Declaration protected TokenStream(AttributeSource input) Parameters Type Name Description AttributeSource input | Improve this Doc View Source TokenStream(AttributeSource.AttributeFactory) A TokenStream using the supplied AttributeSource.AttributeFactory for creating new IAttribute instances. Declaration protected TokenStream(AttributeSource.AttributeFactory factory) Parameters Type Name Description AttributeSource.AttributeFactory factory Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Releases resources associated with this stream. If you override this method, always call base.Dispose(disposing) , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw on reuse). Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source End() This method is called by the consumer after the last token has been consumed, after IncrementToken() returned false (using the new TokenStream API). Streams implementing the old API should upgrade to use this feature. This method can be used to perform any end-of-stream operations, such as setting the final offset of a stream. The final offset of a stream might differ from the offset of the last token eg in case one or more whitespaces followed after the last token, but a WhitespaceTokenizer was used. Additionally any skipped positions (such as those removed by a stopfilter) can be applied to the position increment, or any adjustment of other attributes where the end-of-stream value may be important. If you override this method, always call base.End(); . Declaration public virtual void End() | Improve this Doc View Source IncrementToken() Consumers (i.e., IndexWriter ) use this method to advance the stream to the next token. Implementing classes must implement this method and update the appropriate IAttribute s with the attributes of the next token. The producer must make no assumptions about the attributes after the method has been returned: the caller may arbitrarily change it. If the producer needs to preserve the state for subsequent calls, it can use CaptureState() to create a copy of the current attribute state. this method is called for every token of a document, so an efficient implementation is crucial for good performance. To avoid calls to AddAttribute<T>() and GetAttribute<T>() , references to all IAttribute s that this stream uses should be retrieved during instantiation. To ensure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . Declaration public abstract bool IncrementToken() Returns Type Description System.Boolean false for end of stream; true otherwise | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw on further usage). Declaration public virtual void Reset() Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenStreamComponents.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenStreamComponents.html",
    "title": "Class TokenStreamComponents | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenStreamComponents This class encapsulates the outer components of a token stream. It provides access to the source ( Tokenizer ) and the outer end (sink), an instance of TokenFilter which also serves as the TokenStream returned by GetTokenStream(String, TextReader) . Inheritance System.Object TokenStreamComponents Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public class TokenStreamComponents : object Constructors | Improve this Doc View Source TokenStreamComponents(Tokenizer) Creates a new TokenStreamComponents instance. Declaration public TokenStreamComponents(Tokenizer source) Parameters Type Name Description Tokenizer source the analyzer's tokenizer | Improve this Doc View Source TokenStreamComponents(Tokenizer, TokenStream) Creates a new TokenStreamComponents instance. Declaration public TokenStreamComponents(Tokenizer source, TokenStream result) Parameters Type Name Description Tokenizer source the analyzer's tokenizer TokenStream result the analyzer's resulting token stream Fields | Improve this Doc View Source m_sink Sink tokenstream, such as the outer tokenfilter decorating the chain. This can be the source if there are no filters. Declaration protected readonly TokenStream m_sink Field Value Type Description TokenStream | Improve this Doc View Source m_source Original source of the tokens. Declaration protected readonly Tokenizer m_source Field Value Type Description Tokenizer Properties | Improve this Doc View Source Tokenizer Returns the component's Tokenizer Declaration public virtual Tokenizer Tokenizer { get; } Property Value Type Description Tokenizer Component's Tokenizer | Improve this Doc View Source TokenStream Returns the sink TokenStream Declaration public virtual TokenStream TokenStream { get; } Property Value Type Description TokenStream the sink TokenStream Methods | Improve this Doc View Source SetReader(TextReader) Resets the encapsulated components with the given reader. If the components cannot be reset, an Exception should be thrown. Declaration protected virtual void SetReader(TextReader reader) Parameters Type Name Description TextReader reader a reader to reset the source component"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenStreamToAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenStreamToAutomaton.html",
    "title": "Class TokenStreamToAutomaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenStreamToAutomaton Consumes a TokenStream and creates an Automaton where the transition labels are UTF8 bytes (or Unicode code points if unicodeArcs is true) from the ITermToBytesRefAttribute . Between tokens we insert POS_SEP and for holes we insert HOLE . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TokenStreamToAutomaton Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public class TokenStreamToAutomaton : object Constructors | Improve this Doc View Source TokenStreamToAutomaton() Sole constructor. Declaration public TokenStreamToAutomaton() Fields | Improve this Doc View Source HOLE We add this arc to represent a hole. Declaration public const int HOLE = null Field Value Type Description System.Int32 | Improve this Doc View Source POS_SEP We create transition between two adjacent tokens. Declaration public const int POS_SEP = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source PreservePositionIncrements Whether to generate holes in the automaton for missing positions, true by default. Declaration public virtual bool PreservePositionIncrements { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source UnicodeArcs Whether to make transition labels Unicode code points instead of UTF8 bytes, false by default Declaration public virtual bool UnicodeArcs { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source ChangeToken(BytesRef) Subclass & implement this if you need to change the token (such as escaping certain bytes) before it's turned into a graph. Declaration protected virtual BytesRef ChangeToken(BytesRef in) Parameters Type Name Description BytesRef in Returns Type Description BytesRef | Improve this Doc View Source ToAutomaton(TokenStream) Pulls the graph (including IPositionLengthAttribute from the provided TokenStream , and creates the corresponding automaton where arcs are bytes (or Unicode code points if unicodeArcs = true) from each term. Declaration public virtual Automaton ToAutomaton(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description Automaton"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTermState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTermState.html",
    "title": "Class BlockTermState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockTermState Holds all state required for PostingsReaderBase to produce a DocsEnum without re-seeking the terms dict. Inheritance System.Object TermState OrdTermState BlockTermState Lucene41PostingsWriter.Int32BlockTermState Inherited Members OrdTermState.Ord TermState.Clone() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class BlockTermState : OrdTermState Constructors | Improve this Doc View Source BlockTermState() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected BlockTermState() Properties | Improve this Doc View Source BlockFilePointer File pointer into the terms dict primary file (_X.tim) that holds this term. Declaration public long BlockFilePointer { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source DocFreq How many docs have this term? Declaration public int DocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TermBlockOrd The term's ord in the current block. Declaration public int TermBlockOrd { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalTermFreq Total number of occurrences of this term. Declaration public long TotalTermFreq { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CopyFrom(TermState) Declaration public override void CopyFrom(TermState other) Parameters Type Name Description TermState other Overrides OrdTermState.CopyFrom(TermState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides OrdTermState.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.FieldReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.FieldReader.html",
    "title": "Class BlockTreeTermsReader.FieldReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockTreeTermsReader.FieldReader BlockTree's implementation of GetTerms(String) . Inheritance System.Object Terms BlockTreeTermsReader.FieldReader Inherited Members Terms.EMPTY_ARRAY Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public sealed class FieldReader : Terms Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Overrides Terms.Comparer | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Terms.Count | Improve this Doc View Source DocCount Declaration public override int DocCount { get; } Property Value Type Description System.Int32 Overrides Terms.DocCount | Improve this Doc View Source HasFreqs Declaration public override bool HasFreqs { get; } Property Value Type Description System.Boolean Overrides Terms.HasFreqs | Improve this Doc View Source HasOffsets Declaration public override bool HasOffsets { get; } Property Value Type Description System.Boolean Overrides Terms.HasOffsets | Improve this Doc View Source HasPayloads Declaration public override bool HasPayloads { get; } Property Value Type Description System.Boolean Overrides Terms.HasPayloads | Improve this Doc View Source HasPositions Declaration public override bool HasPositions { get; } Property Value Type Description System.Boolean Overrides Terms.HasPositions | Improve this Doc View Source SumDocFreq Declaration public override long SumDocFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumDocFreq | Improve this Doc View Source SumTotalTermFreq Declaration public override long SumTotalTermFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumTotalTermFreq Methods | Improve this Doc View Source ComputeStats() For debugging -- used by CheckIndex too Declaration public BlockTreeTermsReader.Stats ComputeStats() Returns Type Description BlockTreeTermsReader.Stats | Improve this Doc View Source GetIterator(TermsEnum) Declaration public override TermsEnum GetIterator(TermsEnum reuse) Parameters Type Name Description TermsEnum reuse Returns Type Description TermsEnum Overrides Terms.GetIterator(TermsEnum) | Improve this Doc View Source Intersect(CompiledAutomaton, BytesRef) Declaration public override TermsEnum Intersect(CompiledAutomaton compiled, BytesRef startTerm) Parameters Type Name Description CompiledAutomaton compiled BytesRef startTerm Returns Type Description TermsEnum Overrides Terms.Intersect(CompiledAutomaton, BytesRef) | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used Declaration public long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.html",
    "title": "Class BlockTreeTermsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockTreeTermsReader A block-based terms index and dictionary that assigns terms to variable length blocks according to how they share prefixes. The terms index is a prefix trie whose leaves are term blocks. The advantage of this approach is that SeekExact() is often able to determine a term cannot exist without doing any IO, and intersection with Automata is very fast. Note that this terms dictionary has it's own fixed terms index (ie, it does not support a pluggable terms index implementation). NOTE : this terms dictionary does not support index divisor when opening an IndexReader. Instead, you can change the min/maxItemsPerBlock during indexing. The data structure used by this implementation is very similar to a burst trie ( http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.18.3499 ), but with added logic to break up too-large blocks of all terms sharing a given prefix into smaller ones. Use CheckIndex with the -verbose option to see summary statistics on the blocks in the dictionary. See BlockTreeTermsWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer BlockTreeTermsReader Implements IDisposable Inherited Members FieldsProducer.Dispose() Fields.UniqueTermCount Fields.EMPTY_ARRAY Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class BlockTreeTermsReader : FieldsProducer, IDisposable Constructors | Improve this Doc View Source BlockTreeTermsReader(Directory, FieldInfos, SegmentInfo, PostingsReaderBase, IOContext, String, Int32) Sole constructor. Declaration public BlockTreeTermsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo info, PostingsReaderBase postingsReader, IOContext ioContext, string segmentSuffix, int indexDivisor) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo info PostingsReaderBase postingsReader IOContext ioContext System.String segmentSuffix System.Int32 indexDivisor Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides FieldsProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Disposes all resources used by this object. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsProducer.Dispose(Boolean) | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides FieldsProducer.RamBytesUsed() | Improve this Doc View Source ReadHeader(IndexInput) Reads terms file header. Declaration protected virtual int ReadHeader(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int32 | Improve this Doc View Source ReadIndexHeader(IndexInput) Reads index file header. Declaration protected virtual int ReadIndexHeader(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int32 | Improve this Doc View Source SeekDir(IndexInput, Int64) Seek input to the directory offset. Declaration protected virtual void SeekDir(IndexInput input, long dirOffset) Parameters Type Name Description IndexInput input System.Int64 dirOffset Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.Stats.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.Stats.html",
    "title": "Class BlockTreeTermsReader.Stats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockTreeTermsReader.Stats BlockTree statistics for a single field returned by ComputeStats() . Inheritance System.Object BlockTreeTermsReader.Stats Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class Stats : object Properties | Improve this Doc View Source BlockCountByPrefixLen Number of blocks at each prefix depth. Declaration public int[] BlockCountByPrefixLen { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Field Field name. Declaration public string Field { get; } Property Value Type Description System.String | Improve this Doc View Source FloorBlockCount The number of floor blocks (meta-blocks larger than the allowed maxItemsPerBlock ) in the terms file. Declaration public int FloorBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source FloorSubBlockCount The number of sub-blocks within the floor blocks. Declaration public int FloorSubBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source IndexArcCount How many arcs in the index FST. Declaration public long IndexArcCount { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source IndexNodeCount How many nodes in the index FST. Declaration public long IndexNodeCount { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source IndexNumBytes Byte size of the index. Declaration public long IndexNumBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source MixedBlockCount The number of \"internal\" blocks (that have both terms and sub-blocks). Declaration public int MixedBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source NonFloorBlockCount The number of normal (non-floor) blocks in the terms file. Declaration public int NonFloorBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Segment Segment name. Declaration public string Segment { get; } Property Value Type Description System.String | Improve this Doc View Source SubBlocksOnlyBlockCount The number of \"internal\" blocks that do not contain terms (have only sub-blocks). Declaration public int SubBlocksOnlyBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TermsOnlyBlockCount The number of \"leaf\" blocks (blocks that have only terms). Declaration public int TermsOnlyBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalBlockCount Total number of blocks. Declaration public int TotalBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalBlockOtherBytes Total bytes stored by the PostingsBaseFormat , plus the other few vInts stored in the frame. Declaration public long TotalBlockOtherBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalBlockStatsBytes Total number of bytes used to store term stats (not including what the PostingsBaseFormat stores. Declaration public long TotalBlockStatsBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalBlockSuffixBytes Total number of bytes used to store term suffixes. Declaration public long TotalBlockSuffixBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalTermBytes Total number of bytes (sum of term lengths) across all terms in the field. Declaration public long TotalTermBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalTermCount Total number of terms in the field. Declaration public long TotalTermCount { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsWriter.html",
    "title": "Class BlockTreeTermsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockTreeTermsWriter Block-based terms index and dictionary writer. Writes terms dict and index, block-encoding (column stride) each term's metadata for each set of terms between two index terms. Files: .tim: Term Dictionary .tip: Term Index Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and per-term metadata (typically pointers to the postings list for that term in the inverted index). The .tim is arranged in blocks: with blocks containing a variable number of entries (by default 25-48), where each entry is either a term or a reference to a sub-block. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the Postings Metadata and Term Metadata sections. TermsDict (.tim) --> Header, PostingsHeader , NodeBlock NumBlocks , FieldSummary, DirOffset, Footer NodeBlock --> (OuterNode | InnerNode) OuterNode --> EntryCount, SuffixLength, Byte SuffixLength , StatsLength, < TermStats > EntryCount , MetaLength, < TermMetadata > EntryCount InnerNode --> EntryCount, SuffixLength[,Sub?], Byte SuffixLength , StatsLength, < TermStats ? > EntryCount , MetaLength, < TermMetadata ? > EntryCount TermStats --> DocFreq, TotalTermFreq FieldSummary --> NumFields, <FieldNumber, NumTerms, RootCodeLength, Byte RootCodeLength , SumTotalTermFreq?, SumDocFreq, DocCount> NumFields Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) DirOffset --> Uint64 ( WriteInt64(Int64) ) EntryCount,SuffixLength,StatsLength,DocFreq,MetaLength,NumFields, FieldNumber,RootCodeLength,DocCount --> VInt ( WriteVInt32(Int32) _ TotalTermFreq,NumTerms,SumTotalTermFreq,SumDocFreq --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the BlockTree implementation. DirOffset is a pointer to the FieldSummary section. DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. this is encoded as the difference between the total number of occurrences and the DocFreq. FieldNumber is the fields number from Lucene.Net.Codecs.BlockTreeTermsWriter.fieldInfos . (.fnm) NumTerms is the number of unique terms for the field. RootCode points to the root block for the field. SumDocFreq is the total number of postings, the number of term-document pairs across the entire field. DocCount is the number of documents that have at least one posting for this field. PostingsHeader and TermMetadata are plugged into by the specific postings implementation: these contain arbitrary per-file data (such as parameters or versioning information) and per-term data (such as pointers to inverted files). For inner nodes of the tree, every entry will steal one bit to mark whether it points to child nodes(sub-block). If so, the corresponding TermStats and TermMetadata are omitted Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. The index is also used to determine when a given term cannot exist on disk (in the .tim file), saving a disk seek. TermsIndex (.tip) --> Header, FSTIndex NumFields <IndexStartFP> NumFields , DirOffset, Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) IndexStartFP --> VLong ( WriteVInt64(Int64) FSTIndex --> FST{byte[]} Footer --> CodecFooter ( WriteFooter(IndexOutput) Notes: The .tip file contains a separate FST for each field. The FST maps a term prefix to the on-disk block that holds all terms starting with that prefix. Each field's IndexStartFP points to its FST. DirOffset is a pointer to the start of the IndexStartFPs for all fields It's possible that an on-disk block would contain too many terms (more than the allowed maximum (default: 48)). When this happens, the block is sub-divided into new blocks (called \"floor blocks\"), and then the output in the FST for the block's prefix encodes the leading byte of each sub-block, and its file pointer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldsConsumer BlockTreeTermsWriter Inherited Members FieldsConsumer.Dispose() FieldsConsumer.Merge(MergeState, Fields) Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class BlockTreeTermsWriter : FieldsConsumer Constructors | Improve this Doc View Source BlockTreeTermsWriter(SegmentWriteState, PostingsWriterBase, Int32, Int32) Create a new writer. The number of items (terms or sub-blocks) per block will aim to be between minItemsInBlock and maxItemsInBlock , though in some cases the blocks may be smaller than the min. Declaration public BlockTreeTermsWriter(SegmentWriteState state, PostingsWriterBase postingsWriter, int minItemsInBlock, int maxItemsInBlock) Parameters Type Name Description SegmentWriteState state PostingsWriterBase postingsWriter System.Int32 minItemsInBlock System.Int32 maxItemsInBlock Fields | Improve this Doc View Source DEFAULT_MAX_BLOCK_SIZE Suggested default value for the maxItemsInBlock parameter to BlockTreeTermsWriter(SegmentWriteState, PostingsWriterBase, Int32, Int32) . Declaration public const int DEFAULT_MAX_BLOCK_SIZE = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_BLOCK_SIZE Suggested default value for the minItemsInBlock parameter to BlockTreeTermsWriter(SegmentWriteState, PostingsWriterBase, Int32, Int32) . Declaration public const int DEFAULT_MIN_BLOCK_SIZE = null Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_APPEND_ONLY Append-only Declaration public const int VERSION_APPEND_ONLY = null Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CHECKSUM Checksums. Declaration public const int VERSION_CHECKSUM = null Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CURRENT Current terms format. Declaration public const int VERSION_CURRENT = null Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_META_ARRAY Meta data as array. Declaration public const int VERSION_META_ARRAY = null Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Initial terms format. Declaration public const int VERSION_START = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddField(FieldInfo) Declaration public override TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer Overrides FieldsConsumer.AddField(FieldInfo) | Improve this Doc View Source Dispose(Boolean) Disposes all resources used by this object. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsConsumer.Dispose(Boolean) | Improve this Doc View Source WriteHeader(IndexOutput) Writes the terms file header. Declaration protected virtual void WriteHeader(IndexOutput out) Parameters Type Name Description IndexOutput out | Improve this Doc View Source WriteIndexHeader(IndexOutput) Writes the index file header. Declaration protected virtual void WriteIndexHeader(IndexOutput out) Parameters Type Name Description IndexOutput out | Improve this Doc View Source WriteIndexTrailer(IndexOutput, Int64) Writes the index file trailer. Declaration protected virtual void WriteIndexTrailer(IndexOutput indexOut, long dirStart) Parameters Type Name Description IndexOutput indexOut System.Int64 dirStart | Improve this Doc View Source WriteTrailer(IndexOutput, Int64) Writes the terms file trailer. Declaration protected virtual void WriteTrailer(IndexOutput out, long dirStart) Parameters Type Name Description IndexOutput out System.Int64 dirStart See Also BlockTreeTermsReader"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Codec.html",
    "title": "Class Codec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Codec Encodes/decodes an inverted index segment. Note, when extending this class, the name ( Name ) is written into the index. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetCodec(String) to resolve codec names. To implement your own codec: Subclass this class. Subclass DefaultCodecFactory , override the Initialize() method, and add the line base.ScanForCodecs(typeof(YourCodec).GetTypeInfo().Assembly) . If you have any codec classes in your assembly that are not meant for reading, you can add the ExcludeCodecFromScanAttribute to them so they are ignored by the scan. set the new ICodecFactory by calling SetCodecFactory(ICodecFactory) at application startup. If your codec has dependencies, you may also override GetCodec(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. Codec Names Unlike the Java version, codec names are by default convention-based on the class name. If you name your custom codec class \"MyCustomCodec\", the codec name will the same name without the \"Codec\" suffix: \"MyCustom\". You can override this default behavior by using the CodecNameAttribute to name the codec differently than this convention. Codec names must be all ASCII alphanumeric, and less than 128 characters in length. Inheritance System.Object Codec FilterCodec Lucene3xCodec Lucene40Codec Lucene41Codec Lucene42Codec Lucene45Codec Lucene46Codec Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class Codec : object Constructors | Improve this Doc View Source Codec() Creates a new codec. The Name will be written into the index segment: in order for the segment to be read this class should be registered by subclassing DefaultCodecFactory and calling in the class constructor. The new ICodecFactory can be registered by calling SetCodecFactory(ICodecFactory) at application startup. Declaration protected Codec() Properties | Improve this Doc View Source AvailableCodecs Returns a list of all available codec names. Declaration public static ICollection<string> AvailableCodecs { get; } Property Value Type Description ICollection < System.String > | Improve this Doc View Source Default Expert: returns the default codec used for newly created IndexWriterConfig s. Declaration public static Codec Default { get; set; } Property Value Type Description Codec | Improve this Doc View Source DocValuesFormat Encodes/decodes docvalues. Declaration public abstract DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat | Improve this Doc View Source FieldInfosFormat Encodes/decodes field infos file. Declaration public abstract FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Encodes/decodes live docs. Declaration public abstract LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat | Improve this Doc View Source Name Returns this codec's name. Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NormsFormat Encodes/decodes document normalization values. Declaration public abstract NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat | Improve this Doc View Source PostingsFormat Encodes/decodes postings. Declaration public abstract PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat | Improve this Doc View Source SegmentInfoFormat Encodes/decodes segment info file. Declaration public abstract SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Encodes/decodes stored fields. Declaration public abstract StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Encodes/decodes term vectors. Declaration public abstract TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Methods | Improve this Doc View Source ForName(String) Looks up a codec by name. Declaration public static Codec ForName(string name) Parameters Type Name Description System.String name Returns Type Description Codec | Improve this Doc View Source GetCodecFactory() Gets the associated codec factory. Declaration public static ICodecFactory GetCodecFactory() Returns Type Description ICodecFactory The codec factory. | Improve this Doc View Source SetCodecFactory(ICodecFactory) Sets the ICodecFactory instance used to instantiate Codec subclasses. Declaration public static void SetCodecFactory(ICodecFactory codecFactory) Parameters Type Name Description ICodecFactory codecFactory The new ICodecFactory . | Improve this Doc View Source ToString() Returns the codec's name. Subclasses can override to provide more detail (such as parameters). Declaration public override string ToString() Returns Type Description System.String See Also DefaultCodecFactory ICodecFactory CodecNameAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.CodecNameAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.CodecNameAttribute.html",
    "title": "Class CodecNameAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CodecNameAttribute Represents an attribute that is used to name a Codec , if a name other than the default Codec naming convention is desired. Inheritance System.Object ServiceNameAttribute CodecNameAttribute Inherited Members ServiceNameAttribute.Name Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public sealed class CodecNameAttribute : ServiceNameAttribute Constructors | Improve this Doc View Source CodecNameAttribute(String) Declaration public CodecNameAttribute(string name) Parameters Type Name Description System.String name"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.CodecUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.CodecUtil.html",
    "title": "Class CodecUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CodecUtil Utility class for reading and writing versioned headers. Writing codec headers is useful to ensure that a file is in the format you think it is. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CodecUtil Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public sealed class CodecUtil : object Fields | Improve this Doc View Source CODEC_MAGIC Constant to identify the start of a codec header. Declaration public static readonly int CODEC_MAGIC Field Value Type Description System.Int32 | Improve this Doc View Source FOOTER_MAGIC Constant to identify the start of a codec footer. Declaration public static readonly int FOOTER_MAGIC Field Value Type Description System.Int32 Methods | Improve this Doc View Source CheckEOF(IndexInput) Checks that the stream is positioned at the end, and throws exception if it is not. Declaration public static void CheckEOF(IndexInput in) Parameters Type Name Description IndexInput in | Improve this Doc View Source CheckFooter(ChecksumIndexInput) Validates the codec footer previously written by WriteFooter(IndexOutput) . Declaration public static long CheckFooter(ChecksumIndexInput in) Parameters Type Name Description ChecksumIndexInput in Returns Type Description System.Int64 Actual checksum value. | Improve this Doc View Source CheckHeader(DataInput, String, Int32, Int32) Reads and validates a header previously written with WriteHeader(DataOutput, String, Int32) . When reading a file, supply the expected codec and an expected version range ( minVersion to maxVersion ). Declaration public static int CheckHeader(DataInput in, string codec, int minVersion, int maxVersion) Parameters Type Name Description DataInput in Input stream, positioned at the point where the header was previously written. Typically this is located at the beginning of the file. System.String codec The expected codec name. System.Int32 minVersion The minimum supported expected version number. System.Int32 maxVersion The maximum supported expected version number. Returns Type Description System.Int32 The actual version found, when a valid header is found that matches codec , with an actual version where minVersion <= actual <= maxVersion . Otherwise an exception is thrown. Exceptions Type Condition CorruptIndexException If the first four bytes are not CODEC_MAGIC , or if the actual codec found is not codec . IndexFormatTooOldException If the actual version is less than minVersion . IndexFormatTooNewException If the actual version is greater than maxVersion . See Also WriteHeader(DataOutput, String, Int32) | Improve this Doc View Source CheckHeaderNoMagic(DataInput, String, Int32, Int32) Like CheckHeader(DataInput, String, Int32, Int32) except this version assumes the first has already been read and validated from the input. Declaration public static int CheckHeaderNoMagic(DataInput in, string codec, int minVersion, int maxVersion) Parameters Type Name Description DataInput in System.String codec System.Int32 minVersion System.Int32 maxVersion Returns Type Description System.Int32 | Improve this Doc View Source ChecksumEntireFile(IndexInput) Clones the provided input, reads all bytes from the file, and calls CheckFooter(ChecksumIndexInput) Note that this method may be slow, as it must process the entire file. If you just need to extract the checksum value, call RetrieveChecksum(IndexInput) . Declaration public static long ChecksumEntireFile(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int64 | Improve this Doc View Source FooterLength() Computes the length of a codec footer. Declaration public static int FooterLength() Returns Type Description System.Int32 Length of the entire codec footer. See Also WriteFooter(IndexOutput) | Improve this Doc View Source HeaderLength(String) Computes the length of a codec header. Declaration public static int HeaderLength(string codec) Parameters Type Name Description System.String codec Codec name. Returns Type Description System.Int32 Length of the entire codec header. See Also WriteHeader(DataOutput, String, Int32) | Improve this Doc View Source RetrieveChecksum(IndexInput) Returns (but does not validate) the checksum previously written by CheckFooter(ChecksumIndexInput) . Declaration public static long RetrieveChecksum(IndexInput in) Parameters Type Name Description IndexInput in Returns Type Description System.Int64 actual checksum value | Improve this Doc View Source WriteFooter(IndexOutput) Writes a codec footer, which records both a checksum algorithm ID and a checksum. This footer can be parsed and validated with CheckFooter(ChecksumIndexInput) . CodecFooter --> Magic,AlgorithmID,Checksum Magic --> Uint32 ( WriteInt32(Int32) ). this identifies the start of the footer. It is always FOOTER_MAGIC . AlgorithmID --> Uint32 ( WriteInt32(Int32) ). this indicates the checksum algorithm used. Currently this is always 0, for zlib-crc32. Checksum --> Uint32 ( WriteInt64(Int64) ). The actual checksum value for all previous bytes in the stream, including the bytes from Magic and AlgorithmID. Declaration public static void WriteFooter(IndexOutput out) Parameters Type Name Description IndexOutput out Output stream | Improve this Doc View Source WriteHeader(DataOutput, String, Int32) Writes a codec header, which records both a string to identify the file and a version number. This header can be parsed and validated with CheckHeader(DataInput, String, Int32, Int32) . CodecHeader --> Magic,CodecName,Version Magic --> Uint32 ( WriteInt32(Int32) ). this identifies the start of the header. It is always CODEC_MAGIC . CodecName --> String ( WriteString(String) ). this is a string to identify this file. Version --> Uint32 ( WriteInt32(Int32) ). Records the version of the file. Note that the length of a codec header depends only upon the name of the codec, so this length can be computed at any time with HeaderLength(String) . Declaration public static void WriteHeader(DataOutput out, string codec, int version) Parameters Type Name Description DataOutput out Output stream System.String codec String to identify this file. It should be simple ASCII, less than 128 characters in length. System.Int32 version Version number"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsFormat.html",
    "title": "Class CompressingStoredFieldsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingStoredFieldsFormat A StoredFieldsFormat that is very similar to Lucene40StoredFieldsFormat but compresses documents in chunks in order to improve the compression ratio. For a chunk size of chunkSize bytes, this StoredFieldsFormat does not support documents larger than ( 2 31 - chunkSize ) bytes. In case this is a problem, you should use another format, such as Lucene40StoredFieldsFormat . For optimal performance, you should use a MergePolicy that returns segments that have the biggest byte size first. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsFormat CompressingStoredFieldsFormat Lucene41StoredFieldsFormat Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public class CompressingStoredFieldsFormat : StoredFieldsFormat Constructors | Improve this Doc View Source CompressingStoredFieldsFormat(String, CompressionMode, Int32) Create a new CompressingStoredFieldsFormat with an empty segment suffix. Declaration public CompressingStoredFieldsFormat(string formatName, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description System.String formatName CompressionMode compressionMode System.Int32 chunkSize See Also CompressingStoredFieldsFormat(String, String, CompressionMode, Int32) | Improve this Doc View Source CompressingStoredFieldsFormat(String, String, CompressionMode, Int32) Create a new CompressingStoredFieldsFormat . formatName is the name of the format. This name will be used in the file formats to perform codec header checks ( CheckHeader(DataInput, String, Int32, Int32) ). segmentSuffix is the segment suffix. this suffix is added to the result file name only if it's not the empty string. The compressionMode parameter allows you to choose between compression algorithms that have various compression and decompression speeds so that you can pick the one that best fits your indexing and searching throughput. You should never instantiate two CompressingStoredFieldsFormat s that have the same name but different Lucene.Net.Codecs.Compressing.CompressingStoredFieldsFormat.compressionMode s. chunkSize is the minimum byte size of a chunk of documents. A value of 1 can make sense if there is redundancy across fields. In that case, both performance and compression ratio should be better than with Lucene40StoredFieldsFormat with compressed fields. Higher values of chunkSize should improve the compression ratio but will require more memory at indexing time and might make document loading a little slower (depending on the size of your OS cache compared to the size of your index). Declaration public CompressingStoredFieldsFormat(string formatName, string segmentSuffix, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description System.String formatName The name of the StoredFieldsFormat . System.String segmentSuffix CompressionMode compressionMode The CompressionMode to use. System.Int32 chunkSize The minimum number of bytes of a single chunk of stored documents. See Also CompressionMode Methods | Improve this Doc View Source FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Returns Type Description StoredFieldsReader Overrides StoredFieldsFormat.FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source FieldsWriter(Directory, SegmentInfo, IOContext) Declaration public override StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Returns Type Description StoredFieldsWriter Overrides StoredFieldsFormat.FieldsWriter(Directory, SegmentInfo, IOContext) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsIndexReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsIndexReader.html",
    "title": "Class CompressingStoredFieldsIndexReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingStoredFieldsIndexReader Random-access reader for CompressingStoredFieldsIndexWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CompressingStoredFieldsIndexReader Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingStoredFieldsIndexReader : object Methods | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsIndexWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsIndexWriter.html",
    "title": "Class CompressingStoredFieldsIndexWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingStoredFieldsIndexWriter Efficient index format for block-based Codec s. this writer generates a file which can be loaded into memory using memory-efficient data structures to quickly locate the block that contains any document. In order to have a compact in-memory representation, for every block of 1024 chunks, this index computes the average number of bytes per chunk and for every chunk, only stores the difference between Data is written as follows: Notes This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CompressingStoredFieldsIndexWriter Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingStoredFieldsIndexWriter : IDisposable Methods | Improve this Doc View Source Dispose() Declaration public void Dispose()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsReader.html",
    "title": "Class CompressingStoredFieldsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingStoredFieldsReader StoredFieldsReader impl for CompressingStoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsReader CompressingStoredFieldsReader Inherited Members StoredFieldsReader.Dispose() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingStoredFieldsReader : StoredFieldsReader Constructors | Improve this Doc View Source CompressingStoredFieldsReader(Directory, SegmentInfo, String, FieldInfos, IOContext, String, CompressionMode) Sole constructor. Declaration public CompressingStoredFieldsReader(Directory d, SegmentInfo si, string segmentSuffix, FieldInfos fn, IOContext context, string formatName, CompressionMode compressionMode) Parameters Type Name Description Directory d SegmentInfo si System.String segmentSuffix FieldInfos fn IOContext context System.String formatName CompressionMode compressionMode Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides StoredFieldsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides StoredFieldsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Dispose the underlying IndexInput s. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsReader.Dispose(Boolean) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides StoredFieldsReader.RamBytesUsed() | Improve this Doc View Source VisitDocument(Int32, StoredFieldVisitor) Declaration public override void VisitDocument(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides StoredFieldsReader.VisitDocument(Int32, StoredFieldVisitor)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsWriter.html",
    "title": "Class CompressingStoredFieldsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingStoredFieldsWriter StoredFieldsWriter impl for CompressingStoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsWriter CompressingStoredFieldsWriter Inherited Members StoredFieldsWriter.AddDocument<T1>(IEnumerable<T1>, FieldInfos) StoredFieldsWriter.Dispose() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingStoredFieldsWriter : StoredFieldsWriter Constructors | Improve this Doc View Source CompressingStoredFieldsWriter(Directory, SegmentInfo, String, IOContext, String, CompressionMode, Int32) Sole constructor. Declaration public CompressingStoredFieldsWriter(Directory directory, SegmentInfo si, string segmentSuffix, IOContext context, string formatName, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description Directory directory SegmentInfo si System.String segmentSuffix IOContext context System.String formatName CompressionMode compressionMode System.Int32 chunkSize Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides StoredFieldsWriter.Abort() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides StoredFieldsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source FinishDocument() Declaration public override void FinishDocument() Overrides StoredFieldsWriter.FinishDocument() | Improve this Doc View Source Merge(MergeState) Declaration public override int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 Overrides StoredFieldsWriter.Merge(MergeState) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numStoredFields) Parameters Type Name Description System.Int32 numStoredFields Overrides StoredFieldsWriter.StartDocument(Int32) | Improve this Doc View Source WriteField(FieldInfo, IIndexableField) Declaration public override void WriteField(FieldInfo info, IIndexableField field) Parameters Type Name Description FieldInfo info IIndexableField field Overrides StoredFieldsWriter.WriteField(FieldInfo, IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsFormat.html",
    "title": "Class CompressingTermVectorsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingTermVectorsFormat A TermVectorsFormat that compresses chunks of documents together in order to improve the compression ratio. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsFormat CompressingTermVectorsFormat Lucene42TermVectorsFormat Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public class CompressingTermVectorsFormat : TermVectorsFormat Constructors | Improve this Doc View Source CompressingTermVectorsFormat(String, String, CompressionMode, Int32) Create a new CompressingTermVectorsFormat . formatName is the name of the format. this name will be used in the file formats to perform codec header checks ( CheckHeader(DataInput, String, Int32, Int32) ). The compressionMode parameter allows you to choose between compression algorithms that have various compression and decompression speeds so that you can pick the one that best fits your indexing and searching throughput. You should never instantiate two CompressingTermVectorsFormat s that have the same name but different CompressionMode s. chunkSize is the minimum byte size of a chunk of documents. Higher values of chunkSize should improve the compression ratio but will require more memory at indexing time and might make document loading a little slower (depending on the size of your OS cache compared to the size of your index). Declaration public CompressingTermVectorsFormat(string formatName, string segmentSuffix, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description System.String formatName The name of the StoredFieldsFormat . System.String segmentSuffix A suffix to append to files created by this format. CompressionMode compressionMode The CompressionMode to use. System.Int32 chunkSize The minimum number of bytes of a single chunk of stored documents. See Also CompressionMode Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override sealed TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos IOContext context Returns Type Description TermVectorsReader Overrides TermVectorsFormat.VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source VectorsWriter(Directory, SegmentInfo, IOContext) Declaration public override sealed TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo IOContext context Returns Type Description TermVectorsWriter Overrides TermVectorsFormat.VectorsWriter(Directory, SegmentInfo, IOContext)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsReader.html",
    "title": "Class CompressingTermVectorsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingTermVectorsReader TermVectorsReader for CompressingTermVectorsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsReader CompressingTermVectorsReader Implements IDisposable Inherited Members TermVectorsReader.Dispose() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingTermVectorsReader : TermVectorsReader, IDisposable Constructors | Improve this Doc View Source CompressingTermVectorsReader(Directory, SegmentInfo, String, FieldInfos, IOContext, String, CompressionMode) Sole constructor. Declaration public CompressingTermVectorsReader(Directory d, SegmentInfo si, string segmentSuffix, FieldInfos fn, IOContext context, string formatName, CompressionMode compressionMode) Parameters Type Name Description Directory d SegmentInfo si System.String segmentSuffix FieldInfos fn IOContext context System.String formatName CompressionMode compressionMode Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides TermVectorsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides TermVectorsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsReader.Dispose(Boolean) | Improve this Doc View Source Get(Int32) Declaration public override Fields Get(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description Fields Overrides TermVectorsReader.Get(Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermVectorsReader.RamBytesUsed() Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsWriter.html",
    "title": "Class CompressingTermVectorsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingTermVectorsWriter TermVectorsWriter for CompressingTermVectorsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsWriter CompressingTermVectorsWriter Inherited Members TermVectorsWriter.FinishTerm() TermVectorsWriter.AddAllDocVectors(Fields, MergeState) TermVectorsWriter.Dispose() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingTermVectorsWriter : TermVectorsWriter Constructors | Improve this Doc View Source CompressingTermVectorsWriter(Directory, SegmentInfo, String, IOContext, String, CompressionMode, Int32) Sole constructor. Declaration public CompressingTermVectorsWriter(Directory directory, SegmentInfo si, string segmentSuffix, IOContext context, string formatName, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description Directory directory SegmentInfo si System.String segmentSuffix IOContext context System.String formatName CompressionMode compressionMode System.Int32 chunkSize Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Overrides TermVectorsWriter.Comparer Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides TermVectorsWriter.Abort() | Improve this Doc View Source AddPosition(Int32, Int32, Int32, BytesRef) Declaration public override void AddPosition(int position, int startOffset, int endOffset, BytesRef payload) Parameters Type Name Description System.Int32 position System.Int32 startOffset System.Int32 endOffset BytesRef payload Overrides TermVectorsWriter.AddPosition(Int32, Int32, Int32, BytesRef) | Improve this Doc View Source AddProx(Int32, DataInput, DataInput) Declaration public override void AddProx(int numProx, DataInput positions, DataInput offsets) Parameters Type Name Description System.Int32 numProx DataInput positions DataInput offsets Overrides TermVectorsWriter.AddProx(Int32, DataInput, DataInput) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides TermVectorsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source FinishDocument() Declaration public override void FinishDocument() Overrides TermVectorsWriter.FinishDocument() | Improve this Doc View Source FinishField() Declaration public override void FinishField() Overrides TermVectorsWriter.FinishField() | Improve this Doc View Source Merge(MergeState) Declaration public override int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 Overrides TermVectorsWriter.Merge(MergeState) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numVectorFields) Parameters Type Name Description System.Int32 numVectorFields Overrides TermVectorsWriter.StartDocument(Int32) | Improve this Doc View Source StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) Declaration public override void StartField(FieldInfo info, int numTerms, bool positions, bool offsets, bool payloads) Parameters Type Name Description FieldInfo info System.Int32 numTerms System.Boolean positions System.Boolean offsets System.Boolean payloads Overrides TermVectorsWriter.StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) | Improve this Doc View Source StartTerm(BytesRef, Int32) Declaration public override void StartTerm(BytesRef term, int freq) Parameters Type Name Description BytesRef term System.Int32 freq Overrides TermVectorsWriter.StartTerm(BytesRef, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressionMode.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressionMode.html",
    "title": "Class CompressionMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressionMode A compression mode. Tells how much effort should be spent on compression and decompression of stored fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CompressionMode Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public abstract class CompressionMode : object Constructors | Improve this Doc View Source CompressionMode() Sole constructor. Declaration protected CompressionMode() Fields | Improve this Doc View Source FAST A compression mode that trades compression ratio for speed. Although the compression ratio might remain high, compression and decompression are very fast. Use this mode with indices that have a high update rate but should be able to load documents from disk quickly. Declaration public static readonly CompressionMode FAST Field Value Type Description CompressionMode | Improve this Doc View Source FAST_DECOMPRESSION This compression mode is similar to FAST but it spends more time compressing in order to improve the compression ratio. This compression mode is best used with indices that have a low update rate but should be able to load documents from disk quickly. Declaration public static readonly CompressionMode FAST_DECOMPRESSION Field Value Type Description CompressionMode | Improve this Doc View Source HIGH_COMPRESSION A compression mode that trades speed for compression ratio. Although compression and decompression might be slow, this compression mode should provide a good compression ratio. this mode might be interesting if/when your index size is much bigger than your OS cache. Declaration public static readonly CompressionMode HIGH_COMPRESSION Field Value Type Description CompressionMode Methods | Improve this Doc View Source NewCompressor() Create a new Compressor instance. Declaration public abstract Compressor NewCompressor() Returns Type Description Compressor | Improve this Doc View Source NewDecompressor() Create a new Decompressor instance. Declaration public abstract Decompressor NewDecompressor() Returns Type Description Decompressor"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.Compressor.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.Compressor.html",
    "title": "Class Compressor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Compressor A data compressor. Inheritance System.Object Compressor Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public abstract class Compressor : object Constructors | Improve this Doc View Source Compressor() Sole constructor, typically called from sub-classes. Declaration protected Compressor() Methods | Improve this Doc View Source Compress(Byte[], Int32, Int32, DataOutput) Compress bytes into out . It it the responsibility of the compressor to add all necessary information so that a Decompressor will know when to stop decompressing bytes from the stream. Declaration public abstract void Compress(byte[] bytes, int off, int len, DataOutput out) Parameters Type Name Description System.Byte [] bytes System.Int32 off System.Int32 len DataOutput out"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.Decompressor.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.Decompressor.html",
    "title": "Class Decompressor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Decompressor A decompressor. Inheritance System.Object Decompressor Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public abstract class Decompressor : object Constructors | Improve this Doc View Source Decompressor() Sole constructor, typically called from sub-classes. Declaration protected Decompressor() Methods | Improve this Doc View Source Clone() Declaration public abstract object Clone() Returns Type Description System.Object | Improve this Doc View Source Decompress(DataInput, Int32, Int32, Int32, BytesRef) Decompress bytes that were stored between offsets offset and offset+length in the original stream from the compressed stream in to bytes . After returning, the length of bytes ( bytes.Length ) must be equal to length . Implementations of this method are free to resize bytes depending on their needs. Declaration public abstract void Decompress(DataInput in, int originalLength, int offset, int length, BytesRef bytes) Parameters Type Name Description DataInput in The input that stores the compressed stream. System.Int32 originalLength The length of the original data (before compression). System.Int32 offset Bytes before this offset do not need to be decompressed. System.Int32 length Bytes after offset+length do not need to be decompressed. BytesRef bytes a BytesRef where to store the decompressed data."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.html",
    "title": "Namespace Lucene.Net.Codecs.Compressing | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Compressing <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> StoredFieldsFormat that allows cross-document and cross-field compression of stored fields. Classes CompressingStoredFieldsFormat A StoredFieldsFormat that is very similar to Lucene40StoredFieldsFormat but compresses documents in chunks in order to improve the compression ratio. For a chunk size of chunkSize bytes, this StoredFieldsFormat does not support documents larger than ( 2 31 - chunkSize ) bytes. In case this is a problem, you should use another format, such as Lucene40StoredFieldsFormat . For optimal performance, you should use a MergePolicy that returns segments that have the biggest byte size first. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingStoredFieldsIndexReader Random-access reader for CompressingStoredFieldsIndexWriter . This is a Lucene.NET INTERNAL API, use at your own risk CompressingStoredFieldsIndexWriter Efficient index format for block-based Codec s. this writer generates a file which can be loaded into memory using memory-efficient data structures to quickly locate the block that contains any document. In order to have a compact in-memory representation, for every block of 1024 chunks, this index computes the average number of bytes per chunk and for every chunk, only stores the difference between Data is written as follows: Notes This is a Lucene.NET INTERNAL API, use at your own risk CompressingStoredFieldsReader StoredFieldsReader impl for CompressingStoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingStoredFieldsWriter StoredFieldsWriter impl for CompressingStoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingTermVectorsFormat A TermVectorsFormat that compresses chunks of documents together in order to improve the compression ratio. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingTermVectorsReader TermVectorsReader for CompressingTermVectorsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingTermVectorsWriter TermVectorsWriter for CompressingTermVectorsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressionMode A compression mode. Tells how much effort should be spent on compression and decompression of stored fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Compressor A data compressor. Decompressor A decompressor. LZ4 LZ4 compression and decompression routines. http://code.google.com/p/lz4/ http://fastcompression.blogspot.fr/p/lz4.html LZ4.HashTable LZ4.HCHashTable LZ4.Match"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.HashTable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.HashTable.html",
    "title": "Class LZ4.HashTable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LZ4.HashTable Inheritance System.Object LZ4.HashTable Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class HashTable : object"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.HCHashTable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.HCHashTable.html",
    "title": "Class LZ4.HCHashTable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LZ4.HCHashTable Inheritance System.Object LZ4.HCHashTable Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class HCHashTable : object"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.html",
    "title": "Class LZ4 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LZ4 LZ4 compression and decompression routines. http://code.google.com/p/lz4/ http://fastcompression.blogspot.fr/p/lz4.html Inheritance System.Object LZ4 Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class LZ4 : object Methods | Improve this Doc View Source Compress(Byte[], Int32, Int32, DataOutput, LZ4.HashTable) Compress bytes[off:off+len] into out using at most 16KB of memory. ht shouldn't be shared across threads but can safely be reused. Declaration public static void Compress(byte[] bytes, int off, int len, DataOutput out, LZ4.HashTable ht) Parameters Type Name Description System.Byte [] bytes System.Int32 off System.Int32 len DataOutput out LZ4.HashTable ht | Improve this Doc View Source CompressHC(Byte[], Int32, Int32, DataOutput, LZ4.HCHashTable) Compress bytes[off:off+len] into out . Compared to Compress(Byte[], Int32, Int32, DataOutput, LZ4.HashTable) , this method is slower and uses more memory (~ 256KB per thread) but should provide better compression ratios (especially on large inputs) because it chooses the best match among up to 256 candidates and then performs trade-offs to fix overlapping matches. ht shouldn't be shared across threads but can safely be reused. Declaration public static void CompressHC(byte[] src, int srcOff, int srcLen, DataOutput out, LZ4.HCHashTable ht) Parameters Type Name Description System.Byte [] src System.Int32 srcOff System.Int32 srcLen DataOutput out LZ4.HCHashTable ht | Improve this Doc View Source Decompress(DataInput, Int32, Byte[], Int32) Decompress at least decompressedLen bytes into dest[dOff] . Please note that dest must be large enough to be able to hold all decompressed data (meaning that you need to know the total decompressed length). Declaration public static int Decompress(DataInput compressed, int decompressedLen, byte[] dest, int dOff) Parameters Type Name Description DataInput compressed System.Int32 decompressedLen System.Byte [] dest System.Int32 dOff Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.Match.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.Match.html",
    "title": "Class LZ4.Match | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LZ4.Match Inheritance System.Object LZ4.Match Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public class Match : object"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DefaultCodecFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DefaultCodecFactory.html",
    "title": "Class DefaultCodecFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultCodecFactory LUCENENET specific class that implements the default functionality for the ICodecFactory . The most common use cases are: Initialize DefaultCodecFactory with a set of CustomCodecTypes . Subclass DefaultCodecFactory and override GetCodec(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetCodec(String) . Subclass DefaultCodecFactory and override GetCodecType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap . Subclass DefaultCodecFactory to add new or override the default Codec types by overriding Initialize() and calling PutCodecType(Type) . Subclass DefaultCodecFactory to scan additional assemblies for Codec subclasses in by overriding Initialize() and calling ScanForCodecs(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the ICodecFactory , call SetCodecFactory(ICodecFactory) . Inheritance System.Object NamedServiceFactory < Codec > DefaultCodecFactory Implements ICodecFactory IServiceListable Inherited Members NamedServiceFactory<Codec>.m_initializationLock NamedServiceFactory<Codec>.EnsureInitialized() NamedServiceFactory<Codec>.CodecsAssembly NamedServiceFactory<Codec>.IsServiceType(Type) NamedServiceFactory<Codec>.GetServiceName(Type) NamedServiceFactory<Codec>.GetCanonicalName(Type) NamedServiceFactory<Codec>.IsFullyTrusted Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class DefaultCodecFactory : NamedServiceFactory<Codec>, ICodecFactory, IServiceListable Constructors | Improve this Doc View Source DefaultCodecFactory() Creates a new instance of DefaultCodecFactory . Declaration public DefaultCodecFactory() Properties | Improve this Doc View Source AvailableServices Gets a list of the available Codec s (by name). Declaration public virtual ICollection<string> AvailableServices { get; } Property Value Type Description ICollection < System.String > A ICollection{string} of Codec names. | Improve this Doc View Source CustomCodecTypes An array of custom Codec -derived types to be registered. This property can be initialized during construction of DefaultCodecFactory to make your custom codecs known to Lucene. These types will be registered after the default Lucene types, so if a custom type has the same name as a Lucene Codec (via CodecNameAttribute ) the custom type will replace the Lucene type with the same name. Declaration public IEnumerable<Type> CustomCodecTypes { get; set; } Property Value Type Description IEnumerable < Type > Methods | Improve this Doc View Source GetCodec(String) Gets the Codec instance from the provided name . Declaration public virtual Codec GetCodec(string name) Parameters Type Name Description System.String name The name of the Codec instance to retrieve. Returns Type Description Codec The Codec instance. | Improve this Doc View Source GetCodec(Type) Gets the Codec instance from the provided type . Declaration protected virtual Codec GetCodec(Type type) Parameters Type Name Description Type type The of Codec to retrieve. Returns Type Description Codec The Codec instance. | Improve this Doc View Source GetCodecType(String) Gets the Codec from the provided name . Declaration protected virtual Type GetCodecType(string name) Parameters Type Name Description System.String name The name of the Codec to retrieve. Returns Type Description Type The Codec . | Improve this Doc View Source Initialize() Initializes the codec type cache with the known Codec types. Override this method (and optionally call base.Initialize() ) to add your own Codec types by calling PutCodecType(Type) or ScanForCodecs(Assembly) . If two types have the same name by using the CodecNameAttribute , the last one registered wins. Declaration protected override void Initialize() Overrides Lucene.Net.Util.NamedServiceFactory<Lucene.Net.Codecs.Codec>.Initialize() | Improve this Doc View Source NewCodec(Type) Instantiates a Codec based on the provided type . Declaration protected virtual Codec NewCodec(Type type) Parameters Type Name Description Type type The of Codec to instantiate. Returns Type Description Codec The new instance. | Improve this Doc View Source PutCodecType(Type) Adds a Codec type to the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap , using the name provided in the CodecNameAttribute , if present, or the name of the codec class minus the \"Codec\" suffix as the name by default. Note that if a Codec with the same name already exists in the map, calling this method will update it to the new type. Declaration protected virtual void PutCodecType(Type codec) Parameters Type Name Description Type codec A type that subclasses Codec . | Improve this Doc View Source ScanForCodecs(Assembly) Scans the given assembly for subclasses of Codec and adds their names to the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap . Note that names will be automatically overridden if the Codec name appears multiple times - the last match wins. Declaration protected virtual void ScanForCodecs(Assembly assembly) Parameters Type Name Description Assembly assembly The assembly to scan. | Improve this Doc View Source ScanForCodecs(IEnumerable<Assembly>) Scans the given assemblies for subclasses of Codec and adds their names to the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap . Note that names will be automatically overridden if the Codec name appears multiple times - the last match wins. Declaration protected virtual void ScanForCodecs(IEnumerable<Assembly> assemblies) Parameters Type Name Description IEnumerable < Assembly > assemblies A list of assemblies to scan. The assemblies will be scanned from first to last, and the last match for each Codec name wins. Implements ICodecFactory IServiceListable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DefaultDocValuesFormatFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DefaultDocValuesFormatFactory.html",
    "title": "Class DefaultDocValuesFormatFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultDocValuesFormatFactory LUCENENET specific class that implements the default functionality for the IDocValuesFormatFactory . The most common use cases are: Initialize DefaultDocValuesFormatFactory with a set of CustomDocValuesFormatTypes . Subclass DefaultDocValuesFormatFactory and override GetDocValuesFormat(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetDocValuesFormat(String) . Subclass DefaultDocValuesFormatFactory and override GetDocValuesFormatType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap . Subclass DefaultDocValuesFormatFactory to add new or override the default DocValuesFormat types by overriding Initialize() and calling PutDocValuesFormatType(Type) . Subclass DefaultDocValuesFormatFactory to scan additional assemblies for DocValuesFormat subclasses in by overriding Initialize() and calling ScanForDocValuesFormats(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the IDocValuesFormatFactory , call SetDocValuesFormatFactory(IDocValuesFormatFactory) . Inheritance System.Object NamedServiceFactory < DocValuesFormat > DefaultDocValuesFormatFactory Implements IDocValuesFormatFactory IServiceListable Inherited Members NamedServiceFactory<DocValuesFormat>.m_initializationLock NamedServiceFactory<DocValuesFormat>.EnsureInitialized() NamedServiceFactory<DocValuesFormat>.CodecsAssembly NamedServiceFactory<DocValuesFormat>.IsServiceType(Type) NamedServiceFactory<DocValuesFormat>.GetServiceName(Type) NamedServiceFactory<DocValuesFormat>.GetCanonicalName(Type) NamedServiceFactory<DocValuesFormat>.IsFullyTrusted Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class DefaultDocValuesFormatFactory : NamedServiceFactory<DocValuesFormat>, IDocValuesFormatFactory, IServiceListable Constructors | Improve this Doc View Source DefaultDocValuesFormatFactory() Creates a new instance of DefaultDocValuesFormatFactory . Declaration public DefaultDocValuesFormatFactory() Properties | Improve this Doc View Source AvailableServices Gets a list of the available DocValuesFormat s (by name). Declaration public virtual ICollection<string> AvailableServices { get; } Property Value Type Description ICollection < System.String > A ICollection{string} of DocValuesFormat names. | Improve this Doc View Source CustomDocValuesFormatTypes An array of custom DocValuesFormat -derived types to be registered. This property can be initialized during construction of DefaultDocValuesFormatFactory to make your custom codecs known to Lucene. These types will be registered after the default Lucene types, so if a custom type has the same name as a Lucene DocValuesFormat (via DocValuesFormatNameAttribute ) the custom type will replace the Lucene type with the same name. Declaration public IEnumerable<Type> CustomDocValuesFormatTypes { get; set; } Property Value Type Description IEnumerable < Type > Methods | Improve this Doc View Source GetDocValuesFormat(String) Gets the DocValuesFormat instance from the provided name . Declaration public virtual DocValuesFormat GetDocValuesFormat(string name) Parameters Type Name Description System.String name The name of the DocValuesFormat instance to retrieve. Returns Type Description DocValuesFormat The DocValuesFormat instance. | Improve this Doc View Source GetDocValuesFormat(Type) Gets the DocValuesFormat instance from the provided type . Declaration protected virtual DocValuesFormat GetDocValuesFormat(Type type) Parameters Type Name Description Type type The of DocValuesFormat to retrieve. Returns Type Description DocValuesFormat The DocValuesFormat instance. | Improve this Doc View Source GetDocValuesFormatType(String) Gets the DocValuesFormat from the provided name . Declaration protected virtual Type GetDocValuesFormatType(string name) Parameters Type Name Description System.String name The name of the DocValuesFormat to retrieve. Returns Type Description Type The DocValuesFormat . | Improve this Doc View Source Initialize() Initializes the doc values type cache with the known DocValuesFormat types. Override this method (and optionally call base.Initialize() ) to add your own DocValuesFormat types by calling PutDocValuesFormatType(Type) or ScanForDocValuesFormats(Assembly) . If two types have the same name by using the DocValuesFormatNameAttribute , the last one registered wins. Declaration protected override void Initialize() Overrides Lucene.Net.Util.NamedServiceFactory<Lucene.Net.Codecs.DocValuesFormat>.Initialize() | Improve this Doc View Source NewDocValuesFormat(Type) Instantiates a DocValuesFormat based on the provided type . Declaration protected virtual DocValuesFormat NewDocValuesFormat(Type type) Parameters Type Name Description Type type The of DocValuesFormat to instantiate. Returns Type Description DocValuesFormat The new instance. | Improve this Doc View Source PutDocValuesFormatType(Type) Adds a DocValuesFormat type to the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap , using the name provided in the DocValuesFormatNameAttribute , if present, or the name of the codec class minus the \"DocValuesFormat\" suffix as the name by default. Note that if a DocValuesFormat with the same name already exists in the map, calling this method will update it to the new type. Declaration protected virtual void PutDocValuesFormatType(Type docValuesFormat) Parameters Type Name Description Type docValuesFormat A type that subclasses DocValuesFormat . | Improve this Doc View Source ScanForDocValuesFormats(Assembly) Scans the given assembly for subclasses of DocValuesFormat and adds their names to the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap . Note that names will be automatically overridden if the DocValuesFormat name appears multiple times - the last match wins. Declaration protected virtual void ScanForDocValuesFormats(Assembly assembly) Parameters Type Name Description Assembly assembly The assembly to scan. | Improve this Doc View Source ScanForDocValuesFormats(IEnumerable<Assembly>) Scans the given assemblies for subclasses of Codec and adds their names to the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap . Note that names will be automatically overridden if the DocValuesFormat name appears multiple times - the last match wins. Declaration protected virtual void ScanForDocValuesFormats(IEnumerable<Assembly> assemblies) Parameters Type Name Description IEnumerable < Assembly > assemblies A list of assemblies to scan. The assemblies will be scanned from first to last, and the last match for each DocValuesFormat name wins. Implements IDocValuesFormatFactory IServiceListable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DefaultPostingsFormatFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DefaultPostingsFormatFactory.html",
    "title": "Class DefaultPostingsFormatFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultPostingsFormatFactory LUCENENET specific class that implements the default functionality for the IPostingsFormatFactory . The most common use cases are: Initialize DefaultPostingsFormatFactory with a set of CustomPostingsFormatTypes . Subclass DefaultPostingsFormatFactory and override GetPostingsFormat(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetPostingsFormat(String) . Subclass DefaultPostingsFormatFactory and override GetPostingsFormatType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap . Subclass DefaultPostingsFormatFactory to add new or override the default PostingsFormat types by overriding Initialize() and calling PutPostingsFormatType(Type) . Subclass DefaultPostingsFormatFactory to scan additional assemblies for PostingsFormat subclasses in by overriding Initialize() and calling ScanForPostingsFormats(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the IPostingsFormatFactory , call SetPostingsFormatFactory(IPostingsFormatFactory) . Inheritance System.Object NamedServiceFactory < PostingsFormat > DefaultPostingsFormatFactory Implements IPostingsFormatFactory IServiceListable Inherited Members NamedServiceFactory<PostingsFormat>.m_initializationLock NamedServiceFactory<PostingsFormat>.EnsureInitialized() NamedServiceFactory<PostingsFormat>.CodecsAssembly NamedServiceFactory<PostingsFormat>.IsServiceType(Type) NamedServiceFactory<PostingsFormat>.GetServiceName(Type) NamedServiceFactory<PostingsFormat>.GetCanonicalName(Type) NamedServiceFactory<PostingsFormat>.IsFullyTrusted Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class DefaultPostingsFormatFactory : NamedServiceFactory<PostingsFormat>, IPostingsFormatFactory, IServiceListable Constructors | Improve this Doc View Source DefaultPostingsFormatFactory() Creates a new instance of DefaultPostingsFormatFactory . Declaration public DefaultPostingsFormatFactory() Properties | Improve this Doc View Source AvailableServices Gets a list of the available PostingsFormat s (by name). Declaration public virtual ICollection<string> AvailableServices { get; } Property Value Type Description ICollection < System.String > A ICollection{string} of PostingsFormat names. | Improve this Doc View Source CustomPostingsFormatTypes An array of custom PostingsFormat -derived types to be registered. This property can be initialized during construction of DefaultPostingsFormatFactory to make your custom codecs known to Lucene. These types will be registered after the default Lucene types, so if a custom type has the same name as a Lucene PostingsFormat (via PostingsFormatNameAttribute ) the custom type will replace the Lucene type with the same name. Declaration public IEnumerable<Type> CustomPostingsFormatTypes { get; set; } Property Value Type Description IEnumerable < Type > Methods | Improve this Doc View Source GetPostingsFormat(String) Gets the PostingsFormat instance from the provided name . Declaration public virtual PostingsFormat GetPostingsFormat(string name) Parameters Type Name Description System.String name The name of the PostingsFormat instance to retrieve. Returns Type Description PostingsFormat The PostingsFormat instance. | Improve this Doc View Source GetPostingsFormat(Type) Gets the PostingsFormat instance from the provided type . Declaration protected virtual PostingsFormat GetPostingsFormat(Type type) Parameters Type Name Description Type type The of PostingsFormat to retrieve. Returns Type Description PostingsFormat The PostingsFormat instance. | Improve this Doc View Source GetPostingsFormatType(String) Gets the PostingsFormat from the provided name . Declaration protected virtual Type GetPostingsFormatType(string name) Parameters Type Name Description System.String name The name of the PostingsFormat to retrieve. Returns Type Description Type The PostingsFormat . | Improve this Doc View Source Initialize() Initializes the codec type cache with the known PostingsFormat types. Override this method (and optionally call base.Initialize() ) to add your own PostingsFormat types by calling PutPostingsFormatType(Type) or ScanForPostingsFormats(Assembly) . If two types have the same name by using the PostingsFormatNameAttribute , the last one registered wins. Declaration protected override void Initialize() Overrides Lucene.Net.Util.NamedServiceFactory<Lucene.Net.Codecs.PostingsFormat>.Initialize() | Improve this Doc View Source NewPostingsFormat(Type) Instantiates a PostingsFormat based on the provided type . Declaration protected virtual PostingsFormat NewPostingsFormat(Type type) Parameters Type Name Description Type type The of PostingsFormat to instantiate. Returns Type Description PostingsFormat The new instance. | Improve this Doc View Source PutPostingsFormatType(Type) Adds a PostingsFormat type to the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap , using the name provided in the PostingsFormatNameAttribute , if present, or the name of the codec class minus the \"Codec\" suffix as the name by default. Note that if a PostingsFormat with the same name already exists in the map, calling this method will update it to the new type. Declaration protected virtual void PutPostingsFormatType(Type postingsFormat) Parameters Type Name Description Type postingsFormat A type that subclasses PostingsFormat . | Improve this Doc View Source ScanForPostingsFormats(Assembly) Scans the given assembly for subclasses of PostingsFormat and adds their names to the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap . Note that names will be automatically overridden if the PostingsFormat name appears multiple times - the last match wins. Declaration protected virtual void ScanForPostingsFormats(Assembly assembly) Parameters Type Name Description Assembly assembly The assembly to scan. | Improve this Doc View Source ScanForPostingsFormats(IEnumerable<Assembly>) Scans the given assemblies for subclasses of Codec and adds their names to the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap . Note that names will be automatically overridden if the PostingsFormat name appears multiple times - the last match wins. Declaration protected virtual void ScanForPostingsFormats(IEnumerable<Assembly> assemblies) Parameters Type Name Description IEnumerable < Assembly > assemblies A list of assemblies to scan. The assemblies will be scanned from first to last, and the last match for each PostingsFormat name wins. Implements IPostingsFormatFactory IServiceListable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DocValuesConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DocValuesConsumer.html",
    "title": "Class DocValuesConsumer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesConsumer Abstract API that consumes numeric, binary and sorted docvalues. Concrete implementations of this actually do \"something\" with the docvalues (write it into the index in a specific format). The lifecycle is: DocValuesConsumer is created by FieldsConsumer(SegmentWriteState) or NormsConsumer(SegmentWriteState) . AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) , AddBinaryField(FieldInfo, IEnumerable<BytesRef>) , or AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) are called for each Numeric, Binary, or Sorted docvalues field. The API is a \"pull\" rather than \"push\", and the implementation is free to iterate over the values multiple times ( ). After all fields are added, the consumer is Dispose() d. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesConsumer Lucene45DocValuesConsumer Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class DocValuesConsumer : IDisposable Constructors | Improve this Doc View Source DocValuesConsumer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected DocValuesConsumer() Methods | Improve this Doc View Source AddBinaryField(FieldInfo, IEnumerable<BytesRef>) Writes binary docvalues for a field. Declaration public abstract void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values) Parameters Type Name Description FieldInfo field Field information. IEnumerable < BytesRef > values of binary values (one for each document). null indicates a missing value. | Improve this Doc View Source AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) Writes numeric docvalues for a field. Declaration public abstract void AddNumericField(FieldInfo field, IEnumerable<long?> values) Parameters Type Name Description FieldInfo field Field information. IEnumerable < System.Nullable < System.Int64 >> values of numeric values (one for each document). null indicates a missing value. | Improve this Doc View Source AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) Writes pre-sorted binary docvalues for a field. Declaration public abstract void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd) Parameters Type Name Description FieldInfo field Field information. IEnumerable < BytesRef > values of binary values in sorted order (deduplicated). IEnumerable < System.Nullable < System.Int64 >> docToOrd of ordinals (one for each document). -1 indicates a missing value. | Improve this Doc View Source AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) Writes pre-sorted set docvalues for a field Declaration public abstract void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords) Parameters Type Name Description FieldInfo field Field information. IEnumerable < BytesRef > values of binary values in sorted order (deduplicated). IEnumerable < System.Nullable < System.Int64 >> docToOrdCount of the number of values for each document. A zero ordinal count indicates a missing value. IEnumerable < System.Nullable < System.Int64 >> ords of ordinal occurrences ( docToOrdCount *maxDoc total). | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source MergeBinaryField(FieldInfo, MergeState, IList<BinaryDocValues>, IList<IBits>) Merges the binary docvalues from toMerge . The default implementation calls AddBinaryField(FieldInfo, IEnumerable<BytesRef>) , passing an that merges and filters deleted documents on the fly. Declaration public virtual void MergeBinaryField(FieldInfo fieldInfo, MergeState mergeState, IList<BinaryDocValues> toMerge, IList<IBits> docsWithField) Parameters Type Name Description FieldInfo fieldInfo MergeState mergeState IList < BinaryDocValues > toMerge IList < IBits > docsWithField | Improve this Doc View Source MergeNumericField(FieldInfo, MergeState, IList<NumericDocValues>, IList<IBits>) Merges the numeric docvalues from toMerge . The default implementation calls AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) , passing an that merges and filters deleted documents on the fly. Declaration public virtual void MergeNumericField(FieldInfo fieldInfo, MergeState mergeState, IList<NumericDocValues> toMerge, IList<IBits> docsWithField) Parameters Type Name Description FieldInfo fieldInfo MergeState mergeState IList < NumericDocValues > toMerge IList < IBits > docsWithField | Improve this Doc View Source MergeSortedField(FieldInfo, MergeState, IList<SortedDocValues>) Merges the sorted docvalues from toMerge . The default implementation calls AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) , passing an that merges ordinals and values and filters deleted documents. Declaration public virtual void MergeSortedField(FieldInfo fieldInfo, MergeState mergeState, IList<SortedDocValues> toMerge) Parameters Type Name Description FieldInfo fieldInfo MergeState mergeState IList < SortedDocValues > toMerge | Improve this Doc View Source MergeSortedSetField(FieldInfo, MergeState, IList<SortedSetDocValues>) Merges the sortedset docvalues from toMerge . The default implementation calls AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) , passing an that merges ordinals and values and filters deleted documents. Declaration public virtual void MergeSortedSetField(FieldInfo fieldInfo, MergeState mergeState, IList<SortedSetDocValues> toMerge) Parameters Type Name Description FieldInfo fieldInfo MergeState mergeState IList < SortedSetDocValues > toMerge"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DocValuesFormat.html",
    "title": "Class DocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesFormat Encodes/decodes per-document values. Note, when extending this class, the name ( Name ) may written into the index in certain configurations. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetDocValuesFormat(String) to resolve format names. To implement your own format: Subclass this class. Subclass DefaultDocValuesFormatFactory , override the Initialize() method, and add the line base.ScanForDocValuesFormats(typeof(YourDocValuesFormat).GetTypeInfo().Assembly) . If you have any format classes in your assembly that are not meant for reading, you can add the ExcludeDocValuesFormatFromScanAttribute to them so they are ignored by the scan. Set the new IDocValuesFormatFactory by calling SetDocValuesFormatFactory(IDocValuesFormatFactory) at application startup. If your format has dependencies, you may also override GetDocValuesFormat(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. DocValuesFormat Names Unlike the Java version, format names are by default convention-based on the class name. If you name your custom format class \"MyCustomDocValuesFormat\", the format name will the same name without the \"DocValuesFormat\" suffix: \"MyCustom\". You can override this default behavior by using the DocValuesFormatNameAttribute to name the format differently than this convention. Format names must be all ASCII alphanumeric, and less than 128 characters in length. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesFormat Lucene40DocValuesFormat Lucene42DocValuesFormat Lucene45DocValuesFormat PerFieldDocValuesFormat Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class DocValuesFormat : object Constructors | Improve this Doc View Source DocValuesFormat() Creates a new docvalues format. The provided name will be written into the index segment in some configurations (such as when using PerFieldDocValuesFormat ): in such configurations, for the segment to be read this class should be registered by subclassing DefaultDocValuesFormatFactory and calling in the class constructor. The new IDocValuesFormatFactory can be registered by calling SetDocValuesFormatFactory(IDocValuesFormatFactory) at application startup. Declaration protected DocValuesFormat() Properties | Improve this Doc View Source AvailableDocValuesFormats Returns a list of all available format names. Declaration public static ICollection<string> AvailableDocValuesFormats { get; } Property Value Type Description ICollection < System.String > | Improve this Doc View Source Name Unique name that's used to retrieve this format when reading the index. Declaration public string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Returns a DocValuesConsumer to write docvalues to the index. Declaration public abstract DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Returns a DocValuesProducer to read docvalues from the index. NOTE: by the time this call returns, it must hold open any files it will need to use; else, those files may be deleted. Additionally, required files may be deleted during the execution of this call before there is a chance to open them. Under these circumstances an should be thrown by the implementation. s are expected and will automatically cause a retry of the segment opening logic with the newly revised segments. Declaration public abstract DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer | Improve this Doc View Source ForName(String) Looks up a format by name. Declaration public static DocValuesFormat ForName(string name) Parameters Type Name Description System.String name Returns Type Description DocValuesFormat | Improve this Doc View Source GetDocValuesFormatFactory() Gets the associated DocValuesFormat factory. Declaration public static IDocValuesFormatFactory GetDocValuesFormatFactory() Returns Type Description IDocValuesFormatFactory The DocValuesFormat factory. | Improve this Doc View Source SetDocValuesFormatFactory(IDocValuesFormatFactory) Sets the IDocValuesFormatFactory instance used to instantiate DocValuesFormat subclasses. Declaration public static void SetDocValuesFormatFactory(IDocValuesFormatFactory docValuesFormatFactory) Parameters Type Name Description IDocValuesFormatFactory docValuesFormatFactory The new IDocValuesFormatFactory . | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String See Also DefaultDocValuesFormatFactory IDocValuesFormatFactory DocValuesFormatNameAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DocValuesFormatNameAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DocValuesFormatNameAttribute.html",
    "title": "Class DocValuesFormatNameAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesFormatNameAttribute Represents an attribute that is used to name a DocValuesFormat , if a name other than the default DocValuesFormat naming convention is desired. Inheritance System.Object ServiceNameAttribute DocValuesFormatNameAttribute Inherited Members ServiceNameAttribute.Name Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public sealed class DocValuesFormatNameAttribute : ServiceNameAttribute Constructors | Improve this Doc View Source DocValuesFormatNameAttribute(String) Declaration public DocValuesFormatNameAttribute(string name) Parameters Type Name Description System.String name"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DocValuesProducer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DocValuesProducer.html",
    "title": "Class DocValuesProducer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesProducer Abstract API that produces numeric, binary and sorted docvalues. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesProducer Lucene45DocValuesProducer Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class DocValuesProducer : IDisposable Constructors | Improve this Doc View Source DocValuesProducer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected DocValuesProducer() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this producer. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public virtual void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetBinary(FieldInfo) Returns BinaryDocValues for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract BinaryDocValues GetBinary(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description BinaryDocValues | Improve this Doc View Source GetDocsWithField(FieldInfo) Returns a IBits at the size of reader.MaxDoc , with turned on bits for each docid that does have a value for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract IBits GetDocsWithField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description IBits | Improve this Doc View Source GetNumeric(FieldInfo) Returns NumericDocValues for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract NumericDocValues GetNumeric(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description NumericDocValues | Improve this Doc View Source GetSorted(FieldInfo) Returns SortedDocValues for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract SortedDocValues GetSorted(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description SortedDocValues | Improve this Doc View Source GetSortedSet(FieldInfo) Returns SortedSetDocValues for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract SortedSetDocValues GetSortedSet(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description SortedSetDocValues | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.ExcludeCodecFromScanAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.ExcludeCodecFromScanAttribute.html",
    "title": "Class ExcludeCodecFromScanAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExcludeCodecFromScanAttribute When placed on a class that subclasses Codec , adding this attribute will exclude the type from consideration in the method. However, the Codec type can still be added manually using PutCodecType(Type) . Inheritance System.Object ExcludeServiceAttribute ExcludeCodecFromScanAttribute Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class ExcludeCodecFromScanAttribute : ExcludeServiceAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.ExcludeDocValuesFormatFromScanAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.ExcludeDocValuesFormatFromScanAttribute.html",
    "title": "Class ExcludeDocValuesFormatFromScanAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExcludeDocValuesFormatFromScanAttribute When placed on a class that subclasses DocValuesFormat , adding this attribute will exclude the type from consideration in the method. However, the DocValuesFormat type can still be added manually using PutDocValuesFormatType(Type) . Inheritance System.Object ExcludeServiceAttribute ExcludeDocValuesFormatFromScanAttribute Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class ExcludeDocValuesFormatFromScanAttribute : ExcludeServiceAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.ExcludePostingsFormatFromScanAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.ExcludePostingsFormatFromScanAttribute.html",
    "title": "Class ExcludePostingsFormatFromScanAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExcludePostingsFormatFromScanAttribute When placed on a class that subclasses PostingsFormat , adding this attribute will exclude the type from consideration in the method. However, the PostingsFormat type can still be added manually using PutPostingsFormatType(Type) . Inheritance System.Object ExcludeServiceAttribute ExcludePostingsFormatFromScanAttribute Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class ExcludePostingsFormatFromScanAttribute : ExcludeServiceAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosFormat.html",
    "title": "Class FieldInfosFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldInfosFormat Encodes/decodes FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosFormat Lucene40FieldInfosFormat Lucene42FieldInfosFormat Lucene46FieldInfosFormat Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldInfosFormat : object Constructors | Improve this Doc View Source FieldInfosFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldInfosFormat() Properties | Improve this Doc View Source FieldInfosReader Returns a FieldInfosReader to read field infos from the index. Declaration public abstract FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader | Improve this Doc View Source FieldInfosWriter Returns a FieldInfosWriter to write field infos to the index. Declaration public abstract FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosReader.html",
    "title": "Class FieldInfosReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldInfosReader Codec API for reading FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosReader Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldInfosReader : object Constructors | Improve this Doc View Source FieldInfosReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldInfosReader() Methods | Improve this Doc View Source Read(Directory, String, String, IOContext) Read the FieldInfos previously written with FieldInfosWriter . Declaration public abstract FieldInfos Read(Directory directory, string segmentName, string segmentSuffix, IOContext iocontext) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix IOContext iocontext Returns Type Description FieldInfos"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosWriter.html",
    "title": "Class FieldInfosWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldInfosWriter Codec API for writing FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosWriter Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldInfosWriter : object Constructors | Improve this Doc View Source FieldInfosWriter() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldInfosWriter() Methods | Improve this Doc View Source Write(Directory, String, String, FieldInfos, IOContext) Writes the provided FieldInfos to the directory. Declaration public abstract void Write(Directory directory, string segmentName, string segmentSuffix, FieldInfos infos, IOContext context) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix FieldInfos infos IOContext context"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldsConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldsConsumer.html",
    "title": "Class FieldsConsumer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldsConsumer Abstract API that consumes terms, doc, freq, prox, offset and payloads postings. Concrete implementations of this actually do \"something\" with the postings (write it into the index in a specific format). The lifecycle is: FieldsConsumer is created by FieldsConsumer(SegmentWriteState) . For each field, AddField(FieldInfo) is called, returning a TermsConsumer for the field. After all fields are added, the consumer is Dispose() d. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldsConsumer BlockTreeTermsWriter Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldsConsumer : IDisposable Constructors | Improve this Doc View Source FieldsConsumer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldsConsumer() Methods | Improve this Doc View Source AddField(FieldInfo) Add a new field. Declaration public abstract TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer | Improve this Doc View Source Dispose() Called when we are done adding everything. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Merge(MergeState, Fields) Called during merging to merge all Fields from sub-readers. this must recurse to merge all postings (terms, docs, positions, etc.). A PostingsFormat can override this default implementation to do its own merging. Declaration public virtual void Merge(MergeState mergeState, Fields fields) Parameters Type Name Description MergeState mergeState Fields fields"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldsProducer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldsProducer.html",
    "title": "Class FieldsProducer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldsProducer Abstract API that produces terms, doc, freq, prox, offset and payloads postings. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer BlockTreeTermsReader Implements IDisposable Inherited Members Fields.GetEnumerator() Fields.GetTerms(String) Fields.Count Fields.UniqueTermCount Fields.EMPTY_ARRAY Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldsProducer : Fields, IDisposable Constructors | Improve this Doc View Source FieldsProducer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldsProducer() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FilterCodec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FilterCodec.html",
    "title": "Class FilterCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterCodec A codec that forwards all its method calls to another codec. Extend this class when you need to reuse the functionality of an existing codec. For example, if you want to build a codec that redefines Lucene46's LiveDocsFormat : public sealed class CustomCodec : FilterCodec { public CustomCodec() : base(\"CustomCodec\", new Lucene46Codec()) { } public override LiveDocsFormat LiveDocsFormat { get { return new CustomLiveDocsFormat(); } } } Please note: Don't call ForName(String) from the no-arg constructor of your own codec. When the DefaultCodecFactory loads your own Codec , the DefaultCodecFactory has not yet fully initialized! If you want to extend another Codec , instantiate it directly by calling its constructor. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Codec FilterCodec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FilterCodec : Codec Constructors | Improve this Doc View Source FilterCodec(Codec) Sole constructor. When subclassing this codec, create a no-arg ctor and pass the delegate codec and a unique name to this ctor. Declaration protected FilterCodec(Codec delegate) Parameters Type Name Description Codec delegate Fields | Improve this Doc View Source m_delegate The codec to filter. Declaration protected readonly Codec m_delegate Field Value Type Description Codec Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.html",
    "title": "Namespace Lucene.Net.Codecs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codecs API: API for customization of the encoding and structure of the index. The Codec API allows you to customise the way the following pieces of index information are stored: * Postings lists - see PostingsFormat * DocValues - see DocValuesFormat * Stored fields - see StoredFieldsFormat * Term vectors - see TermVectorsFormat * FieldInfos - see FieldInfosFormat * SegmentInfo - see SegmentInfoFormat * Norms - see NormsFormat * Live documents - see LiveDocsFormat For some concrete implementations beyond Lucene's official index format, see the Codecs module . Codecs are identified by name through the Java Service Provider Interface. To create your own codec, extend Codec and pass the new codec's name to the super() constructor: public class MyCodec extends Codec { public MyCodec() { super(\"MyCodecName\"); } ... } You will need to register the Codec class so that the {@link java.util.ServiceLoader ServiceLoader} can find it, by including a META-INF/services/org.apache.lucene.codecs.Codec file on your classpath that contains the package-qualified name of your codec. If you just want to customise the PostingsFormat , or use different postings formats for different fields, then you can register your custom postings format in the same way (in META-INF/services/org.apache.lucene.codecs.PostingsFormat), and then extend the default Lucene46Codec and override #getPostingsFormatForField(String) to return your custom postings format. Similarly, if you just want to customise the DocValuesFormat per-field, have a look at #getDocValuesFormatForField(String) . Classes BlockTermState Holds all state required for PostingsReaderBase to produce a DocsEnum without re-seeking the terms dict. BlockTreeTermsReader A block-based terms index and dictionary that assigns terms to variable length blocks according to how they share prefixes. The terms index is a prefix trie whose leaves are term blocks. The advantage of this approach is that SeekExact() is often able to determine a term cannot exist without doing any IO, and intersection with Automata is very fast. Note that this terms dictionary has it's own fixed terms index (ie, it does not support a pluggable terms index implementation). NOTE : this terms dictionary does not support index divisor when opening an IndexReader. Instead, you can change the min/maxItemsPerBlock during indexing. The data structure used by this implementation is very similar to a burst trie ( http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.18.3499 ), but with added logic to break up too-large blocks of all terms sharing a given prefix into smaller ones. Use CheckIndex with the -verbose option to see summary statistics on the blocks in the dictionary. See BlockTreeTermsWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BlockTreeTermsReader.FieldReader BlockTree's implementation of GetTerms(String) . BlockTreeTermsReader.Stats BlockTree statistics for a single field returned by ComputeStats() . BlockTreeTermsWriter Block-based terms index and dictionary writer. Writes terms dict and index, block-encoding (column stride) each term's metadata for each set of terms between two index terms. Files: .tim: Term Dictionary .tip: Term Index Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and per-term metadata (typically pointers to the postings list for that term in the inverted index). The .tim is arranged in blocks: with blocks containing a variable number of entries (by default 25-48), where each entry is either a term or a reference to a sub-block. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the Postings Metadata and Term Metadata sections. TermsDict (.tim) --> Header, PostingsHeader , NodeBlock NumBlocks , FieldSummary, DirOffset, Footer NodeBlock --> (OuterNode | InnerNode) OuterNode --> EntryCount, SuffixLength, Byte SuffixLength , StatsLength, < TermStats > EntryCount , MetaLength, < TermMetadata > EntryCount InnerNode --> EntryCount, SuffixLength[,Sub?], Byte SuffixLength , StatsLength, < TermStats ? > EntryCount , MetaLength, < TermMetadata ? > EntryCount TermStats --> DocFreq, TotalTermFreq FieldSummary --> NumFields, <FieldNumber, NumTerms, RootCodeLength, Byte RootCodeLength , SumTotalTermFreq?, SumDocFreq, DocCount> NumFields Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) DirOffset --> Uint64 ( WriteInt64(Int64) ) EntryCount,SuffixLength,StatsLength,DocFreq,MetaLength,NumFields, FieldNumber,RootCodeLength,DocCount --> VInt ( WriteVInt32(Int32) _ TotalTermFreq,NumTerms,SumTotalTermFreq,SumDocFreq --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the BlockTree implementation. DirOffset is a pointer to the FieldSummary section. DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. this is encoded as the difference between the total number of occurrences and the DocFreq. FieldNumber is the fields number from Lucene.Net.Codecs.BlockTreeTermsWriter.fieldInfos . (.fnm) NumTerms is the number of unique terms for the field. RootCode points to the root block for the field. SumDocFreq is the total number of postings, the number of term-document pairs across the entire field. DocCount is the number of documents that have at least one posting for this field. PostingsHeader and TermMetadata are plugged into by the specific postings implementation: these contain arbitrary per-file data (such as parameters or versioning information) and per-term data (such as pointers to inverted files). For inner nodes of the tree, every entry will steal one bit to mark whether it points to child nodes(sub-block). If so, the corresponding TermStats and TermMetadata are omitted Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. The index is also used to determine when a given term cannot exist on disk (in the .tim file), saving a disk seek. TermsIndex (.tip) --> Header, FSTIndex NumFields <IndexStartFP> NumFields , DirOffset, Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) IndexStartFP --> VLong ( WriteVInt64(Int64) FSTIndex --> FST{byte[]} Footer --> CodecFooter ( WriteFooter(IndexOutput) Notes: The .tip file contains a separate FST for each field. The FST maps a term prefix to the on-disk block that holds all terms starting with that prefix. Each field's IndexStartFP points to its FST. DirOffset is a pointer to the start of the IndexStartFPs for all fields It's possible that an on-disk block would contain too many terms (more than the allowed maximum (default: 48)). When this happens, the block is sub-divided into new blocks (called \"floor blocks\"), and then the output in the FST for the block's prefix encodes the leading byte of each sub-block, and its file pointer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Codec Encodes/decodes an inverted index segment. Note, when extending this class, the name ( Name ) is written into the index. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetCodec(String) to resolve codec names. To implement your own codec: Subclass this class. Subclass DefaultCodecFactory , override the Initialize() method, and add the line base.ScanForCodecs(typeof(YourCodec).GetTypeInfo().Assembly) . If you have any codec classes in your assembly that are not meant for reading, you can add the ExcludeCodecFromScanAttribute to them so they are ignored by the scan. set the new ICodecFactory by calling SetCodecFactory(ICodecFactory) at application startup. If your codec has dependencies, you may also override GetCodec(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. Codec Names Unlike the Java version, codec names are by default convention-based on the class name. If you name your custom codec class \"MyCustomCodec\", the codec name will the same name without the \"Codec\" suffix: \"MyCustom\". You can override this default behavior by using the CodecNameAttribute to name the codec differently than this convention. Codec names must be all ASCII alphanumeric, and less than 128 characters in length. CodecNameAttribute Represents an attribute that is used to name a Codec , if a name other than the default Codec naming convention is desired. CodecUtil Utility class for reading and writing versioned headers. Writing codec headers is useful to ensure that a file is in the format you think it is. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DefaultCodecFactory LUCENENET specific class that implements the default functionality for the ICodecFactory . The most common use cases are: Initialize DefaultCodecFactory with a set of CustomCodecTypes . Subclass DefaultCodecFactory and override GetCodec(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetCodec(String) . Subclass DefaultCodecFactory and override GetCodecType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap . Subclass DefaultCodecFactory to add new or override the default Codec types by overriding Initialize() and calling PutCodecType(Type) . Subclass DefaultCodecFactory to scan additional assemblies for Codec subclasses in by overriding Initialize() and calling ScanForCodecs(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the ICodecFactory , call SetCodecFactory(ICodecFactory) . DefaultDocValuesFormatFactory LUCENENET specific class that implements the default functionality for the IDocValuesFormatFactory . The most common use cases are: Initialize DefaultDocValuesFormatFactory with a set of CustomDocValuesFormatTypes . Subclass DefaultDocValuesFormatFactory and override GetDocValuesFormat(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetDocValuesFormat(String) . Subclass DefaultDocValuesFormatFactory and override GetDocValuesFormatType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap . Subclass DefaultDocValuesFormatFactory to add new or override the default DocValuesFormat types by overriding Initialize() and calling PutDocValuesFormatType(Type) . Subclass DefaultDocValuesFormatFactory to scan additional assemblies for DocValuesFormat subclasses in by overriding Initialize() and calling ScanForDocValuesFormats(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the IDocValuesFormatFactory , call SetDocValuesFormatFactory(IDocValuesFormatFactory) . DefaultPostingsFormatFactory LUCENENET specific class that implements the default functionality for the IPostingsFormatFactory . The most common use cases are: Initialize DefaultPostingsFormatFactory with a set of CustomPostingsFormatTypes . Subclass DefaultPostingsFormatFactory and override GetPostingsFormat(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetPostingsFormat(String) . Subclass DefaultPostingsFormatFactory and override GetPostingsFormatType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap . Subclass DefaultPostingsFormatFactory to add new or override the default PostingsFormat types by overriding Initialize() and calling PutPostingsFormatType(Type) . Subclass DefaultPostingsFormatFactory to scan additional assemblies for PostingsFormat subclasses in by overriding Initialize() and calling ScanForPostingsFormats(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the IPostingsFormatFactory , call SetPostingsFormatFactory(IPostingsFormatFactory) . DocValuesConsumer Abstract API that consumes numeric, binary and sorted docvalues. Concrete implementations of this actually do \"something\" with the docvalues (write it into the index in a specific format). The lifecycle is: DocValuesConsumer is created by FieldsConsumer(SegmentWriteState) or NormsConsumer(SegmentWriteState) . AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) , AddBinaryField(FieldInfo, IEnumerable<BytesRef>) , or AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) are called for each Numeric, Binary, or Sorted docvalues field. The API is a \"pull\" rather than \"push\", and the implementation is free to iterate over the values multiple times ( ). After all fields are added, the consumer is Dispose() d. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocValuesFormat Encodes/decodes per-document values. Note, when extending this class, the name ( Name ) may written into the index in certain configurations. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetDocValuesFormat(String) to resolve format names. To implement your own format: Subclass this class. Subclass DefaultDocValuesFormatFactory , override the Initialize() method, and add the line base.ScanForDocValuesFormats(typeof(YourDocValuesFormat).GetTypeInfo().Assembly) . If you have any format classes in your assembly that are not meant for reading, you can add the ExcludeDocValuesFormatFromScanAttribute to them so they are ignored by the scan. Set the new IDocValuesFormatFactory by calling SetDocValuesFormatFactory(IDocValuesFormatFactory) at application startup. If your format has dependencies, you may also override GetDocValuesFormat(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. DocValuesFormat Names Unlike the Java version, format names are by default convention-based on the class name. If you name your custom format class \"MyCustomDocValuesFormat\", the format name will the same name without the \"DocValuesFormat\" suffix: \"MyCustom\". You can override this default behavior by using the DocValuesFormatNameAttribute to name the format differently than this convention. Format names must be all ASCII alphanumeric, and less than 128 characters in length. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocValuesFormatNameAttribute Represents an attribute that is used to name a DocValuesFormat , if a name other than the default DocValuesFormat naming convention is desired. DocValuesProducer Abstract API that produces numeric, binary and sorted docvalues. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ExcludeCodecFromScanAttribute When placed on a class that subclasses Codec , adding this attribute will exclude the type from consideration in the method. However, the Codec type can still be added manually using PutCodecType(Type) . ExcludeDocValuesFormatFromScanAttribute When placed on a class that subclasses DocValuesFormat , adding this attribute will exclude the type from consideration in the method. However, the DocValuesFormat type can still be added manually using PutDocValuesFormatType(Type) . ExcludePostingsFormatFromScanAttribute When placed on a class that subclasses PostingsFormat , adding this attribute will exclude the type from consideration in the method. However, the PostingsFormat type can still be added manually using PutPostingsFormatType(Type) . FieldInfosFormat Encodes/decodes FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldInfosReader Codec API for reading FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldInfosWriter Codec API for writing FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldsConsumer Abstract API that consumes terms, doc, freq, prox, offset and payloads postings. Concrete implementations of this actually do \"something\" with the postings (write it into the index in a specific format). The lifecycle is: FieldsConsumer is created by FieldsConsumer(SegmentWriteState) . For each field, AddField(FieldInfo) is called, returning a TermsConsumer for the field. After all fields are added, the consumer is Dispose() d. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldsProducer Abstract API that produces terms, doc, freq, prox, offset and payloads postings. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FilterCodec A codec that forwards all its method calls to another codec. Extend this class when you need to reuse the functionality of an existing codec. For example, if you want to build a codec that redefines Lucene46's LiveDocsFormat : public sealed class CustomCodec : FilterCodec { public CustomCodec() : base(\"CustomCodec\", new Lucene46Codec()) { } public override LiveDocsFormat LiveDocsFormat { get { return new CustomLiveDocsFormat(); } } } Please note: Don't call ForName(String) from the no-arg constructor of your own codec. When the DefaultCodecFactory loads your own Codec , the DefaultCodecFactory has not yet fully initialized! If you want to extend another Codec , instantiate it directly by calling its constructor. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LiveDocsFormat Format for live/deleted documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MappingMultiDocsAndPositionsEnum Exposes flex API, merged from flex API of sub-segments, remapping docIDs (this is used for segment merging). This is a Lucene.NET EXPERIMENTAL API, use at your own risk MappingMultiDocsEnum Exposes flex API, merged from flex API of sub-segments, remapping docIDs (this is used for segment merging). This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiLevelSkipListReader This abstract class reads skip lists with multiple levels. See MultiLevelSkipListWriter for the information about the encoding of the multi level skip lists. Subclasses must implement the abstract method ReadSkipData(Int32, IndexInput) which defines the actual format of the skip data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiLevelSkipListWriter This abstract class writes skip lists with multiple levels. Example for skipInterval = 3: c (skip level 2) c c c (skip level 1) x x x x x x x x x x (skip level 0) d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d (posting list) 3 6 9 12 15 18 21 24 27 30 (df) d - document x - skip data c - skip data with child pointer Skip level i contains every skipInterval-th entry from skip level i-1. Therefore the number of entries on level i is: floor(df / ((skipInterval ^ (i + 1))). Each skip entry on a level i>0 contains a pointer to the corresponding skip entry in list i-1. this guarantees a logarithmic amount of skips to find the target document. While this class takes care of writing the different skip levels, subclasses must define the actual format of the skip data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk NormsFormat Encodes/decodes per-document score normalization values. PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . This is a Lucene.NET EXPERIMENTAL API, use at your own risk PostingsConsumer Abstract API that consumes postings for an individual term. The lifecycle is: PostingsConsumer is returned for each term by StartTerm(BytesRef) . StartDoc(Int32, Int32) is called for each document where the term occurs, specifying id and term frequency for that document. If positions are enabled for the field, then AddPosition(Int32, BytesRef, Int32, Int32) will be called for each occurrence in the document. FinishDoc() is called when the producer is done adding positions to the document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PostingsFormat Encodes/decodes terms, postings, and proximity data. Note, when extending this class, the name ( Name ) may written into the index in certain configurations. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetPostingsFormat(String) to resolve format names. If you implement your own format: Subclass this class. Subclass DefaultPostingsFormatFactory , override Initialize() , and add the line base.ScanForPostingsFormats(typeof(YourPostingsFormat).GetTypeInfo().Assembly) . If you have any format classes in your assembly that are not meant for reading, you can add the ExcludePostingsFormatFromScanAttribute to them so they are ignored by the scan. Set the new IPostingsFormatFactory by calling SetPostingsFormatFactory(IPostingsFormatFactory) at application startup. If your format has dependencies, you may also override GetPostingsFormat(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. PostingsFormat Names Unlike the Java version, format names are by default convention-based on the class name. If you name your custom format class \"MyCustomPostingsFormat\", the codec name will the same name without the \"PostingsFormat\" suffix: \"MyCustom\". You can override this default behavior by using the PostingsFormatNameAttribute to name the format differently than this convention. Format names must be all ASCII alphanumeric, and less than 128 characters in length. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PostingsFormatNameAttribute Represents an attribute that is used to name a PostingsFormat , if a name other than the default PostingsFormat naming convention is desired. PostingsReaderBase The core terms dictionaries (BlockTermsReader, BlockTreeTermsReader ) interact with a single instance of this class to manage creation of DocsEnum and DocsAndPositionsEnum instances. It provides an IndexInput (termsIn) where this class may read any previously stored data that it had written in its corresponding PostingsWriterBase at indexing time. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PostingsWriterBase Extension of PostingsConsumer to support pluggable term dictionaries. This class contains additional hooks to interact with the provided term dictionaries such as BlockTreeTermsWriter . If you want to re-use an existing implementation and are only interested in customizing the format of the postings list, extend this class instead. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfoFormat Expert: Controls the format of the SegmentInfo (segment metadata file). This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfoReader Specifies an API for classes that can read SegmentInfo information. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfoWriter Specifies an API for classes that can write out SegmentInfo data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk StoredFieldsFormat Controls the format of stored fields. StoredFieldsReader Codec API for reading stored fields. You need to implement VisitDocument(Int32, StoredFieldVisitor) to read the stored fields for a document, implement Clone() (creating clones of any IndexInput s used, etc), and Dispose(Boolean) to cleanup any allocated resources. This is a Lucene.NET EXPERIMENTAL API, use at your own risk StoredFieldsWriter Codec API for writing stored fields: For every document, StartDocument(Int32) is called, informing the Codec how many fields will be written. WriteField(FieldInfo, IIndexableField) is called for each field in the document. After all documents have been written, Finish(FieldInfos, Int32) is called for verification/sanity-checks. Finally the writer is disposed ( Dispose(Boolean) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsConsumer Abstract API that consumes terms for an individual field. The lifecycle is: TermsConsumer is returned for each field by AddField(FieldInfo) . TermsConsumer returns a PostingsConsumer for each term in StartTerm(BytesRef) . When the producer (e.g. IndexWriter) is done adding documents for the term, it calls FinishTerm(BytesRef, TermStats) , passing in the accumulated term statistics. Producer calls Finish(Int64, Int64, Int32) with the accumulated collection statistics when it is finished adding terms to the field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermStats Holder for per-term statistics. TermVectorsFormat Controls the format of term vectors. TermVectorsReader Codec API for reading term vectors: This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermVectorsWriter Codec API for writing term vectors: For every document, StartDocument(Int32) is called, informing the Codec how many fields will be written. StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) is called for each field in the document, informing the codec how many terms will be written for that field, and whether or not positions, offsets, or payloads are enabled. Within each field, StartTerm(BytesRef, Int32) is called for each term. If offsets and/or positions are enabled, then AddPosition(Int32, Int32, Int32, BytesRef) will be called for each term occurrence. After all documents have been written, Finish(FieldInfos, Int32) is called for verification/sanity-checks. Finally the writer is disposed ( Dispose(Boolean) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces ICodecFactory LUCENENET specific contract for extending the functionality of Codec implementations so they can be injected with dependencies. To set the ICodecFactory , call SetCodecFactory(ICodecFactory) . IDocValuesFormatFactory LUCENENET specific contract for extending the functionality of DocValuesFormat implementations so they can be injected with dependencies. To set the IDocValuesFormatFactory , call SetDocValuesFormatFactory(IDocValuesFormatFactory) . IPostingsFormatFactory LUCENENET specific contract for extending the functionality of PostingsFormat implementations so they can be injected with dependencies. To set the IPostingsFormatFactory , call SetPostingsFormatFactory(IPostingsFormatFactory) ."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.ICodecFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.ICodecFactory.html",
    "title": "Interface ICodecFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICodecFactory LUCENENET specific contract for extending the functionality of Codec implementations so they can be injected with dependencies. To set the ICodecFactory , call SetCodecFactory(ICodecFactory) . Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public interface ICodecFactory Methods | Improve this Doc View Source GetCodec(String) Gets the Codec instance from the provided name . Declaration Codec GetCodec(string name) Parameters Type Name Description System.String name The name of the Codec instance to retrieve. Returns Type Description Codec The Codec instance. See Also DefaultCodecFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.IDocValuesFormatFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.IDocValuesFormatFactory.html",
    "title": "Interface IDocValuesFormatFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDocValuesFormatFactory LUCENENET specific contract for extending the functionality of DocValuesFormat implementations so they can be injected with dependencies. To set the IDocValuesFormatFactory , call SetDocValuesFormatFactory(IDocValuesFormatFactory) . Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public interface IDocValuesFormatFactory Methods | Improve this Doc View Source GetDocValuesFormat(String) Gets the DocValuesFormat instance from the provided name . Declaration DocValuesFormat GetDocValuesFormat(string name) Parameters Type Name Description System.String name The name of the DocValuesFormat instance to retrieve. Returns Type Description DocValuesFormat The DocValuesFormat instance. See Also DefaultDocValuesFormatFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.IPostingsFormatFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.IPostingsFormatFactory.html",
    "title": "Interface IPostingsFormatFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPostingsFormatFactory LUCENENET specific contract for extending the functionality of PostingsFormat implementations so they can be injected with dependencies. To set the IPostingsFormatFactory , call SetPostingsFormatFactory(IPostingsFormatFactory) . Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public interface IPostingsFormatFactory Methods | Improve this Doc View Source GetPostingsFormat(String) Gets the PostingsFormat instance from the provided name . Declaration PostingsFormat GetPostingsFormat(string name) Parameters Type Name Description System.String name The name of the PostingsFormat instance to retrieve. Returns Type Description PostingsFormat The PostingsFormat instance. See Also DefaultPostingsFormatFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.LiveDocsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.LiveDocsFormat.html",
    "title": "Class LiveDocsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LiveDocsFormat Format for live/deleted documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LiveDocsFormat Lucene40LiveDocsFormat Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class LiveDocsFormat : object Constructors | Improve this Doc View Source LiveDocsFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected LiveDocsFormat() Methods | Improve this Doc View Source Files(SegmentCommitInfo, ICollection<String>) Records all files in use by this SegmentCommitInfo into the files argument. Declaration public abstract void Files(SegmentCommitInfo info, ICollection<string> files) Parameters Type Name Description SegmentCommitInfo info ICollection < System.String > files | Improve this Doc View Source NewLiveDocs(IBits) Creates a new mutablebits of the same bits set and size of existing. Declaration public abstract IMutableBits NewLiveDocs(IBits existing) Parameters Type Name Description IBits existing Returns Type Description IMutableBits | Improve this Doc View Source NewLiveDocs(Int32) Creates a new MutableBits, with all bits set, for the specified size. Declaration public abstract IMutableBits NewLiveDocs(int size) Parameters Type Name Description System.Int32 size Returns Type Description IMutableBits | Improve this Doc View Source ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) Read live docs bits. Declaration public abstract IBits ReadLiveDocs(Directory dir, SegmentCommitInfo info, IOContext context) Parameters Type Name Description Directory dir SegmentCommitInfo info IOContext context Returns Type Description IBits | Improve this Doc View Source WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext) Persist live docs bits. Use NextDelGen to determine the generation of the deletes file you should write to. Declaration public abstract void WriteLiveDocs(IMutableBits bits, Directory dir, SegmentCommitInfo info, int newDelCount, IOContext context) Parameters Type Name Description IMutableBits bits Directory dir SegmentCommitInfo info System.Int32 newDelCount IOContext context"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene3x | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene3x <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codec to support Lucene 3.x indexes (readonly) Classes Lucene3xCodec Supports the Lucene 3.x index format (readonly) Lucene3xSegmentInfoFormat Lucene3x ReadOnly SegmentInfoFormat implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene3xSegmentInfoReader Lucene 3x implementation of SegmentInfoReader . @lucene.experimental"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xCodec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xCodec.html",
    "title": "Class Lucene3xCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene3xCodec Supports the Lucene 3.x index format (readonly) Inheritance System.Object Codec Lucene3xCodec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() Namespace : Lucene.Net.Codecs.Lucene3x Assembly : Lucene.Net.dll Syntax public class Lucene3xCodec : Codec Constructors | Improve this Doc View Source Lucene3xCodec() Declaration public Lucene3xCodec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetDocStoreFiles(SegmentInfo) Returns file names for shared doc stores, if any, else null . Declaration public static ISet<string> GetDocStoreFiles(SegmentInfo info) Parameters Type Name Description SegmentInfo info Returns Type Description ISet < System.String >"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xSegmentInfoFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xSegmentInfoFormat.html",
    "title": "Class Lucene3xSegmentInfoFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene3xSegmentInfoFormat Lucene3x ReadOnly SegmentInfoFormat implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoFormat Lucene3xSegmentInfoFormat Namespace : Lucene.Net.Codecs.Lucene3x Assembly : Lucene.Net.dll Syntax public class Lucene3xSegmentInfoFormat : SegmentInfoFormat Fields | Improve this Doc View Source DS_COMPOUND_KEY Declaration public static readonly string DS_COMPOUND_KEY Field Value Type Description System.String | Improve this Doc View Source DS_NAME_KEY Declaration public static readonly string DS_NAME_KEY Field Value Type Description System.String | Improve this Doc View Source DS_OFFSET_KEY Declaration public static readonly string DS_OFFSET_KEY Field Value Type Description System.String | Improve this Doc View Source FORMAT_3_1 Each segment records the Lucene version that created it. Declaration public static readonly int FORMAT_3_1 Field Value Type Description System.Int32 | Improve this Doc View Source FORMAT_DIAGNOSTICS This format adds optional per-segment String diagnostics storage, and switches userData to Map. Declaration public static readonly int FORMAT_DIAGNOSTICS Field Value Type Description System.Int32 | Improve this Doc View Source FORMAT_HAS_VECTORS Each segment records whether it has term vectors. Declaration public static readonly int FORMAT_HAS_VECTORS Field Value Type Description System.Int32 | Improve this Doc View Source NORMGEN_KEY Declaration public static readonly string NORMGEN_KEY Field Value Type Description System.String | Improve this Doc View Source NORMGEN_PREFIX Declaration public static readonly string NORMGEN_PREFIX Field Value Type Description System.String | Improve this Doc View Source UPGRADED_SI_CODEC_NAME Declaration public static readonly string UPGRADED_SI_CODEC_NAME Field Value Type Description System.String | Improve this Doc View Source UPGRADED_SI_EXTENSION Extension used for saving each SegmentInfo, once a 3.x index is first committed to with 4.0. Declaration public static readonly string UPGRADED_SI_EXTENSION Field Value Type Description System.String | Improve this Doc View Source UPGRADED_SI_VERSION_CURRENT Declaration public static readonly int UPGRADED_SI_VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source UPGRADED_SI_VERSION_START Declaration public static readonly int UPGRADED_SI_VERSION_START Field Value Type Description System.Int32 Properties | Improve this Doc View Source SegmentInfoReader Declaration public override SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader Overrides SegmentInfoFormat.SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Declaration public override SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter Overrides SegmentInfoFormat.SegmentInfoWriter Methods | Improve this Doc View Source GetDocStoreIsCompoundFile(SegmentInfo) Declaration public static bool GetDocStoreIsCompoundFile(SegmentInfo si) Parameters Type Name Description SegmentInfo si Returns Type Description System.Boolean Whether doc store files are stored in compound file (*.cfx). | Improve this Doc View Source GetDocStoreOffset(SegmentInfo) Declaration public static int GetDocStoreOffset(SegmentInfo si) Parameters Type Name Description SegmentInfo si Returns Type Description System.Int32 If this segment shares stored fields & vectors, this offset is where in that file this segment's docs begin. | Improve this Doc View Source GetDocStoreSegment(SegmentInfo) Declaration public static string GetDocStoreSegment(SegmentInfo si) Parameters Type Name Description SegmentInfo si Returns Type Description System.String Name used to derive fields/vectors file we share with other segments."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xSegmentInfoReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xSegmentInfoReader.html",
    "title": "Class Lucene3xSegmentInfoReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene3xSegmentInfoReader Lucene 3x implementation of SegmentInfoReader . @lucene.experimental Inheritance System.Object SegmentInfoReader Lucene3xSegmentInfoReader Namespace : Lucene.Net.Codecs.Lucene3x Assembly : Lucene.Net.dll Syntax public class Lucene3xSegmentInfoReader : SegmentInfoReader Methods | Improve this Doc View Source Read(Directory, String, IOContext) Declaration public override SegmentInfo Read(Directory directory, string segmentName, IOContext context) Parameters Type Name Description Directory directory System.String segmentName IOContext context Returns Type Description SegmentInfo Overrides SegmentInfoReader.Read(Directory, String, IOContext) | Improve this Doc View Source ReadLegacyInfos(SegmentInfos, Directory, IndexInput, Int32) Declaration public static void ReadLegacyInfos(SegmentInfos infos, Directory directory, IndexInput input, int format) Parameters Type Name Description SegmentInfos infos Directory directory IndexInput input System.Int32 format"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene40 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene40 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene 4.0 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .frq Contains the list of docs which contain each term along with frequency Positions .prx Stores position information about where a term occurs in the index Norms .nrm.cfs, .nrm.cfe Encodes length and boost factors for docs and fields Per-Document Values .dv.cfs, .dv.cfe Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene40Codec Implements the Lucene 4.0 index format, with configurable per-field postings formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene40 package documentation for file format details. Lucene40DocValuesFormat Lucene 4.0 DocValues format. Files: .dv.cfs : compound container ( CompoundFileDirectory ) .dv.cfe : compound entries ( CompoundFileDirectory ) Entries within the compound file: <segment> <fieldNumber>.dat : data values <segment><fieldNumber>.idx : index into the .dat for DEREF types There are several many types of DocValues with different encodings. From the perspective of filenames, all types store their values in .dat entries within the compound file. In the case of dereferenced/sorted types, the .dat actually contains only the unique values, and an additional .idx file contains pointers to these unique values. Formats: Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.VAR_INTS .dat --> Header, PackedType, MinValue, DefaultValue, PackedStream Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_8 .dat --> Header, ValueSize, Byte ( WriteByte(Byte) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_16 .dat --> Header, ValueSize, Short ( WriteInt16(Int16) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_32 .dat --> Header, ValueSize, Int32 ( WriteInt32(Int32) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_64 .dat --> Header, ValueSize, Int64 ( WriteInt64(Int64) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_32 .dat --> Header, ValueSize, Float32 maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_64 .dat --> Header, ValueSize, Float64 maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_STRAIGHT .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT .idx --> Header, TotalBytes, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT .dat --> Header, (Byte ( WriteByte(Byte) ) * variable ValueSize ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF .idx --> Header, NumValues, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF .idx --> Header, TotalVarBytes, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF .dat --> Header, (LengthPrefix + Byte ( WriteByte(Byte) ) * variable ValueSize ) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED .idx --> Header, NumValues, Ordinals Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED .idx --> Header, TotalVarBytes, Addresses, Ordinals Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED .dat --> Header, (Byte ( WriteByte(Byte) ) * variable ValueSize ) NumValues Data Types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedType --> Byte ( WriteByte(Byte) ) MaxAddress, MinValue, DefaultValue --> Int64 ( WriteInt64(Int64) ) PackedStream, Addresses, Ordinals --> PackedInt32s ValueSize, NumValues --> Int32 ( WriteInt32(Int32) ) Float32 --> 32-bit float encoded with then written as Int32 ( WriteInt32(Int32) ) Float64 --> 64-bit float encoded with then written as Int64 ( WriteInt64(Int64) ) TotalBytes --> VLong ( WriteVInt64(Int64) ) TotalVarBytes --> Int64 ( WriteInt64(Int64) ) LengthPrefix --> Length of the data value as VInt ( WriteVInt32(Int32) ) (maximum of 2 bytes) Notes: PackedType is a 0 when compressed, 1 when the stream is written as 64-bit integers. Addresses stores pointers to the actual byte location (indexed by docid). In the VAR_STRAIGHT case, each entry can have a different length, so to determine the length, docid+1 is retrieved. A sentinel address is written at the end for the VAR_STRAIGHT case, so the Addresses stream contains maxdoc+1 indices. For the deduplicated VAR_DEREF case, each length is encoded as a prefix to the data itself as a VInt ( WriteVInt32(Int32) ) (maximum of 2 bytes). Ordinals stores the term ID in sorted order (indexed by docid). In the FIXED_SORTED case, the address into the .dat can be computed from the ordinal as Header+ValueSize+(ordinal*ValueSize) because the byte length is fixed. In the VAR_SORTED case, there is double indirection (docid -> ordinal -> address), but an additional sentinel ordinal+address is always written (so there are NumValues+1 ordinals). To determine the length, ord+1's address is looked up as well. Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT in contrast to other straight variants uses a .idx file to improve lookup perfromance. In contrast to Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF it doesn't apply deduplication of the document values. Limitations: Binary doc values can be at most MAX_BINARY_FIELD_LENGTH in length. Lucene40FieldInfosFormat Lucene 4.0 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,Attributes> FieldsCount Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldsCount --> VInt ( WriteVInt32(Int32) ) FieldName --> String ( WriteString(String) ) FieldBits, DocValuesBits --> Byte ( WriteByte(Byte) ) FieldNumber --> VInt ( WriteInt32(Int32) ) Attributes --> IDictionary<String,String> ( ) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 String. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: variable-width signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.VAR_INTS ) 2: 32-bit floating point values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_32 ) 3: 64-bit floating point values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_64 ) 4: fixed-length byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_STRAIGHT ) 5: fixed-length dereferenced byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF ) 6: variable-length byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT ) 7: variable-length dereferenced byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF ) 8: 16-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_16 ) 9: 32-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_32 ) 10: 64-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_64 ) 11: 8-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_8 ) 12: fixed-length sorted byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED ) 13: variable-length sorted byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED ) Attributes: a key-value map of codec-private attributes. @lucene.experimental Lucene40LiveDocsFormat Lucene 4.0 Live Documents Format. The .del file is optional, and only exists when a segment contains deletions. Although per-segment, this file is maintained exterior to compound segment files. Deletions (.del) --> Format,Header,ByteCount,BitCount, Bits | DGaps (depending on Format) Format,ByteSize,BitCount --> Uint32 ( WriteInt32(Int32) ) Bits --> < Byte ( WriteByte(Byte) ) > ByteCount DGaps --> <DGap,NonOnesByte> NonzeroBytesCount DGap --> VInt ( WriteVInt32(Int32) ) NonOnesByte --> Byte( WriteByte(Byte) ) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Format is 1: indicates cleared DGaps. ByteCount indicates the number of bytes in Bits. It is typically (SegSize/8)+1. BitCount indicates the number of bits that are currently set in Bits. Bits contains one bit for each document indexed. When the bit corresponding to a document number is cleared, that document is marked as deleted. Bit ordering is from least to most significant. Thus, if Bits contains two bytes, 0x00 and 0x02, then document 9 is marked as alive (not deleted). DGaps represents sparse bit-vectors more efficiently than Bits. It is made of DGaps on indexes of nonOnes bytes in Bits, and the nonOnes bytes themselves. The number of nonOnes bytes in Bits (NonOnesBytesCount) is not stored. For example, if there are 8000 bits and only bits 10,12,32 are cleared, DGaps would be used: (VInt) 1 , (byte) 20 , (VInt) 3 , (Byte) 1 Lucene40NormsFormat Lucene 4.0 Norms Format. Files: .nrm.cfs : compound container ( CompoundFileDirectory ) .nrm.cfe : compound entries ( CompoundFileDirectory ) Norms are implemented as DocValues, so other than file extension, norms are written exactly the same way as Lucene40DocValuesFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . Lucene40PostingsFormat Lucene 4.0 Postings format. Files: .tim : Term Dictionary .tip : Term Index .frq : Frequencies .prx : Positions Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and pointers to the frequencies, positions and skip data in the .frq and .prx files. See BlockTreeTermsWriter for more details on the format. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the Postings Metadata and Term Metadata sections described here: Postings Metadata --> Header, SkipInterval, MaxSkipLevels, SkipMinimum Term Metadata --> FreqDelta, SkipDelta?, ProxDelta? Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SkipInterval,MaxSkipLevels,SkipMinimum --> Uint32 ( WriteInt32(Int32) ) SkipDelta,FreqDelta,ProxDelta --> VLong ( WriteVInt64(Int64) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the postings. SkipInterval is the fraction of TermDocs stored in skip tables. It is used to accelerate Advance(Int32) . Larger values result in smaller indexes, greater acceleration, but fewer accelerable cases, while smaller values result in bigger indexes, less acceleration (in case of a small value for MaxSkipLevels) and more accelerable cases. MaxSkipLevels is the max. number of skip levels stored for each term in the .frq file. A low value results in smaller indexes but less acceleration, a larger value results in slightly larger indexes but greater acceleration. See format of .frq file for more information about skip levels. SkipMinimum is the minimum document frequency a term must have in order to write any skip data at all. FreqDelta determines the position of this term's TermFreqs within the .frq file. In particular, it is the difference between the position of this term's data in that file and the position of the previous term's data (or zero, for the first term in the block). ProxDelta determines the position of this term's TermPositions within the .prx file. In particular, it is the difference between the position of this term's data in that file and the position of the previous term's data (or zero, for the first term in the block. For fields that omit position data, this will be 0 since prox information is not stored. SkipDelta determines the position of this term's SkipData within the .frq file. In particular, it is the number of bytes after TermFreqs that the SkipData starts. In other words, it is the length of the TermFreq data. SkipDelta is only stored if DocFreq is not smaller than SkipMinimum. Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. See BlockTreeTermsWriter for more details on the format. Frequencies The .frq file contains the lists of documents which contain each term, along with the frequency of the term in that document (except when frequencies are omitted: DOCS_ONLY ). FreqFile (.frq) --> Header, <TermFreqs, SkipData?> TermCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermFreqs --> <TermFreq> DocFreq TermFreq --> DocDelta[, Freq?] SkipData --> <<SkipLevelLength, SkipLevel> NumSkipLevels-1 , SkipLevel> <SkipDatum> SkipLevel --> <SkipDatum> DocFreq/(SkipInterval^(Level + 1)) SkipDatum --> DocSkip,PayloadLength?,OffsetLength?,FreqSkip,ProxSkip,SkipChildLevelPointer? DocDelta,Freq,DocSkip,PayloadLength,OffsetLength,FreqSkip,ProxSkip --> VInt ( WriteVInt32(Int32) ) SkipChildLevelPointer --> VLong ( WriteVInt64(Int64) ) TermFreqs are ordered by term (the term is implicit, from the term dictionary). TermFreq entries are ordered by increasing document number. DocDelta: if frequencies are indexed, this determines both the document number and the frequency. In particular, DocDelta/2 is the difference between this document number and the previous document number (or zero when this is the first document in a TermFreqs). When DocDelta is odd, the frequency is one. When DocDelta is even, the frequency is read as another VInt. If frequencies are omitted, DocDelta contains the gap (not multiplied by 2) between document numbers and no frequency information is stored. For example, the TermFreqs for a term which occurs once in document seven and three times in document eleven, with frequencies indexed, would be the following sequence of VInts: 15, 8, 3 If frequencies were omitted ( DOCS_ONLY ) it would be this sequence of VInts instead: 7,4 DocSkip records the document number before every SkipInterval th document in TermFreqs. If payloads and offsets are disabled for the term's field, then DocSkip represents the difference from the previous value in the sequence. If payloads and/or offsets are enabled for the term's field, then DocSkip/2 represents the difference from the previous value in the sequence. In this case when DocSkip is odd, then PayloadLength and/or OffsetLength are stored indicating the length of the last payload/offset before the SkipInterval th document in TermPositions. PayloadLength indicates the length of the last payload. OffsetLength indicates the length of the last offset (endOffset-startOffset). FreqSkip and ProxSkip record the position of every SkipInterval th entry in FreqFile and ProxFile, respectively. File positions are relative to the start of TermFreqs and Positions, to the previous SkipDatum in the sequence. For example, if DocFreq=35 and SkipInterval=16, then there are two SkipData entries, containing the 15 th and 31 st document numbers in TermFreqs. The first FreqSkip names the number of bytes after the beginning of TermFreqs that the 16 th SkipDatum starts, and the second the number of bytes after that that the 32 nd starts. The first ProxSkip names the number of bytes after the beginning of Positions that the 16 th SkipDatum starts, and the second the number of bytes after that that the 32 nd starts. Each term can have multiple skip levels. The amount of skip levels for a term is NumSkipLevels = Min(MaxSkipLevels, floor(log(DocFreq/log(SkipInterval)))). The number of SkipData entries for a skip level is DocFreq/(SkipInterval^(Level + 1)), whereas the lowest skip level is Level=0. Example: SkipInterval = 4, MaxSkipLevels = 2, DocFreq = 35. Then skip level 0 has 8 SkipData entries, containing the 3 rd , 7 th , 11 th , 15 th , 19 th , 23 rd , 27 th , and 31 st document numbers in TermFreqs. Skip level 1 has 2 SkipData entries, containing the 15 th and 31 st document numbers in TermFreqs. The SkipData entries on all upper levels > 0 contain a SkipChildLevelPointer referencing the corresponding SkipData entry in level-1. In the example has entry 15 on level 1 a pointer to entry 15 on level 0 and entry 31 on level 1 a pointer to entry 31 on level 0. Positions The .prx file contains the lists of positions that each term occurs at within documents. Note that fields omitting positional data do not store anything into this file, and if all fields in the index omit positional data then the .prx file will not exist. ProxFile (.prx) --> Header, <TermPositions> TermCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPositions --> <Positions> DocFreq Positions --> <PositionDelta,PayloadLength?,OffsetDelta?,OffsetLength?,PayloadData?> Freq PositionDelta,OffsetDelta,OffsetLength,PayloadLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> byte ( WriteByte(Byte) ) PayloadLength TermPositions are ordered by term (the term is implicit, from the term dictionary). Positions entries are ordered by increasing document number (the document number is implicit from the .frq file). PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. For example, the TermPositions for a term which occurs as the fourth term in one document, and as the fifth and ninth term in a subsequent document, would be the following sequence of VInts (payloads disabled): 4, 5, 4 PayloadData is metadata associated with the current term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. OffsetDelta/2 is the difference between this position's startOffset from the previous occurrence (or zero, if this is the first occurrence in this document). If OffsetDelta is odd, then the length (endOffset-startOffset) differs from the previous occurrence and an OffsetLength follows. Offset data is only written for DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Lucene40PostingsReader Concrete class that reads the 4.0 frq/prox postings format. Lucene40SegmentInfoFormat Lucene 4.0 Segment info format. Files: .si : Header, SegVersion, SegSize, IsCompoundFile, Diagnostics, Attributes, Files Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SegSize --> Int32 ( WriteInt32(Int32) ) SegVersion --> String ( WriteString(String) ) Files --> ISet<String> ( ) Diagnostics, Attributes --> IDictionary<String,String> ( ) IsCompoundFile --> Int8 ( WriteByte(Byte) ) Field Descriptions: SegVersion is the code version that created the segment. SegSize is the number of documents contained in the segment index. IsCompoundFile records whether the segment is written as a compound file or not. If this is -1, the segment is not a compound file. If it is 1, the segment is a compound file. Checksum contains the CRC32 checksum of all bytes in the segments_N file up until the checksum. This is used to verify integrity of the file on opening the index. The Diagnostics Map is privately written by IndexWriter , as a debugging aid, for each segment it creates. It includes metadata like the current Lucene version, OS, .NET/Java version, why the segment was created (merge, flush, addIndexes), etc. Attributes: a key-value map of codec-private attributes. Files is a list of files referred to by this segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40SegmentInfoReader Lucene 4.0 implementation of SegmentInfoReader . @lucene.experimental Lucene40SegmentInfoWriter Lucene 4.0 implementation of SegmentInfoWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40SkipListReader Implements the skip list reader for the 4.0 posting list format that stores positions and payloads. Lucene40StoredFieldsFormat Lucene 4.0 Stored Fields Format. Stored fields are represented by two files: The field index, or .fdx file. This is used to find the location within the field data file of the fields of a particular document. Because it contains fixed-length data, this file may be easily randomly accessed. The position of document n 's field data is the Uint64 ( WriteInt64(Int64) ) at n*8 in this file. This contains, for each document, a pointer to its field data, as follows: FieldIndex (.fdx) --> <Header>, <FieldValuesPosition> SegSize Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldValuesPosition --> Uint64 ( WriteInt64(Int64) ) The field data, or .fdt file. This contains the stored fields of each document, as follows: FieldData (.fdt) --> <Header>, <DocFieldData> SegSize Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DocFieldData --> FieldCount, <FieldNum, Bits, Value> FieldCount FieldCount --> VInt ( WriteVInt32(Int32) ) FieldNum --> VInt ( WriteVInt32(Int32) ) Bits --> Byte ( WriteByte(Byte) ) low order bit reserved. second bit is one for fields containing binary data third bit reserved. 4th to 6th bit (mask: 0x7<<3) define the type of a numeric field: all bits in mask are cleared if no numeric field at all 1<<3: Value is Int 2<<3: Value is Long 3<<3: Value is Int as Float (as of 4<<3: Value is Long as Double (as of Value --> String | BinaryValue | Int | Long (depending on Bits) BinaryValue --> ValueSize, < Byte ( WriteByte(Byte) ) >^ValueSize ValueSize --> VInt ( WriteVInt32(Int32) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40StoredFieldsReader Class responsible for access to stored document fields. It uses <segment>.fdt and <segment>.fdx; files. This is a Lucene.NET INTERNAL API, use at your own risk Lucene40StoredFieldsWriter Class responsible for writing stored document fields. It uses <segment>.fdt and <segment>.fdx; files. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40TermVectorsFormat Lucene 4.0 Term Vectors format. Term Vector support is an optional on a field by field basis. It consists of 3 files. The Document Index or .tvx file. For each document, this stores the offset into the document data (.tvd) and field data (.tvf) files. DocumentIndex (.tvx) --> Header,<DocumentPosition,FieldPosition> NumDocs Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DocumentPosition --> UInt64 ( WriteInt64(Int64) ) (offset in the .tvd file) FieldPosition --> UInt64 ( WriteInt64(Int64) ) (offset in the .tvf file) The Document or .tvd file. This contains, for each document, the number of fields, a list of the fields with term vector info and finally a list of pointers to the field information in the .tvf (Term Vector Fields) file. The .tvd file is used to map out the fields that have term vectors stored and where the field information is in the .tvf file. Document (.tvd) --> Header,<NumFields, FieldNums, FieldPositions> NumDocs Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) NumFields --> VInt ( WriteVInt32(Int32) ) FieldNums --> <FieldNumDelta> NumFields FieldNumDelta --> VInt ( WriteVInt32(Int32) ) FieldPositions --> <FieldPositionDelta> NumFields-1 FieldPositionDelta --> VLong ( WriteVInt64(Int64) ) The Field or .tvf file. This file contains, for each field that has a term vector stored, a list of the terms, their frequencies and, optionally, position, offset, and payload information. Field (.tvf) --> Header,<NumTerms, Flags, TermFreqs> NumFields Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) NumTerms --> VInt ( WriteVInt32(Int32) ) Flags --> Byte ( WriteByte(Byte) ) TermFreqs --> <TermText, TermFreq, Positions?, PayloadData?, Offsets?> NumTerms TermText --> <PrefixLength, Suffix> PrefixLength --> VInt ( WriteVInt32(Int32) ) Suffix --> String ( WriteString(String) ) TermFreq --> VInt ( WriteVInt32(Int32) ) Positions --> <PositionDelta PayloadLength?> TermFreq PositionDelta --> VInt ( WriteVInt32(Int32) ) PayloadLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> Byte ( WriteByte(Byte) ) NumPayloadBytes Offsets --> <VInt ( WriteVInt32(Int32) ), VInt ( WriteVInt32(Int32) ) > TermFreq Notes: Flags byte stores whether this term vector has position, offset, payload. information stored. Term byte prefixes are shared. The PrefixLength is the number of initial bytes from the previous term which must be pre-pended to a term's suffix in order to form the term's bytes. Thus, if the previous term's text was \"bone\" and the term is \"boy\", the PrefixLength is two and the suffix is \"y\". PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. PayloadData is metadata associated with a term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. PayloadData encodes the concatenated bytes for all of a terms occurrences. Offsets are stored as delta encoded VInts. The first VInt is the startOffset, the second is the endOffset. Lucene40TermVectorsReader Lucene 4.0 Term Vectors reader. It reads .tvd, .tvf, and .tvx files. Lucene40TermVectorsWriter Lucene 4.0 Term Vectors writer. It writes .tvd, .tvf, and .tvx files."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40Codec.html",
    "title": "Class Lucene40Codec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40Codec Implements the Lucene 4.0 index format, with configurable per-field postings formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene40 package documentation for file format details. Inheritance System.Object Codec Lucene40Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40Codec : Codec Constructors | Improve this Doc View Source Lucene40Codec() Sole constructor. Declaration public Lucene40Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override sealed StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene40\". Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40DocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40DocValuesFormat.html",
    "title": "Class Lucene40DocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40DocValuesFormat Lucene 4.0 DocValues format. Files: .dv.cfs : compound container ( CompoundFileDirectory ) .dv.cfe : compound entries ( CompoundFileDirectory ) Entries within the compound file: <segment> <fieldNumber>.dat : data values <segment><fieldNumber>.idx : index into the .dat for DEREF types There are several many types of DocValues with different encodings. From the perspective of filenames, all types store their values in .dat entries within the compound file. In the case of dereferenced/sorted types, the .dat actually contains only the unique values, and an additional .idx file contains pointers to these unique values. Formats: Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.VAR_INTS .dat --> Header, PackedType, MinValue, DefaultValue, PackedStream Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_8 .dat --> Header, ValueSize, Byte ( WriteByte(Byte) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_16 .dat --> Header, ValueSize, Short ( WriteInt16(Int16) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_32 .dat --> Header, ValueSize, Int32 ( WriteInt32(Int32) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_64 .dat --> Header, ValueSize, Int64 ( WriteInt64(Int64) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_32 .dat --> Header, ValueSize, Float32 maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_64 .dat --> Header, ValueSize, Float64 maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_STRAIGHT .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT .idx --> Header, TotalBytes, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT .dat --> Header, (Byte ( WriteByte(Byte) ) * variable ValueSize ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF .idx --> Header, NumValues, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF .idx --> Header, TotalVarBytes, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF .dat --> Header, (LengthPrefix + Byte ( WriteByte(Byte) ) * variable ValueSize ) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED .idx --> Header, NumValues, Ordinals Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED .idx --> Header, TotalVarBytes, Addresses, Ordinals Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED .dat --> Header, (Byte ( WriteByte(Byte) ) * variable ValueSize ) NumValues Data Types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedType --> Byte ( WriteByte(Byte) ) MaxAddress, MinValue, DefaultValue --> Int64 ( WriteInt64(Int64) ) PackedStream, Addresses, Ordinals --> PackedInt32s ValueSize, NumValues --> Int32 ( WriteInt32(Int32) ) Float32 --> 32-bit float encoded with then written as Int32 ( WriteInt32(Int32) ) Float64 --> 64-bit float encoded with then written as Int64 ( WriteInt64(Int64) ) TotalBytes --> VLong ( WriteVInt64(Int64) ) TotalVarBytes --> Int64 ( WriteInt64(Int64) ) LengthPrefix --> Length of the data value as VInt ( WriteVInt32(Int32) ) (maximum of 2 bytes) Notes: PackedType is a 0 when compressed, 1 when the stream is written as 64-bit integers. Addresses stores pointers to the actual byte location (indexed by docid). In the VAR_STRAIGHT case, each entry can have a different length, so to determine the length, docid+1 is retrieved. A sentinel address is written at the end for the VAR_STRAIGHT case, so the Addresses stream contains maxdoc+1 indices. For the deduplicated VAR_DEREF case, each length is encoded as a prefix to the data itself as a VInt ( WriteVInt32(Int32) ) (maximum of 2 bytes). Ordinals stores the term ID in sorted order (indexed by docid). In the FIXED_SORTED case, the address into the .dat can be computed from the ordinal as Header+ValueSize+(ordinal*ValueSize) because the byte length is fixed. In the VAR_SORTED case, there is double indirection (docid -> ordinal -> address), but an additional sentinel ordinal+address is always written (so there are NumValues+1 ordinals). To determine the length, ord+1's address is looked up as well. Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT in contrast to other straight variants uses a .idx file to improve lookup perfromance. In contrast to Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF it doesn't apply deduplication of the document values. Limitations: Binary doc values can be at most MAX_BINARY_FIELD_LENGTH in length. Inheritance System.Object DocValuesFormat Lucene40DocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40DocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source Lucene40DocValuesFormat() Sole constructor. Declaration public Lucene40DocValuesFormat() Fields | Improve this Doc View Source MAX_BINARY_FIELD_LENGTH Maximum length for each binary doc values field. Declaration public static readonly int MAX_BINARY_FIELD_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40FieldInfosFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40FieldInfosFormat.html",
    "title": "Class Lucene40FieldInfosFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40FieldInfosFormat Lucene 4.0 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,Attributes> FieldsCount Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldsCount --> VInt ( WriteVInt32(Int32) ) FieldName --> String ( WriteString(String) ) FieldBits, DocValuesBits --> Byte ( WriteByte(Byte) ) FieldNumber --> VInt ( WriteInt32(Int32) ) Attributes --> IDictionary<String,String> ( ) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 String. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: variable-width signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.VAR_INTS ) 2: 32-bit floating point values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_32 ) 3: 64-bit floating point values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_64 ) 4: fixed-length byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_STRAIGHT ) 5: fixed-length dereferenced byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF ) 6: variable-length byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT ) 7: variable-length dereferenced byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF ) 8: 16-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_16 ) 9: 32-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_32 ) 10: 64-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_64 ) 11: 8-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_8 ) 12: fixed-length sorted byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED ) 13: variable-length sorted byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED ) Attributes: a key-value map of codec-private attributes. @lucene.experimental Inheritance System.Object FieldInfosFormat Lucene40FieldInfosFormat Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40FieldInfosFormat : FieldInfosFormat Constructors | Improve this Doc View Source Lucene40FieldInfosFormat() Sole constructor. Declaration public Lucene40FieldInfosFormat() Properties | Improve this Doc View Source FieldInfosReader Declaration public override FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader Overrides FieldInfosFormat.FieldInfosReader | Improve this Doc View Source FieldInfosWriter Declaration public override FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter Overrides FieldInfosFormat.FieldInfosWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40LiveDocsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40LiveDocsFormat.html",
    "title": "Class Lucene40LiveDocsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40LiveDocsFormat Lucene 4.0 Live Documents Format. The .del file is optional, and only exists when a segment contains deletions. Although per-segment, this file is maintained exterior to compound segment files. Deletions (.del) --> Format,Header,ByteCount,BitCount, Bits | DGaps (depending on Format) Format,ByteSize,BitCount --> Uint32 ( WriteInt32(Int32) ) Bits --> < Byte ( WriteByte(Byte) ) > ByteCount DGaps --> <DGap,NonOnesByte> NonzeroBytesCount DGap --> VInt ( WriteVInt32(Int32) ) NonOnesByte --> Byte( WriteByte(Byte) ) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Format is 1: indicates cleared DGaps. ByteCount indicates the number of bytes in Bits. It is typically (SegSize/8)+1. BitCount indicates the number of bits that are currently set in Bits. Bits contains one bit for each document indexed. When the bit corresponding to a document number is cleared, that document is marked as deleted. Bit ordering is from least to most significant. Thus, if Bits contains two bytes, 0x00 and 0x02, then document 9 is marked as alive (not deleted). DGaps represents sparse bit-vectors more efficiently than Bits. It is made of DGaps on indexes of nonOnes bytes in Bits, and the nonOnes bytes themselves. The number of nonOnes bytes in Bits (NonOnesBytesCount) is not stored. For example, if there are 8000 bits and only bits 10,12,32 are cleared, DGaps would be used: (VInt) 1 , (byte) 20 , (VInt) 3 , (Byte) 1 Inheritance System.Object LiveDocsFormat Lucene40LiveDocsFormat Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40LiveDocsFormat : LiveDocsFormat Constructors | Improve this Doc View Source Lucene40LiveDocsFormat() Sole constructor. Declaration public Lucene40LiveDocsFormat() Methods | Improve this Doc View Source Files(SegmentCommitInfo, ICollection<String>) Declaration public override void Files(SegmentCommitInfo info, ICollection<string> files) Parameters Type Name Description SegmentCommitInfo info ICollection < System.String > files Overrides LiveDocsFormat.Files(SegmentCommitInfo, ICollection<String>) | Improve this Doc View Source NewLiveDocs(IBits) Declaration public override IMutableBits NewLiveDocs(IBits existing) Parameters Type Name Description IBits existing Returns Type Description IMutableBits Overrides LiveDocsFormat.NewLiveDocs(IBits) | Improve this Doc View Source NewLiveDocs(Int32) Declaration public override IMutableBits NewLiveDocs(int size) Parameters Type Name Description System.Int32 size Returns Type Description IMutableBits Overrides LiveDocsFormat.NewLiveDocs(Int32) | Improve this Doc View Source ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) Declaration public override IBits ReadLiveDocs(Directory dir, SegmentCommitInfo info, IOContext context) Parameters Type Name Description Directory dir SegmentCommitInfo info IOContext context Returns Type Description IBits Overrides LiveDocsFormat.ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) | Improve this Doc View Source WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext) Declaration public override void WriteLiveDocs(IMutableBits bits, Directory dir, SegmentCommitInfo info, int newDelCount, IOContext context) Parameters Type Name Description IMutableBits bits Directory dir SegmentCommitInfo info System.Int32 newDelCount IOContext context Overrides LiveDocsFormat.WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40NormsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40NormsFormat.html",
    "title": "Class Lucene40NormsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40NormsFormat Lucene 4.0 Norms Format. Files: .nrm.cfs : compound container ( CompoundFileDirectory ) .nrm.cfe : compound entries ( CompoundFileDirectory ) Norms are implemented as DocValues, so other than file extension, norms are written exactly the same way as Lucene40DocValuesFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NormsFormat Lucene40NormsFormat Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40NormsFormat : NormsFormat Constructors | Improve this Doc View Source Lucene40NormsFormat() Sole constructor. Declaration public Lucene40NormsFormat() Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides NormsFormat.NormsConsumer(SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides NormsFormat.NormsProducer(SegmentReadState) See Also Lucene40DocValuesFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsBaseFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsBaseFormat.html",
    "title": "Class Lucene40PostingsBaseFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . Inheritance System.Object PostingsBaseFormat Lucene40PostingsBaseFormat Inherited Members PostingsBaseFormat.Name Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public sealed class Lucene40PostingsBaseFormat : PostingsBaseFormat Constructors | Improve this Doc View Source Lucene40PostingsBaseFormat() Sole constructor. Declaration public Lucene40PostingsBaseFormat() Methods | Improve this Doc View Source PostingsReaderBase(SegmentReadState) Declaration public override PostingsReaderBase PostingsReaderBase(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description PostingsReaderBase Overrides PostingsBaseFormat.PostingsReaderBase(SegmentReadState) | Improve this Doc View Source PostingsWriterBase(SegmentWriteState) Declaration public override PostingsWriterBase PostingsWriterBase(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description PostingsWriterBase Overrides PostingsBaseFormat.PostingsWriterBase(SegmentWriteState)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsFormat.html",
    "title": "Class Lucene40PostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40PostingsFormat Lucene 4.0 Postings format. Files: .tim : Term Dictionary .tip : Term Index .frq : Frequencies .prx : Positions Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and pointers to the frequencies, positions and skip data in the .frq and .prx files. See BlockTreeTermsWriter for more details on the format. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the Postings Metadata and Term Metadata sections described here: Postings Metadata --> Header, SkipInterval, MaxSkipLevels, SkipMinimum Term Metadata --> FreqDelta, SkipDelta?, ProxDelta? Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SkipInterval,MaxSkipLevels,SkipMinimum --> Uint32 ( WriteInt32(Int32) ) SkipDelta,FreqDelta,ProxDelta --> VLong ( WriteVInt64(Int64) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the postings. SkipInterval is the fraction of TermDocs stored in skip tables. It is used to accelerate Advance(Int32) . Larger values result in smaller indexes, greater acceleration, but fewer accelerable cases, while smaller values result in bigger indexes, less acceleration (in case of a small value for MaxSkipLevels) and more accelerable cases. MaxSkipLevels is the max. number of skip levels stored for each term in the .frq file. A low value results in smaller indexes but less acceleration, a larger value results in slightly larger indexes but greater acceleration. See format of .frq file for more information about skip levels. SkipMinimum is the minimum document frequency a term must have in order to write any skip data at all. FreqDelta determines the position of this term's TermFreqs within the .frq file. In particular, it is the difference between the position of this term's data in that file and the position of the previous term's data (or zero, for the first term in the block). ProxDelta determines the position of this term's TermPositions within the .prx file. In particular, it is the difference between the position of this term's data in that file and the position of the previous term's data (or zero, for the first term in the block. For fields that omit position data, this will be 0 since prox information is not stored. SkipDelta determines the position of this term's SkipData within the .frq file. In particular, it is the number of bytes after TermFreqs that the SkipData starts. In other words, it is the length of the TermFreq data. SkipDelta is only stored if DocFreq is not smaller than SkipMinimum. Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. See BlockTreeTermsWriter for more details on the format. Frequencies The .frq file contains the lists of documents which contain each term, along with the frequency of the term in that document (except when frequencies are omitted: DOCS_ONLY ). FreqFile (.frq) --> Header, <TermFreqs, SkipData?> TermCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermFreqs --> <TermFreq> DocFreq TermFreq --> DocDelta[, Freq?] SkipData --> <<SkipLevelLength, SkipLevel> NumSkipLevels-1 , SkipLevel> <SkipDatum> SkipLevel --> <SkipDatum> DocFreq/(SkipInterval^(Level + 1)) SkipDatum --> DocSkip,PayloadLength?,OffsetLength?,FreqSkip,ProxSkip,SkipChildLevelPointer? DocDelta,Freq,DocSkip,PayloadLength,OffsetLength,FreqSkip,ProxSkip --> VInt ( WriteVInt32(Int32) ) SkipChildLevelPointer --> VLong ( WriteVInt64(Int64) ) TermFreqs are ordered by term (the term is implicit, from the term dictionary). TermFreq entries are ordered by increasing document number. DocDelta: if frequencies are indexed, this determines both the document number and the frequency. In particular, DocDelta/2 is the difference between this document number and the previous document number (or zero when this is the first document in a TermFreqs). When DocDelta is odd, the frequency is one. When DocDelta is even, the frequency is read as another VInt. If frequencies are omitted, DocDelta contains the gap (not multiplied by 2) between document numbers and no frequency information is stored. For example, the TermFreqs for a term which occurs once in document seven and three times in document eleven, with frequencies indexed, would be the following sequence of VInts: 15, 8, 3 If frequencies were omitted ( DOCS_ONLY ) it would be this sequence of VInts instead: 7,4 DocSkip records the document number before every SkipInterval th document in TermFreqs. If payloads and offsets are disabled for the term's field, then DocSkip represents the difference from the previous value in the sequence. If payloads and/or offsets are enabled for the term's field, then DocSkip/2 represents the difference from the previous value in the sequence. In this case when DocSkip is odd, then PayloadLength and/or OffsetLength are stored indicating the length of the last payload/offset before the SkipInterval th document in TermPositions. PayloadLength indicates the length of the last payload. OffsetLength indicates the length of the last offset (endOffset-startOffset). FreqSkip and ProxSkip record the position of every SkipInterval th entry in FreqFile and ProxFile, respectively. File positions are relative to the start of TermFreqs and Positions, to the previous SkipDatum in the sequence. For example, if DocFreq=35 and SkipInterval=16, then there are two SkipData entries, containing the 15 th and 31 st document numbers in TermFreqs. The first FreqSkip names the number of bytes after the beginning of TermFreqs that the 16 th SkipDatum starts, and the second the number of bytes after that that the 32 nd starts. The first ProxSkip names the number of bytes after the beginning of Positions that the 16 th SkipDatum starts, and the second the number of bytes after that that the 32 nd starts. Each term can have multiple skip levels. The amount of skip levels for a term is NumSkipLevels = Min(MaxSkipLevels, floor(log(DocFreq/log(SkipInterval)))). The number of SkipData entries for a skip level is DocFreq/(SkipInterval^(Level + 1)), whereas the lowest skip level is Level=0. Example: SkipInterval = 4, MaxSkipLevels = 2, DocFreq = 35. Then skip level 0 has 8 SkipData entries, containing the 3 rd , 7 th , 11 th , 15 th , 19 th , 23 rd , 27 th , and 31 st document numbers in TermFreqs. Skip level 1 has 2 SkipData entries, containing the 15 th and 31 st document numbers in TermFreqs. The SkipData entries on all upper levels > 0 contain a SkipChildLevelPointer referencing the corresponding SkipData entry in level-1. In the example has entry 15 on level 1 a pointer to entry 15 on level 0 and entry 31 on level 1 a pointer to entry 31 on level 0. Positions The .prx file contains the lists of positions that each term occurs at within documents. Note that fields omitting positional data do not store anything into this file, and if all fields in the index omit positional data then the .prx file will not exist. ProxFile (.prx) --> Header, <TermPositions> TermCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPositions --> <Positions> DocFreq Positions --> <PositionDelta,PayloadLength?,OffsetDelta?,OffsetLength?,PayloadData?> Freq PositionDelta,OffsetDelta,OffsetLength,PayloadLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> byte ( WriteByte(Byte) ) PayloadLength TermPositions are ordered by term (the term is implicit, from the term dictionary). Positions entries are ordered by increasing document number (the document number is implicit from the .frq file). PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. For example, the TermPositions for a term which occurs as the fourth term in one document, and as the fifth and ninth term in a subsequent document, would be the following sequence of VInts (payloads disabled): 4, 5, 4 PayloadData is metadata associated with the current term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. OffsetDelta/2 is the difference between this position's startOffset from the previous occurrence (or zero, if this is the first occurrence in this document). If OffsetDelta is odd, then the length (endOffset-startOffset) differs from the previous occurrence and an OffsetLength follows. Offset data is only written for DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Inheritance System.Object PostingsFormat Lucene40PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40PostingsFormat : PostingsFormat Constructors | Improve this Doc View Source Lucene40PostingsFormat() Creates Lucene40PostingsFormat with default settings. Declaration public Lucene40PostingsFormat() Fields | Improve this Doc View Source m_maxBlockSize Maximum items (terms or sub-blocks) per block for BlockTree. Declaration protected readonly int m_maxBlockSize Field Value Type Description System.Int32 | Improve this Doc View Source m_minBlockSize Minimum items (terms or sub-blocks) per block for BlockTree. Declaration protected readonly int m_minBlockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsReader.html",
    "title": "Class Lucene40PostingsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40PostingsReader Concrete class that reads the 4.0 frq/prox postings format. Inheritance System.Object PostingsReaderBase Lucene40PostingsReader Inherited Members PostingsReaderBase.Dispose() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40PostingsReader : PostingsReaderBase Constructors | Improve this Doc View Source Lucene40PostingsReader(Directory, FieldInfos, SegmentInfo, IOContext, String) Sole constructor. Declaration public Lucene40PostingsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo segmentInfo, IOContext ioContext, string segmentSuffix) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo segmentInfo IOContext ioContext System.String segmentSuffix Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides PostingsReaderBase.CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Declaration public override void DecodeTerm(long[] longs, DataInput in, FieldInfo fieldInfo, BlockTermState termState, bool absolute) Parameters Type Name Description System.Int64 [] longs DataInput in FieldInfo fieldInfo BlockTermState termState System.Boolean absolute Overrides PostingsReaderBase.DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsReaderBase.Dispose(Boolean) | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides PostingsReaderBase.Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides PostingsReaderBase.DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Init(IndexInput) Declaration public override void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn Overrides PostingsReaderBase.Init(IndexInput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsReaderBase.NewTermState() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PostingsReaderBase.RamBytesUsed() See Also Lucene40PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoFormat.html",
    "title": "Class Lucene40SegmentInfoFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40SegmentInfoFormat Lucene 4.0 Segment info format. Files: .si : Header, SegVersion, SegSize, IsCompoundFile, Diagnostics, Attributes, Files Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SegSize --> Int32 ( WriteInt32(Int32) ) SegVersion --> String ( WriteString(String) ) Files --> ISet<String> ( ) Diagnostics, Attributes --> IDictionary<String,String> ( ) IsCompoundFile --> Int8 ( WriteByte(Byte) ) Field Descriptions: SegVersion is the code version that created the segment. SegSize is the number of documents contained in the segment index. IsCompoundFile records whether the segment is written as a compound file or not. If this is -1, the segment is not a compound file. If it is 1, the segment is a compound file. Checksum contains the CRC32 checksum of all bytes in the segments_N file up until the checksum. This is used to verify integrity of the file on opening the index. The Diagnostics Map is privately written by IndexWriter , as a debugging aid, for each segment it creates. It includes metadata like the current Lucene version, OS, .NET/Java version, why the segment was created (merge, flush, addIndexes), etc. Attributes: a key-value map of codec-private attributes. Files is a list of files referred to by this segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoFormat Lucene40SegmentInfoFormat Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40SegmentInfoFormat : SegmentInfoFormat Constructors | Improve this Doc View Source Lucene40SegmentInfoFormat() Sole constructor. Declaration public Lucene40SegmentInfoFormat() Fields | Improve this Doc View Source SI_EXTENSION File extension used to store SegmentInfo . Declaration public static readonly string SI_EXTENSION Field Value Type Description System.String Properties | Improve this Doc View Source SegmentInfoReader Declaration public override SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader Overrides SegmentInfoFormat.SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Declaration public override SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter Overrides SegmentInfoFormat.SegmentInfoWriter See Also SegmentInfos"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoReader.html",
    "title": "Class Lucene40SegmentInfoReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40SegmentInfoReader Lucene 4.0 implementation of SegmentInfoReader . @lucene.experimental Inheritance System.Object SegmentInfoReader Lucene40SegmentInfoReader Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40SegmentInfoReader : SegmentInfoReader Constructors | Improve this Doc View Source Lucene40SegmentInfoReader() Sole constructor. Declaration public Lucene40SegmentInfoReader() Methods | Improve this Doc View Source Read(Directory, String, IOContext) Declaration public override SegmentInfo Read(Directory dir, string segment, IOContext context) Parameters Type Name Description Directory dir System.String segment IOContext context Returns Type Description SegmentInfo Overrides SegmentInfoReader.Read(Directory, String, IOContext) See Also Lucene40SegmentInfoFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoWriter.html",
    "title": "Class Lucene40SegmentInfoWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40SegmentInfoWriter Lucene 4.0 implementation of SegmentInfoWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoWriter Lucene40SegmentInfoWriter Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40SegmentInfoWriter : SegmentInfoWriter Constructors | Improve this Doc View Source Lucene40SegmentInfoWriter() Sole constructor. Declaration public Lucene40SegmentInfoWriter() Methods | Improve this Doc View Source Write(Directory, SegmentInfo, FieldInfos, IOContext) Save a single segment's info. Declaration public override void Write(Directory dir, SegmentInfo si, FieldInfos fis, IOContext ioContext) Parameters Type Name Description Directory dir SegmentInfo si FieldInfos fis IOContext ioContext Overrides SegmentInfoWriter.Write(Directory, SegmentInfo, FieldInfos, IOContext) See Also Lucene40SegmentInfoFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SkipListReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SkipListReader.html",
    "title": "Class Lucene40SkipListReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40SkipListReader Implements the skip list reader for the 4.0 posting list format that stores positions and payloads. Inheritance System.Object MultiLevelSkipListReader Lucene40SkipListReader Inherited Members MultiLevelSkipListReader.m_maxNumberOfSkipLevels MultiLevelSkipListReader.m_skipDoc MultiLevelSkipListReader.Doc MultiLevelSkipListReader.SkipTo(Int32) MultiLevelSkipListReader.Dispose() MultiLevelSkipListReader.Dispose(Boolean) MultiLevelSkipListReader.Init(Int64, Int32) Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40SkipListReader : MultiLevelSkipListReader Constructors | Improve this Doc View Source Lucene40SkipListReader(IndexInput, Int32, Int32) Sole constructor. Declaration public Lucene40SkipListReader(IndexInput skipStream, int maxSkipLevels, int skipInterval) Parameters Type Name Description IndexInput skipStream System.Int32 maxSkipLevels System.Int32 skipInterval Properties | Improve this Doc View Source FreqPointer Returns the freq pointer of the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual long FreqPointer { get; } Property Value Type Description System.Int64 | Improve this Doc View Source OffsetLength Returns the offset length (endOffset-startOffset) of the position stored just before the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual int OffsetLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source PayloadLength Returns the payload length of the payload stored just before the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual int PayloadLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ProxPointer Returns the prox pointer of the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual long ProxPointer { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Init(Int64, Int64, Int64, Int32, Boolean, Boolean) Per-term initialization. Declaration public virtual void Init(long skipPointer, long freqBasePointer, long proxBasePointer, int df, bool storesPayloads, bool storesOffsets) Parameters Type Name Description System.Int64 skipPointer System.Int64 freqBasePointer System.Int64 proxBasePointer System.Int32 df System.Boolean storesPayloads System.Boolean storesOffsets | Improve this Doc View Source ReadSkipData(Int32, IndexInput) Declaration protected override int ReadSkipData(int level, IndexInput skipStream) Parameters Type Name Description System.Int32 level IndexInput skipStream Returns Type Description System.Int32 Overrides MultiLevelSkipListReader.ReadSkipData(Int32, IndexInput) | Improve this Doc View Source SeekChild(Int32) Declaration protected override void SeekChild(int level) Parameters Type Name Description System.Int32 level Overrides MultiLevelSkipListReader.SeekChild(Int32) | Improve this Doc View Source SetLastSkipData(Int32) Declaration protected override void SetLastSkipData(int level) Parameters Type Name Description System.Int32 level Overrides MultiLevelSkipListReader.SetLastSkipData(Int32) See Also Lucene40PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsFormat.html",
    "title": "Class Lucene40StoredFieldsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40StoredFieldsFormat Lucene 4.0 Stored Fields Format. Stored fields are represented by two files: The field index, or .fdx file. This is used to find the location within the field data file of the fields of a particular document. Because it contains fixed-length data, this file may be easily randomly accessed. The position of document n 's field data is the Uint64 ( WriteInt64(Int64) ) at n*8 in this file. This contains, for each document, a pointer to its field data, as follows: FieldIndex (.fdx) --> <Header>, <FieldValuesPosition> SegSize Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldValuesPosition --> Uint64 ( WriteInt64(Int64) ) The field data, or .fdt file. This contains the stored fields of each document, as follows: FieldData (.fdt) --> <Header>, <DocFieldData> SegSize Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DocFieldData --> FieldCount, <FieldNum, Bits, Value> FieldCount FieldCount --> VInt ( WriteVInt32(Int32) ) FieldNum --> VInt ( WriteVInt32(Int32) ) Bits --> Byte ( WriteByte(Byte) ) low order bit reserved. second bit is one for fields containing binary data third bit reserved. 4th to 6th bit (mask: 0x7<<3) define the type of a numeric field: all bits in mask are cleared if no numeric field at all 1<<3: Value is Int 2<<3: Value is Long 3<<3: Value is Int as Float (as of 4<<3: Value is Long as Double (as of Value --> String | BinaryValue | Int | Long (depending on Bits) BinaryValue --> ValueSize, < Byte ( WriteByte(Byte) ) >^ValueSize ValueSize --> VInt ( WriteVInt32(Int32) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsFormat Lucene40StoredFieldsFormat Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40StoredFieldsFormat : StoredFieldsFormat Constructors | Improve this Doc View Source Lucene40StoredFieldsFormat() Sole constructor. Declaration public Lucene40StoredFieldsFormat() Methods | Improve this Doc View Source FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Returns Type Description StoredFieldsReader Overrides StoredFieldsFormat.FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source FieldsWriter(Directory, SegmentInfo, IOContext) Declaration public override StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Returns Type Description StoredFieldsWriter Overrides StoredFieldsFormat.FieldsWriter(Directory, SegmentInfo, IOContext)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsReader.html",
    "title": "Class Lucene40StoredFieldsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40StoredFieldsReader Class responsible for access to stored document fields. It uses <segment>.fdt and <segment>.fdx; files. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object StoredFieldsReader Lucene40StoredFieldsReader Implements IDisposable Inherited Members StoredFieldsReader.Dispose() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public sealed class Lucene40StoredFieldsReader : StoredFieldsReader, IDisposable Constructors | Improve this Doc View Source Lucene40StoredFieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Sole constructor. Declaration public Lucene40StoredFieldsReader(Directory d, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory d SegmentInfo si FieldInfos fn IOContext context Properties | Improve this Doc View Source Count Returns number of documents. NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides StoredFieldsReader.CheckIntegrity() | Improve this Doc View Source Clone() Returns a cloned FieldsReader that shares open IndexInput s with the original one. It is the caller's job not to dispose the original FieldsReader until all clones are called (eg, currently SegmentReader manages this logic). Declaration public override object Clone() Returns Type Description System.Object Overrides StoredFieldsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Closes the underlying IndexInput streams. This means that the Fields values will not be accessible. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsReader.Dispose(Boolean) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides StoredFieldsReader.RamBytesUsed() | Improve this Doc View Source RawDocs(Int32[], Int32, Int32) Returns the length in bytes of each raw document in a contiguous range of length numDocs starting with startDocID . Returns the IndexInput (the fieldStream), already seeked to the starting point for startDocID . Declaration public IndexInput RawDocs(int[] lengths, int startDocID, int numDocs) Parameters Type Name Description System.Int32 [] lengths System.Int32 startDocID System.Int32 numDocs Returns Type Description IndexInput | Improve this Doc View Source VisitDocument(Int32, StoredFieldVisitor) Declaration public override void VisitDocument(int n, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 n StoredFieldVisitor visitor Overrides StoredFieldsReader.VisitDocument(Int32, StoredFieldVisitor) Implements IDisposable See Also Lucene40StoredFieldsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsWriter.html",
    "title": "Class Lucene40StoredFieldsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40StoredFieldsWriter Class responsible for writing stored document fields. It uses <segment>.fdt and <segment>.fdx; files. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsWriter Lucene40StoredFieldsWriter Inherited Members StoredFieldsWriter.FinishDocument() StoredFieldsWriter.AddDocument<T1>(IEnumerable<T1>, FieldInfos) StoredFieldsWriter.Dispose() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public sealed class Lucene40StoredFieldsWriter : StoredFieldsWriter Constructors | Improve this Doc View Source Lucene40StoredFieldsWriter(Directory, String, IOContext) Sole constructor. Declaration public Lucene40StoredFieldsWriter(Directory directory, string segment, IOContext context) Parameters Type Name Description Directory directory System.String segment IOContext context Fields | Improve this Doc View Source FIELDS_EXTENSION Extension of stored fields file. Declaration public const string FIELDS_EXTENSION = null Field Value Type Description System.String | Improve this Doc View Source FIELDS_INDEX_EXTENSION Extension of stored fields index file. Declaration public const string FIELDS_INDEX_EXTENSION = null Field Value Type Description System.String Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides StoredFieldsWriter.Abort() | Improve this Doc View Source AddRawDocuments(IndexInput, Int32[], Int32) Bulk write a contiguous series of documents. The lengths array is the length (in bytes) of each raw document. The stream IndexInput is the fieldsStream from which we should bulk-copy all bytes. Declaration public void AddRawDocuments(IndexInput stream, int[] lengths, int numDocs) Parameters Type Name Description IndexInput stream System.Int32 [] lengths System.Int32 numDocs | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides StoredFieldsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source Merge(MergeState) Declaration public override int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 Overrides StoredFieldsWriter.Merge(MergeState) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numStoredFields) Parameters Type Name Description System.Int32 numStoredFields Overrides StoredFieldsWriter.StartDocument(Int32) | Improve this Doc View Source WriteField(FieldInfo, IIndexableField) Declaration public override void WriteField(FieldInfo info, IIndexableField field) Parameters Type Name Description FieldInfo info IIndexableField field Overrides StoredFieldsWriter.WriteField(FieldInfo, IIndexableField) See Also Lucene40StoredFieldsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsFormat.html",
    "title": "Class Lucene40TermVectorsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40TermVectorsFormat Lucene 4.0 Term Vectors format. Term Vector support is an optional on a field by field basis. It consists of 3 files. The Document Index or .tvx file. For each document, this stores the offset into the document data (.tvd) and field data (.tvf) files. DocumentIndex (.tvx) --> Header,<DocumentPosition,FieldPosition> NumDocs Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DocumentPosition --> UInt64 ( WriteInt64(Int64) ) (offset in the .tvd file) FieldPosition --> UInt64 ( WriteInt64(Int64) ) (offset in the .tvf file) The Document or .tvd file. This contains, for each document, the number of fields, a list of the fields with term vector info and finally a list of pointers to the field information in the .tvf (Term Vector Fields) file. The .tvd file is used to map out the fields that have term vectors stored and where the field information is in the .tvf file. Document (.tvd) --> Header,<NumFields, FieldNums, FieldPositions> NumDocs Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) NumFields --> VInt ( WriteVInt32(Int32) ) FieldNums --> <FieldNumDelta> NumFields FieldNumDelta --> VInt ( WriteVInt32(Int32) ) FieldPositions --> <FieldPositionDelta> NumFields-1 FieldPositionDelta --> VLong ( WriteVInt64(Int64) ) The Field or .tvf file. This file contains, for each field that has a term vector stored, a list of the terms, their frequencies and, optionally, position, offset, and payload information. Field (.tvf) --> Header,<NumTerms, Flags, TermFreqs> NumFields Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) NumTerms --> VInt ( WriteVInt32(Int32) ) Flags --> Byte ( WriteByte(Byte) ) TermFreqs --> <TermText, TermFreq, Positions?, PayloadData?, Offsets?> NumTerms TermText --> <PrefixLength, Suffix> PrefixLength --> VInt ( WriteVInt32(Int32) ) Suffix --> String ( WriteString(String) ) TermFreq --> VInt ( WriteVInt32(Int32) ) Positions --> <PositionDelta PayloadLength?> TermFreq PositionDelta --> VInt ( WriteVInt32(Int32) ) PayloadLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> Byte ( WriteByte(Byte) ) NumPayloadBytes Offsets --> <VInt ( WriteVInt32(Int32) ), VInt ( WriteVInt32(Int32) ) > TermFreq Notes: Flags byte stores whether this term vector has position, offset, payload. information stored. Term byte prefixes are shared. The PrefixLength is the number of initial bytes from the previous term which must be pre-pended to a term's suffix in order to form the term's bytes. Thus, if the previous term's text was \"bone\" and the term is \"boy\", the PrefixLength is two and the suffix is \"y\". PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. PayloadData is metadata associated with a term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. PayloadData encodes the concatenated bytes for all of a terms occurrences. Offsets are stored as delta encoded VInts. The first VInt is the startOffset, the second is the endOffset. Inheritance System.Object TermVectorsFormat Lucene40TermVectorsFormat Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40TermVectorsFormat : TermVectorsFormat Constructors | Improve this Doc View Source Lucene40TermVectorsFormat() Sole constructor. Declaration public Lucene40TermVectorsFormat() Methods | Improve this Doc View Source VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos IOContext context Returns Type Description TermVectorsReader Overrides TermVectorsFormat.VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source VectorsWriter(Directory, SegmentInfo, IOContext) Declaration public override TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo IOContext context Returns Type Description TermVectorsWriter Overrides TermVectorsFormat.VectorsWriter(Directory, SegmentInfo, IOContext)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsReader.html",
    "title": "Class Lucene40TermVectorsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40TermVectorsReader Lucene 4.0 Term Vectors reader. It reads .tvd, .tvf, and .tvx files. Inheritance System.Object TermVectorsReader Lucene40TermVectorsReader Implements IDisposable Inherited Members TermVectorsReader.Dispose() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40TermVectorsReader : TermVectorsReader, IDisposable Constructors | Improve this Doc View Source Lucene40TermVectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Sole constructor. Declaration public Lucene40TermVectorsReader(Directory d, SegmentInfo si, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory d SegmentInfo si FieldInfos fieldInfos IOContext context Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides TermVectorsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides TermVectorsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsReader.Dispose(Boolean) | Improve this Doc View Source Get(Int32) Declaration public override Fields Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides TermVectorsReader.Get(Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermVectorsReader.RamBytesUsed() Implements IDisposable See Also Lucene40TermVectorsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsWriter.html",
    "title": "Class Lucene40TermVectorsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40TermVectorsWriter Lucene 4.0 Term Vectors writer. It writes .tvd, .tvf, and .tvx files. Inheritance System.Object TermVectorsWriter Lucene40TermVectorsWriter Inherited Members TermVectorsWriter.FinishField() TermVectorsWriter.AddAllDocVectors(Fields, MergeState) TermVectorsWriter.Dispose() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public sealed class Lucene40TermVectorsWriter : TermVectorsWriter Constructors | Improve this Doc View Source Lucene40TermVectorsWriter(Directory, String, IOContext) Sole constructor. Declaration public Lucene40TermVectorsWriter(Directory directory, string segment, IOContext context) Parameters Type Name Description Directory directory System.String segment IOContext context Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Overrides TermVectorsWriter.Comparer Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides TermVectorsWriter.Abort() | Improve this Doc View Source AddPosition(Int32, Int32, Int32, BytesRef) Declaration public override void AddPosition(int position, int startOffset, int endOffset, BytesRef payload) Parameters Type Name Description System.Int32 position System.Int32 startOffset System.Int32 endOffset BytesRef payload Overrides TermVectorsWriter.AddPosition(Int32, Int32, Int32, BytesRef) | Improve this Doc View Source AddProx(Int32, DataInput, DataInput) Declaration public override void AddProx(int numProx, DataInput positions, DataInput offsets) Parameters Type Name Description System.Int32 numProx DataInput positions DataInput offsets Overrides TermVectorsWriter.AddProx(Int32, DataInput, DataInput) | Improve this Doc View Source Dispose(Boolean) Close all streams. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides TermVectorsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source FinishDocument() Declaration public override void FinishDocument() Overrides TermVectorsWriter.FinishDocument() | Improve this Doc View Source FinishTerm() Declaration public override void FinishTerm() Overrides TermVectorsWriter.FinishTerm() | Improve this Doc View Source Merge(MergeState) Declaration public override int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 Overrides TermVectorsWriter.Merge(MergeState) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numVectorFields) Parameters Type Name Description System.Int32 numVectorFields Overrides TermVectorsWriter.StartDocument(Int32) | Improve this Doc View Source StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) Declaration public override void StartField(FieldInfo info, int numTerms, bool positions, bool offsets, bool payloads) Parameters Type Name Description FieldInfo info System.Int32 numTerms System.Boolean positions System.Boolean offsets System.Boolean payloads Overrides TermVectorsWriter.StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) | Improve this Doc View Source StartTerm(BytesRef, Int32) Declaration public override void StartTerm(BytesRef term, int freq) Parameters Type Name Description BytesRef term System.Int32 freq Overrides TermVectorsWriter.StartTerm(BytesRef, Int32) See Also Lucene40TermVectorsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene41 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene41 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene 4.1 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .doc Contains the list of docs which contain each term along with frequency Positions .pos Stores position information about where a term occurs in the index Payloads .pay Stores additional per-position metadata information such as character offsets and user payloads Norms .nrm.cfs, .nrm.cfe Encodes length and boost factors for docs and fields Per-Document Values .dv.cfs, .dv.cfe Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. In version 4.1, the format of the postings list changed to use either of FOR compression or variable-byte encoding, depending upon the frequency of the term. Terms appearing only once were changed to inline directly into the term dictionary. Stored fields are compressed by default. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene41Codec Implements the Lucene 4.1 index format, with configurable per-field postings formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene41 package documentation for file format details. @lucene.experimental Lucene41PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene41PostingsFormat Lucene 4.1 postings format, which encodes postings in packed integer blocks for fast decode. NOTE : this format is still experimental and subject to change without backwards compatibility. Basic idea: Packed Blocks and VInt Blocks : In packed blocks, integers are encoded with the same bit width packed format ( PackedInt32s ): the block size (i.e. number of integers inside block) is fixed (currently 128). Additionally blocks that are all the same value are encoded in an optimized way. In VInt blocks, integers are encoded as VInt ( WriteVInt32(Int32) ): the block size is variable. Block structure : When the postings are long enough, Lucene41PostingsFormat will try to encode most integer data as a packed block. Take a term with 259 documents as an example, the first 256 document ids are encoded as two packed blocks, while the remaining 3 are encoded as one VInt block. Different kinds of data are always encoded separately into different packed blocks, but may possibly be interleaved into the same VInt block. This strategy is applied to pairs: <document number, frequency>, <position, payload length>, <position, offset start, offset length>, and <position, payload length, offsetstart, offset length>. Skipdata settings : The structure of skip table is quite similar to previous version of Lucene. Skip interval is the same as block size, and each skip entry points to the beginning of each block. However, for the first block, skip data is omitted. Positions, Payloads, and Offsets : A position is an integer indicating where the term occurs within one document. A payload is a blob of metadata associated with current position. An offset is a pair of integers indicating the tokenized start/end offsets for given term in current position: it is essentially a specialized payload. When payloads and offsets are not omitted, numPositions==numPayloads==numOffsets (assuming a null payload contributes one count). As mentioned in block structure, it is possible to encode these three either combined or separately. In all cases, payloads and offsets are stored together. When encoded as a packed block, position data is separated out as .pos, while payloads and offsets are encoded in .pay (payload metadata will also be stored directly in .pay). When encoded as VInt blocks, all these three are stored interleaved into the .pos (so is payload metadata). With this strategy, the majority of payload and offset data will be outside .pos file. So for queries that require only position data, running on a full index with payloads and offsets, this reduces disk pre-fetches. Files and detailed format: .tim : Term Dictionary .tip : Term Index .doc : Frequencies and Skip Data .pos : Positions .pay : Payloads and Offsets Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and pointers to the frequencies, positions, payload and skip data in the .doc, .pos, and .pay files. See BlockTreeTermsWriter for more details on the format. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the PostingsHeader and TermMetadata sections described here: PostingsHeader --> Header, PackedBlockSize TermMetadata --> (DocFPDelta|SingletonDocID), PosFPDelta?, PosVIntBlockFPDelta?, PayFPDelta?, SkipFPDelta? Header, --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedBlockSize, SingletonDocID --> VInt ( WriteVInt32(Int32) ) DocFPDelta, PosFPDelta, PayFPDelta, PosVIntBlockFPDelta, SkipFPDelta --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the postings. PackedBlockSize is the fixed block size for packed blocks. In packed block, bit width is determined by the largest integer. Smaller block size result in smaller variance among width of integers hence smaller indexes. Larger block size result in more efficient bulk i/o hence better acceleration. This value should always be a multiple of 64, currently fixed as 128 as a tradeoff. It is also the skip interval used to accelerate Advance(Int32) . DocFPDelta determines the position of this term's TermFreqs within the .doc file. In particular, it is the difference of file offset between this term's data and previous term's data (or zero, for the first term in the block).On disk it is stored as the difference from previous value in sequence. PosFPDelta determines the position of this term's TermPositions within the .pos file. While PayFPDelta determines the position of this term's <TermPayloads, TermOffsets?> within the .pay file. Similar to DocFPDelta, it is the difference between two file positions (or neglected, for fields that omit payloads and offsets). PosVIntBlockFPDelta determines the position of this term's last TermPosition in last pos packed block within the .pos file. It is synonym for PayVIntBlockFPDelta or OffsetVIntBlockFPDelta. This is actually used to indicate whether it is necessary to load following payloads and offsets from .pos instead of .pay. Every time a new block of positions are to be loaded, the PostingsReader will use this value to check whether current block is packed format or VInt. When packed format, payloads and offsets are fetched from .pay, otherwise from .pos. (this value is neglected when total number of positions i.e. totalTermFreq is less or equal to PackedBlockSize). SkipFPDelta determines the position of this term's SkipData within the .doc file. In particular, it is the length of the TermFreq data. SkipDelta is only stored if DocFreq is not smaller than SkipMinimum (i.e. 128 in Lucene41PostingsFormat). SingletonDocID is an optimization when a term only appears in one document. In this case, instead of writing a file pointer to the .doc file (DocFPDelta), and then a VIntBlock at that location, the single document ID is written to the term dictionary. Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. See BlockTreeTermsWriter for more details on the format. Frequencies and Skip Data The .doc file contains the lists of documents which contain each term, along with the frequency of the term in that document (except when frequencies are omitted: DOCS_ONLY ). It also saves skip data to the beginning of each packed or VInt block, when the length of document list is larger than packed block size. docFile(.doc) --> Header, <TermFreqs, SkipData?> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermFreqs --> <PackedBlock> PackedDocBlockNum , VIntBlock? PackedBlock --> PackedDocDeltaBlock, PackedFreqBlock? VIntBlock --> <DocDelta[, Freq?]> DocFreq-PackedBlockSize PackedDocBlockNum SkipData --> <<SkipLevelLength, SkipLevel> NumSkipLevels-1 , SkipLevel>, SkipDatum? SkipLevel --> <SkipDatum> TrimmedDocFreq/(PackedBlockSize^(Level + 1)) SkipDatum --> DocSkip, DocFPSkip, <PosFPSkip, PosBlockOffset, PayLength?, PayFPSkip?>?, SkipChildLevelPointer? PackedDocDeltaBlock, PackedFreqBlock --> PackedInts ( PackedInt32s ) DocDelta, Freq, DocSkip, DocFPSkip, PosFPSkip, PosBlockOffset, PayByteUpto, PayFPSkip --> VInt ( WriteVInt32(Int32) ) SkipChildLevelPointer --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: PackedDocDeltaBlock is theoretically generated from two steps: Calculate the difference between each document number and previous one, and get a d-gaps list (for the first document, use absolute value); For those d-gaps from first one to PackedDocBlockNumPackedBlockSize th , separately encode as packed blocks. If frequencies are not omitted, PackedFreqBlock will be generated without d-gap step. VIntBlock stores remaining d-gaps (along with frequencies when possible) with a format that encodes DocDelta and Freq: DocDelta: if frequencies are indexed, this determines both the document number and the frequency. In particular, DocDelta/2 is the difference between this document number and the previous document number (or zero when this is the first document in a TermFreqs). When DocDelta is odd, the frequency is one. When DocDelta is even, the frequency is read as another VInt. If frequencies are omitted, DocDelta contains the gap (not multiplied by 2) between document numbers and no frequency information is stored. For example, the TermFreqs for a term which occurs once in document seven and three times in document eleven, with frequencies indexed, would be the following sequence of VInts: 15, 8, 3 If frequencies were omitted ( DOCS_ONLY ) it would be this sequence of VInts instead: 7,4 PackedDocBlockNum is the number of packed blocks for current term's docids or frequencies. In particular, PackedDocBlockNum = floor(DocFreq/PackedBlockSize) TrimmedDocFreq = DocFreq % PackedBlockSize == 0 ? DocFreq - 1 : DocFreq. We use this trick since the definition of skip entry is a little different from base interface. In MultiLevelSkipListWriter , skip data is assumed to be saved for skipInterval th , 2 skipInterval th ... posting in the list. However, in Lucene41PostingsFormat, the skip data is saved for skipInterval+1 th , 2 skipInterval+1 th ... posting (skipInterval==PackedBlockSize in this case). When DocFreq is multiple of PackedBlockSize, MultiLevelSkipListWriter will expect one more skip data than Lucene41SkipWriter. SkipDatum is the metadata of one skip entry. For the first block (no matter packed or VInt), it is omitted. DocSkip records the document number of every PackedBlockSize th document number in the postings (i.e. last document number in each packed block). On disk it is stored as the difference from previous value in the sequence. DocFPSkip records the file offsets of each block (excluding )posting at PackedBlockSize+1 th , 2*PackedBlockSize+1 th ... , in DocFile. The file offsets are relative to the start of current term's TermFreqs. On disk it is also stored as the difference from previous SkipDatum in the sequence. Since positions and payloads are also block encoded, the skip should skip to related block first, then fetch the values according to in-block offset. PosFPSkip and PayFPSkip record the file offsets of related block in .pos and .pay, respectively. While PosBlockOffset indicates which value to fetch inside the related block (PayBlockOffset is unnecessary since it is always equal to PosBlockOffset). Same as DocFPSkip, the file offsets are relative to the start of current term's TermFreqs, and stored as a difference sequence. PayByteUpto indicates the start offset of the current payload. It is equivalent to the sum of the payload lengths in the current block up to PosBlockOffset Positions The .pos file contains the lists of positions that each term occurs at within documents. It also sometimes stores part of payloads and offsets for speedup. PosFile(.pos) --> Header, <TermPositions> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPositions --> <PackedPosDeltaBlock> PackedPosBlockNum , VIntBlock? VIntBlock --> <PositionDelta[, PayloadLength?], PayloadData?, OffsetDelta?, OffsetLength?> PosVIntCount PackedPosDeltaBlock --> PackedInts ( PackedInt32s ) PositionDelta, OffsetDelta, OffsetLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> byte ( WriteByte(Byte) ) PayLength Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: TermPositions are order by term (terms are implicit, from the term dictionary), and position values for each term document pair are incremental, and ordered by document number. PackedPosBlockNum is the number of packed blocks for current term's positions, payloads or offsets. In particular, PackedPosBlockNum = floor(totalTermFreq/PackedBlockSize) PosVIntCount is the number of positions encoded as VInt format. In particular, PosVIntCount = totalTermFreq - PackedPosBlockNum*PackedBlockSize The procedure how PackedPosDeltaBlock is generated is the same as PackedDocDeltaBlock in chapter Frequencies and Skip Data . PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. For example, the TermPositions for a term which occurs as the fourth term in one document, and as the fifth and ninth term in a subsequent document, would be the following sequence of VInts (payloads disabled): 4, 5, 4 PayloadData is metadata associated with the current term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. OffsetDelta/2 is the difference between this position's startOffset from the previous occurrence (or zero, if this is the first occurrence in this document). If OffsetDelta is odd, then the length (endOffset-startOffset) differs from the previous occurrence and an OffsetLength follows. Offset data is only written for DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Payloads and Offsets The .pay file will store payloads and offsets associated with certain term-document positions. Some payloads and offsets will be separated out into .pos file, for performance reasons. PayFile(.pay): --> Header, <TermPayloads, TermOffsets?> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPayloads --> <PackedPayLengthBlock, SumPayLength, PayData> PackedPayBlockNum TermOffsets --> <PackedOffsetStartDeltaBlock, PackedOffsetLengthBlock> PackedPayBlockNum PackedPayLengthBlock, PackedOffsetStartDeltaBlock, PackedOffsetLengthBlock --> PackedInts ( PackedInt32s ) SumPayLength --> VInt ( WriteVInt32(Int32) ) PayData --> byte ( WriteByte(Byte) ) SumPayLength Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: The order of TermPayloads/TermOffsets will be the same as TermPositions, note that part of payload/offsets are stored in .pos. The procedure how PackedPayLengthBlock and PackedOffsetLengthBlock are generated is the same as PackedFreqBlock in chapter Frequencies and Skip Data . While PackedStartDeltaBlock follows a same procedure as PackedDocDeltaBlock. PackedPayBlockNum is always equal to PackedPosBlockNum, for the same term. It is also synonym for PackedOffsetBlockNum. SumPayLength is the total length of payloads written within one block, should be the sum of PayLengths in one packed block. PayLength in PackedPayLengthBlock is the length of each payload associated with the current position. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene41PostingsReader Concrete class that reads docId(maybe frq,pos,offset,payloads) list with postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene41PostingsWriter Concrete class that writes docId(maybe frq,pos,offset,payloads) list with postings format. Postings list for each term will be stored separately. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene41PostingsWriter.Int32BlockTermState NOTE: This was IntBlockTermState in Lucene Lucene41StoredFieldsFormat Lucene 4.1 stored fields format. Principle This StoredFieldsFormat compresses blocks of 16KB of documents in order to improve the compression ratio compared to document-level compression. It uses the LZ4 compression algorithm, which is fast to compress and very fast to decompress data. Although the compression method that is used focuses more on speed than on compression ratio, it should provide interesting compression ratios for redundant inputs (such as log files, HTML or plain text). File formats Stored fields are represented by two files: A fields data file (extension .fdt ). this file stores a compact representation of documents in compressed blocks of 16KB or more. When writing a segment, documents are appended to an in-memory byte[] buffer. When its size reaches 16KB or more, some metadata about the documents is flushed to disk, immediately followed by a compressed representation of the buffer using the LZ4 compression format . Here is a more detailed description of the field data file format: FieldData (.fdt) --> <Header>, PackedIntsVersion, <Chunk> ChunkCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedIntsVersion --> VERSION_CURRENT as a VInt ( WriteVInt32(Int32) ) ChunkCount is not known in advance and is the number of chunks necessary to store all document of the segment Chunk --> DocBase, ChunkDocs, DocFieldCounts, DocLengths, <CompressedDocs> DocBase --> the ID of the first document of the chunk as a VInt ( WriteVInt32(Int32) ) ChunkDocs --> the number of documents in the chunk as a VInt ( WriteVInt32(Int32) ) DocFieldCounts --> the number of stored fields of every document in the chunk, encoded as followed: if chunkDocs=1, the unique value is encoded as a VInt ( WriteVInt32(Int32) ) else read a VInt ( WriteVInt32(Int32) ) (let's call it bitsRequired ) if bitsRequired is 0 then all values are equal, and the common value is the following VInt ( WriteVInt32(Int32) ) else bitsRequired is the number of bits required to store any value, and values are stored in a packed ( PackedInt32s ) array where every value is stored on exactly bitsRequired bits DocLengths --> the lengths of all documents in the chunk, encoded with the same method as DocFieldCounts CompressedDocs --> a compressed representation of <Docs> using the LZ4 compression format Docs --> <Doc> ChunkDocs Doc --> <FieldNumAndType, Value> DocFieldCount FieldNumAndType --> a VLong ( WriteVInt64(Int64) ), whose 3 last bits are Type and other bits are FieldNum Type --> 0: Value is String 1: Value is BinaryValue 2: Value is Int 3: Value is Float 4: Value is Long 5: Value is Double 6, 7: unused FieldNum --> an ID of the field Value --> String ( WriteString(String) ) | BinaryValue | Int | Float | Long | Double depending on Type BinaryValue --> ValueLength <Byte> ValueLength Notes If documents are larger than 16KB then chunks will likely contain only one document. However, documents can never spread across several chunks (all fields of a single document are in the same chunk). When at least one document in a chunk is large enough so that the chunk is larger than 32KB, the chunk will actually be compressed in several LZ4 blocks of 16KB. this allows StoredFieldVisitor s which are only interested in the first fields of a document to not have to decompress 10MB of data if the document is 10MB, but only 16KB. Given that the original lengths are written in the metadata of the chunk, the decompressor can leverage this information to stop decoding as soon as enough data has been decompressed. In case documents are incompressible, CompressedDocs will be less than 0.5% larger than Docs. A fields index file (extension .fdx ). FieldsIndex (.fdx) --> <Header>, <ChunkIndex> Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) ChunkIndex: See CompressingStoredFieldsIndexWriter Known limitations This StoredFieldsFormat does not support individual documents larger than ( 2 31 - 2 14 ) bytes. In case this is a problem, you should use another format, such as Lucene40StoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41Codec.html",
    "title": "Class Lucene41Codec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41Codec Implements the Lucene 4.1 index format, with configurable per-field postings formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene41 package documentation for file format details. @lucene.experimental Inheritance System.Object Codec Lucene41Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public class Lucene41Codec : Codec Constructors | Improve this Doc View Source Lucene41Codec() Sole constructor. Declaration public Lucene41Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene41\" Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsBaseFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsBaseFormat.html",
    "title": "Class Lucene41PostingsBaseFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsBaseFormat Lucene41PostingsBaseFormat Inherited Members PostingsBaseFormat.Name Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Lucene41PostingsBaseFormat : PostingsBaseFormat Constructors | Improve this Doc View Source Lucene41PostingsBaseFormat() Sole constructor. Declaration public Lucene41PostingsBaseFormat() Methods | Improve this Doc View Source PostingsReaderBase(SegmentReadState) Declaration public override PostingsReaderBase PostingsReaderBase(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description PostingsReaderBase Overrides PostingsBaseFormat.PostingsReaderBase(SegmentReadState) | Improve this Doc View Source PostingsWriterBase(SegmentWriteState) Declaration public override PostingsWriterBase PostingsWriterBase(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description PostingsWriterBase Overrides PostingsBaseFormat.PostingsWriterBase(SegmentWriteState)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsFormat.html",
    "title": "Class Lucene41PostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41PostingsFormat Lucene 4.1 postings format, which encodes postings in packed integer blocks for fast decode. NOTE : this format is still experimental and subject to change without backwards compatibility. Basic idea: Packed Blocks and VInt Blocks : In packed blocks, integers are encoded with the same bit width packed format ( PackedInt32s ): the block size (i.e. number of integers inside block) is fixed (currently 128). Additionally blocks that are all the same value are encoded in an optimized way. In VInt blocks, integers are encoded as VInt ( WriteVInt32(Int32) ): the block size is variable. Block structure : When the postings are long enough, Lucene41PostingsFormat will try to encode most integer data as a packed block. Take a term with 259 documents as an example, the first 256 document ids are encoded as two packed blocks, while the remaining 3 are encoded as one VInt block. Different kinds of data are always encoded separately into different packed blocks, but may possibly be interleaved into the same VInt block. This strategy is applied to pairs: <document number, frequency>, <position, payload length>, <position, offset start, offset length>, and <position, payload length, offsetstart, offset length>. Skipdata settings : The structure of skip table is quite similar to previous version of Lucene. Skip interval is the same as block size, and each skip entry points to the beginning of each block. However, for the first block, skip data is omitted. Positions, Payloads, and Offsets : A position is an integer indicating where the term occurs within one document. A payload is a blob of metadata associated with current position. An offset is a pair of integers indicating the tokenized start/end offsets for given term in current position: it is essentially a specialized payload. When payloads and offsets are not omitted, numPositions==numPayloads==numOffsets (assuming a null payload contributes one count). As mentioned in block structure, it is possible to encode these three either combined or separately. In all cases, payloads and offsets are stored together. When encoded as a packed block, position data is separated out as .pos, while payloads and offsets are encoded in .pay (payload metadata will also be stored directly in .pay). When encoded as VInt blocks, all these three are stored interleaved into the .pos (so is payload metadata). With this strategy, the majority of payload and offset data will be outside .pos file. So for queries that require only position data, running on a full index with payloads and offsets, this reduces disk pre-fetches. Files and detailed format: .tim : Term Dictionary .tip : Term Index .doc : Frequencies and Skip Data .pos : Positions .pay : Payloads and Offsets Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and pointers to the frequencies, positions, payload and skip data in the .doc, .pos, and .pay files. See BlockTreeTermsWriter for more details on the format. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the PostingsHeader and TermMetadata sections described here: PostingsHeader --> Header, PackedBlockSize TermMetadata --> (DocFPDelta|SingletonDocID), PosFPDelta?, PosVIntBlockFPDelta?, PayFPDelta?, SkipFPDelta? Header, --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedBlockSize, SingletonDocID --> VInt ( WriteVInt32(Int32) ) DocFPDelta, PosFPDelta, PayFPDelta, PosVIntBlockFPDelta, SkipFPDelta --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the postings. PackedBlockSize is the fixed block size for packed blocks. In packed block, bit width is determined by the largest integer. Smaller block size result in smaller variance among width of integers hence smaller indexes. Larger block size result in more efficient bulk i/o hence better acceleration. This value should always be a multiple of 64, currently fixed as 128 as a tradeoff. It is also the skip interval used to accelerate Advance(Int32) . DocFPDelta determines the position of this term's TermFreqs within the .doc file. In particular, it is the difference of file offset between this term's data and previous term's data (or zero, for the first term in the block).On disk it is stored as the difference from previous value in sequence. PosFPDelta determines the position of this term's TermPositions within the .pos file. While PayFPDelta determines the position of this term's <TermPayloads, TermOffsets?> within the .pay file. Similar to DocFPDelta, it is the difference between two file positions (or neglected, for fields that omit payloads and offsets). PosVIntBlockFPDelta determines the position of this term's last TermPosition in last pos packed block within the .pos file. It is synonym for PayVIntBlockFPDelta or OffsetVIntBlockFPDelta. This is actually used to indicate whether it is necessary to load following payloads and offsets from .pos instead of .pay. Every time a new block of positions are to be loaded, the PostingsReader will use this value to check whether current block is packed format or VInt. When packed format, payloads and offsets are fetched from .pay, otherwise from .pos. (this value is neglected when total number of positions i.e. totalTermFreq is less or equal to PackedBlockSize). SkipFPDelta determines the position of this term's SkipData within the .doc file. In particular, it is the length of the TermFreq data. SkipDelta is only stored if DocFreq is not smaller than SkipMinimum (i.e. 128 in Lucene41PostingsFormat). SingletonDocID is an optimization when a term only appears in one document. In this case, instead of writing a file pointer to the .doc file (DocFPDelta), and then a VIntBlock at that location, the single document ID is written to the term dictionary. Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. See BlockTreeTermsWriter for more details on the format. Frequencies and Skip Data The .doc file contains the lists of documents which contain each term, along with the frequency of the term in that document (except when frequencies are omitted: DOCS_ONLY ). It also saves skip data to the beginning of each packed or VInt block, when the length of document list is larger than packed block size. docFile(.doc) --> Header, <TermFreqs, SkipData?> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermFreqs --> <PackedBlock> PackedDocBlockNum , VIntBlock? PackedBlock --> PackedDocDeltaBlock, PackedFreqBlock? VIntBlock --> <DocDelta[, Freq?]> DocFreq-PackedBlockSize PackedDocBlockNum SkipData --> <<SkipLevelLength, SkipLevel> NumSkipLevels-1 , SkipLevel>, SkipDatum? SkipLevel --> <SkipDatum> TrimmedDocFreq/(PackedBlockSize^(Level + 1)) SkipDatum --> DocSkip, DocFPSkip, <PosFPSkip, PosBlockOffset, PayLength?, PayFPSkip?>?, SkipChildLevelPointer? PackedDocDeltaBlock, PackedFreqBlock --> PackedInts ( PackedInt32s ) DocDelta, Freq, DocSkip, DocFPSkip, PosFPSkip, PosBlockOffset, PayByteUpto, PayFPSkip --> VInt ( WriteVInt32(Int32) ) SkipChildLevelPointer --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: PackedDocDeltaBlock is theoretically generated from two steps: Calculate the difference between each document number and previous one, and get a d-gaps list (for the first document, use absolute value); For those d-gaps from first one to PackedDocBlockNumPackedBlockSize th , separately encode as packed blocks. If frequencies are not omitted, PackedFreqBlock will be generated without d-gap step. VIntBlock stores remaining d-gaps (along with frequencies when possible) with a format that encodes DocDelta and Freq: DocDelta: if frequencies are indexed, this determines both the document number and the frequency. In particular, DocDelta/2 is the difference between this document number and the previous document number (or zero when this is the first document in a TermFreqs). When DocDelta is odd, the frequency is one. When DocDelta is even, the frequency is read as another VInt. If frequencies are omitted, DocDelta contains the gap (not multiplied by 2) between document numbers and no frequency information is stored. For example, the TermFreqs for a term which occurs once in document seven and three times in document eleven, with frequencies indexed, would be the following sequence of VInts: 15, 8, 3 If frequencies were omitted ( DOCS_ONLY ) it would be this sequence of VInts instead: 7,4 PackedDocBlockNum is the number of packed blocks for current term's docids or frequencies. In particular, PackedDocBlockNum = floor(DocFreq/PackedBlockSize) TrimmedDocFreq = DocFreq % PackedBlockSize == 0 ? DocFreq - 1 : DocFreq. We use this trick since the definition of skip entry is a little different from base interface. In MultiLevelSkipListWriter , skip data is assumed to be saved for skipInterval th , 2 skipInterval th ... posting in the list. However, in Lucene41PostingsFormat, the skip data is saved for skipInterval+1 th , 2 skipInterval+1 th ... posting (skipInterval==PackedBlockSize in this case). When DocFreq is multiple of PackedBlockSize, MultiLevelSkipListWriter will expect one more skip data than Lucene41SkipWriter. SkipDatum is the metadata of one skip entry. For the first block (no matter packed or VInt), it is omitted. DocSkip records the document number of every PackedBlockSize th document number in the postings (i.e. last document number in each packed block). On disk it is stored as the difference from previous value in the sequence. DocFPSkip records the file offsets of each block (excluding )posting at PackedBlockSize+1 th , 2*PackedBlockSize+1 th ... , in DocFile. The file offsets are relative to the start of current term's TermFreqs. On disk it is also stored as the difference from previous SkipDatum in the sequence. Since positions and payloads are also block encoded, the skip should skip to related block first, then fetch the values according to in-block offset. PosFPSkip and PayFPSkip record the file offsets of related block in .pos and .pay, respectively. While PosBlockOffset indicates which value to fetch inside the related block (PayBlockOffset is unnecessary since it is always equal to PosBlockOffset). Same as DocFPSkip, the file offsets are relative to the start of current term's TermFreqs, and stored as a difference sequence. PayByteUpto indicates the start offset of the current payload. It is equivalent to the sum of the payload lengths in the current block up to PosBlockOffset Positions The .pos file contains the lists of positions that each term occurs at within documents. It also sometimes stores part of payloads and offsets for speedup. PosFile(.pos) --> Header, <TermPositions> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPositions --> <PackedPosDeltaBlock> PackedPosBlockNum , VIntBlock? VIntBlock --> <PositionDelta[, PayloadLength?], PayloadData?, OffsetDelta?, OffsetLength?> PosVIntCount PackedPosDeltaBlock --> PackedInts ( PackedInt32s ) PositionDelta, OffsetDelta, OffsetLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> byte ( WriteByte(Byte) ) PayLength Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: TermPositions are order by term (terms are implicit, from the term dictionary), and position values for each term document pair are incremental, and ordered by document number. PackedPosBlockNum is the number of packed blocks for current term's positions, payloads or offsets. In particular, PackedPosBlockNum = floor(totalTermFreq/PackedBlockSize) PosVIntCount is the number of positions encoded as VInt format. In particular, PosVIntCount = totalTermFreq - PackedPosBlockNum*PackedBlockSize The procedure how PackedPosDeltaBlock is generated is the same as PackedDocDeltaBlock in chapter Frequencies and Skip Data . PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. For example, the TermPositions for a term which occurs as the fourth term in one document, and as the fifth and ninth term in a subsequent document, would be the following sequence of VInts (payloads disabled): 4, 5, 4 PayloadData is metadata associated with the current term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. OffsetDelta/2 is the difference between this position's startOffset from the previous occurrence (or zero, if this is the first occurrence in this document). If OffsetDelta is odd, then the length (endOffset-startOffset) differs from the previous occurrence and an OffsetLength follows. Offset data is only written for DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Payloads and Offsets The .pay file will store payloads and offsets associated with certain term-document positions. Some payloads and offsets will be separated out into .pos file, for performance reasons. PayFile(.pay): --> Header, <TermPayloads, TermOffsets?> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPayloads --> <PackedPayLengthBlock, SumPayLength, PayData> PackedPayBlockNum TermOffsets --> <PackedOffsetStartDeltaBlock, PackedOffsetLengthBlock> PackedPayBlockNum PackedPayLengthBlock, PackedOffsetStartDeltaBlock, PackedOffsetLengthBlock --> PackedInts ( PackedInt32s ) SumPayLength --> VInt ( WriteVInt32(Int32) ) PayData --> byte ( WriteByte(Byte) ) SumPayLength Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: The order of TermPayloads/TermOffsets will be the same as TermPositions, note that part of payload/offsets are stored in .pos. The procedure how PackedPayLengthBlock and PackedOffsetLengthBlock are generated is the same as PackedFreqBlock in chapter Frequencies and Skip Data . While PackedStartDeltaBlock follows a same procedure as PackedDocDeltaBlock. PackedPayBlockNum is always equal to PackedPosBlockNum, for the same term. It is also synonym for PackedOffsetBlockNum. SumPayLength is the total length of payloads written within one block, should be the sum of PayLengths in one packed block. PayLength in PackedPayLengthBlock is the length of each payload associated with the current position. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat Lucene41PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Lucene41PostingsFormat : PostingsFormat Constructors | Improve this Doc View Source Lucene41PostingsFormat() Creates Lucene41PostingsFormat with default settings. Declaration public Lucene41PostingsFormat() | Improve this Doc View Source Lucene41PostingsFormat(Int32, Int32) Creates Lucene41PostingsFormat with custom values for minTermBlockSize and maxTermBlockSize passed to block terms dictionary. Declaration public Lucene41PostingsFormat(int minTermBlockSize, int maxTermBlockSize) Parameters Type Name Description System.Int32 minTermBlockSize System.Int32 maxTermBlockSize See Also BlockTreeTermsWriter(SegmentWriteState, PostingsWriterBase, Int32, Int32) Fields | Improve this Doc View Source BLOCK_SIZE Fixed packed block size, number of integers encoded in a single packed block. Declaration public static int BLOCK_SIZE Field Value Type Description System.Int32 | Improve this Doc View Source DOC_EXTENSION Filename extension for document number, frequencies, and skip data. See chapter: Frequencies and Skip Data Declaration public const string DOC_EXTENSION = null Field Value Type Description System.String | Improve this Doc View Source PAY_EXTENSION Filename extension for payloads and offsets. See chapter: Payloads and Offsets Declaration public const string PAY_EXTENSION = null Field Value Type Description System.String | Improve this Doc View Source POS_EXTENSION Filename extension for positions. See chapter: Positions Declaration public const string POS_EXTENSION = null Field Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsReader.html",
    "title": "Class Lucene41PostingsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41PostingsReader Concrete class that reads docId(maybe frq,pos,offset,payloads) list with postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsReaderBase Lucene41PostingsReader Inherited Members PostingsReaderBase.Dispose() Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Lucene41PostingsReader : PostingsReaderBase Constructors | Improve this Doc View Source Lucene41PostingsReader(Directory, FieldInfos, SegmentInfo, IOContext, String) Sole constructor. Declaration public Lucene41PostingsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo segmentInfo, IOContext ioContext, string segmentSuffix) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo segmentInfo IOContext ioContext System.String segmentSuffix Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides PostingsReaderBase.CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Declaration public override void DecodeTerm(long[] longs, DataInput in, FieldInfo fieldInfo, BlockTermState termState, bool absolute) Parameters Type Name Description System.Int64 [] longs DataInput in FieldInfo fieldInfo BlockTermState termState System.Boolean absolute Overrides PostingsReaderBase.DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsReaderBase.Dispose(Boolean) | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides PostingsReaderBase.Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides PostingsReaderBase.DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Init(IndexInput) Declaration public override void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn Overrides PostingsReaderBase.Init(IndexInput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsReaderBase.NewTermState() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PostingsReaderBase.RamBytesUsed() See Also Lucene.Net.Codecs.Lucene41.Lucene41SkipReader"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsWriter.html",
    "title": "Class Lucene41PostingsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41PostingsWriter Concrete class that writes docId(maybe frq,pos,offset,payloads) list with postings format. Postings list for each term will be stored separately. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsConsumer PostingsWriterBase Lucene41PostingsWriter Implements IDisposable Inherited Members PostingsWriterBase.Dispose() PostingsConsumer.Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Lucene41PostingsWriter : PostingsWriterBase, IDisposable Constructors | Improve this Doc View Source Lucene41PostingsWriter(SegmentWriteState) Creates a postings writer with PackedInts.COMPACT Declaration public Lucene41PostingsWriter(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state | Improve this Doc View Source Lucene41PostingsWriter(SegmentWriteState, Single) Creates a postings writer with the specified PackedInts overhead ratio Declaration public Lucene41PostingsWriter(SegmentWriteState state, float acceptableOverheadRatio) Parameters Type Name Description SegmentWriteState state System.Single acceptableOverheadRatio Methods | Improve this Doc View Source AddPosition(Int32, BytesRef, Int32, Int32) Add a new position & payload Declaration public override void AddPosition(int position, BytesRef payload, int startOffset, int endOffset) Parameters Type Name Description System.Int32 position BytesRef payload System.Int32 startOffset System.Int32 endOffset Overrides PostingsConsumer.AddPosition(Int32, BytesRef, Int32, Int32) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsWriterBase.Dispose(Boolean) | Improve this Doc View Source EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) Declaration public override void EncodeTerm(long[] longs, DataOutput out, FieldInfo fieldInfo, BlockTermState state, bool absolute) Parameters Type Name Description System.Int64 [] longs DataOutput out FieldInfo fieldInfo BlockTermState state System.Boolean absolute Overrides PostingsWriterBase.EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source FinishDoc() Declaration public override void FinishDoc() Overrides PostingsConsumer.FinishDoc() | Improve this Doc View Source FinishTerm(BlockTermState) Called when we are done adding docs to this term. Declaration public override void FinishTerm(BlockTermState state) Parameters Type Name Description BlockTermState state Overrides PostingsWriterBase.FinishTerm(BlockTermState) | Improve this Doc View Source Init(IndexOutput) Declaration public override void Init(IndexOutput termsOut) Parameters Type Name Description IndexOutput termsOut Overrides PostingsWriterBase.Init(IndexOutput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsWriterBase.NewTermState() | Improve this Doc View Source SetField(FieldInfo) Declaration public override int SetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description System.Int32 Overrides PostingsWriterBase.SetField(FieldInfo) | Improve this Doc View Source StartDoc(Int32, Int32) Declaration public override void StartDoc(int docId, int termDocFreq) Parameters Type Name Description System.Int32 docId System.Int32 termDocFreq Overrides PostingsConsumer.StartDoc(Int32, Int32) | Improve this Doc View Source StartTerm() Declaration public override void StartTerm() Overrides PostingsWriterBase.StartTerm() Implements IDisposable See Also Lucene.Net.Codecs.Lucene41.Lucene41SkipWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsWriter.Int32BlockTermState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsWriter.Int32BlockTermState.html",
    "title": "Class Lucene41PostingsWriter.Int32BlockTermState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41PostingsWriter.Int32BlockTermState NOTE: This was IntBlockTermState in Lucene Inheritance System.Object TermState OrdTermState BlockTermState Lucene41PostingsWriter.Int32BlockTermState Inherited Members BlockTermState.DocFreq BlockTermState.TotalTermFreq BlockTermState.TermBlockOrd BlockTermState.BlockFilePointer OrdTermState.Ord Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Int32BlockTermState : BlockTermState Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides TermState.Clone() | Improve this Doc View Source CopyFrom(TermState) Declaration public override void CopyFrom(TermState other) Parameters Type Name Description TermState other Overrides BlockTermState.CopyFrom(TermState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BlockTermState.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41StoredFieldsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41StoredFieldsFormat.html",
    "title": "Class Lucene41StoredFieldsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41StoredFieldsFormat Lucene 4.1 stored fields format. Principle This StoredFieldsFormat compresses blocks of 16KB of documents in order to improve the compression ratio compared to document-level compression. It uses the LZ4 compression algorithm, which is fast to compress and very fast to decompress data. Although the compression method that is used focuses more on speed than on compression ratio, it should provide interesting compression ratios for redundant inputs (such as log files, HTML or plain text). File formats Stored fields are represented by two files: A fields data file (extension .fdt ). this file stores a compact representation of documents in compressed blocks of 16KB or more. When writing a segment, documents are appended to an in-memory byte[] buffer. When its size reaches 16KB or more, some metadata about the documents is flushed to disk, immediately followed by a compressed representation of the buffer using the LZ4 compression format . Here is a more detailed description of the field data file format: FieldData (.fdt) --> <Header>, PackedIntsVersion, <Chunk> ChunkCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedIntsVersion --> VERSION_CURRENT as a VInt ( WriteVInt32(Int32) ) ChunkCount is not known in advance and is the number of chunks necessary to store all document of the segment Chunk --> DocBase, ChunkDocs, DocFieldCounts, DocLengths, <CompressedDocs> DocBase --> the ID of the first document of the chunk as a VInt ( WriteVInt32(Int32) ) ChunkDocs --> the number of documents in the chunk as a VInt ( WriteVInt32(Int32) ) DocFieldCounts --> the number of stored fields of every document in the chunk, encoded as followed: if chunkDocs=1, the unique value is encoded as a VInt ( WriteVInt32(Int32) ) else read a VInt ( WriteVInt32(Int32) ) (let's call it bitsRequired ) if bitsRequired is 0 then all values are equal, and the common value is the following VInt ( WriteVInt32(Int32) ) else bitsRequired is the number of bits required to store any value, and values are stored in a packed ( PackedInt32s ) array where every value is stored on exactly bitsRequired bits DocLengths --> the lengths of all documents in the chunk, encoded with the same method as DocFieldCounts CompressedDocs --> a compressed representation of <Docs> using the LZ4 compression format Docs --> <Doc> ChunkDocs Doc --> <FieldNumAndType, Value> DocFieldCount FieldNumAndType --> a VLong ( WriteVInt64(Int64) ), whose 3 last bits are Type and other bits are FieldNum Type --> 0: Value is String 1: Value is BinaryValue 2: Value is Int 3: Value is Float 4: Value is Long 5: Value is Double 6, 7: unused FieldNum --> an ID of the field Value --> String ( WriteString(String) ) | BinaryValue | Int | Float | Long | Double depending on Type BinaryValue --> ValueLength <Byte> ValueLength Notes If documents are larger than 16KB then chunks will likely contain only one document. However, documents can never spread across several chunks (all fields of a single document are in the same chunk). When at least one document in a chunk is large enough so that the chunk is larger than 32KB, the chunk will actually be compressed in several LZ4 blocks of 16KB. this allows StoredFieldVisitor s which are only interested in the first fields of a document to not have to decompress 10MB of data if the document is 10MB, but only 16KB. Given that the original lengths are written in the metadata of the chunk, the decompressor can leverage this information to stop decoding as soon as enough data has been decompressed. In case documents are incompressible, CompressedDocs will be less than 0.5% larger than Docs. A fields index file (extension .fdx ). FieldsIndex (.fdx) --> <Header>, <ChunkIndex> Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) ChunkIndex: See CompressingStoredFieldsIndexWriter Known limitations This StoredFieldsFormat does not support individual documents larger than ( 2 31 - 2 14 ) bytes. In case this is a problem, you should use another format, such as Lucene40StoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsFormat CompressingStoredFieldsFormat Lucene41StoredFieldsFormat Inherited Members CompressingStoredFieldsFormat.FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) CompressingStoredFieldsFormat.FieldsWriter(Directory, SegmentInfo, IOContext) CompressingStoredFieldsFormat.ToString() Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Lucene41StoredFieldsFormat : CompressingStoredFieldsFormat Constructors | Improve this Doc View Source Lucene41StoredFieldsFormat() Sole constructor. Declaration public Lucene41StoredFieldsFormat()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene42 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene42 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene 4.2 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .doc Contains the list of docs which contain each term along with frequency Positions .pos Stores position information about where a term occurs in the index Payloads .pay Stores additional per-position metadata information such as character offsets and user payloads Norms .nvd, .nvm Encodes length and boost factors for docs and fields Per-Document Values .dvd, .dvm Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. In version 4.1, the format of the postings list changed to use either of FOR compression or variable-byte encoding, depending upon the frequency of the term. Terms appearing only once were changed to inline directly into the term dictionary. Stored fields are compressed by default. In version 4.2, term vectors are compressed by default. DocValues has a new multi-valued type (SortedSet), that can be used for faceting/grouping/joining on multi-valued fields. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene42Codec Implements the Lucene 4.2 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene42 package documentation for file format details. @lucene.experimental Lucene42DocValuesFormat Lucene 4.2 DocValues format. Encodes the four per-document value types (Numeric,Binary,Sorted,SortedSet) with seven basic strategies. Delta-compressed Numerics: per-document integers written in blocks of 4096. For each block the minimum value is encoded, and each entry is a delta from that minimum value. Table-compressed Numerics: when the number of unique values is very small, a lookup table is written instead. Each per-document entry is instead the ordinal to this table. Uncompressed Numerics: when all values would fit into a single byte, and the acceptableOverheadRatio would pack values into 8 bits per value anyway, they are written as absolute values (with no indirection or packing) for performance. GCD-compressed Numerics: when all numbers share a common divisor, such as dates, the greatest common denominator (GCD) is computed, and quotients are stored using Delta-compressed Numerics. Fixed-width Binary: one large concatenated byte[] is written, along with the fixed length. Each document's value can be addressed by maxDoc*length . Variable-width Binary: one large concatenated byte[] is written, along with end addresses for each document. The addresses are written in blocks of 4096, with the current absolute start for the block, and the average (expected) delta per entry. For each document the deviation from the delta (actual - expected) is written. Sorted: an FST mapping deduplicated terms to ordinals is written, along with the per-document ordinals written using one of the numeric strategies above. SortedSet: an FST mapping deduplicated terms to ordinals is written, along with the per-document ordinal list written using one of the binary strategies above. Files: .dvd : DocValues data .dvm : DocValues metadata The DocValues metadata or .dvm file. For DocValues field, this stores metadata, such as the offset into the DocValues data (.dvd) DocValues metadata (.dvm) --> Header,<FieldNumber,EntryType,Entry> NumFields ,Footer Entry --> NumericEntry | BinaryEntry | SortedEntry NumericEntry --> DataOffset,CompressionType,PackedVersion BinaryEntry --> DataOffset,DataLength,MinLength,MaxLength,PackedVersion?,BlockSize? SortedEntry --> DataOffset,ValueCount FieldNumber,PackedVersion,MinLength,MaxLength,BlockSize,ValueCount --> VInt ( WriteVInt32(Int32) ) DataOffset,DataLength --> Int64 ( WriteInt64(Int64) ) EntryType,CompressionType --> Byte ( WriteByte(Byte) ) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Sorted fields have two entries: a SortedEntry with the FST metadata, and an ordinary NumericEntry for the document-to-ord metadata. SortedSet fields have two entries: a SortedEntry with the FST metadata, and an ordinary BinaryEntry for the document-to-ord-list metadata. FieldNumber of -1 indicates the end of metadata. EntryType is a 0 (NumericEntry), 1 (BinaryEntry, or 2 (SortedEntry) DataOffset is the pointer to the start of the data in the DocValues data (.dvd) CompressionType indicates how Numeric values will be compressed: 0 --> delta-compressed. For each block of 4096 integers, every integer is delta-encoded from the minimum value within the block. 1 --> table-compressed. When the number of unique numeric values is small and it would save space, a lookup table of unique values is written, followed by the ordinal for each document. 2 --> uncompressed. When the acceptableOverheadRatio parameter would upgrade the number of bits required to 8, and all values fit in a byte, these are written as absolute binary values for performance. 3 --> gcd-compressed. When all integers share a common divisor, only quotients are stored using blocks of delta-encoded ints. MinLength and MaxLength represent the min and max byte[] value lengths for Binary values. If they are equal, then all values are of a fixed size, and can be addressed as DataOffset + (docID * length) . Otherwise, the binary values are of variable size, and packed integer metadata (PackedVersion,BlockSize) is written for the addresses. The DocValues data or .dvd file. For DocValues field, this stores the actual per-document data (the heavy-lifting) DocValues data (.dvd) --> Header,<NumericData | BinaryData | SortedData> NumFields ,Footer NumericData --> DeltaCompressedNumerics | TableCompressedNumerics | UncompressedNumerics | GCDCompressedNumerics BinaryData --> Byte ( WriteByte(Byte) ) DataLength ,Addresses SortedData --> FST<Int64> ( FST<T> ) DeltaCompressedNumerics --> BlockPackedInts(blockSize=4096) ( BlockPackedWriter ) TableCompressedNumerics --> TableSize, Int64 ( WriteInt64(Int64) ) TableSize , PackedInts ( PackedInt32s ) UncompressedNumerics --> Byte ( WriteByte(Byte) ) maxdoc Addresses --> MonotonicBlockPackedInts(blockSize=4096) ( MonotonicBlockPackedWriter ) Footer --> CodecFooter ( WriteFooter(IndexOutput) SortedSet entries store the list of ordinals in their BinaryData as a sequences of increasing vLongs ( WriteVInt64(Int64) ), delta-encoded. Limitations: Binary doc values can be at most MAX_BINARY_FIELD_LENGTH in length. Lucene42FieldInfosFormat Lucene 4.2 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,Attributes> FieldsCount Data types: Header --> CodecHeader WriteHeader(DataOutput, String, Int32) FieldsCount --> VInt WriteVInt32(Int32) FieldName --> String WriteString(String) FieldBits, DocValuesBits --> Byte WriteByte(Byte) FieldNumber --> VInt WriteInt32(Int32) Attributes --> IDictionary<String,String> Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 String. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: NumericDocValues. ( NUMERIC ) 2: BinaryDocValues. ( BINARY ) 3: SortedDocValues. ( SORTED ) Attributes: a key-value map of codec-private attributes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene42NormsFormat Lucene 4.2 score normalization format. NOTE: this uses the same format as Lucene42DocValuesFormat Numeric DocValues, but with different file extensions, and passing FASTEST for uncompressed encoding: trading off space for performance. Files: .nvd : DocValues data .nvm : DocValues metadata Lucene42TermVectorsFormat Lucene 4.2 term vectors format ( TermVectorsFormat ). Very similarly to Lucene41StoredFieldsFormat , this format is based on compressed chunks of data, with document-level granularity so that a document can never span across distinct chunks. Moreover, data is made as compact as possible: textual data is compressed using the very light, LZ4 compression algorithm, binary data is written using fixed-size blocks of packed s ( PackedInt32s ). Term vectors are stored using two files a data file where terms, frequencies, positions, offsets and payloads are stored, an index file, loaded into memory, used to locate specific documents in the data file. Looking up term vectors for any document requires at most 1 disk seek. File formats A vector data file (extension .tvd ). this file stores terms, frequencies, positions, offsets and payloads for every document. Upon writing a new segment, it accumulates data into memory until the buffer used to store terms and payloads grows beyond 4KB. Then it flushes all metadata, terms and positions to disk using LZ4 compression for terms and payloads and blocks of packed s ( BlockPackedWriter ) for positions. Here is a more detailed description of the field data file format: VectorData (.tvd) --> <Header>, PackedIntsVersion, ChunkSize, <Chunk> ChunkCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedIntsVersion --> VERSION_CURRENT as a VInt ( WriteVInt32(Int32) ) ChunkSize is the number of bytes of terms to accumulate before flushing, as a VInt ( WriteVInt32(Int32) ) ChunkCount is not known in advance and is the number of chunks necessary to store all document of the segment Chunk --> DocBase, ChunkDocs, < NumFields >, < FieldNums >, < FieldNumOffs >, < Flags >, < NumTerms >, < TermLengths >, < TermFreqs >, < Positions >, < StartOffsets >, < Lengths >, < PayloadLengths >, < TermAndPayloads > DocBase is the ID of the first doc of the chunk as a VInt ( WriteVInt32(Int32) ) ChunkDocs is the number of documents in the chunk NumFields --> DocNumFields ChunkDocs DocNumFields is the number of fields for each doc, written as a VInt ( WriteVInt32(Int32) ) if ChunkDocs==1 and as a PackedInt32s array otherwise FieldNums --> FieldNumDelta TotalDistincFields , a delta-encoded list of the sorted unique field numbers present in the chunk FieldNumOffs --> FieldNumOff TotalFields , as a PackedInt32s array FieldNumOff is the offset of the field number in FieldNums TotalFields is the total number of fields (sum of the values of NumFields) Flags --> Bit < FieldFlags > Bit is a single bit which when true means that fields have the same options for every document in the chunk FieldFlags --> if Bit==1: Flag TotalDistinctFields else Flag TotalFields Flag: a 3-bits int where: the first bit means that the field has positions the second bit means that the field has offsets the third bit means that the field has payloads NumTerms --> FieldNumTerms TotalFields FieldNumTerms: the number of terms for each field, using blocks of 64 packed s ( BlockPackedWriter ) TermLengths --> PrefixLength TotalTerms SuffixLength TotalTerms TotalTerms: total number of terms (sum of NumTerms) PrefixLength: 0 for the first term of a field, the common prefix with the previous term otherwise using blocks of 64 packed s ( BlockPackedWriter ) SuffixLength: length of the term minus PrefixLength for every term using blocks of 64 packed s ( BlockPackedWriter ) TermFreqs --> TermFreqMinus1 TotalTerms TermFreqMinus1: (frequency - 1) for each term using blocks of 64 packed s ( BlockPackedWriter ) Positions --> PositionDelta TotalPositions TotalPositions is the sum of frequencies of terms of all fields that have positions PositionDelta: the absolute position for the first position of a term, and the difference with the previous positions for following positions using blocks of 64 packed s ( BlockPackedWriter ) StartOffsets --> (AvgCharsPerTerm TotalDistinctFields ) StartOffsetDelta TotalOffsets TotalOffsets is the sum of frequencies of terms of all fields that have offsets AvgCharsPerTerm: average number of chars per term, encoded as a float on 4 bytes. They are not present if no field has both positions and offsets enabled. StartOffsetDelta: (startOffset - previousStartOffset - AvgCharsPerTerm * PositionDelta). previousStartOffset is 0 for the first offset and AvgCharsPerTerm is 0 if the field has no positions using blocks of 64 packed s ( BlockPackedWriter ) Lengths --> LengthMinusTermLength TotalOffsets LengthMinusTermLength: (endOffset - startOffset - termLength) using blocks of 64 packed s ( BlockPackedWriter ) PayloadLengths --> PayloadLength TotalPayloads TotalPayloads is the sum of frequencies of terms of all fields that have payloads PayloadLength is the payload length encoded using blocks of 64 packed s ( BlockPackedWriter ) TermAndPayloads --> LZ4-compressed representation of < FieldTermsAndPayLoads > TotalFields FieldTermsAndPayLoads --> Terms (Payloads) Terms: term bytes Payloads: payload bytes (if the field has payloads) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) An index file (extension .tvx ). VectorIndex (.tvx) --> <Header>, <ChunkIndex>, Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) ChunkIndex: See CompressingStoredFieldsIndexWriter Footer --> CodecFooter ( WriteFooter(IndexOutput) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42Codec.html",
    "title": "Class Lucene42Codec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene42Codec Implements the Lucene 4.2 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene42 package documentation for file format details. @lucene.experimental Inheritance System.Object Codec Lucene42Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() Namespace : Lucene.Net.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax public class Lucene42Codec : Codec Constructors | Improve this Doc View Source Lucene42Codec() Sole constructor. Declaration public Lucene42Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override sealed DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override sealed StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetDocValuesFormatForField(String) Returns the docvalues format that should be used for writing new segments of field . The default implementation always returns \"Lucene42\" Declaration public virtual DocValuesFormat GetDocValuesFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description DocValuesFormat | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene41\" Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42DocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42DocValuesFormat.html",
    "title": "Class Lucene42DocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene42DocValuesFormat Lucene 4.2 DocValues format. Encodes the four per-document value types (Numeric,Binary,Sorted,SortedSet) with seven basic strategies. Delta-compressed Numerics: per-document integers written in blocks of 4096. For each block the minimum value is encoded, and each entry is a delta from that minimum value. Table-compressed Numerics: when the number of unique values is very small, a lookup table is written instead. Each per-document entry is instead the ordinal to this table. Uncompressed Numerics: when all values would fit into a single byte, and the acceptableOverheadRatio would pack values into 8 bits per value anyway, they are written as absolute values (with no indirection or packing) for performance. GCD-compressed Numerics: when all numbers share a common divisor, such as dates, the greatest common denominator (GCD) is computed, and quotients are stored using Delta-compressed Numerics. Fixed-width Binary: one large concatenated byte[] is written, along with the fixed length. Each document's value can be addressed by maxDoc*length . Variable-width Binary: one large concatenated byte[] is written, along with end addresses for each document. The addresses are written in blocks of 4096, with the current absolute start for the block, and the average (expected) delta per entry. For each document the deviation from the delta (actual - expected) is written. Sorted: an FST mapping deduplicated terms to ordinals is written, along with the per-document ordinals written using one of the numeric strategies above. SortedSet: an FST mapping deduplicated terms to ordinals is written, along with the per-document ordinal list written using one of the binary strategies above. Files: .dvd : DocValues data .dvm : DocValues metadata The DocValues metadata or .dvm file. For DocValues field, this stores metadata, such as the offset into the DocValues data (.dvd) DocValues metadata (.dvm) --> Header,<FieldNumber,EntryType,Entry> NumFields ,Footer Entry --> NumericEntry | BinaryEntry | SortedEntry NumericEntry --> DataOffset,CompressionType,PackedVersion BinaryEntry --> DataOffset,DataLength,MinLength,MaxLength,PackedVersion?,BlockSize? SortedEntry --> DataOffset,ValueCount FieldNumber,PackedVersion,MinLength,MaxLength,BlockSize,ValueCount --> VInt ( WriteVInt32(Int32) ) DataOffset,DataLength --> Int64 ( WriteInt64(Int64) ) EntryType,CompressionType --> Byte ( WriteByte(Byte) ) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Sorted fields have two entries: a SortedEntry with the FST metadata, and an ordinary NumericEntry for the document-to-ord metadata. SortedSet fields have two entries: a SortedEntry with the FST metadata, and an ordinary BinaryEntry for the document-to-ord-list metadata. FieldNumber of -1 indicates the end of metadata. EntryType is a 0 (NumericEntry), 1 (BinaryEntry, or 2 (SortedEntry) DataOffset is the pointer to the start of the data in the DocValues data (.dvd) CompressionType indicates how Numeric values will be compressed: 0 --> delta-compressed. For each block of 4096 integers, every integer is delta-encoded from the minimum value within the block. 1 --> table-compressed. When the number of unique numeric values is small and it would save space, a lookup table of unique values is written, followed by the ordinal for each document. 2 --> uncompressed. When the acceptableOverheadRatio parameter would upgrade the number of bits required to 8, and all values fit in a byte, these are written as absolute binary values for performance. 3 --> gcd-compressed. When all integers share a common divisor, only quotients are stored using blocks of delta-encoded ints. MinLength and MaxLength represent the min and max byte[] value lengths for Binary values. If they are equal, then all values are of a fixed size, and can be addressed as DataOffset + (docID * length) . Otherwise, the binary values are of variable size, and packed integer metadata (PackedVersion,BlockSize) is written for the addresses. The DocValues data or .dvd file. For DocValues field, this stores the actual per-document data (the heavy-lifting) DocValues data (.dvd) --> Header,<NumericData | BinaryData | SortedData> NumFields ,Footer NumericData --> DeltaCompressedNumerics | TableCompressedNumerics | UncompressedNumerics | GCDCompressedNumerics BinaryData --> Byte ( WriteByte(Byte) ) DataLength ,Addresses SortedData --> FST<Int64> ( FST<T> ) DeltaCompressedNumerics --> BlockPackedInts(blockSize=4096) ( BlockPackedWriter ) TableCompressedNumerics --> TableSize, Int64 ( WriteInt64(Int64) ) TableSize , PackedInts ( PackedInt32s ) UncompressedNumerics --> Byte ( WriteByte(Byte) ) maxdoc Addresses --> MonotonicBlockPackedInts(blockSize=4096) ( MonotonicBlockPackedWriter ) Footer --> CodecFooter ( WriteFooter(IndexOutput) SortedSet entries store the list of ordinals in their BinaryData as a sequences of increasing vLongs ( WriteVInt64(Int64) ), delta-encoded. Limitations: Binary doc values can be at most MAX_BINARY_FIELD_LENGTH in length. Inheritance System.Object DocValuesFormat Lucene42DocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats Namespace : Lucene.Net.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax public class Lucene42DocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source Lucene42DocValuesFormat() Calls Lucene42DocValuesFormat(PackedInts.DEFAULT) ( Lucene42DocValuesFormat(Single) . Declaration public Lucene42DocValuesFormat() | Improve this Doc View Source Lucene42DocValuesFormat(Single) Creates a new Lucene42DocValuesFormat with the specified acceptableOverheadRatio for NumericDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public Lucene42DocValuesFormat(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Compression parameter for numerics. Currently this is only used when the number of unique values is small. Fields | Improve this Doc View Source m_acceptableOverheadRatio Declaration protected readonly float m_acceptableOverheadRatio Field Value Type Description System.Single | Improve this Doc View Source MAX_BINARY_FIELD_LENGTH Maximum length for each binary doc values field. Declaration public static readonly int MAX_BINARY_FIELD_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42FieldInfosFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42FieldInfosFormat.html",
    "title": "Class Lucene42FieldInfosFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene42FieldInfosFormat Lucene 4.2 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,Attributes> FieldsCount Data types: Header --> CodecHeader WriteHeader(DataOutput, String, Int32) FieldsCount --> VInt WriteVInt32(Int32) FieldName --> String WriteString(String) FieldBits, DocValuesBits --> Byte WriteByte(Byte) FieldNumber --> VInt WriteInt32(Int32) Attributes --> IDictionary<String,String> Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 String. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: NumericDocValues. ( NUMERIC ) 2: BinaryDocValues. ( BINARY ) 3: SortedDocValues. ( SORTED ) Attributes: a key-value map of codec-private attributes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosFormat Lucene42FieldInfosFormat Namespace : Lucene.Net.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax public class Lucene42FieldInfosFormat : FieldInfosFormat Constructors | Improve this Doc View Source Lucene42FieldInfosFormat() Sole constructor. Declaration public Lucene42FieldInfosFormat() Properties | Improve this Doc View Source FieldInfosReader Declaration public override FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader Overrides FieldInfosFormat.FieldInfosReader | Improve this Doc View Source FieldInfosWriter Declaration public override FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter Overrides FieldInfosFormat.FieldInfosWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42NormsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42NormsFormat.html",
    "title": "Class Lucene42NormsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene42NormsFormat Lucene 4.2 score normalization format. NOTE: this uses the same format as Lucene42DocValuesFormat Numeric DocValues, but with different file extensions, and passing FASTEST for uncompressed encoding: trading off space for performance. Files: .nvd : DocValues data .nvm : DocValues metadata Inheritance System.Object NormsFormat Lucene42NormsFormat Namespace : Lucene.Net.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax public class Lucene42NormsFormat : NormsFormat Constructors | Improve this Doc View Source Lucene42NormsFormat() Calls Lucene42DocValuesFormat(PackedInt32s.FASTEST) ( Lucene42NormsFormat(Single) ). Declaration public Lucene42NormsFormat() | Improve this Doc View Source Lucene42NormsFormat(Single) Creates a new Lucene42DocValuesFormat with the specified acceptableOverheadRatio for NumericDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public Lucene42NormsFormat(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Compression parameter for numerics. Currently this is only used when the number of unique values is small. Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides NormsFormat.NormsConsumer(SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides NormsFormat.NormsProducer(SegmentReadState) See Also Lucene42DocValuesFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42TermVectorsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42TermVectorsFormat.html",
    "title": "Class Lucene42TermVectorsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene42TermVectorsFormat Lucene 4.2 term vectors format ( TermVectorsFormat ). Very similarly to Lucene41StoredFieldsFormat , this format is based on compressed chunks of data, with document-level granularity so that a document can never span across distinct chunks. Moreover, data is made as compact as possible: textual data is compressed using the very light, LZ4 compression algorithm, binary data is written using fixed-size blocks of packed s ( PackedInt32s ). Term vectors are stored using two files a data file where terms, frequencies, positions, offsets and payloads are stored, an index file, loaded into memory, used to locate specific documents in the data file. Looking up term vectors for any document requires at most 1 disk seek. File formats A vector data file (extension .tvd ). this file stores terms, frequencies, positions, offsets and payloads for every document. Upon writing a new segment, it accumulates data into memory until the buffer used to store terms and payloads grows beyond 4KB. Then it flushes all metadata, terms and positions to disk using LZ4 compression for terms and payloads and blocks of packed s ( BlockPackedWriter ) for positions. Here is a more detailed description of the field data file format: VectorData (.tvd) --> <Header>, PackedIntsVersion, ChunkSize, <Chunk> ChunkCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedIntsVersion --> VERSION_CURRENT as a VInt ( WriteVInt32(Int32) ) ChunkSize is the number of bytes of terms to accumulate before flushing, as a VInt ( WriteVInt32(Int32) ) ChunkCount is not known in advance and is the number of chunks necessary to store all document of the segment Chunk --> DocBase, ChunkDocs, < NumFields >, < FieldNums >, < FieldNumOffs >, < Flags >, < NumTerms >, < TermLengths >, < TermFreqs >, < Positions >, < StartOffsets >, < Lengths >, < PayloadLengths >, < TermAndPayloads > DocBase is the ID of the first doc of the chunk as a VInt ( WriteVInt32(Int32) ) ChunkDocs is the number of documents in the chunk NumFields --> DocNumFields ChunkDocs DocNumFields is the number of fields for each doc, written as a VInt ( WriteVInt32(Int32) ) if ChunkDocs==1 and as a PackedInt32s array otherwise FieldNums --> FieldNumDelta TotalDistincFields , a delta-encoded list of the sorted unique field numbers present in the chunk FieldNumOffs --> FieldNumOff TotalFields , as a PackedInt32s array FieldNumOff is the offset of the field number in FieldNums TotalFields is the total number of fields (sum of the values of NumFields) Flags --> Bit < FieldFlags > Bit is a single bit which when true means that fields have the same options for every document in the chunk FieldFlags --> if Bit==1: Flag TotalDistinctFields else Flag TotalFields Flag: a 3-bits int where: the first bit means that the field has positions the second bit means that the field has offsets the third bit means that the field has payloads NumTerms --> FieldNumTerms TotalFields FieldNumTerms: the number of terms for each field, using blocks of 64 packed s ( BlockPackedWriter ) TermLengths --> PrefixLength TotalTerms SuffixLength TotalTerms TotalTerms: total number of terms (sum of NumTerms) PrefixLength: 0 for the first term of a field, the common prefix with the previous term otherwise using blocks of 64 packed s ( BlockPackedWriter ) SuffixLength: length of the term minus PrefixLength for every term using blocks of 64 packed s ( BlockPackedWriter ) TermFreqs --> TermFreqMinus1 TotalTerms TermFreqMinus1: (frequency - 1) for each term using blocks of 64 packed s ( BlockPackedWriter ) Positions --> PositionDelta TotalPositions TotalPositions is the sum of frequencies of terms of all fields that have positions PositionDelta: the absolute position for the first position of a term, and the difference with the previous positions for following positions using blocks of 64 packed s ( BlockPackedWriter ) StartOffsets --> (AvgCharsPerTerm TotalDistinctFields ) StartOffsetDelta TotalOffsets TotalOffsets is the sum of frequencies of terms of all fields that have offsets AvgCharsPerTerm: average number of chars per term, encoded as a float on 4 bytes. They are not present if no field has both positions and offsets enabled. StartOffsetDelta: (startOffset - previousStartOffset - AvgCharsPerTerm * PositionDelta). previousStartOffset is 0 for the first offset and AvgCharsPerTerm is 0 if the field has no positions using blocks of 64 packed s ( BlockPackedWriter ) Lengths --> LengthMinusTermLength TotalOffsets LengthMinusTermLength: (endOffset - startOffset - termLength) using blocks of 64 packed s ( BlockPackedWriter ) PayloadLengths --> PayloadLength TotalPayloads TotalPayloads is the sum of frequencies of terms of all fields that have payloads PayloadLength is the payload length encoded using blocks of 64 packed s ( BlockPackedWriter ) TermAndPayloads --> LZ4-compressed representation of < FieldTermsAndPayLoads > TotalFields FieldTermsAndPayLoads --> Terms (Payloads) Terms: term bytes Payloads: payload bytes (if the field has payloads) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) An index file (extension .tvx ). VectorIndex (.tvx) --> <Header>, <ChunkIndex>, Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) ChunkIndex: See CompressingStoredFieldsIndexWriter Footer --> CodecFooter ( WriteFooter(IndexOutput) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsFormat CompressingTermVectorsFormat Lucene42TermVectorsFormat Inherited Members CompressingTermVectorsFormat.VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) CompressingTermVectorsFormat.VectorsWriter(Directory, SegmentInfo, IOContext) CompressingTermVectorsFormat.ToString() Namespace : Lucene.Net.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax public sealed class Lucene42TermVectorsFormat : CompressingTermVectorsFormat Constructors | Improve this Doc View Source Lucene42TermVectorsFormat() Sole constructor. Declaration public Lucene42TermVectorsFormat()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene45 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene45 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene 4.5 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .doc Contains the list of docs which contain each term along with frequency Positions .pos Stores position information about where a term occurs in the index Payloads .pay Stores additional per-position metadata information such as character offsets and user payloads Norms .nvd, .nvm Encodes length and boost factors for docs and fields Per-Document Values .dvd, .dvm Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. In version 4.1, the format of the postings list changed to use either of FOR compression or variable-byte encoding, depending upon the frequency of the term. Terms appearing only once were changed to inline directly into the term dictionary. Stored fields are compressed by default. In version 4.2, term vectors are compressed by default. DocValues has a new multi-valued type (SortedSet), that can be used for faceting/grouping/joining on multi-valued fields. In version 4.5, DocValues were extended to explicitly represent missing values. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene45Codec Implements the Lucene 4.5 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene45 package documentation for file format details. @lucene.experimental Lucene45DocValuesConsumer Writer for Lucene45DocValuesFormat Lucene45DocValuesFormat Lucene 4.5 DocValues format. Encodes the four per-document value types (Numeric,Binary,Sorted,SortedSet) with these strategies: NUMERIC : Delta-compressed: per-document integers written in blocks of 16k. For each block the minimum value in that block is encoded, and each entry is a delta from that minimum value. Each block of deltas is compressed with bitpacking. For more information, see BlockPackedWriter . Table-compressed: when the number of unique values is very small (< 256), and when there are unused \"gaps\" in the range of values used (such as SmallSingle ), a lookup table is written instead. Each per-document entry is instead the ordinal to this table, and those ordinals are compressed with bitpacking ( PackedInt32s ). GCD-compressed: when all numbers share a common divisor, such as dates, the greatest common denominator (GCD) is computed, and quotients are stored using Delta-compressed Numerics. BINARY : Fixed-width Binary: one large concatenated byte[] is written, along with the fixed length. Each document's value can be addressed directly with multiplication ( docID * length ). Variable-width Binary: one large concatenated byte[] is written, along with end addresses for each document. The addresses are written in blocks of 16k, with the current absolute start for the block, and the average (expected) delta per entry. For each document the deviation from the delta (actual - expected) is written. Prefix-compressed Binary: values are written in chunks of 16, with the first value written completely and other values sharing prefixes. Chunk addresses are written in blocks of 16k, with the current absolute start for the block, and the average (expected) delta per entry. For each chunk the deviation from the delta (actual - expected) is written. SORTED : Sorted: a mapping of ordinals to deduplicated terms is written as Prefix-Compressed Binary, along with the per-document ordinals written using one of the numeric strategies above. SORTED_SET : SortedSet: a mapping of ordinals to deduplicated terms is written as Prefix-Compressed Binary, an ordinal list and per-document index into this list are written using the numeric strategies above. Files: .dvd : DocValues data .dvm : DocValues metadata The DocValues metadata or .dvm file. For DocValues field, this stores metadata, such as the offset into the DocValues data (.dvd) DocValues metadata (.dvm) --> Header,<Entry> NumFields ,Footer Entry --> NumericEntry | BinaryEntry | SortedEntry | SortedSetEntry NumericEntry --> GCDNumericEntry | TableNumericEntry | DeltaNumericEntry GCDNumericEntry --> NumericHeader,MinValue,GCD TableNumericEntry --> NumericHeader,TableSize,Int64 ( WriteInt64(Int64) ) TableSize DeltaNumericEntry --> NumericHeader NumericHeader --> FieldNumber,EntryType,NumericType,MissingOffset,PackedVersion,DataOffset,Count,BlockSize BinaryEntry --> FixedBinaryEntry | VariableBinaryEntry | PrefixBinaryEntry FixedBinaryEntry --> BinaryHeader VariableBinaryEntry --> BinaryHeader,AddressOffset,PackedVersion,BlockSize PrefixBinaryEntry --> BinaryHeader,AddressInterval,AddressOffset,PackedVersion,BlockSize BinaryHeader --> FieldNumber,EntryType,BinaryType,MissingOffset,MinLength,MaxLength,DataOffset SortedEntry --> FieldNumber,EntryType,BinaryEntry,NumericEntry SortedSetEntry --> EntryType,BinaryEntry,NumericEntry,NumericEntry FieldNumber,PackedVersion,MinLength,MaxLength,BlockSize,ValueCount --> VInt ( WriteVInt32(Int32) EntryType,CompressionType --> Byte ( WriteByte(Byte) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) MinValue,GCD,MissingOffset,AddressOffset,DataOffset --> Int64 ( WriteInt64(Int64) ) TableSize --> vInt ( WriteVInt32(Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Sorted fields have two entries: a Lucene45DocValuesProducer.BinaryEntry with the value metadata, and an ordinary Lucene45DocValuesProducer.NumericEntry for the document-to-ord metadata. SortedSet fields have three entries: a Lucene45DocValuesProducer.BinaryEntry with the value metadata, and two Lucene45DocValuesProducer.NumericEntry s for the document-to-ord-index and ordinal list metadata. FieldNumber of -1 indicates the end of metadata. EntryType is a 0 ( Lucene45DocValuesProducer.NumericEntry ) or 1 ( Lucene45DocValuesProducer.BinaryEntry ) DataOffset is the pointer to the start of the data in the DocValues data (.dvd) NumericType indicates how Numeric values will be compressed: 0 --> delta-compressed. For each block of 16k integers, every integer is delta-encoded from the minimum value within the block. 1 --> gcd-compressed. When all integers share a common divisor, only quotients are stored using blocks of delta-encoded ints. 2 --> table-compressed. When the number of unique numeric values is small and it would save space, a lookup table of unique values is written, followed by the ordinal for each document. BinaryType indicates how Binary values will be stored: 0 --> fixed-width. All values have the same length, addressing by multiplication. 1 --> variable-width. An address for each value is stored. 2 --> prefix-compressed. An address to the start of every interval'th value is stored. MinLength and MaxLength represent the min and max byte[] value lengths for Binary values. If they are equal, then all values are of a fixed size, and can be addressed as DataOffset + (docID * length). Otherwise, the binary values are of variable size, and packed integer metadata (PackedVersion,BlockSize) is written for the addresses. MissingOffset points to a byte[] containing a bitset of all documents that had a value for the field. If its -1, then there are no missing values. Checksum contains the CRC32 checksum of all bytes in the .dvm file up until the checksum. this is used to verify integrity of the file on opening the index. The DocValues data or .dvd file. For DocValues field, this stores the actual per-document data (the heavy-lifting) DocValues data (.dvd) --> Header,<NumericData | BinaryData | SortedData> NumFields ,Footer NumericData --> DeltaCompressedNumerics | TableCompressedNumerics | GCDCompressedNumerics BinaryData --> Byte ( WriteByte(Byte) ) DataLength ,Addresses SortedData --> FST<Int64> ( FST<T> ) DeltaCompressedNumerics --> BlockPackedInts(blockSize=16k) ( BlockPackedWriter ) TableCompressedNumerics --> PackedInts ( PackedInt32s ) GCDCompressedNumerics --> BlockPackedInts(blockSize=16k) ( BlockPackedWriter ) Addresses --> MonotonicBlockPackedInts(blockSize=16k) ( MonotonicBlockPackedWriter ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) SortedSet entries store the list of ordinals in their BinaryData as a sequences of increasing vLongs ( WriteVInt64(Int64) ), delta-encoded. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene45DocValuesProducer Reader for Lucene45DocValuesFormat . Lucene45DocValuesProducer.BinaryEntry Metadata entry for a binary docvalues field. Lucene45DocValuesProducer.NumericEntry Metadata entry for a numeric docvalues field. Lucene45DocValuesProducer.SortedSetEntry Metadata entry for a sorted-set docvalues field."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45Codec.html",
    "title": "Class Lucene45Codec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45Codec Implements the Lucene 4.5 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene45 package documentation for file format details. @lucene.experimental Inheritance System.Object Codec Lucene45Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax public class Lucene45Codec : Codec Constructors | Improve this Doc View Source Lucene45Codec() Sole constructor. Declaration public Lucene45Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override sealed DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override sealed NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override sealed StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetDocValuesFormatForField(String) Returns the docvalues format that should be used for writing new segments of field . The default implementation always returns \"Lucene45\" Declaration public virtual DocValuesFormat GetDocValuesFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description DocValuesFormat | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene41\" Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesConsumer.html",
    "title": "Class Lucene45DocValuesConsumer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45DocValuesConsumer Writer for Lucene45DocValuesFormat Inheritance System.Object DocValuesConsumer Lucene45DocValuesConsumer Implements IDisposable Inherited Members DocValuesConsumer.MergeNumericField(FieldInfo, MergeState, IList<NumericDocValues>, IList<IBits>) DocValuesConsumer.MergeBinaryField(FieldInfo, MergeState, IList<BinaryDocValues>, IList<IBits>) DocValuesConsumer.MergeSortedField(FieldInfo, MergeState, IList<SortedDocValues>) DocValuesConsumer.MergeSortedSetField(FieldInfo, MergeState, IList<SortedSetDocValues>) DocValuesConsumer.Dispose() Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax public class Lucene45DocValuesConsumer : DocValuesConsumer, IDisposable Constructors | Improve this Doc View Source Lucene45DocValuesConsumer(SegmentWriteState, String, String, String, String) Expert: Creates a new writer. Declaration public Lucene45DocValuesConsumer(SegmentWriteState state, string dataCodec, string dataExtension, string metaCodec, string metaExtension) Parameters Type Name Description SegmentWriteState state System.String dataCodec System.String dataExtension System.String metaCodec System.String metaExtension Fields | Improve this Doc View Source BINARY_FIXED_UNCOMPRESSED Uncompressed binary, written directly (fixed length). Declaration public const int BINARY_FIXED_UNCOMPRESSED = null Field Value Type Description System.Int32 | Improve this Doc View Source BINARY_PREFIX_COMPRESSED Compressed binary with shared prefixes Declaration public const int BINARY_PREFIX_COMPRESSED = null Field Value Type Description System.Int32 | Improve this Doc View Source BINARY_VARIABLE_UNCOMPRESSED Uncompressed binary, written directly (variable length). Declaration public const int BINARY_VARIABLE_UNCOMPRESSED = null Field Value Type Description System.Int32 | Improve this Doc View Source DELTA_COMPRESSED Compressed using packed blocks of s. Declaration public const int DELTA_COMPRESSED = null Field Value Type Description System.Int32 | Improve this Doc View Source GCD_COMPRESSED Compressed by computing the GCD. Declaration public const int GCD_COMPRESSED = null Field Value Type Description System.Int32 | Improve this Doc View Source SORTED_SET_SINGLE_VALUED_SORTED Single-valued sorted set values, encoded as sorted values, so no level of indirection: docId -> ord. Declaration public static readonly int SORTED_SET_SINGLE_VALUED_SORTED Field Value Type Description System.Int32 | Improve this Doc View Source SORTED_SET_WITH_ADDRESSES Standard storage for sorted set values with 1 level of indirection: docId -> address -> ord. Declaration public static readonly int SORTED_SET_WITH_ADDRESSES Field Value Type Description System.Int32 | Improve this Doc View Source TABLE_COMPRESSED Compressed by giving IDs to unique values. Declaration public const int TABLE_COMPRESSED = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddBinaryField(FieldInfo, IEnumerable<BytesRef>) Declaration public override void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values) Parameters Type Name Description FieldInfo field IEnumerable < BytesRef > values Overrides DocValuesConsumer.AddBinaryField(FieldInfo, IEnumerable<BytesRef>) | Improve this Doc View Source AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) Declaration public override void AddNumericField(FieldInfo field, IEnumerable<long?> values) Parameters Type Name Description FieldInfo field IEnumerable < System.Nullable < System.Int64 >> values Overrides DocValuesConsumer.AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) Declaration public override void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd) Parameters Type Name Description FieldInfo field IEnumerable < BytesRef > values IEnumerable < System.Nullable < System.Int64 >> docToOrd Overrides DocValuesConsumer.AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) Declaration public override void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords) Parameters Type Name Description FieldInfo field IEnumerable < BytesRef > values IEnumerable < System.Nullable < System.Int64 >> docToOrdCount IEnumerable < System.Nullable < System.Int64 >> ords Overrides DocValuesConsumer.AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source AddTermsDict(FieldInfo, IEnumerable<BytesRef>) Expert: writes a value dictionary for a sorted/sortedset field. Declaration protected virtual void AddTermsDict(FieldInfo field, IEnumerable<BytesRef> values) Parameters Type Name Description FieldInfo field IEnumerable < BytesRef > values | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides DocValuesConsumer.Dispose(Boolean) Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesFormat.html",
    "title": "Class Lucene45DocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45DocValuesFormat Lucene 4.5 DocValues format. Encodes the four per-document value types (Numeric,Binary,Sorted,SortedSet) with these strategies: NUMERIC : Delta-compressed: per-document integers written in blocks of 16k. For each block the minimum value in that block is encoded, and each entry is a delta from that minimum value. Each block of deltas is compressed with bitpacking. For more information, see BlockPackedWriter . Table-compressed: when the number of unique values is very small (< 256), and when there are unused \"gaps\" in the range of values used (such as SmallSingle ), a lookup table is written instead. Each per-document entry is instead the ordinal to this table, and those ordinals are compressed with bitpacking ( PackedInt32s ). GCD-compressed: when all numbers share a common divisor, such as dates, the greatest common denominator (GCD) is computed, and quotients are stored using Delta-compressed Numerics. BINARY : Fixed-width Binary: one large concatenated byte[] is written, along with the fixed length. Each document's value can be addressed directly with multiplication ( docID * length ). Variable-width Binary: one large concatenated byte[] is written, along with end addresses for each document. The addresses are written in blocks of 16k, with the current absolute start for the block, and the average (expected) delta per entry. For each document the deviation from the delta (actual - expected) is written. Prefix-compressed Binary: values are written in chunks of 16, with the first value written completely and other values sharing prefixes. Chunk addresses are written in blocks of 16k, with the current absolute start for the block, and the average (expected) delta per entry. For each chunk the deviation from the delta (actual - expected) is written. SORTED : Sorted: a mapping of ordinals to deduplicated terms is written as Prefix-Compressed Binary, along with the per-document ordinals written using one of the numeric strategies above. SORTED_SET : SortedSet: a mapping of ordinals to deduplicated terms is written as Prefix-Compressed Binary, an ordinal list and per-document index into this list are written using the numeric strategies above. Files: .dvd : DocValues data .dvm : DocValues metadata The DocValues metadata or .dvm file. For DocValues field, this stores metadata, such as the offset into the DocValues data (.dvd) DocValues metadata (.dvm) --> Header,<Entry> NumFields ,Footer Entry --> NumericEntry | BinaryEntry | SortedEntry | SortedSetEntry NumericEntry --> GCDNumericEntry | TableNumericEntry | DeltaNumericEntry GCDNumericEntry --> NumericHeader,MinValue,GCD TableNumericEntry --> NumericHeader,TableSize,Int64 ( WriteInt64(Int64) ) TableSize DeltaNumericEntry --> NumericHeader NumericHeader --> FieldNumber,EntryType,NumericType,MissingOffset,PackedVersion,DataOffset,Count,BlockSize BinaryEntry --> FixedBinaryEntry | VariableBinaryEntry | PrefixBinaryEntry FixedBinaryEntry --> BinaryHeader VariableBinaryEntry --> BinaryHeader,AddressOffset,PackedVersion,BlockSize PrefixBinaryEntry --> BinaryHeader,AddressInterval,AddressOffset,PackedVersion,BlockSize BinaryHeader --> FieldNumber,EntryType,BinaryType,MissingOffset,MinLength,MaxLength,DataOffset SortedEntry --> FieldNumber,EntryType,BinaryEntry,NumericEntry SortedSetEntry --> EntryType,BinaryEntry,NumericEntry,NumericEntry FieldNumber,PackedVersion,MinLength,MaxLength,BlockSize,ValueCount --> VInt ( WriteVInt32(Int32) EntryType,CompressionType --> Byte ( WriteByte(Byte) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) MinValue,GCD,MissingOffset,AddressOffset,DataOffset --> Int64 ( WriteInt64(Int64) ) TableSize --> vInt ( WriteVInt32(Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Sorted fields have two entries: a Lucene45DocValuesProducer.BinaryEntry with the value metadata, and an ordinary Lucene45DocValuesProducer.NumericEntry for the document-to-ord metadata. SortedSet fields have three entries: a Lucene45DocValuesProducer.BinaryEntry with the value metadata, and two Lucene45DocValuesProducer.NumericEntry s for the document-to-ord-index and ordinal list metadata. FieldNumber of -1 indicates the end of metadata. EntryType is a 0 ( Lucene45DocValuesProducer.NumericEntry ) or 1 ( Lucene45DocValuesProducer.BinaryEntry ) DataOffset is the pointer to the start of the data in the DocValues data (.dvd) NumericType indicates how Numeric values will be compressed: 0 --> delta-compressed. For each block of 16k integers, every integer is delta-encoded from the minimum value within the block. 1 --> gcd-compressed. When all integers share a common divisor, only quotients are stored using blocks of delta-encoded ints. 2 --> table-compressed. When the number of unique numeric values is small and it would save space, a lookup table of unique values is written, followed by the ordinal for each document. BinaryType indicates how Binary values will be stored: 0 --> fixed-width. All values have the same length, addressing by multiplication. 1 --> variable-width. An address for each value is stored. 2 --> prefix-compressed. An address to the start of every interval'th value is stored. MinLength and MaxLength represent the min and max byte[] value lengths for Binary values. If they are equal, then all values are of a fixed size, and can be addressed as DataOffset + (docID * length). Otherwise, the binary values are of variable size, and packed integer metadata (PackedVersion,BlockSize) is written for the addresses. MissingOffset points to a byte[] containing a bitset of all documents that had a value for the field. If its -1, then there are no missing values. Checksum contains the CRC32 checksum of all bytes in the .dvm file up until the checksum. this is used to verify integrity of the file on opening the index. The DocValues data or .dvd file. For DocValues field, this stores the actual per-document data (the heavy-lifting) DocValues data (.dvd) --> Header,<NumericData | BinaryData | SortedData> NumFields ,Footer NumericData --> DeltaCompressedNumerics | TableCompressedNumerics | GCDCompressedNumerics BinaryData --> Byte ( WriteByte(Byte) ) DataLength ,Addresses SortedData --> FST<Int64> ( FST<T> ) DeltaCompressedNumerics --> BlockPackedInts(blockSize=16k) ( BlockPackedWriter ) TableCompressedNumerics --> PackedInts ( PackedInt32s ) GCDCompressedNumerics --> BlockPackedInts(blockSize=16k) ( BlockPackedWriter ) Addresses --> MonotonicBlockPackedInts(blockSize=16k) ( MonotonicBlockPackedWriter ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) SortedSet entries store the list of ordinals in their BinaryData as a sequences of increasing vLongs ( WriteVInt64(Int64) ), delta-encoded. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesFormat Lucene45DocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax public sealed class Lucene45DocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source Lucene45DocValuesFormat() Sole Constructor Declaration public Lucene45DocValuesFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.BinaryEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.BinaryEntry.html",
    "title": "Class Lucene45DocValuesProducer.BinaryEntry | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45DocValuesProducer.BinaryEntry Metadata entry for a binary docvalues field. Inheritance System.Object Lucene45DocValuesProducer.BinaryEntry Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax protected class BinaryEntry : object Properties | Improve this Doc View Source AddressesOffset Offset to the addressing data that maps a value to its slice of the byte[] . Declaration public long AddressesOffset { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source AddressInterval Interval of shared prefix chunks (when using prefix-compressed binary). Declaration public long AddressInterval { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source BlockSize Packed ints blocksize. Declaration public int BlockSize { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Count Count of values written. Declaration public long Count { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source PackedInt32sVersion Packed ints version used to encode addressing information. NOTE: This was packedIntsVersion (field) in Lucene. Declaration public int PackedInt32sVersion { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.html",
    "title": "Class Lucene45DocValuesProducer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45DocValuesProducer Reader for Lucene45DocValuesFormat . Inheritance System.Object DocValuesProducer Lucene45DocValuesProducer Implements IDisposable Inherited Members DocValuesProducer.Dispose() Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax public class Lucene45DocValuesProducer : DocValuesProducer, IDisposable Constructors | Improve this Doc View Source Lucene45DocValuesProducer(SegmentReadState, String, String, String, String) Expert: instantiates a new reader. Declaration protected Lucene45DocValuesProducer(SegmentReadState state, string dataCodec, string dataExtension, string metaCodec, string metaExtension) Parameters Type Name Description SegmentReadState state System.String dataCodec System.String dataExtension System.String metaCodec System.String metaExtension Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides DocValuesProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides DocValuesProducer.Dispose(Boolean) | Improve this Doc View Source GetAddressInstance(IndexInput, FieldInfo, Lucene45DocValuesProducer.BinaryEntry) Returns an address instance for variable-length binary values. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected virtual MonotonicBlockPackedReader GetAddressInstance(IndexInput data, FieldInfo field, Lucene45DocValuesProducer.BinaryEntry bytes) Parameters Type Name Description IndexInput data FieldInfo field Lucene45DocValuesProducer.BinaryEntry bytes Returns Type Description MonotonicBlockPackedReader | Improve this Doc View Source GetBinary(FieldInfo) Declaration public override BinaryDocValues GetBinary(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description BinaryDocValues Overrides DocValuesProducer.GetBinary(FieldInfo) | Improve this Doc View Source GetDocsWithField(FieldInfo) Declaration public override IBits GetDocsWithField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description IBits Overrides DocValuesProducer.GetDocsWithField(FieldInfo) | Improve this Doc View Source GetIntervalInstance(IndexInput, FieldInfo, Lucene45DocValuesProducer.BinaryEntry) Returns an address instance for prefix-compressed binary values. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected virtual MonotonicBlockPackedReader GetIntervalInstance(IndexInput data, FieldInfo field, Lucene45DocValuesProducer.BinaryEntry bytes) Parameters Type Name Description IndexInput data FieldInfo field Lucene45DocValuesProducer.BinaryEntry bytes Returns Type Description MonotonicBlockPackedReader | Improve this Doc View Source GetNumeric(FieldInfo) Declaration public override NumericDocValues GetNumeric(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description NumericDocValues Overrides DocValuesProducer.GetNumeric(FieldInfo) | Improve this Doc View Source GetOrdIndexInstance(IndexInput, FieldInfo, Lucene45DocValuesProducer.NumericEntry) Returns an address instance for sortedset ordinal lists. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected virtual MonotonicBlockPackedReader GetOrdIndexInstance(IndexInput data, FieldInfo field, Lucene45DocValuesProducer.NumericEntry entry) Parameters Type Name Description IndexInput data FieldInfo field Lucene45DocValuesProducer.NumericEntry entry Returns Type Description MonotonicBlockPackedReader | Improve this Doc View Source GetSorted(FieldInfo) Declaration public override SortedDocValues GetSorted(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description SortedDocValues Overrides DocValuesProducer.GetSorted(FieldInfo) | Improve this Doc View Source GetSortedSet(FieldInfo) Declaration public override SortedSetDocValues GetSortedSet(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description SortedSetDocValues Overrides DocValuesProducer.GetSortedSet(FieldInfo) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides DocValuesProducer.RamBytesUsed() Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.NumericEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.NumericEntry.html",
    "title": "Class Lucene45DocValuesProducer.NumericEntry | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45DocValuesProducer.NumericEntry Metadata entry for a numeric docvalues field. Inheritance System.Object Lucene45DocValuesProducer.NumericEntry Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax protected class NumericEntry : object Properties | Improve this Doc View Source BlockSize Packed s blocksize. Declaration public int BlockSize { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Count Count of values written. Declaration public long Count { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source Offset Offset to the actual numeric values. Declaration public long Offset { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source PackedInt32sVersion Packed s version used to encode these numerics. NOTE: This was packedIntsVersion (field) in Lucene Declaration public int PackedInt32sVersion { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.SortedSetEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.SortedSetEntry.html",
    "title": "Class Lucene45DocValuesProducer.SortedSetEntry | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45DocValuesProducer.SortedSetEntry Metadata entry for a sorted-set docvalues field. Inheritance System.Object Lucene45DocValuesProducer.SortedSetEntry Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax protected class SortedSetEntry : object"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene46 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene46 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene 4.6 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .doc Contains the list of docs which contain each term along with frequency Positions .pos Stores position information about where a term occurs in the index Payloads .pay Stores additional per-position metadata information such as character offsets and user payloads Norms .nvd, .nvm Encodes length and boost factors for docs and fields Per-Document Values .dvd, .dvm Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. In version 4.1, the format of the postings list changed to use either of FOR compression or variable-byte encoding, depending upon the frequency of the term. Terms appearing only once were changed to inline directly into the term dictionary. Stored fields are compressed by default. In version 4.2, term vectors are compressed by default. DocValues has a new multi-valued type (SortedSet), that can be used for faceting/grouping/joining on multi-valued fields. In version 4.5, DocValues were extended to explicitly represent missing values. In version 4.6, FieldInfos were extended to support per-field DocValues generation, to allow updating NumericDocValues fields. In version 4.8, checksum footers were added to the end of each index file for improved data integrity. Specifically, the last 8 bytes of every index file contain the zlib-crc32 checksum of the file. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene46Codec Implements the Lucene 4.6 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene46 package documentation for file format details. @lucene.experimental Lucene46FieldInfosFormat Lucene 4.6 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,DocValuesGen,Attributes> FieldsCount ,Footer Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldsCount --> VInt ( WriteVInt32(Int32) ) FieldName --> String ( WriteString(String) ) FieldBits, DocValuesBits --> Byte ( WriteByte(Byte) ) FieldNumber --> VInt ( WriteInt32(Int32) ) Attributes --> IDictionary<String,String> ( ) DocValuesGen --> Int64 ( WriteInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 string. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: NumericDocValues . ( NUMERIC ) 2: BinaryDocValues . ( BINARY ) 3: SortedDocValues . ( SORTED ) DocValuesGen is the generation count of the field's DocValues . If this is -1, there are no DocValues updates to that field. Anything above zero means there are updates stored by DocValuesFormat . Attributes: a key-value map of codec-private attributes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene46SegmentInfoFormat Lucene 4.6 Segment info format. Files: .si : Header, SegVersion, SegSize, IsCompoundFile, Diagnostics, Files, Footer Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SegSize --> Int32 ( WriteInt32(Int32) ) SegVersion --> String ( WriteString(String) ) Files --> ISet<String> ( ) Diagnostics --> IDictionary<String,String> ( ) IsCompoundFile --> Int8 ( WriteByte(Byte) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Field Descriptions: SegVersion is the code version that created the segment. SegSize is the number of documents contained in the segment index. IsCompoundFile records whether the segment is written as a compound file or not. If this is -1, the segment is not a compound file. If it is 1, the segment is a compound file. The Diagnostics Map is privately written by IndexWriter , as a debugging aid, for each segment it creates. It includes metadata like the current Lucene version, OS, .NET/Java version, why the segment was created (merge, flush, addIndexes), etc. Files is a list of files referred to by this segment. @lucene.experimental Lucene46SegmentInfoReader Lucene 4.6 implementation of SegmentInfoReader . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene46SegmentInfoWriter Lucene 4.0 implementation of SegmentInfoWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46Codec.html",
    "title": "Class Lucene46Codec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene46Codec Implements the Lucene 4.6 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene46 package documentation for file format details. @lucene.experimental Inheritance System.Object Codec Lucene46Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() Namespace : Lucene.Net.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax public class Lucene46Codec : Codec Constructors | Improve this Doc View Source Lucene46Codec() Sole constructor. Declaration public Lucene46Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override sealed DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override sealed FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override sealed NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override sealed SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override sealed StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetDocValuesFormatForField(String) Returns the docvalues format that should be used for writing new segments of field . The default implementation always returns \"Lucene45\" Declaration public virtual DocValuesFormat GetDocValuesFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description DocValuesFormat | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene41\" Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46FieldInfosFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46FieldInfosFormat.html",
    "title": "Class Lucene46FieldInfosFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene46FieldInfosFormat Lucene 4.6 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,DocValuesGen,Attributes> FieldsCount ,Footer Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldsCount --> VInt ( WriteVInt32(Int32) ) FieldName --> String ( WriteString(String) ) FieldBits, DocValuesBits --> Byte ( WriteByte(Byte) ) FieldNumber --> VInt ( WriteInt32(Int32) ) Attributes --> IDictionary<String,String> ( ) DocValuesGen --> Int64 ( WriteInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 string. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: NumericDocValues . ( NUMERIC ) 2: BinaryDocValues . ( BINARY ) 3: SortedDocValues . ( SORTED ) DocValuesGen is the generation count of the field's DocValues . If this is -1, there are no DocValues updates to that field. Anything above zero means there are updates stored by DocValuesFormat . Attributes: a key-value map of codec-private attributes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosFormat Lucene46FieldInfosFormat Namespace : Lucene.Net.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax public sealed class Lucene46FieldInfosFormat : FieldInfosFormat Constructors | Improve this Doc View Source Lucene46FieldInfosFormat() Sole constructor. Declaration public Lucene46FieldInfosFormat() Properties | Improve this Doc View Source FieldInfosReader Declaration public override FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader Overrides FieldInfosFormat.FieldInfosReader | Improve this Doc View Source FieldInfosWriter Declaration public override FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter Overrides FieldInfosFormat.FieldInfosWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoFormat.html",
    "title": "Class Lucene46SegmentInfoFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene46SegmentInfoFormat Lucene 4.6 Segment info format. Files: .si : Header, SegVersion, SegSize, IsCompoundFile, Diagnostics, Files, Footer Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SegSize --> Int32 ( WriteInt32(Int32) ) SegVersion --> String ( WriteString(String) ) Files --> ISet<String> ( ) Diagnostics --> IDictionary<String,String> ( ) IsCompoundFile --> Int8 ( WriteByte(Byte) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Field Descriptions: SegVersion is the code version that created the segment. SegSize is the number of documents contained in the segment index. IsCompoundFile records whether the segment is written as a compound file or not. If this is -1, the segment is not a compound file. If it is 1, the segment is a compound file. The Diagnostics Map is privately written by IndexWriter , as a debugging aid, for each segment it creates. It includes metadata like the current Lucene version, OS, .NET/Java version, why the segment was created (merge, flush, addIndexes), etc. Files is a list of files referred to by this segment. @lucene.experimental Inheritance System.Object SegmentInfoFormat Lucene46SegmentInfoFormat Namespace : Lucene.Net.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax public class Lucene46SegmentInfoFormat : SegmentInfoFormat Constructors | Improve this Doc View Source Lucene46SegmentInfoFormat() Sole constructor. Declaration public Lucene46SegmentInfoFormat() Fields | Improve this Doc View Source SI_EXTENSION File extension used to store SegmentInfo . Declaration public static readonly string SI_EXTENSION Field Value Type Description System.String Properties | Improve this Doc View Source SegmentInfoReader Declaration public override SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader Overrides SegmentInfoFormat.SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Declaration public override SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter Overrides SegmentInfoFormat.SegmentInfoWriter See Also SegmentInfos"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoReader.html",
    "title": "Class Lucene46SegmentInfoReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene46SegmentInfoReader Lucene 4.6 implementation of SegmentInfoReader . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoReader Lucene46SegmentInfoReader Namespace : Lucene.Net.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax public class Lucene46SegmentInfoReader : SegmentInfoReader Constructors | Improve this Doc View Source Lucene46SegmentInfoReader() Sole constructor. Declaration public Lucene46SegmentInfoReader() Methods | Improve this Doc View Source Read(Directory, String, IOContext) Declaration public override SegmentInfo Read(Directory dir, string segment, IOContext context) Parameters Type Name Description Directory dir System.String segment IOContext context Returns Type Description SegmentInfo Overrides SegmentInfoReader.Read(Directory, String, IOContext) See Also Lucene46SegmentInfoFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoWriter.html",
    "title": "Class Lucene46SegmentInfoWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene46SegmentInfoWriter Lucene 4.0 implementation of SegmentInfoWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoWriter Lucene46SegmentInfoWriter Namespace : Lucene.Net.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax public class Lucene46SegmentInfoWriter : SegmentInfoWriter Constructors | Improve this Doc View Source Lucene46SegmentInfoWriter() Sole constructor. Declaration public Lucene46SegmentInfoWriter() Methods | Improve this Doc View Source Write(Directory, SegmentInfo, FieldInfos, IOContext) Save a single segment's info. Declaration public override void Write(Directory dir, SegmentInfo si, FieldInfos fis, IOContext ioContext) Parameters Type Name Description Directory dir SegmentInfo si FieldInfos fis IOContext ioContext Overrides SegmentInfoWriter.Write(Directory, SegmentInfo, FieldInfos, IOContext) See Also Lucene46SegmentInfoFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.MappingMultiDocsAndPositionsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.MappingMultiDocsAndPositionsEnum.html",
    "title": "Class MappingMultiDocsAndPositionsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MappingMultiDocsAndPositionsEnum Exposes flex API, merged from flex API of sub-segments, remapping docIDs (this is used for segment merging). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSetIterator DocsEnum DocsAndPositionsEnum MappingMultiDocsAndPositionsEnum Inherited Members DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public sealed class MappingMultiDocsAndPositionsEnum : DocsAndPositionsEnum Constructors | Improve this Doc View Source MappingMultiDocsAndPositionsEnum() Sole constructor. Declaration public MappingMultiDocsAndPositionsEnum() Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source EndOffset Declaration public override int EndOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.EndOffset | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source MergeState Gets or Sets the MergeState , which is used to re-map document IDs. Declaration public MergeState MergeState { get; set; } Property Value Type Description MergeState | Improve this Doc View Source NumSubs How many sub-readers we are merging. Declaration public int NumSubs { get; } Property Value Type Description System.Int32 See Also Subs | Improve this Doc View Source StartOffset Declaration public override int StartOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.StartOffset | Improve this Doc View Source Subs Returns sub-readers we are merging. Declaration public MultiDocsAndPositionsEnum.EnumWithSlice[] Subs { get; } Property Value Type Description MultiDocsAndPositionsEnum.EnumWithSlice [] Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetPayload() Declaration public override BytesRef GetPayload() Returns Type Description BytesRef Overrides DocsAndPositionsEnum.GetPayload() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source NextPosition() Declaration public override int NextPosition() Returns Type Description System.Int32 Overrides DocsAndPositionsEnum.NextPosition()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.MappingMultiDocsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.MappingMultiDocsEnum.html",
    "title": "Class MappingMultiDocsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MappingMultiDocsEnum Exposes flex API, merged from flex API of sub-segments, remapping docIDs (this is used for segment merging). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSetIterator DocsEnum MappingMultiDocsEnum Inherited Members DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public sealed class MappingMultiDocsEnum : DocsEnum Constructors | Improve this Doc View Source MappingMultiDocsEnum() Sole constructor. Declaration public MappingMultiDocsEnum() Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source MergeState Sets the MergeState , which is used to re-map document IDs. Declaration public MergeState MergeState { get; set; } Property Value Type Description MergeState | Improve this Doc View Source NumSubs How many sub-readers we are merging. Declaration public int NumSubs { get; } Property Value Type Description System.Int32 See Also Subs | Improve this Doc View Source Subs Returns sub-readers we are merging. Declaration public MultiDocsEnum.EnumWithSlice[] Subs { get; } Property Value Type Description MultiDocsEnum.EnumWithSlice [] Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.MultiLevelSkipListReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.MultiLevelSkipListReader.html",
    "title": "Class MultiLevelSkipListReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiLevelSkipListReader This abstract class reads skip lists with multiple levels. See MultiLevelSkipListWriter for the information about the encoding of the multi level skip lists. Subclasses must implement the abstract method ReadSkipData(Int32, IndexInput) which defines the actual format of the skip data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MultiLevelSkipListReader Lucene40SkipListReader Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class MultiLevelSkipListReader : IDisposable Constructors | Improve this Doc View Source MultiLevelSkipListReader(IndexInput, Int32, Int32) Creates a MultiLevelSkipListReader , where Lucene.Net.Codecs.MultiLevelSkipListReader.skipInterval and Lucene.Net.Codecs.MultiLevelSkipListReader.skipMultiplier are the same. Declaration protected MultiLevelSkipListReader(IndexInput skipStream, int maxSkipLevels, int skipInterval) Parameters Type Name Description IndexInput skipStream System.Int32 maxSkipLevels System.Int32 skipInterval | Improve this Doc View Source MultiLevelSkipListReader(IndexInput, Int32, Int32, Int32) Creates a MultiLevelSkipListReader . Declaration protected MultiLevelSkipListReader(IndexInput skipStream, int maxSkipLevels, int skipInterval, int skipMultiplier) Parameters Type Name Description IndexInput skipStream System.Int32 maxSkipLevels System.Int32 skipInterval System.Int32 skipMultiplier Fields | Improve this Doc View Source m_maxNumberOfSkipLevels The maximum number of skip levels possible for this index. Declaration protected int m_maxNumberOfSkipLevels Field Value Type Description System.Int32 | Improve this Doc View Source m_skipDoc Doc id of current skip entry per level. Declaration protected int[] m_skipDoc Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Doc Returns the id of the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual int Doc { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Disposes all resources used by this object. Subclasses may override to dispose their own resources. Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Init(Int64, Int32) Initializes the reader, for reuse on a new term. Declaration public virtual void Init(long skipPointer, int df) Parameters Type Name Description System.Int64 skipPointer System.Int32 df | Improve this Doc View Source ReadSkipData(Int32, IndexInput) Subclasses must implement the actual skip data encoding in this method. Declaration protected abstract int ReadSkipData(int level, IndexInput skipStream) Parameters Type Name Description System.Int32 level The level skip data shall be read from. IndexInput skipStream The skip stream to read from. Returns Type Description System.Int32 | Improve this Doc View Source SeekChild(Int32) Seeks the skip entry on the given level. Declaration protected virtual void SeekChild(int level) Parameters Type Name Description System.Int32 level | Improve this Doc View Source SetLastSkipData(Int32) Copies the values of the last read skip entry on this level . Declaration protected virtual void SetLastSkipData(int level) Parameters Type Name Description System.Int32 level | Improve this Doc View Source SkipTo(Int32) Skips entries to the first beyond the current whose document number is greater than or equal to target . Returns the current doc count. Declaration public virtual int SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.MultiLevelSkipListWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.MultiLevelSkipListWriter.html",
    "title": "Class MultiLevelSkipListWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiLevelSkipListWriter This abstract class writes skip lists with multiple levels. Example for skipInterval = 3: c (skip level 2) c c c (skip level 1) x x x x x x x x x x (skip level 0) d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d (posting list) 3 6 9 12 15 18 21 24 27 30 (df) d - document x - skip data c - skip data with child pointer Skip level i contains every skipInterval-th entry from skip level i-1. Therefore the number of entries on level i is: floor(df / ((skipInterval ^ (i + 1))). Each skip entry on a level i>0 contains a pointer to the corresponding skip entry in list i-1. this guarantees a logarithmic amount of skips to find the target document. While this class takes care of writing the different skip levels, subclasses must define the actual format of the skip data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MultiLevelSkipListWriter Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class MultiLevelSkipListWriter : object Constructors | Improve this Doc View Source MultiLevelSkipListWriter(Int32, Int32, Int32) Creates a MultiLevelSkipListWriter , where Lucene.Net.Codecs.MultiLevelSkipListWriter.skipInterval and Lucene.Net.Codecs.MultiLevelSkipListWriter.skipMultiplier are the same. Declaration protected MultiLevelSkipListWriter(int skipInterval, int maxSkipLevels, int df) Parameters Type Name Description System.Int32 skipInterval System.Int32 maxSkipLevels System.Int32 df | Improve this Doc View Source MultiLevelSkipListWriter(Int32, Int32, Int32, Int32) Creates a MultiLevelSkipListWriter . Declaration protected MultiLevelSkipListWriter(int skipInterval, int skipMultiplier, int maxSkipLevels, int df) Parameters Type Name Description System.Int32 skipInterval System.Int32 skipMultiplier System.Int32 maxSkipLevels System.Int32 df Fields | Improve this Doc View Source m_numberOfSkipLevels Number of levels in this skip list. Declaration protected int m_numberOfSkipLevels Field Value Type Description System.Int32 Methods | Improve this Doc View Source BufferSkip(Int32) Writes the current skip data to the buffers. The current document frequency determines the max level is skip data is to be written to. Declaration public virtual void BufferSkip(int df) Parameters Type Name Description System.Int32 df The current document frequency. | Improve this Doc View Source Init() Allocates internal skip buffers. Declaration protected virtual void Init() | Improve this Doc View Source ResetSkip() Creates new buffers or empties the existing ones. Declaration public virtual void ResetSkip() | Improve this Doc View Source WriteSkip(IndexOutput) Writes the buffered skip lists to the given output. Declaration public virtual long WriteSkip(IndexOutput output) Parameters Type Name Description IndexOutput output The IndexOutput the skip lists shall be written to. Returns Type Description System.Int64 The pointer the skip list starts. | Improve this Doc View Source WriteSkipData(Int32, IndexOutput) Subclasses must implement the actual skip data encoding in this method. Declaration protected abstract void WriteSkipData(int level, IndexOutput skipBuffer) Parameters Type Name Description System.Int32 level The level skip data shall be writing for. IndexOutput skipBuffer The skip buffer to write to."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.NormsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.NormsFormat.html",
    "title": "Class NormsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormsFormat Encodes/decodes per-document score normalization values. Inheritance System.Object NormsFormat Lucene40NormsFormat Lucene42NormsFormat Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class NormsFormat : object Constructors | Improve this Doc View Source NormsFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected NormsFormat() Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Returns a DocValuesConsumer to write norms to the index. Declaration public abstract DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer | Improve this Doc View Source NormsProducer(SegmentReadState) Returns a DocValuesProducer to read norms from the index. NOTE: by the time this call returns, it must hold open any files it will need to use; else, those files may be deleted. Additionally, required files may be deleted during the execution of this call before there is a chance to open them. Under these circumstances an should be thrown by the implementation. are expected and will automatically cause a retry of the segment opening logic with the newly revised segments. Declaration public abstract DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PerField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PerField.html",
    "title": "Namespace Lucene.Net.Codecs.PerField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.PerField <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Postings format that can delegate to different formats per-field. Classes PerFieldDocValuesFormat Enables per field docvalues support. Note, when extending this class, the name ( Name ) is written into the index. In order for the field to be read, the name must resolve to your implementation via ForName(String) . This method uses GetDocValuesFormat(String) to resolve format names. See DefaultDocValuesFormatFactory for information about how to implement your own DocValuesFormat . Files written by each docvalues format have an additional suffix containing the format name. For example, in a per-field configuration instead of _1.dat filenames would look like _1_Lucene40_0.dat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk PerFieldPostingsFormat Enables per field postings support. Note, when extending this class, the name ( Name ) is written into the index. In order for the field to be read, the name must resolve to your implementation via ForName(String) . This method uses GetPostingsFormat(String) to resolve format names. See DefaultPostingsFormatFactory for information about how to implement your own PostingsFormat . Files written by each posting format have an additional suffix containing the format name. For example, in a per-field configuration instead of _1.prx filenames would look like _1_Lucene40_0.prx . @lucene.experimental"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PerField.PerFieldDocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PerField.PerFieldDocValuesFormat.html",
    "title": "Class PerFieldDocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PerFieldDocValuesFormat Enables per field docvalues support. Note, when extending this class, the name ( Name ) is written into the index. In order for the field to be read, the name must resolve to your implementation via ForName(String) . This method uses GetDocValuesFormat(String) to resolve format names. See DefaultDocValuesFormatFactory for information about how to implement your own DocValuesFormat . Files written by each docvalues format have an additional suffix containing the format name. For example, in a per-field configuration instead of _1.dat filenames would look like _1_Lucene40_0.dat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesFormat PerFieldDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats Namespace : Lucene.Net.Codecs.PerField Assembly : Lucene.Net.dll Syntax public abstract class PerFieldDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source PerFieldDocValuesFormat() Sole constructor. Declaration public PerFieldDocValuesFormat() Fields | Improve this Doc View Source PER_FIELD_FORMAT_KEY FieldInfo attribute name used to store the format name for each field. Declaration public static readonly string PER_FIELD_FORMAT_KEY Field Value Type Description System.String | Improve this Doc View Source PER_FIELD_SUFFIX_KEY FieldInfo attribute name used to store the segment suffix name for each field. Declaration public static readonly string PER_FIELD_SUFFIX_KEY Field Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override sealed DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override sealed DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source GetDocValuesFormatForField(String) Returns the doc values format that should be used for writing new segments of field . The field to format mapping is written to the index, so this method is only invoked when writing, not when reading. Declaration public abstract DocValuesFormat GetDocValuesFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description DocValuesFormat See Also IDocValuesFormatFactory DefaultDocValuesFormatFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PerField.PerFieldPostingsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PerField.PerFieldPostingsFormat.html",
    "title": "Class PerFieldPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PerFieldPostingsFormat Enables per field postings support. Note, when extending this class, the name ( Name ) is written into the index. In order for the field to be read, the name must resolve to your implementation via ForName(String) . This method uses GetPostingsFormat(String) to resolve format names. See DefaultPostingsFormatFactory for information about how to implement your own PostingsFormat . Files written by each posting format have an additional suffix containing the format name. For example, in a per-field configuration instead of _1.prx filenames would look like _1_Lucene40_0.prx . @lucene.experimental Inheritance System.Object PostingsFormat PerFieldPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats Namespace : Lucene.Net.Codecs.PerField Assembly : Lucene.Net.dll Syntax public abstract class PerFieldPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source PerFieldPostingsFormat() Sole constructor. Declaration public PerFieldPostingsFormat() Fields | Improve this Doc View Source PER_FIELD_FORMAT_KEY FieldInfo attribute name used to store the format name for each field. Declaration public static readonly string PER_FIELD_FORMAT_KEY Field Value Type Description System.String | Improve this Doc View Source PER_FIELD_SUFFIX_KEY FieldInfo attribute name used to store the segment suffix name for each field. Declaration public static readonly string PER_FIELD_SUFFIX_KEY Field Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override sealed FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override sealed FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The field to format mapping is written to the index, so this method is only invoked when writing, not when reading. Declaration public abstract PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat See Also IPostingsFormatFactory DefaultPostingsFormatFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsBaseFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsBaseFormat.html",
    "title": "Class PostingsBaseFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsBaseFormat Lucene40PostingsBaseFormat Lucene41PostingsBaseFormat Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsBaseFormat : object Constructors | Improve this Doc View Source PostingsBaseFormat(String) Sole constructor. Declaration protected PostingsBaseFormat(string name) Parameters Type Name Description System.String name Properties | Improve this Doc View Source Name Unique name that's used to retrieve this codec when reading the index. Declaration public string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source PostingsReaderBase(SegmentReadState) Creates the PostingsReaderBase for this format. Declaration public abstract PostingsReaderBase PostingsReaderBase(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description PostingsReaderBase | Improve this Doc View Source PostingsWriterBase(SegmentWriteState) Creates the PostingsWriterBase for this format. Declaration public abstract PostingsWriterBase PostingsWriterBase(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description PostingsWriterBase"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsConsumer.html",
    "title": "Class PostingsConsumer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PostingsConsumer Abstract API that consumes postings for an individual term. The lifecycle is: PostingsConsumer is returned for each term by StartTerm(BytesRef) . StartDoc(Int32, Int32) is called for each document where the term occurs, specifying id and term frequency for that document. If positions are enabled for the field, then AddPosition(Int32, BytesRef, Int32, Int32) will be called for each occurrence in the document. FinishDoc() is called when the producer is done adding positions to the document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsConsumer PostingsWriterBase Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsConsumer : object Constructors | Improve this Doc View Source PostingsConsumer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected PostingsConsumer() Methods | Improve this Doc View Source AddPosition(Int32, BytesRef, Int32, Int32) Add a new position & payload, and start/end offset. A null payload means no payload; a non- null payload with zero length also means no payload. Caller may reuse the BytesRef for the payload between calls (method must fully consume the payload). startOffset and endOffset will be -1 when offsets are not indexed. Declaration public abstract void AddPosition(int position, BytesRef payload, int startOffset, int endOffset) Parameters Type Name Description System.Int32 position BytesRef payload System.Int32 startOffset System.Int32 endOffset | Improve this Doc View Source FinishDoc() Called when we are done adding positions & payloads for each doc. Declaration public abstract void FinishDoc() | Improve this Doc View Source Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) Default merge impl: append documents, mapping around deletes. Declaration public virtual TermStats Merge(MergeState mergeState, IndexOptions indexOptions, DocsEnum postings, FixedBitSet visitedDocs) Parameters Type Name Description MergeState mergeState IndexOptions indexOptions DocsEnum postings FixedBitSet visitedDocs Returns Type Description TermStats | Improve this Doc View Source StartDoc(Int32, Int32) Adds a new doc in this term. freq will be -1 when term frequencies are omitted for the field. Declaration public abstract void StartDoc(int docId, int freq) Parameters Type Name Description System.Int32 docId System.Int32 freq"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsFormat.html",
    "title": "Class PostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PostingsFormat Encodes/decodes terms, postings, and proximity data. Note, when extending this class, the name ( Name ) may written into the index in certain configurations. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetPostingsFormat(String) to resolve format names. If you implement your own format: Subclass this class. Subclass DefaultPostingsFormatFactory , override Initialize() , and add the line base.ScanForPostingsFormats(typeof(YourPostingsFormat).GetTypeInfo().Assembly) . If you have any format classes in your assembly that are not meant for reading, you can add the ExcludePostingsFormatFromScanAttribute to them so they are ignored by the scan. Set the new IPostingsFormatFactory by calling SetPostingsFormatFactory(IPostingsFormatFactory) at application startup. If your format has dependencies, you may also override GetPostingsFormat(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. PostingsFormat Names Unlike the Java version, format names are by default convention-based on the class name. If you name your custom format class \"MyCustomPostingsFormat\", the codec name will the same name without the \"PostingsFormat\" suffix: \"MyCustom\". You can override this default behavior by using the PostingsFormatNameAttribute to name the format differently than this convention. Format names must be all ASCII alphanumeric, and less than 128 characters in length. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat Lucene40PostingsFormat Lucene41PostingsFormat PerFieldPostingsFormat Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsFormat : object Constructors | Improve this Doc View Source PostingsFormat() Creates a new postings format. The provided name will be written into the index segment in some configurations (such as when using PerFieldPostingsFormat ): in such configurations, for the segment to be read this class should be registered by subclassing DefaultPostingsFormatFactory and calling in the class constructor. The new IPostingsFormatFactory can be registered by calling SetPostingsFormatFactory(IPostingsFormatFactory) at application startup. Declaration protected PostingsFormat() Fields | Improve this Doc View Source EMPTY Zero-length PostingsFormat array. Declaration public static readonly PostingsFormat[] EMPTY Field Value Type Description PostingsFormat [] Properties | Improve this Doc View Source AvailablePostingsFormats Returns a list of all available format names. Declaration public static ICollection<string> AvailablePostingsFormats { get; } Property Value Type Description ICollection < System.String > | Improve this Doc View Source Name Returns this posting format's name. Declaration public string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Writes a new segment. Declaration public abstract FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Reads a segment. NOTE: by the time this call returns, it must hold open any files it will need to use; else, those files may be deleted. Additionally, required files may be deleted during the execution of this call before there is a chance to open them. Under these circumstances an should be thrown by the implementation. s are expected and will automatically cause a retry of the segment opening logic with the newly revised segments. Declaration public abstract FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer | Improve this Doc View Source ForName(String) Looks up a format by name. Declaration public static PostingsFormat ForName(string name) Parameters Type Name Description System.String name Returns Type Description PostingsFormat | Improve this Doc View Source GetPostingsFormatFactory() Gets the associated PostingsFormat factory. Declaration public static IPostingsFormatFactory GetPostingsFormatFactory() Returns Type Description IPostingsFormatFactory The PostingsFormat factory. | Improve this Doc View Source SetPostingsFormatFactory(IPostingsFormatFactory) Sets the IPostingsFormatFactory instance used to instantiate PostingsFormat subclasses. Declaration public static void SetPostingsFormatFactory(IPostingsFormatFactory postingsFormatFactory) Parameters Type Name Description IPostingsFormatFactory postingsFormatFactory The new IPostingsFormatFactory . | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String See Also DefaultPostingsFormatFactory IPostingsFormatFactory PostingsFormatNameAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsFormatNameAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsFormatNameAttribute.html",
    "title": "Class PostingsFormatNameAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PostingsFormatNameAttribute Represents an attribute that is used to name a PostingsFormat , if a name other than the default PostingsFormat naming convention is desired. Inheritance System.Object ServiceNameAttribute PostingsFormatNameAttribute Inherited Members ServiceNameAttribute.Name Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public sealed class PostingsFormatNameAttribute : ServiceNameAttribute Constructors | Improve this Doc View Source PostingsFormatNameAttribute(String) Declaration public PostingsFormatNameAttribute(string name) Parameters Type Name Description System.String name"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsReaderBase.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsReaderBase.html",
    "title": "Class PostingsReaderBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PostingsReaderBase The core terms dictionaries (BlockTermsReader, BlockTreeTermsReader ) interact with a single instance of this class to manage creation of DocsEnum and DocsAndPositionsEnum instances. It provides an IndexInput (termsIn) where this class may read any previously stored data that it had written in its corresponding PostingsWriterBase at indexing time. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsReaderBase Lucene40PostingsReader Lucene41PostingsReader Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsReaderBase : IDisposable Constructors | Improve this Doc View Source PostingsReaderBase() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected PostingsReaderBase() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Actually decode metadata for next term. Declaration public abstract void DecodeTerm(long[] longs, DataInput in, FieldInfo fieldInfo, BlockTermState state, bool absolute) Parameters Type Name Description System.Int64 [] longs DataInput in FieldInfo fieldInfo BlockTermState state System.Boolean absolute See Also EncodeTerm ( System.Int64 [], DataOutput , FieldInfo , BlockTermState , System.Boolean ) | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Must fully consume state, since after this call that TermState may be reused. Declaration public abstract DocsEnum Docs(FieldInfo fieldInfo, BlockTermState state, IBits skipDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState state IBits skipDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Must fully consume state, since after this call that TermState may be reused. Declaration public abstract DocsAndPositionsEnum DocsAndPositions(FieldInfo fieldInfo, BlockTermState state, IBits skipDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState state IBits skipDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum | Improve this Doc View Source Init(IndexInput) Performs any initialization, such as reading and verifying the header from the provided terms dictionary IndexInput . Declaration public abstract void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn | Improve this Doc View Source NewTermState() Return a newly created empty TermState . Declaration public abstract BlockTermState NewTermState() Returns Type Description BlockTermState | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsWriterBase.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsWriterBase.html",
    "title": "Class PostingsWriterBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PostingsWriterBase Extension of PostingsConsumer to support pluggable term dictionaries. This class contains additional hooks to interact with the provided term dictionaries such as BlockTreeTermsWriter . If you want to re-use an existing implementation and are only interested in customizing the format of the postings list, extend this class instead. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsConsumer PostingsWriterBase Lucene41PostingsWriter Implements IDisposable Inherited Members PostingsConsumer.StartDoc(Int32, Int32) PostingsConsumer.AddPosition(Int32, BytesRef, Int32, Int32) PostingsConsumer.FinishDoc() PostingsConsumer.Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsWriterBase : PostingsConsumer, IDisposable Constructors | Improve this Doc View Source PostingsWriterBase() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected PostingsWriterBase() Methods | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) Encode metadata as long[] and byte[] . absolute controls whether current term is delta encoded according to latest term. Usually elements in longs are file pointers, so each one always increases when a new term is consumed. out is used to write generic bytes, which are not monotonic. NOTE: sometimes long[] might contain \"don't care\" values that are unused, e.g. the pointer to postings list may not be defined for some terms but is defined for others, if it is designed to inline some postings data in term dictionary. In this case, the postings writer should always use the last value, so that each element in metadata long[] remains monotonic. Declaration public abstract void EncodeTerm(long[] longs, DataOutput out, FieldInfo fieldInfo, BlockTermState state, bool absolute) Parameters Type Name Description System.Int64 [] longs DataOutput out FieldInfo fieldInfo BlockTermState state System.Boolean absolute | Improve this Doc View Source FinishTerm(BlockTermState) Finishes the current term. The provided BlockTermState contains the term's summary statistics, and will holds metadata from PBF when returned. Declaration public abstract void FinishTerm(BlockTermState state) Parameters Type Name Description BlockTermState state | Improve this Doc View Source Init(IndexOutput) Called once after startup, before any terms have been added. Implementations typically write a header to the provided termsOut . Declaration public abstract void Init(IndexOutput termsOut) Parameters Type Name Description IndexOutput termsOut | Improve this Doc View Source NewTermState() Return a newly created empty TermState Declaration public abstract BlockTermState NewTermState() Returns Type Description BlockTermState | Improve this Doc View Source SetField(FieldInfo) Sets the current field for writing, and returns the fixed length of long[] metadata (which is fixed per field), called when the writing switches to another field. Declaration public abstract int SetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description System.Int32 | Improve this Doc View Source StartTerm() Start a new term. Note that a matching call to FinishTerm(BlockTermState) is done, only if the term has at least one document. Declaration public abstract void StartTerm() Implements IDisposable See Also PostingsReaderBase"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoFormat.html",
    "title": "Class SegmentInfoFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentInfoFormat Expert: Controls the format of the SegmentInfo (segment metadata file). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoFormat Lucene3xSegmentInfoFormat Lucene40SegmentInfoFormat Lucene46SegmentInfoFormat Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class SegmentInfoFormat : object Constructors | Improve this Doc View Source SegmentInfoFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SegmentInfoFormat() Properties | Improve this Doc View Source SegmentInfoReader Returns the SegmentInfoReader for reading SegmentInfo instances. Declaration public abstract SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Returns the SegmentInfoWriter for writing SegmentInfo instances. Declaration public abstract SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter See Also SegmentInfo"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoReader.html",
    "title": "Class SegmentInfoReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentInfoReader Specifies an API for classes that can read SegmentInfo information. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoReader Lucene3xSegmentInfoReader Lucene40SegmentInfoReader Lucene46SegmentInfoReader Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class SegmentInfoReader : object Constructors | Improve this Doc View Source SegmentInfoReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SegmentInfoReader() Methods | Improve this Doc View Source Read(Directory, String, IOContext) Read SegmentInfo data from a directory. Declaration public abstract SegmentInfo Read(Directory directory, string segmentName, IOContext context) Parameters Type Name Description Directory directory Directory to read from. System.String segmentName Name of the segment to read. IOContext context IO context. Returns Type Description SegmentInfo Infos instance to be populated with data."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoWriter.html",
    "title": "Class SegmentInfoWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentInfoWriter Specifies an API for classes that can write out SegmentInfo data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoWriter Lucene40SegmentInfoWriter Lucene46SegmentInfoWriter Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class SegmentInfoWriter : object Constructors | Improve this Doc View Source SegmentInfoWriter() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SegmentInfoWriter() Methods | Improve this Doc View Source Write(Directory, SegmentInfo, FieldInfos, IOContext) Write SegmentInfo data. Declaration public abstract void Write(Directory dir, SegmentInfo info, FieldInfos fis, IOContext ioContext) Parameters Type Name Description Directory dir SegmentInfo info FieldInfos fis IOContext ioContext"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsFormat.html",
    "title": "Class StoredFieldsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StoredFieldsFormat Controls the format of stored fields. Inheritance System.Object StoredFieldsFormat CompressingStoredFieldsFormat Lucene40StoredFieldsFormat Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class StoredFieldsFormat : object Constructors | Improve this Doc View Source StoredFieldsFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected StoredFieldsFormat() Methods | Improve this Doc View Source FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Returns a StoredFieldsReader to load stored fields. Declaration public abstract StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Returns Type Description StoredFieldsReader | Improve this Doc View Source FieldsWriter(Directory, SegmentInfo, IOContext) Returns a StoredFieldsWriter to write stored fields. Declaration public abstract StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Returns Type Description StoredFieldsWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsReader.html",
    "title": "Class StoredFieldsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StoredFieldsReader Codec API for reading stored fields. You need to implement VisitDocument(Int32, StoredFieldVisitor) to read the stored fields for a document, implement Clone() (creating clones of any IndexInput s used, etc), and Dispose(Boolean) to cleanup any allocated resources. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsReader CompressingStoredFieldsReader Lucene40StoredFieldsReader Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class StoredFieldsReader : IDisposable Constructors | Improve this Doc View Source StoredFieldsReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected StoredFieldsReader() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source Clone() Declaration public abstract object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source VisitDocument(Int32, StoredFieldVisitor) Visit the stored fields for document n . Declaration public abstract void VisitDocument(int n, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 n StoredFieldVisitor visitor"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsWriter.html",
    "title": "Class StoredFieldsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StoredFieldsWriter Codec API for writing stored fields: For every document, StartDocument(Int32) is called, informing the Codec how many fields will be written. WriteField(FieldInfo, IIndexableField) is called for each field in the document. After all documents have been written, Finish(FieldInfos, Int32) is called for verification/sanity-checks. Finally the writer is disposed ( Dispose(Boolean) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsWriter CompressingStoredFieldsWriter Lucene40StoredFieldsWriter Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class StoredFieldsWriter : IDisposable Constructors | Improve this Doc View Source StoredFieldsWriter() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected StoredFieldsWriter() Methods | Improve this Doc View Source Abort() Aborts writing entirely, implementation should remove any partially-written files, etc. Declaration public abstract void Abort() | Improve this Doc View Source AddDocument<T1>(IEnumerable<T1>, FieldInfos) Sugar method for StartDocument(Int32) + WriteField(FieldInfo, IIndexableField) for every stored field in the document. Declaration protected void AddDocument<T1>(IEnumerable<T1> doc, FieldInfos fieldInfos) where T1 : IIndexableField Parameters Type Name Description IEnumerable <T1> doc FieldInfos fieldInfos Type Parameters Name Description T1 | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Finish(FieldInfos, Int32) Called before Dispose() , passing in the number of documents that were written. Note that this is intentionally redundant (equivalent to the number of calls to StartDocument(Int32) , but a Codec should check that this is the case to detect the bug described in LUCENE-1282. Declaration public abstract void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs | Improve this Doc View Source FinishDocument() Called when a document and all its fields have been added. Declaration public virtual void FinishDocument() | Improve this Doc View Source Merge(MergeState) Merges in the stored fields from the readers in mergeState . The default implementation skips over deleted documents, and uses StartDocument(Int32) , WriteField(FieldInfo, IIndexableField) , and Finish(FieldInfos, Int32) , returning the number of documents that were written. Implementations can override this method for more sophisticated merging (bulk-byte copying, etc). Declaration public virtual int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 | Improve this Doc View Source StartDocument(Int32) Called before writing the stored fields of the document. WriteField(FieldInfo, IIndexableField) will be called numStoredFields times. Note that this is called even if the document has no stored fields, in this case numStoredFields will be zero. Declaration public abstract void StartDocument(int numStoredFields) Parameters Type Name Description System.Int32 numStoredFields | Improve this Doc View Source WriteField(FieldInfo, IIndexableField) Writes a single stored field. Declaration public abstract void WriteField(FieldInfo info, IIndexableField field) Parameters Type Name Description FieldInfo info IIndexableField field"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermsConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermsConsumer.html",
    "title": "Class TermsConsumer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsConsumer Abstract API that consumes terms for an individual field. The lifecycle is: TermsConsumer is returned for each field by AddField(FieldInfo) . TermsConsumer returns a PostingsConsumer for each term in StartTerm(BytesRef) . When the producer (e.g. IndexWriter) is done adding documents for the term, it calls FinishTerm(BytesRef, TermStats) , passing in the accumulated term statistics. Producer calls Finish(Int64, Int64, Int32) with the accumulated collection statistics when it is finished adding terms to the field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsConsumer Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class TermsConsumer : object Constructors | Improve this Doc View Source TermsConsumer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermsConsumer() Properties | Improve this Doc View Source Comparer Gets the IComparer<BytesRef> used to sort terms before feeding to this API. Declaration public abstract IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Methods | Improve this Doc View Source Finish(Int64, Int64, Int32) Called when we are done adding terms to this field. sumTotalTermFreq will be -1 when term frequencies are omitted for the field. Declaration public abstract void Finish(long sumTotalTermFreq, long sumDocFreq, int docCount) Parameters Type Name Description System.Int64 sumTotalTermFreq System.Int64 sumDocFreq System.Int32 docCount | Improve this Doc View Source FinishTerm(BytesRef, TermStats) Finishes the current term; numDocs must be > 0. stats.TotalTermFreq will be -1 when term frequencies are omitted for the field. Declaration public abstract void FinishTerm(BytesRef text, TermStats stats) Parameters Type Name Description BytesRef text TermStats stats | Improve this Doc View Source Merge(MergeState, IndexOptions, TermsEnum) Default merge impl. Declaration public virtual void Merge(MergeState mergeState, IndexOptions indexOptions, TermsEnum termsEnum) Parameters Type Name Description MergeState mergeState IndexOptions indexOptions TermsEnum termsEnum | Improve this Doc View Source StartTerm(BytesRef) Starts a new term in this field; this may be called with no corresponding call to finish if the term had no docs. Declaration public abstract PostingsConsumer StartTerm(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description PostingsConsumer"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermStats.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermStats.html",
    "title": "Class TermStats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermStats Holder for per-term statistics. Inheritance System.Object TermStats Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class TermStats : object Constructors | Improve this Doc View Source TermStats(Int32, Int64) Sole constructor. Declaration public TermStats(int docFreq, long totalTermFreq) Parameters Type Name Description System.Int32 docFreq System.Int64 totalTermFreq Properties | Improve this Doc View Source DocFreq How many documents have at least one occurrence of this term. Declaration public int DocFreq { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalTermFreq Total number of times this term occurs across all documents in the field. Declaration public long TotalTermFreq { get; } Property Value Type Description System.Int64 See Also DocFreq TotalTermFreq"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsFormat.html",
    "title": "Class TermVectorsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermVectorsFormat Controls the format of term vectors. Inheritance System.Object TermVectorsFormat CompressingTermVectorsFormat Lucene40TermVectorsFormat Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class TermVectorsFormat : object Constructors | Improve this Doc View Source TermVectorsFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermVectorsFormat() Methods | Improve this Doc View Source VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Returns a TermVectorsReader to read term vectors. Declaration public abstract TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos IOContext context Returns Type Description TermVectorsReader | Improve this Doc View Source VectorsWriter(Directory, SegmentInfo, IOContext) Returns a TermVectorsWriter to write term vectors. Declaration public abstract TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo IOContext context Returns Type Description TermVectorsWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsReader.html",
    "title": "Class TermVectorsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermVectorsReader Codec API for reading term vectors: This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsReader CompressingTermVectorsReader Lucene40TermVectorsReader Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class TermVectorsReader : IDisposable Constructors | Improve this Doc View Source TermVectorsReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermVectorsReader() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source Clone() Create a clone that one caller at a time may use to read term vectors. Declaration public abstract object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Get(Int32) Returns term vectors for this document, or null if term vectors were not indexed. If offsets are available they are in an OffsetAttribute available from the DocsAndPositionsEnum . Declaration public abstract Fields Get(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description Fields | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsWriter.html",
    "title": "Class TermVectorsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermVectorsWriter Codec API for writing term vectors: For every document, StartDocument(Int32) is called, informing the Codec how many fields will be written. StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) is called for each field in the document, informing the codec how many terms will be written for that field, and whether or not positions, offsets, or payloads are enabled. Within each field, StartTerm(BytesRef, Int32) is called for each term. If offsets and/or positions are enabled, then AddPosition(Int32, Int32, Int32, BytesRef) will be called for each term occurrence. After all documents have been written, Finish(FieldInfos, Int32) is called for verification/sanity-checks. Finally the writer is disposed ( Dispose(Boolean) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsWriter CompressingTermVectorsWriter Lucene40TermVectorsWriter Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class TermVectorsWriter : IDisposable Constructors | Improve this Doc View Source TermVectorsWriter() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermVectorsWriter() Properties | Improve this Doc View Source Comparer Return the IComparer<BytesRef> used to sort terms before feeding to this API. Declaration public abstract IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Methods | Improve this Doc View Source Abort() Aborts writing entirely, implementation should remove any partially-written files, etc. Declaration public abstract void Abort() | Improve this Doc View Source AddAllDocVectors(Fields, MergeState) Safe (but, slowish) default method to write every vector field in the document. Declaration protected void AddAllDocVectors(Fields vectors, MergeState mergeState) Parameters Type Name Description Fields vectors MergeState mergeState | Improve this Doc View Source AddPosition(Int32, Int32, Int32, BytesRef) Adds a term position and offsets. Declaration public abstract void AddPosition(int position, int startOffset, int endOffset, BytesRef payload) Parameters Type Name Description System.Int32 position System.Int32 startOffset System.Int32 endOffset BytesRef payload | Improve this Doc View Source AddProx(Int32, DataInput, DataInput) Called by IndexWriter when writing new segments. This is an expert API that allows the codec to consume positions and offsets directly from the indexer. The default implementation calls AddPosition(Int32, Int32, Int32, BytesRef) , but subclasses can override this if they want to efficiently write all the positions, then all the offsets, for example. NOTE: this API is extremely expert and subject to change or removal!!! This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual void AddProx(int numProx, DataInput positions, DataInput offsets) Parameters Type Name Description System.Int32 numProx DataInput positions DataInput offsets | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Finish(FieldInfos, Int32) Called before Dispose(Boolean) , passing in the number of documents that were written. Note that this is intentionally redundant (equivalent to the number of calls to StartDocument(Int32) , but a Codec should check that this is the case to detect the bug described in LUCENE-1282. Declaration public abstract void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs | Improve this Doc View Source FinishDocument() Called after a doc and all its fields have been added. Declaration public virtual void FinishDocument() | Improve this Doc View Source FinishField() Called after a field and all its terms have been added. Declaration public virtual void FinishField() | Improve this Doc View Source FinishTerm() Called after a term and all its positions have been added. Declaration public virtual void FinishTerm() | Improve this Doc View Source Merge(MergeState) Merges in the term vectors from the readers in mergeState . The default implementation skips over deleted documents, and uses StartDocument(Int32) , StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) , StartTerm(BytesRef, Int32) , AddPosition(Int32, Int32, Int32, BytesRef) , and Finish(FieldInfos, Int32) , returning the number of documents that were written. Implementations can override this method for more sophisticated merging (bulk-byte copying, etc). Declaration public virtual int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 | Improve this Doc View Source StartDocument(Int32) Called before writing the term vectors of the document. StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) will be called numVectorFields times. Note that if term vectors are enabled, this is called even if the document has no vector fields, in this case numVectorFields will be zero. Declaration public abstract void StartDocument(int numVectorFields) Parameters Type Name Description System.Int32 numVectorFields | Improve this Doc View Source StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) Called before writing the terms of the field. StartTerm(BytesRef, Int32) will be called numTerms times. Declaration public abstract void StartField(FieldInfo info, int numTerms, bool positions, bool offsets, bool payloads) Parameters Type Name Description FieldInfo info System.Int32 numTerms System.Boolean positions System.Boolean offsets System.Boolean payloads | Improve this Doc View Source StartTerm(BytesRef, Int32) Adds a term and its term frequency freq . If this field has positions and/or offsets enabled, then AddPosition(Int32, Int32, Int32, BytesRef) will be called freq times respectively. Declaration public abstract void StartTerm(BytesRef term, int freq) Parameters Type Name Description BytesRef term System.Int32 freq"
  },
  "api/Lucene.Net/Lucene.Net.Documents.BinaryDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.BinaryDocValuesField.html",
    "title": "Class BinaryDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryDocValuesField Field that stores a per-document BytesRef value. The values are stored directly with no sharing, which is a good fit when the fields don't share (many) values, such as a title field. If values may be shared and sorted it's better to use SortedDocValuesField . Here's an example usage: document.Add(new BinaryDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field BinaryDocValuesField DerefBytesDocValuesField StraightBytesDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class BinaryDocValuesField : Field, IIndexableField Constructors | Improve this Doc View Source BinaryDocValuesField(String, BytesRef) Create a new binary DocValues field. Declaration public BinaryDocValuesField(string name, BytesRef value) Parameters Type Name Description System.String name field name BytesRef value binary content Fields | Improve this Doc View Source fType Type for straight bytes DocValues . Declaration public static readonly FieldType fType Field Value Type Description FieldType Implements IIndexableField See Also BinaryDocValues"
  },
  "api/Lucene.Net/Lucene.Net.Documents.ByteDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.ByteDocValuesField.html",
    "title": "Class ByteDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteDocValuesField Field that stores a per-document value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new ByteDocValuesField(name, (byte) 22)); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field NumericDocValuesField ByteDocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class ByteDocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source ByteDocValuesField(String, Byte) Creates a new DocValues field with the specified 8-bit byte value Declaration public ByteDocValuesField(string name, byte value) Parameters Type Name Description System.String name field name System.Byte value 8-bit byte value Methods | Improve this Doc View Source SetByteValue(Byte) Declaration public override void SetByteValue(byte value) Parameters Type Name Description System.Byte value Overrides Field.SetByteValue(Byte) Implements IIndexableField See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.CompressionTools.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.CompressionTools.html",
    "title": "Class CompressionTools | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressionTools Simple utility class providing static methods to compress and decompress binary data for stored fields. this class uses the class to compress and decompress. Inheritance System.Object CompressionTools Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class CompressionTools : object Methods | Improve this Doc View Source Compress(Byte[]) Compresses all s in the array, with default level Declaration public static byte[] Compress(byte[] value) Parameters Type Name Description System.Byte [] value Returns Type Description System.Byte [] | Improve this Doc View Source Compress(Byte[], Int32, Int32) Compresses the specified range, with default level Declaration public static byte[] Compress(byte[] value, int offset, int length) Parameters Type Name Description System.Byte [] value System.Int32 offset System.Int32 length Returns Type Description System.Byte [] | Improve this Doc View Source Compress(Byte[], Int32, Int32, CompressionLevel) Compresses the specified range using the specified compressionLevel . Declaration public static byte[] Compress(byte[] value, int offset, int length, CompressionLevel compressionLevel) Parameters Type Name Description System.Byte [] value System.Int32 offset System.Int32 length CompressionLevel compressionLevel Returns Type Description System.Byte [] | Improve this Doc View Source CompressString(String) Compresses the value, with default level Declaration public static byte[] CompressString(string value) Parameters Type Name Description System.String value Returns Type Description System.Byte [] | Improve this Doc View Source CompressString(String, CompressionLevel) Compresses the value using the specified compressionLevel . Declaration public static byte[] CompressString(string value, CompressionLevel compressionLevel) Parameters Type Name Description System.String value CompressionLevel compressionLevel Returns Type Description System.Byte [] | Improve this Doc View Source Decompress(BytesRef) Decompress the array previously returned by compress (referenced by the provided BytesRef ) Declaration public static byte[] Decompress(BytesRef bytes) Parameters Type Name Description BytesRef bytes Returns Type Description System.Byte [] | Improve this Doc View Source Decompress(Byte[]) Decompress the array previously returned by compress Declaration public static byte[] Decompress(byte[] value) Parameters Type Name Description System.Byte [] value Returns Type Description System.Byte [] | Improve this Doc View Source Decompress(Byte[], Int32, Int32) Decompress the array previously returned by compress Declaration public static byte[] Decompress(byte[] value, int offset, int length) Parameters Type Name Description System.Byte [] value System.Int32 offset System.Int32 length Returns Type Description System.Byte [] | Improve this Doc View Source DecompressString(BytesRef) Decompress the array (referenced by the provided BytesRef ) previously returned by CompressString(String) back into a Declaration public static string DecompressString(BytesRef bytes) Parameters Type Name Description BytesRef bytes Returns Type Description System.String | Improve this Doc View Source DecompressString(Byte[]) Decompress the array previously returned by CompressString(String) back into a Declaration public static string DecompressString(byte[] value) Parameters Type Name Description System.Byte [] value Returns Type Description System.String | Improve this Doc View Source DecompressString(Byte[], Int32, Int32) Decompress the array previously returned by CompressString(String) back into a Declaration public static string DecompressString(byte[] value, int offset, int length) Parameters Type Name Description System.Byte [] value System.Int32 offset System.Int32 length Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DateTools.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DateTools.html",
    "title": "Class DateTools | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DateTools Provides support for converting dates to strings and vice-versa. The strings are structured so that lexicographic sorting orders them by date, which makes them suitable for use as field values and search terms. This class also helps you to limit the resolution of your dates. Do not save dates with a finer resolution than you really need, as then TermRangeQuery and PrefixQuery will require more memory and become slower. Another approach is NumericUtils , which provides a sortable binary representation (prefix encoded) of numeric values, which date/time are. For indexing a , just get the and index this as a numeric value with Int64Field and use NumericRangeQuery<T> to query it. Inheritance System.Object DateTools Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public static class DateTools : object Methods | Improve this Doc View Source DateToString(DateTime, DateTools.Resolution) Converts a to a string suitable for indexing. Declaration public static string DateToString(DateTime date, DateTools.Resolution resolution) Parameters Type Name Description DateTime date the date to be converted DateTools.Resolution resolution the desired resolution, see Round(DateTime, DateTools.Resolution) Returns Type Description System.String a string in format yyyyMMddHHmmssSSS or shorter, depending on resolution ; using GMT as timezone | Improve this Doc View Source Round(DateTime, DateTools.Resolution) Limit a date's resolution. For example, the date 2004-09-21 13:50:11 will be changed to 2004-09-01 00:00:00 when using MONTH . Declaration public static DateTime Round(DateTime date, DateTools.Resolution resolution) Parameters Type Name Description DateTime date the date to be rounded DateTools.Resolution resolution The desired resolution of the date to be returned Returns Type Description DateTime the date with all values more precise than resolution set to 0 or 1 | Improve this Doc View Source Round(Int64, DateTools.Resolution) Limit a date's resolution. For example, the date 1095767411000 (which represents 2004-09-21 13:50:11) will be changed to 1093989600000 (2004-09-01 00:00:00) when using MONTH . Declaration public static long Round(long time, DateTools.Resolution resolution) Parameters Type Name Description System.Int64 time the time to be rounded DateTools.Resolution resolution The desired resolution of the date to be returned Returns Type Description System.Int64 the date with all values more precise than resolution set to 0 or 1, expressed as milliseconds since January 1, 1970, 00:00:00 GMT (also known as the \"epoch\") | Improve this Doc View Source StringToDate(String) Converts a string produced by TimeToString(Int64, DateTools.Resolution) or DateToString(DateTime, DateTools.Resolution) back to a time, represented as a object. Declaration public static DateTime StringToDate(string dateString) Parameters Type Name Description System.String dateString the date string to be converted Returns Type Description DateTime the parsed time as a object | Improve this Doc View Source StringToTime(String) Converts a string produced by TimeToString(Int64, DateTools.Resolution) or DateToString(DateTime, DateTools.Resolution) back to a time, represented as the number of milliseconds since January 1, 1970, 00:00:00 GMT (also known as the \"epoch\"). Declaration public static long StringToTime(string dateString) Parameters Type Name Description System.String dateString the date string to be converted Returns Type Description System.Int64 the number of milliseconds since January 1, 1970, 00:00:00 GMT (also known as the \"epoch\") | Improve this Doc View Source TimeToString(Int64, DateTools.Resolution) Converts a millisecond time to a string suitable for indexing. Declaration public static string TimeToString(long time, DateTools.Resolution resolution) Parameters Type Name Description System.Int64 time the date expressed as milliseconds since January 1, 1970, 00:00:00 GMT (also known as the \"epoch\") DateTools.Resolution resolution the desired resolution, see Round(Int64, DateTools.Resolution) Returns Type Description System.String a string in format yyyyMMddHHmmssSSS or shorter, depending on resolution ; using GMT as timezone"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DateTools.Resolution.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DateTools.Resolution.html",
    "title": "Enum DateTools.Resolution | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DateTools.Resolution Specifies the time granularity. Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public enum Resolution : int Fields Name Description DAY Limit a date's resolution to day granularity. HOUR Limit a date's resolution to hour granularity. MILLISECOND Limit a date's resolution to millisecond granularity. MINUTE Limit a date's resolution to minute granularity. MONTH Limit a date's resolution to month granularity. SECOND Limit a date's resolution to second granularity. YEAR Limit a date's resolution to year granularity."
  },
  "api/Lucene.Net/Lucene.Net.Documents.DerefBytesDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DerefBytesDocValuesField.html",
    "title": "Class DerefBytesDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DerefBytesDocValuesField Field that stores a per-document BytesRef value. Here's an example usage: document.Add(new DerefBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field BinaryDocValuesField DerefBytesDocValuesField Implements IIndexableField Inherited Members BinaryDocValuesField.fType Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class DerefBytesDocValuesField : BinaryDocValuesField, IIndexableField Constructors | Improve this Doc View Source DerefBytesDocValuesField(String, BytesRef) Create a new fixed or variable-length DocValues field. Declaration public DerefBytesDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content | Improve this Doc View Source DerefBytesDocValuesField(String, BytesRef, Boolean) Create a new fixed or variable length DocValues field. Declaration public DerefBytesDocValuesField(string name, BytesRef bytes, bool isFixedLength) Parameters Type Name Description System.String name field name BytesRef bytes binary content System.Boolean isFixedLength (ignored) Fields | Improve this Doc View Source TYPE_FIXED_LEN Type for bytes DocValues : all with the same length Declaration public static readonly FieldType TYPE_FIXED_LEN Field Value Type Description FieldType | Improve this Doc View Source TYPE_VAR_LEN Type for bytes DocValues : can have variable lengths Declaration public static readonly FieldType TYPE_VAR_LEN Field Value Type Description FieldType Implements IIndexableField See Also BinaryDocValues"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Document.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Document.html",
    "title": "Class Document | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Document Documents are the unit of indexing and search. A Document is a set of fields. Each field has a name and a textual value. A field may be stored ( IsStored ) with the document, in which case it is returned with search hits on the document. Thus each document should typically contain one or more stored fields which uniquely identify it. Note that fields which are not IsStored are not available in documents retrieved from the index, e.g. with Doc or Document(Int32) . Inheritance System.Object Document Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class Document : IEnumerable<IIndexableField> Constructors | Improve this Doc View Source Document() Constructs a new document with no fields. Declaration public Document() Properties | Improve this Doc View Source Fields Returns a List of all the fields in a document. Note that fields which are not stored are not available in documents retrieved from the index, e.g. Doc(Int32) or Document(Int32) . Declaration public IList<IIndexableField> Fields { get; } Property Value Type Description IList < IIndexableField > Methods | Improve this Doc View Source Add(IIndexableField) Adds a field to a document. Several fields may be added with the same name. In this case, if the fields are indexed, their text is treated as though appended for the purposes of search. Note that add like the RemoveField(String) and RemoveFields(String) methods only makes sense prior to adding a document to an index. These methods cannot be used to change the content of an existing index! In order to achieve this, a document has to be deleted from an index and a new changed version of that document has to be added. Declaration public void Add(IIndexableField field) Parameters Type Name Description IIndexableField field | Improve this Doc View Source Get(String) Returns the string value of the field with the given name if any exist in this document, or null . If multiple fields exist with this name, this method returns the first value added. If only binary fields with this name exist, returns null . For Int32Field , Int64Field , SingleField and DoubleField it returns the string value of the number. If you want the actual numeric field instance back, use GetField(String) . Declaration public string Get(string name) Parameters Type Name Description System.String name Returns Type Description System.String | Improve this Doc View Source GetBinaryValue(String) Returns an array of bytes for the first (or only) field that has the name specified as the method parameter. this method will return null if no binary fields with the specified name are available. There may be non-binary fields with the same name. Declaration public BytesRef GetBinaryValue(string name) Parameters Type Name Description System.String name the name of the field. Returns Type Description BytesRef a BytesRef containing the binary field value or null | Improve this Doc View Source GetBinaryValues(String) Returns an array of byte arrays for of the fields that have the name specified as the method parameter. This method returns an empty array when there are no matching fields. It never returns null . Declaration public BytesRef[] GetBinaryValues(string name) Parameters Type Name Description System.String name the name of the field Returns Type Description BytesRef [] a BytesRef[] of binary field values | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<IIndexableField> GetEnumerator() Returns Type Description IEnumerator < IIndexableField > | Improve this Doc View Source GetField(String) Returns a field with the given name if any exist in this document, or null . If multiple fields exists with this name, this method returns the first value added. Declaration public IIndexableField GetField(string name) Parameters Type Name Description System.String name Returns Type Description IIndexableField | Improve this Doc View Source GetFields(String) Returns an array of IIndexableField s with the given name. This method returns an empty array when there are no matching fields. It never returns null . Declaration public IIndexableField[] GetFields(string name) Parameters Type Name Description System.String name the name of the field Returns Type Description IIndexableField [] a IndexableField[] array | Improve this Doc View Source GetValues(String) Returns an array of values of the field specified as the method parameter. This method returns an empty array when there are no matching fields. It never returns null . For Int32Field , Int64Field , SingleField and DoubleField it returns the string value of the number. If you want the actual numeric field instances back, use GetFields(String) . Declaration public string[] GetValues(string name) Parameters Type Name Description System.String name the name of the field Returns Type Description System.String [] a string[] of field values | Improve this Doc View Source RemoveField(String) Removes field with the specified name from the document. If multiple fields exist with this name, this method removes the first field that has been added. If there is no field with the specified name, the document remains unchanged. Note that the RemoveField(String) and RemoveFields(String) methods like the add method only make sense prior to adding a document to an index. These methods cannot be used to change the content of an existing index! In order to achieve this, a document has to be deleted from an index and a new changed version of that document has to be added. Declaration public void RemoveField(string name) Parameters Type Name Description System.String name | Improve this Doc View Source RemoveFields(String) Removes all fields with the given name from the document. If there is no field with the specified name, the document remains unchanged. Note that the RemoveField(String) and RemoveFields(String) methods like the add method only make sense prior to adding a document to an index. These methods cannot be used to change the content of an existing index! In order to achieve this, a document has to be deleted from an index and a new changed version of that document has to be added. Declaration public void RemoveFields(string name) Parameters Type Name Description System.String name | Improve this Doc View Source ToString() Prints the fields of a document for human consumption. Declaration public override string ToString() Returns Type Description System.String Extension Methods DocumentExtensions.GetField<T>(Document, String) DocumentExtensions.GetFields<T>(Document, String) DocumentExtensions.AddBinaryDocValuesField(Document, String, BytesRef) DocumentExtensions.AddDoubleDocValuesField(Document, String, Double) DocumentExtensions.AddDoubleField(Document, String, Double, Field.Store) DocumentExtensions.AddDoubleField(Document, String, Double, FieldType) DocumentExtensions.AddSingleDocValuesField(Document, String, Single) DocumentExtensions.AddSingleField(Document, String, Single, Field.Store) DocumentExtensions.AddSingleField(Document, String, Single, FieldType) DocumentExtensions.AddInt32Field(Document, String, Int32, Field.Store) DocumentExtensions.AddInt32Field(Document, String, Int32, FieldType) DocumentExtensions.AddInt64Field(Document, String, Int64, Field.Store) DocumentExtensions.AddInt64Field(Document, String, Int64, FieldType) DocumentExtensions.AddNumericDocValuesField(Document, String, Int64) DocumentExtensions.AddSortedDocValuesField(Document, String, BytesRef) DocumentExtensions.AddSortedSetDocValuesField(Document, String, BytesRef) DocumentExtensions.AddStoredField(Document, String, Byte[]) DocumentExtensions.AddStoredField(Document, String, Byte[], Int32, Int32) DocumentExtensions.AddStoredField(Document, String, BytesRef) DocumentExtensions.AddStoredField(Document, String, String) DocumentExtensions.AddStoredField(Document, String, Int32) DocumentExtensions.AddStoredField(Document, String, Single) DocumentExtensions.AddStoredField(Document, String, Int64) DocumentExtensions.AddStoredField(Document, String, Double) DocumentExtensions.AddStringField(Document, String, String, Field.Store) DocumentExtensions.AddTextField(Document, String, TextReader) DocumentExtensions.AddTextField(Document, String, String, Field.Store) DocumentExtensions.AddTextField(Document, String, TokenStream)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DocumentStoredFieldVisitor.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DocumentStoredFieldVisitor.html",
    "title": "Class DocumentStoredFieldVisitor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocumentStoredFieldVisitor A StoredFieldVisitor that creates a Document containing all stored fields, or only specific requested fields provided to DocumentStoredFieldVisitor(ISet<String>) . This is used by Document(Int32) to load a document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldVisitor DocumentStoredFieldVisitor Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class DocumentStoredFieldVisitor : StoredFieldVisitor Constructors | Improve this Doc View Source DocumentStoredFieldVisitor() Load all stored fields. Declaration public DocumentStoredFieldVisitor() | Improve this Doc View Source DocumentStoredFieldVisitor(ISet<String>) Load only fields named in the provided . Declaration public DocumentStoredFieldVisitor(ISet<string> fieldsToAdd) Parameters Type Name Description ISet < System.String > fieldsToAdd Set of fields to load, or null (all fields). | Improve this Doc View Source DocumentStoredFieldVisitor(String[]) Load only fields named in the provided fields. Declaration public DocumentStoredFieldVisitor(params string[] fields) Parameters Type Name Description System.String [] fields Properties | Improve this Doc View Source Document Retrieve the visited document. Declaration public virtual Document Document { get; } Property Value Type Description Document Document populated with stored fields. Note that only the stored information in the field instances is valid, data such as boosts, indexing options, term vector options, etc is not set. Methods | Improve this Doc View Source BinaryField(FieldInfo, Byte[]) Declaration public override void BinaryField(FieldInfo fieldInfo, byte[] value) Parameters Type Name Description FieldInfo fieldInfo System.Byte [] value Overrides StoredFieldVisitor.BinaryField(FieldInfo, Byte[]) | Improve this Doc View Source DoubleField(FieldInfo, Double) Declaration public override void DoubleField(FieldInfo fieldInfo, double value) Parameters Type Name Description FieldInfo fieldInfo System.Double value Overrides StoredFieldVisitor.DoubleField(FieldInfo, Double) | Improve this Doc View Source Int32Field(FieldInfo, Int32) Declaration public override void Int32Field(FieldInfo fieldInfo, int value) Parameters Type Name Description FieldInfo fieldInfo System.Int32 value Overrides StoredFieldVisitor.Int32Field(FieldInfo, Int32) | Improve this Doc View Source Int64Field(FieldInfo, Int64) Declaration public override void Int64Field(FieldInfo fieldInfo, long value) Parameters Type Name Description FieldInfo fieldInfo System.Int64 value Overrides StoredFieldVisitor.Int64Field(FieldInfo, Int64) | Improve this Doc View Source NeedsField(FieldInfo) Declaration public override StoredFieldVisitor.Status NeedsField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description StoredFieldVisitor.Status Overrides StoredFieldVisitor.NeedsField(FieldInfo) | Improve this Doc View Source SingleField(FieldInfo, Single) Declaration public override void SingleField(FieldInfo fieldInfo, float value) Parameters Type Name Description FieldInfo fieldInfo System.Single value Overrides StoredFieldVisitor.SingleField(FieldInfo, Single) | Improve this Doc View Source StringField(FieldInfo, String) Declaration public override void StringField(FieldInfo fieldInfo, string value) Parameters Type Name Description FieldInfo fieldInfo System.String value Overrides StoredFieldVisitor.StringField(FieldInfo, String)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DoubleDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DoubleDocValuesField.html",
    "title": "Class DoubleDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleDocValuesField Syntactic sugar for encoding doubles as NumericDocValues via . Per-document double values can be retrieved via GetDoubles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring eight bytes per document. Consider encoding double values yourself with only as much precision as you require. Inheritance System.Object Field NumericDocValuesField DoubleDocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetSingleValue(Single) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class DoubleDocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source DoubleDocValuesField(String, Double) Creates a new DocValues field with the specified 64-bit double value Declaration public DoubleDocValuesField(string name, double value) Parameters Type Name Description System.String name field name System.Double value 64-bit double value Methods | Improve this Doc View Source SetDoubleValue(Double) Declaration public override void SetDoubleValue(double value) Parameters Type Name Description System.Double value Overrides Field.SetDoubleValue(Double) | Improve this Doc View Source SetInt64Value(Int64) Declaration public override void SetInt64Value(long value) Parameters Type Name Description System.Int64 value Overrides Field.SetInt64Value(Int64) Implements IIndexableField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DoubleField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DoubleField.html",
    "title": "Class DoubleField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleField Field that indexes values for efficient range filtering and sorting. Here's an example usage: document.Add(new DoubleField(name, 6.0, Field.Store.NO)); For optimal performance, re-use the DoubleField and Document instance for more than one document: DoubleField field = new DoubleField(name, 0.0, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetDoubleValue(value) writer.AddDocument(document); ... } See also Int32Field , Int64Field , SingleField . To perform range querying or filtering against a DoubleField , use NumericRangeQuery or NumericRangeFilter<T> . To sort according to a DoubleField , use the normal numeric sort types, eg DOUBLE . DoubleField values can also be loaded directly from IFieldCache . You may add the same field name as an DoubleField to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued DoubleField . A DoubleField will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep ( precisionStep ) configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. This class is a wrapper around this token stream type for easier, more intuitive usage. @since 2.9 Inheritance System.Object Field DoubleField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class DoubleField : Field, IIndexableField Constructors | Improve this Doc View Source DoubleField(String, Double, Field.Store) Creates a stored or un-stored DoubleField with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public DoubleField(string name, double value, Field.Store stored) Parameters Type Name Description System.String name field name System.Double value 64-bit value Field.Store stored YES if the content should also be stored | Improve this Doc View Source DoubleField(String, Double, FieldType) Expert: allows you to customize the FieldType . Declaration public DoubleField(string name, double value, FieldType type) Parameters Type Name Description System.String name field name System.Double value 64-bit double value FieldType type customized field type: must have NumericType of DOUBLE . Fields | Improve this Doc View Source TYPE_NOT_STORED Type for a DoubleField that is not stored: normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Type for a stored DoubleField : normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Extensions.DocumentExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Extensions.DocumentExtensions.html",
    "title": "Class DocumentExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocumentExtensions LUCENENET specific extensions to the Document class. Inheritance System.Object DocumentExtensions Namespace : Lucene.Net.Documents.Extensions Assembly : Lucene.Net.dll Syntax public static class DocumentExtensions : object Methods | Improve this Doc View Source AddBinaryDocValuesField(Document, String, BytesRef) Adds a new BinaryDocValuesField . Declaration public static BinaryDocValuesField AddBinaryDocValuesField(this Document document, string name, BytesRef value) Parameters Type Name Description Document document This Document . System.String name field name BytesRef value binary content Returns Type Description BinaryDocValuesField The field that was added to this Document . | Improve this Doc View Source AddDoubleDocValuesField(Document, String, Double) Adds a new DoubleDocValuesField field with the specified 64-bit double value Declaration public static DoubleDocValuesField AddDoubleDocValuesField(this Document document, string name, double value) Parameters Type Name Description Document document This Document . System.String name field name System.Double value 64-bit double value Returns Type Description DoubleDocValuesField The field that was added to this Document . Remarks Syntactic sugar for encoding doubles as NumericDocValues via . Per-document double values can be retrieved via GetDoubles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring eight bytes per document. Consider encoding double values yourself with only as much precision as you require. | Improve this Doc View Source AddDoubleField(Document, String, Double, Field.Store) Adds a stored or un-stored DoubleField with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public static DoubleField AddDoubleField(this Document document, string name, double value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.Double value 64-bit value Field.Store stored YES if the content should also be stored Returns Type Description DoubleField The field that was added to this Document . | Improve this Doc View Source AddDoubleField(Document, String, Double, FieldType) Adds a stored or un-stored DoubleField with the provided value. Expert: allows you to customize the FieldType . Declaration public static DoubleField AddDoubleField(this Document document, string name, double value, FieldType type) Parameters Type Name Description Document document This Document . System.String name field name System.Double value 64-bit double value FieldType type customized field type: must have NumericType of DOUBLE . Returns Type Description DoubleField The field that was added to this Document . | Improve this Doc View Source AddInt32Field(Document, String, Int32, Field.Store) Adds a stored or un-stored Int32Field with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public static Int32Field AddInt32Field(this Document document, string name, int value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.Int32 value 32-bit value Field.Store stored YES if the content should also be stored Returns Type Description Int32Field The field that was added to this Document . | Improve this Doc View Source AddInt32Field(Document, String, Int32, FieldType) Adds a stored or un-stored Int32Field with the provided value. Expert: allows you to customize the FieldType . Declaration public static Int32Field AddInt32Field(this Document document, string name, int value, FieldType type) Parameters Type Name Description Document document This Document . System.String name field name System.Int32 value 32-bit value FieldType type customized field type: must have NumericType of INT32 . Returns Type Description Int32Field The field that was added to this Document . | Improve this Doc View Source AddInt64Field(Document, String, Int64, Field.Store) Adds a stored or un-stored Int64Field with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public static Int64Field AddInt64Field(this Document document, string name, long value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.Int64 value 64-bit value Field.Store stored YES if the content should also be stored Returns Type Description Int64Field The field that was added to this Document . | Improve this Doc View Source AddInt64Field(Document, String, Int64, FieldType) Adds a stored or un-stored Int64Field with the provided value. Expert: allows you to customize the FieldType . Declaration public static Int64Field AddInt64Field(this Document document, string name, long value, FieldType type) Parameters Type Name Description Document document This Document . System.String name field name System.Int64 value 64-bit value FieldType type customized field type: must have NumericType of INT64 . Returns Type Description Int64Field The field that was added to this Document . | Improve this Doc View Source AddNumericDocValuesField(Document, String, Int64) Adds a new NumericDocValuesField field with the specified 64-bit value Declaration public static NumericDocValuesField AddNumericDocValuesField(this Document document, string name, long value) Parameters Type Name Description Document document This Document . System.String name field name System.Int64 value 64-bit value Returns Type Description NumericDocValuesField The field that was added to this Document . Remarks If you also need to store the value, you should add a separate StoredField instance. | Improve this Doc View Source AddSingleDocValuesField(Document, String, Single) Adds a new SingleDocValuesField field with the specified 32-bit value Declaration public static SingleDocValuesField AddSingleDocValuesField(this Document document, string name, float value) Parameters Type Name Description Document document This Document . System.String name field name System.Single value 32-bit value Returns Type Description SingleDocValuesField The field that was added to this Document . | Improve this Doc View Source AddSingleField(Document, String, Single, Field.Store) Adds a stored or un-stored SingleField with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public static SingleField AddSingleField(this Document document, string name, float value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.Single value 32-bit value Field.Store stored YES if the content should also be stored Returns Type Description SingleField The field that was added to this Document . | Improve this Doc View Source AddSingleField(Document, String, Single, FieldType) Adds a stored or un-stored SingleField with the provided value. Expert: allows you to customize the FieldType . Declaration public static SingleField AddSingleField(this Document document, string name, float value, FieldType type) Parameters Type Name Description Document document This Document . System.String name field name System.Single value 32-bit value FieldType type customized field type: must have NumericType of SINGLE . Returns Type Description SingleField The field that was added to this Document . | Improve this Doc View Source AddSortedDocValuesField(Document, String, BytesRef) Adds a new SortedDocValuesField field. Declaration public static SortedDocValuesField AddSortedDocValuesField(this Document document, string name, BytesRef bytes) Parameters Type Name Description Document document This Document . System.String name field name BytesRef bytes binary content Returns Type Description SortedDocValuesField The field that was added to this Document . Remarks If you also need to store the value, you should add a separate StoredField instance. | Improve this Doc View Source AddSortedSetDocValuesField(Document, String, BytesRef) Adds a new SortedSetDocValuesField field. Declaration public static SortedSetDocValuesField AddSortedSetDocValuesField(this Document document, string name, BytesRef bytes) Parameters Type Name Description Document document This Document . System.String name field name BytesRef bytes binary content Returns Type Description SortedSetDocValuesField The field that was added to this Document . Remarks If you also need to store the value, you should add a separate StoredField instance. | Improve this Doc View Source AddStoredField(Document, String, BytesRef) Adds a stored-only field with the given binary value. NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field. Declaration public static StoredField AddStoredField(this Document document, string name, BytesRef value) Parameters Type Name Description Document document This Document . System.String name field name BytesRef value BytesRef pointing to binary content (not copied) Returns Type Description StoredField The field that was added to this Document . | Improve this Doc View Source AddStoredField(Document, String, Byte[]) Adds a stored-only field with the given binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public static StoredField AddStoredField(this Document document, string name, byte[] value) Parameters Type Name Description Document document This Document . System.String name field name System.Byte [] value byte array pointing to binary content (not copied) Returns Type Description StoredField The field that was added to this Document . | Improve this Doc View Source AddStoredField(Document, String, Byte[], Int32, Int32) Adds a stored-only field with the given binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public static StoredField AddStoredField(this Document document, string name, byte[] value, int offset, int length) Parameters Type Name Description Document document This Document . System.String name field name System.Byte [] value array pointing to binary content (not copied) System.Int32 offset starting position of the byte array System.Int32 length valid length of the byte array Returns Type Description StoredField The field that was added to this Document . | Improve this Doc View Source AddStoredField(Document, String, Double) Adds a stored-only field with the given value. Declaration public static StoredField AddStoredField(this Document document, string name, double value) Parameters Type Name Description Document document This Document . System.String name field name System.Double value value Returns Type Description StoredField The field that was added to this Document . | Improve this Doc View Source AddStoredField(Document, String, Int32) Adds a stored-only field with the given value. Declaration public static StoredField AddStoredField(this Document document, string name, int value) Parameters Type Name Description Document document This Document . System.String name field name System.Int32 value value Returns Type Description StoredField The field that was added to this Document . | Improve this Doc View Source AddStoredField(Document, String, Int64) Adds a stored-only field with the given value. Declaration public static StoredField AddStoredField(this Document document, string name, long value) Parameters Type Name Description Document document This Document . System.String name field name System.Int64 value value Returns Type Description StoredField The field that was added to this Document . | Improve this Doc View Source AddStoredField(Document, String, Single) Adds a stored-only field with the given value. Declaration public static StoredField AddStoredField(this Document document, string name, float value) Parameters Type Name Description Document document This Document . System.String name field name System.Single value value Returns Type Description StoredField The field that was added to this Document . | Improve this Doc View Source AddStoredField(Document, String, String) Adds a stored-only field with the given value. Declaration public static StoredField AddStoredField(this Document document, string name, string value) Parameters Type Name Description Document document This Document . System.String name field name System.String value value Returns Type Description StoredField The field that was added to this Document . | Improve this Doc View Source AddStringField(Document, String, String, Field.Store) Adds a new StringField (a field that is indexed but not tokenized) Declaration public static StringField AddStringField(this Document document, string name, string value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.String value value Field.Store stored YES if the content should also be stored Returns Type Description StringField The field that was added to this Document . | Improve this Doc View Source AddTextField(Document, String, TokenStream) Adds a new un-stored TextField with TokenStream value. Declaration public static TextField AddTextField(this Document document, string name, TokenStream stream) Parameters Type Name Description Document document This Document . System.String name field name TokenStream stream TokenStream value Returns Type Description TextField The field that was added to this Document . | Improve this Doc View Source AddTextField(Document, String, String, Field.Store) Adds a new TextField with value. Declaration public static TextField AddTextField(this Document document, string name, string value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.String value value Field.Store stored YES if the content should also be stored Returns Type Description TextField The field that was added to this Document . | Improve this Doc View Source AddTextField(Document, String, TextReader) Adds a new un-stored TextField with value. Declaration public static TextField AddTextField(this Document document, string name, TextReader reader) Parameters Type Name Description Document document This Document . System.String name field name TextReader reader value Returns Type Description TextField The field that was added to this Document . | Improve this Doc View Source GetField<T>(Document, String) Returns a field with the given name if any exist in this document cast to type T , or null . If multiple fields exists with this name, this method returns the first value added. Declaration public static T GetField<T>(this Document document, string name) where T : IIndexableField Parameters Type Name Description Document document This Document . System.String name Field name Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source GetFields<T>(Document, String) Returns an array of IIndexableField s with the given name, cast to type T . This method returns an empty array when there are no matching fields. It never returns null . Declaration public static T[] GetFields<T>(this Document document, string name) where T : IIndexableField Parameters Type Name Description Document document This Document . System.String name the name of the field Returns Type Description T[] a IndexableField[] array Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Extensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Extensions.html",
    "title": "Namespace Lucene.Net.Documents.Extensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Documents.Extensions Classes DocumentExtensions LUCENENET specific extensions to the Document class. IndexableFieldExtensions Extension methods to the IIndexableField interface."
  },
  "api/Lucene.Net/Lucene.Net.Documents.Extensions.IndexableFieldExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Extensions.IndexableFieldExtensions.html",
    "title": "Class IndexableFieldExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexableFieldExtensions Extension methods to the IIndexableField interface. Inheritance System.Object IndexableFieldExtensions Namespace : Lucene.Net.Documents.Extensions Assembly : Lucene.Net.dll Syntax public static class IndexableFieldExtensions : object Methods | Improve this Doc View Source GetByteValueOrDefault(IIndexableField) Returns the field value as or 0 if the type is non-numeric. Declaration public static byte GetByteValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Byte The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetDoubleValueOrDefault(IIndexableField) Returns the field value as or 0 if the type is non-numeric. Declaration public static double GetDoubleValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Double The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetInt16ValueOrDefault(IIndexableField) Returns the field value as or 0 if the type is non-numeric. Declaration public static short GetInt16ValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Int16 The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetInt32ValueOrDefault(IIndexableField) Returns the field value as or 0 if the type is non-numeric. Declaration public static int GetInt32ValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Int32 The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetInt64ValueOrDefault(IIndexableField) Returns the field value as or 0 if the type is non-numeric. Declaration public static long GetInt64ValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Int64 The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetSingleValueOrDefault(IIndexableField) Returns the field value as or 0 if the type is non-numeric. Declaration public static float GetSingleValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Single The field value or 0 if the type is non-numeric."
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Byte.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Byte.html",
    "title": "Class Field.Byte | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field.Byte Inheritance System.Object Field.Number Field.Byte Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax protected sealed class Byte : Field.Number Constructors | Improve this Doc View Source Byte(Byte) Declaration public Byte(byte value) Parameters Type Name Description System.Byte value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Double.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Double.html",
    "title": "Class Field.Double | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field.Double Inheritance System.Object Field.Number Field.Double Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax protected sealed class Double : Field.Number Constructors | Improve this Doc View Source Double(Double) Declaration public Double(double value) Parameters Type Name Description System.Double value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.html",
    "title": "Class Field | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field Expert: directly create a field for a document. Most users should use one of the sugar subclasses: Int32Field , Int64Field , SingleField , DoubleField , BinaryDocValuesField , NumericDocValuesField , SortedDocValuesField , StringField , TextField , StoredField . A field is a section of a Document . Each field has three parts: name, type and value. Values may be text ( , or pre-analyzed TokenStream ), binary ( byte[] ), or numeric ( , , , or ). Fields are optionally stored in the index, so that they may be returned with hits on the document. NOTE: the field type is an IIndexableFieldType . Making changes to the state of the IIndexableFieldType will impact any Field it is used in. It is strongly recommended that no changes be made after Field instantiation. Inheritance System.Object Field BinaryDocValuesField DoubleField Int32Field Int64Field NumericDocValuesField SingleField SortedDocValuesField SortedSetDocValuesField StoredField StringField TextField Implements IIndexableField Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class Field : object, IIndexableField Constructors | Improve this Doc View Source Field(String, TokenStream) Create a tokenized and indexed field that is not stored. Term vectors will not be stored. This is useful for pre-analyzed fields. The TokenStream is read only when the Document is added to the index, i.e. you may not close the TokenStream until has been called. Declaration public Field(string name, TokenStream tokenStream) Parameters Type Name Description System.String name The name of the field TokenStream tokenStream The TokenStream with the content | Improve this Doc View Source Field(String, TokenStream, Field.TermVector) Create a tokenized and indexed field that is not stored, optionally with storing term vectors. This is useful for pre-analyzed fields. The TokenStream is read only when the Document is added to the index, i.e. you may not close the TokenStream until has been called. Declaration public Field(string name, TokenStream tokenStream, Field.TermVector termVector) Parameters Type Name Description System.String name The name of the field TokenStream tokenStream The TokenStream with the content Field.TermVector termVector Whether term vector should be stored | Improve this Doc View Source Field(String, TokenStream, FieldType) Create field with TokenStream value. Declaration public Field(string name, TokenStream tokenStream, FieldType type) Parameters Type Name Description System.String name field name TokenStream tokenStream TokenStream value FieldType type field type | Improve this Doc View Source Field(String, FieldType) Expert: creates a field with no initial value. Intended only for custom Field subclasses. Declaration protected Field(string name, FieldType type) Parameters Type Name Description System.String name field name FieldType type field type | Improve this Doc View Source Field(String, BytesRef, FieldType) Create field with binary value. NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field. Declaration public Field(string name, BytesRef bytes, FieldType type) Parameters Type Name Description System.String name field name BytesRef bytes BytesRef pointing to binary content (not copied) FieldType type field type | Improve this Doc View Source Field(String, Byte[]) Create a stored field with binary value. Optionally the value may be compressed. Declaration public Field(string name, byte[] value) Parameters Type Name Description System.String name The name of the field System.Byte [] value The binary value | Improve this Doc View Source Field(String, Byte[], FieldType) Create field with binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public Field(string name, byte[] value, FieldType type) Parameters Type Name Description System.String name field name System.Byte [] value byte array pointing to binary content (not copied) FieldType type field type | Improve this Doc View Source Field(String, Byte[], Int32, Int32) Create a stored field with binary value. Optionally the value may be compressed. Declaration public Field(string name, byte[] value, int offset, int length) Parameters Type Name Description System.String name The name of the field System.Byte [] value The binary value System.Int32 offset Starting offset in value where this Field 's bytes are System.Int32 length Number of bytes to use for this Field , starting at offset | Improve this Doc View Source Field(String, Byte[], Int32, Int32, FieldType) Create field with binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public Field(string name, byte[] value, int offset, int length, FieldType type) Parameters Type Name Description System.String name field name System.Byte [] value byte array pointing to binary content (not copied) System.Int32 offset starting position of the byte array System.Int32 length valid length of the byte array FieldType type field type | Improve this Doc View Source Field(String, String, Field.Store, Field.Index) Create a field by specifying its name , value and how it will be saved in the index. Term vectors will not be stored in the index. Declaration public Field(string name, string value, Field.Store store, Field.Index index) Parameters Type Name Description System.String name The name of the field System.String value The string to process Field.Store store Whether value should be stored in the index Field.Index index Whether the field should be indexed, and if so, if it should be tokenized before indexing | Improve this Doc View Source Field(String, String, Field.Store, Field.Index, Field.TermVector) Create a field by specifying its name , value and how it will be saved in the index. Declaration public Field(string name, string value, Field.Store store, Field.Index index, Field.TermVector termVector) Parameters Type Name Description System.String name The name of the field System.String value The string to process Field.Store store Whether value should be stored in the index Field.Index index Whether the field should be indexed, and if so, if it should be tokenized before indexing Field.TermVector termVector Whether term vector should be stored | Improve this Doc View Source Field(String, String, FieldType) Create field with value. Declaration public Field(string name, string value, FieldType type) Parameters Type Name Description System.String name field name System.String value string value FieldType type field type | Improve this Doc View Source Field(String, TextReader) Create a tokenized and indexed field that is not stored. Term vectors will not be stored. The is read only when the Document is added to the index, i.e. you may not close the until has been called. Declaration public Field(string name, TextReader reader) Parameters Type Name Description System.String name The name of the field TextReader reader The reader with the content | Improve this Doc View Source Field(String, TextReader, Field.TermVector) Create a tokenized and indexed field that is not stored, optionally with storing term vectors. The is read only when the Document is added to the index, i.e. you may not close the until has been called. Declaration public Field(string name, TextReader reader, Field.TermVector termVector) Parameters Type Name Description System.String name The name of the field TextReader reader The reader with the content Field.TermVector termVector Whether term vector should be stored | Improve this Doc View Source Field(String, TextReader, FieldType) Create field with value. Declaration public Field(string name, TextReader reader, FieldType type) Parameters Type Name Description System.String name field name TextReader reader reader value FieldType type field type Fields | Improve this Doc View Source m_boost Field's boost Declaration protected float m_boost Field Value Type Description System.Single See Also Boost | Improve this Doc View Source m_name Field's name Declaration protected readonly string m_name Field Value Type Description System.String | Improve this Doc View Source m_tokenStream Pre-analyzed TokenStream for indexed fields; this is separate from FieldsData because you are allowed to have both; eg maybe field has a value but you customize how it's tokenized Declaration protected TokenStream m_tokenStream Field Value Type Description TokenStream | Improve this Doc View Source m_type Field's type Declaration protected readonly FieldType m_type Field Value Type Description FieldType Properties | Improve this Doc View Source Boost Gets or sets the boost factor on this field. Declaration public virtual float Boost { get; set; } Property Value Type Description System.Single Remarks The default value is 1.0f (no boost). | Improve this Doc View Source FieldsData Field's value Setting this property will automatically set the backing field for the NumericType property. Declaration protected object FieldsData { get; set; } Property Value Type Description System.Object | Improve this Doc View Source FieldType Returns the FieldType for this field as type FieldType . Declaration public virtual FieldType FieldType { get; } Property Value Type Description FieldType | Improve this Doc View Source IndexableFieldType Returns the FieldType for this field as type IIndexableFieldType . Declaration public virtual IIndexableFieldType IndexableFieldType { get; } Property Value Type Description IIndexableFieldType | Improve this Doc View Source Name The field's name Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumericType Gets the NumericFieldType of the underlying value, or NONE if the value is not set or non-numeric. Expert: The difference between this property and NumericType is this is represents the current state of the field (whether being written or read) and the FieldType property represents instructions on how the field will be written, but does not re-populate when reading back from an index (it is write-only). In Java, the numeric type was determined by checking the type of GetNumericValue() . However, since there are no reference number types in .NET, using GetNumericValue() so will cause boxing/unboxing. It is therefore recommended to use this property to check the underlying type and the corresponding Get*Value() method to retrieve the value. NOTE: Since Lucene codecs do not support BYTE or INT16 , fields created with these types will always be INT32 when read back from the index. Declaration public virtual NumericFieldType NumericType { get; } Property Value Type Description NumericFieldType Methods | Improve this Doc View Source GetBinaryValue() Non-null if this field has a binary value. Declaration public virtual BytesRef GetBinaryValue() Returns Type Description BytesRef | Improve this Doc View Source GetByteValue() Returns the field value as or null if the type is non-numeric. Declaration public virtual byte? GetByteValue() Returns Type Description System.Nullable < System.Byte > The field value or null if the type is non-numeric. | Improve this Doc View Source GetDoubleValue() Returns the field value as or null if the type is non-numeric. Declaration public virtual double? GetDoubleValue() Returns Type Description System.Nullable < System.Double > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt16Value() Returns the field value as or null if the type is non-numeric. Declaration public virtual short? GetInt16Value() Returns Type Description System.Nullable < System.Int16 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt32Value() Returns the field value as or null if the type is non-numeric. Declaration public virtual int? GetInt32Value() Returns Type Description System.Nullable < System.Int32 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt64Value() Returns the field value as or null if the type is non-numeric. Declaration public virtual long? GetInt64Value() Returns Type Description System.Nullable < System.Int64 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetNumericValue() Declaration public virtual object GetNumericValue() Returns Type Description System.Object | Improve this Doc View Source GetReaderValue() The value of the field as a , or null . If null , the value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual TextReader GetReaderValue() Returns Type Description TextReader | Improve this Doc View Source GetSingleValue() Returns the field value as or null if the type is non-numeric. Declaration public virtual float? GetSingleValue() Returns Type Description System.Nullable < System.Single > The field value or null if the type is non-numeric. | Improve this Doc View Source GetStringValue() The value of the field as a , or null . If null , the value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue() Returns Type Description System.String The string representation of the value if it is either a or numeric type. | Improve this Doc View Source GetStringValue(IFormatProvider) The value of the field as a , or null . If null , the value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(IFormatProvider provider) Parameters Type Name Description IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a or numeric type. | Improve this Doc View Source GetStringValue(String) The value of the field as a , or null . If null , the value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(string format) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a or numeric type. | Improve this Doc View Source GetStringValue(String, IFormatProvider) The value of the field as a , or null . If null , the value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(string format, IFormatProvider provider) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a or numeric type. | Improve this Doc View Source GetTokenStream(Analyzer) Declaration public virtual TokenStream GetTokenStream(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Returns Type Description TokenStream | Improve this Doc View Source GetTokenStreamValue() The TokenStream for this field to be used when indexing, or null . If null , the value or value is analyzed to produce the indexed tokens. Declaration public virtual TokenStream GetTokenStreamValue() Returns Type Description TokenStream | Improve this Doc View Source SetBytesValue(BytesRef) Expert: change the value of this field. See SetStringValue(String) . NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field. Declaration public virtual void SetBytesValue(BytesRef value) Parameters Type Name Description BytesRef value | Improve this Doc View Source SetBytesValue(Byte[]) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetBytesValue(byte[] value) Parameters Type Name Description System.Byte [] value | Improve this Doc View Source SetByteValue(Byte) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetByteValue(byte value) Parameters Type Name Description System.Byte value | Improve this Doc View Source SetDoubleValue(Double) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetDoubleValue(double value) Parameters Type Name Description System.Double value | Improve this Doc View Source SetInt16Value(Int16) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetInt16Value(short value) Parameters Type Name Description System.Int16 value | Improve this Doc View Source SetInt32Value(Int32) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetInt32Value(int value) Parameters Type Name Description System.Int32 value | Improve this Doc View Source SetInt64Value(Int64) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetInt64Value(long value) Parameters Type Name Description System.Int64 value | Improve this Doc View Source SetReaderValue(TextReader) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetReaderValue(TextReader value) Parameters Type Name Description TextReader value | Improve this Doc View Source SetSingleValue(Single) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetSingleValue(float value) Parameters Type Name Description System.Single value | Improve this Doc View Source SetStringValue(String) Expert: change the value of this field. This can be used during indexing to re-use a single Field instance to improve indexing speed by avoiding GC cost of new'ing and reclaiming Field instances. Typically a single Document instance is re-used as well. This helps most on small documents. Each Field instance should only be used once within a single Document instance. See ImproveIndexingSpeed for details. Declaration public virtual void SetStringValue(string value) Parameters Type Name Description System.String value | Improve this Doc View Source SetTokenStream(TokenStream) Expert: sets the token stream to be used for indexing and causes IsIndexed and IsTokenized to return true. May be combined with stored values from GetStringValue() or GetBinaryValue() Declaration public virtual void SetTokenStream(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream | Improve this Doc View Source ToString() Prints a Field for human consumption. Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Translates the pre-4.0 enums for specifying how a field should be indexed into the 4.0 FieldType approach. Declaration public static FieldType TranslateFieldType(Field.Store store, Field.Index index, Field.TermVector termVector) Parameters Type Name Description Field.Store store Field.Index index Field.TermVector termVector Returns Type Description FieldType Implements IIndexableField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Index.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Index.html",
    "title": "Enum Field.Index | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Field.Index Specifies whether and how a field should be indexed. Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public enum Index : int Fields Name Description ANALYZED Index the tokens produced by running the field's value through an Analyzer . This is useful for common text. ANALYZED_NO_NORMS Expert: Index the tokens produced by running the field's value through an Analyzer, and also separately disable the storing of norms. See NOT_ANALYZED_NO_NORMS for what norms are and why you may want to disable them. NO Do not index the field value. This field can thus not be searched, but one can still access its contents provided it is Field.Store . NOT_ANALYZED Index the field's value without using an Analyzer , so it can be searched. As no analyzer is used the value will be stored as a single term. This is useful for unique Ids like product numbers. NOT_ANALYZED_NO_NORMS Expert: Index the field's value without an Analyzer, and also disable the storing of norms. Note that you can also separately enable/disable norms by setting OmitNorms . No norms means that index-time field and document boosting and field length normalization are disabled. The benefit is less memory usage as norms take up one byte of RAM per indexed field for every document in the index, during searching. Note that once you index a given field with norms enabled, disabling norms will have no effect. In other words, for this to have the above described effect on a field, all instances of that field must be indexed with NOT_ANALYZED_NO_NORMS from the beginning. Extension Methods FieldExtensions.IsIndexed() FieldExtensions.IsAnalyzed() FieldExtensions.OmitNorms()"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Int16.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Int16.html",
    "title": "Class Field.Int16 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field.Int16 Inheritance System.Object Field.Number Field.Int16 Inherited Members Field.Number.GetByteValue() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax protected sealed class Int16 : Field.Number Constructors | Improve this Doc View Source Int16(Int16) Declaration public Int16(short value) Parameters Type Name Description System.Int16 value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt16Value() Declaration public override short GetInt16Value() Returns Type Description System.Int16 Overrides Field.Number.GetInt16Value() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Int32.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Int32.html",
    "title": "Class Field.Int32 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field.Int32 Inheritance System.Object Field.Number Field.Int32 Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax protected sealed class Int32 : Field.Number Constructors | Improve this Doc View Source Int32(Int32) Declaration public Int32(int value) Parameters Type Name Description System.Int32 value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Int64.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Int64.html",
    "title": "Class Field.Int64 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field.Int64 Inheritance System.Object Field.Number Field.Int64 Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax protected sealed class Int64 : Field.Number Constructors | Improve this Doc View Source Int64(Int64) Declaration public Int64(long value) Parameters Type Name Description System.Int64 value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Number.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Number.html",
    "title": "Class Field.Number | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field.Number Inheritance System.Object Field.Number Field.Byte Field.Double Field.Int16 Field.Int32 Field.Int64 Field.Single Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax protected abstract class Number : object Methods | Improve this Doc View Source GetByteValue() Returns this object's value as a . Might involve rounding and/or truncating the value, so it fits into a . Declaration public virtual byte GetByteValue() Returns Type Description System.Byte the primitive value of this object. | Improve this Doc View Source GetDoubleValue() Returns this object's value as a . Might involve rounding. Declaration public abstract double GetDoubleValue() Returns Type Description System.Double the primitive value of this object. | Improve this Doc View Source GetInt16Value() Returns this object's value as a . Might involve rounding and/or truncating the value, so it fits into a . Declaration public virtual short GetInt16Value() Returns Type Description System.Int16 the primitive value of this object. | Improve this Doc View Source GetInt32Value() Returns this object's value as an . Might involve rounding and/or truncating the value, so it fits into an . Declaration public abstract int GetInt32Value() Returns Type Description System.Int32 the primitive value of this object. | Improve this Doc View Source GetInt64Value() Returns this object's value as a . Might involve rounding and/or truncating the value, so it fits into a . Declaration public abstract long GetInt64Value() Returns Type Description System.Int64 the primitive value of this object. | Improve this Doc View Source GetSingleValue() Returns this object's value as a . Might involve rounding. Declaration public abstract float GetSingleValue() Returns Type Description System.Single the primitive value of this object. | Improve this Doc View Source ToString() Declaration public abstract override string ToString() Returns Type Description System.String | Improve this Doc View Source ToString(IFormatProvider) Declaration public abstract string ToString(IFormatProvider provider) Parameters Type Name Description IFormatProvider provider Returns Type Description System.String | Improve this Doc View Source ToString(String) Declaration public abstract string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public abstract string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format IFormatProvider provider Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Single.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Single.html",
    "title": "Class Field.Single | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field.Single Inheritance System.Object Field.Number Field.Single Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax protected sealed class Single : Field.Number Constructors | Improve this Doc View Source Single(Single) Declaration public Single(float value) Parameters Type Name Description System.Single value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Store.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Store.html",
    "title": "Enum Field.Store | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Field.Store Specifies whether and how a field should be stored. Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public enum Store : int Fields Name Description NO Do not store the field's value in the index. YES Store the original field value in the index. this is useful for short texts like a document's title which should be displayed with the results. The value is stored in its original form, i.e. no analyzer is used before it is stored. Extension Methods FieldExtensions.IsStored()"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.TermVector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.TermVector.html",
    "title": "Enum Field.TermVector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Field.TermVector Specifies whether and how a field should have term vectors. Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public enum TermVector : int Fields Name Description NO Do not store term vectors. WITH_OFFSETS Store the term vector + Token offset information WITH_POSITIONS Store the term vector + token position information WITH_POSITIONS_OFFSETS Store the term vector + Token position and offset information YES Store the term vectors of each document. A term vector is a list of the document's terms and their number of occurrences in that document. Extension Methods FieldExtensions.IsStored() FieldExtensions.WithPositions() FieldExtensions.WithOffsets()"
  },
  "api/Lucene.Net/Lucene.Net.Documents.FieldExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.FieldExtensions.html",
    "title": "Class FieldExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldExtensions LUCENENET specific extension methods to add functionality to enumerations that mimic Lucene Inheritance System.Object FieldExtensions Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public static class FieldExtensions : object Methods | Improve this Doc View Source IsAnalyzed(Field.Index) Declaration public static bool IsAnalyzed(this Field.Index index) Parameters Type Name Description Field.Index index Returns Type Description System.Boolean | Improve this Doc View Source IsIndexed(Field.Index) Declaration public static bool IsIndexed(this Field.Index index) Parameters Type Name Description Field.Index index Returns Type Description System.Boolean | Improve this Doc View Source IsStored(Field.Store) Declaration public static bool IsStored(this Field.Store store) Parameters Type Name Description Field.Store store Returns Type Description System.Boolean | Improve this Doc View Source IsStored(Field.TermVector) Declaration public static bool IsStored(this Field.TermVector tv) Parameters Type Name Description Field.TermVector tv Returns Type Description System.Boolean | Improve this Doc View Source OmitNorms(Field.Index) Declaration public static bool OmitNorms(this Field.Index index) Parameters Type Name Description Field.Index index Returns Type Description System.Boolean | Improve this Doc View Source ToIndex(Boolean, Boolean) Declaration public static Field.Index ToIndex(bool indexed, bool analyed) Parameters Type Name Description System.Boolean indexed System.Boolean analyed Returns Type Description Field.Index | Improve this Doc View Source ToIndex(Boolean, Boolean, Boolean) Declaration public static Field.Index ToIndex(bool indexed, bool analyzed, bool omitNorms) Parameters Type Name Description System.Boolean indexed System.Boolean analyzed System.Boolean omitNorms Returns Type Description Field.Index | Improve this Doc View Source ToTermVector(Boolean, Boolean, Boolean) Get the best representation of a TermVector given the flags. Declaration public static Field.TermVector ToTermVector(bool stored, bool withOffsets, bool withPositions) Parameters Type Name Description System.Boolean stored System.Boolean withOffsets System.Boolean withPositions Returns Type Description Field.TermVector | Improve this Doc View Source WithOffsets(Field.TermVector) Declaration public static bool WithOffsets(this Field.TermVector tv) Parameters Type Name Description Field.TermVector tv Returns Type Description System.Boolean | Improve this Doc View Source WithPositions(Field.TermVector) Declaration public static bool WithPositions(this Field.TermVector tv) Parameters Type Name Description Field.TermVector tv Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Documents.FieldType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.FieldType.html",
    "title": "Class FieldType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldType Describes the properties of a field. Inheritance System.Object FieldType Implements IIndexableFieldType Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class FieldType : object, IIndexableFieldType Constructors | Improve this Doc View Source FieldType() Create a new FieldType with default properties. Declaration public FieldType() | Improve this Doc View Source FieldType(FieldType) Create a new mutable FieldType with all of the properties from ref Declaration public FieldType(FieldType ref) Parameters Type Name Description FieldType ref Properties | Improve this Doc View Source DocValueType Sets the field's DocValuesType , or set to NONE if no DocValues should be stored. The default is NONE (no DocValues ). Declaration public virtual DocValuesType DocValueType { get; set; } Property Value Type Description DocValuesType | Improve this Doc View Source IndexOptions Sets the indexing options for the field. The default is DOCS_AND_FREQS_AND_POSITIONS . Declaration public virtual IndexOptions IndexOptions { get; set; } Property Value Type Description IndexOptions | Improve this Doc View Source IsIndexed Set to true to index (invert) this field. The default is false . Declaration public virtual bool IsIndexed { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsStored Set to true to store this field. The default is false . Declaration public virtual bool IsStored { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsTokenized Set to true to tokenize this field's contents via the configured Analyzer . The default is false . Declaration public virtual bool IsTokenized { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source NumericPrecisionStep Sets the numeric precision step for the field. This has no effect if NumericType returns NONE . The default is PRECISION_STEP_DEFAULT . Declaration public virtual int NumericPrecisionStep { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source NumericType Specifies the field's numeric type, or set to null if the field has no numeric type. If non-null then the field's value will be indexed numerically so that NumericRangeQuery can be used at search time. Declaration public virtual NumericType NumericType { get; set; } Property Value Type Description NumericType | Improve this Doc View Source OmitNorms Set to true to omit normalization values for the field. The default is false . Declaration public virtual bool OmitNorms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectorOffsets Set to true to also store token character offsets into the term vector for this field. The default is false . Declaration public virtual bool StoreTermVectorOffsets { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectorPayloads Set to true to also store token payloads into the term vector for this field. The default is false . Declaration public virtual bool StoreTermVectorPayloads { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectorPositions Set to true to also store token positions into the term vector for this field. The default is false . Declaration public virtual bool StoreTermVectorPositions { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectors Set to true if this field's indexed form should be also stored into term vectors. The default is false . Declaration public virtual bool StoreTermVectors { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Freeze() Prevents future changes. Note, it is recommended that this is called once the FieldType 's properties have been set, to prevent unintentional state changes. Declaration public virtual void Freeze() | Improve this Doc View Source ToString() Prints a FieldType for human consumption. Declaration public override sealed string ToString() Returns Type Description System.String Implements IIndexableFieldType"
  },
  "api/Lucene.Net/Lucene.Net.Documents.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.html",
    "title": "Namespace Lucene.Net.Documents | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Documents <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Misc extensions of the Document/Field API. Classes BinaryDocValuesField Field that stores a per-document BytesRef value. The values are stored directly with no sharing, which is a good fit when the fields don't share (many) values, such as a title field. If values may be shared and sorted it's better to use SortedDocValuesField . Here's an example usage: document.Add(new BinaryDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. ByteDocValuesField Field that stores a per-document value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new ByteDocValuesField(name, (byte) 22)); If you also need to store the value, you should add a separate StoredField instance. CompressionTools Simple utility class providing static methods to compress and decompress binary data for stored fields. this class uses the class to compress and decompress. DateTools Provides support for converting dates to strings and vice-versa. The strings are structured so that lexicographic sorting orders them by date, which makes them suitable for use as field values and search terms. This class also helps you to limit the resolution of your dates. Do not save dates with a finer resolution than you really need, as then TermRangeQuery and PrefixQuery will require more memory and become slower. Another approach is NumericUtils , which provides a sortable binary representation (prefix encoded) of numeric values, which date/time are. For indexing a , just get the and index this as a numeric value with Int64Field and use NumericRangeQuery<T> to query it. DerefBytesDocValuesField Field that stores a per-document BytesRef value. Here's an example usage: document.Add(new DerefBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Document Documents are the unit of indexing and search. A Document is a set of fields. Each field has a name and a textual value. A field may be stored ( IsStored ) with the document, in which case it is returned with search hits on the document. Thus each document should typically contain one or more stored fields which uniquely identify it. Note that fields which are not IsStored are not available in documents retrieved from the index, e.g. with Doc or Document(Int32) . DocumentStoredFieldVisitor A StoredFieldVisitor that creates a Document containing all stored fields, or only specific requested fields provided to DocumentStoredFieldVisitor(ISet<String>) . This is used by Document(Int32) to load a document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DoubleDocValuesField Syntactic sugar for encoding doubles as NumericDocValues via . Per-document double values can be retrieved via GetDoubles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring eight bytes per document. Consider encoding double values yourself with only as much precision as you require. DoubleField Field that indexes values for efficient range filtering and sorting. Here's an example usage: document.Add(new DoubleField(name, 6.0, Field.Store.NO)); For optimal performance, re-use the DoubleField and Document instance for more than one document: DoubleField field = new DoubleField(name, 0.0, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetDoubleValue(value) writer.AddDocument(document); ... } See also Int32Field , Int64Field , SingleField . To perform range querying or filtering against a DoubleField , use NumericRangeQuery or NumericRangeFilter<T> . To sort according to a DoubleField , use the normal numeric sort types, eg DOUBLE . DoubleField values can also be loaded directly from IFieldCache . You may add the same field name as an DoubleField to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued DoubleField . A DoubleField will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep ( precisionStep ) configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. This class is a wrapper around this token stream type for easier, more intuitive usage. @since 2.9 Field Expert: directly create a field for a document. Most users should use one of the sugar subclasses: Int32Field , Int64Field , SingleField , DoubleField , BinaryDocValuesField , NumericDocValuesField , SortedDocValuesField , StringField , TextField , StoredField . A field is a section of a Document . Each field has three parts: name, type and value. Values may be text ( , or pre-analyzed TokenStream ), binary ( byte[] ), or numeric ( , , , or ). Fields are optionally stored in the index, so that they may be returned with hits on the document. NOTE: the field type is an IIndexableFieldType . Making changes to the state of the IIndexableFieldType will impact any Field it is used in. It is strongly recommended that no changes be made after Field instantiation. Field.Byte Field.Double Field.Int16 Field.Int32 Field.Int64 Field.Number Field.Single FieldExtensions LUCENENET specific extension methods to add functionality to enumerations that mimic Lucene FieldType Describes the properties of a field. Int16DocValuesField Field that stores a per-document value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int16DocValuesField(name, (short) 22)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was ShortDocValuesField in Lucene Int32DocValuesField Field that stores a per-document value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int32DocValuesField(name, 22)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was IntDocValuesField in Lucene Int32Field Field that indexes values for efficient range filtering and sorting. Here's an example usage: document.Add(new Int32Field(name, 6, Field.Store.NO)); For optimal performance, re-use the Int32Field and Document instance for more than one document: Int32Field field = new Int32Field(name, 6, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetInt32Value(value) writer.AddDocument(document); ... } See also Int64Field , SingleField , DoubleField . To perform range querying or filtering against a Int32Field , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a Int32Field , use the normal numeric sort types, eg INT32 . Int32Field values can also be loaded directly from IFieldCache . You may add the same field name as an Int32Field to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued Int32Field . An Int32Field will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. this class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was IntField in Lucene @since 2.9 Int64DocValuesField Field that stores a per-document value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int64DocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was LongDocValuesField in Lucene Int64Field Field that indexes values for efficient range filtering and sorting. Here's an example usage: document.Add(new Int64Field(name, 6L, Field.Store.NO)); For optimal performance, re-use the Int64Field and Document instance for more than one document: Int64Field field = new Int64Field(name, 0L, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetInt64Value(value) writer.AddDocument(document); ... } See also Int32Field , SingleField , DoubleField . Any type that can be converted to long can also be indexed. For example, date/time values represented by a can be translated into a long value using the property. If you don't need millisecond precision, you can quantize the value, either by dividing the result of or using the separate getters (for year, month, etc.) to construct an or value. To perform range querying or filtering against a Int64Field , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a Int64Field , use the normal numeric sort types, eg INT64 . Int64Field values can also be loaded directly from IFieldCache . You may add the same field name as an Int64Field to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued Int64Field . An Int64Field will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. this class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was LongField in Lucene @since 2.9 NumericDocValuesField Field that stores a per-document value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new NumericDocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. PackedInt64DocValuesField Field that stores a per-document value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new PackedInt64DocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was PackedLongDocValuesField in Lucene SingleDocValuesField Syntactic sugar for encoding floats as NumericDocValues via . Per-document floating point values can be retrieved via GetSingles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring four bytes per document. Consider encoding floating point values yourself with only as much precision as you require. NOTE: This was FloatDocValuesField in Lucene SingleField Field that indexes values for efficient range filtering and sorting. Here's an example usage: document.Add(new SingleField(name, 6.0F, Field.Store.NO)); For optimal performance, re-use the SingleField and Document instance for more than one document: FloatField field = new SingleField(name, 0.0F, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetSingleValue(value) writer.AddDocument(document); ... } See also Int32Field , Int64Field , DoubleField . To perform range querying or filtering against a SingleField , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a SingleField , use the normal numeric sort types, eg SINGLE . SingleField values can also be loaded directly from IFieldCache . You may add the same field name as an SingleField to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued SingleField . A SingleField will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. This class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was FloatField in Lucene @since 2.9 SortedBytesDocValuesField Field that stores a per-document BytesRef value, indexed for sorting. Here's an example usage: document.Add(new SortedBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. SortedDocValuesField Field that stores a per-document BytesRef value, indexed for sorting. Here's an example usage: document.Add(new SortedDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. SortedSetDocValuesField Field that stores a set of per-document BytesRef values, indexed for faceting,grouping,joining. Here's an example usage: document.Add(new SortedSetDocValuesField(name, new BytesRef(\"hello\"))); document.Add(new SortedSetDocValuesField(name, new BytesRef(\"world\"))); If you also need to store the value, you should add a separate StoredField instance. StoredField A field whose value is stored so that Doc(Int32) and Document(Int32) will return the field and its value. StraightBytesDocValuesField Field that stores a per-document BytesRef value. If values may be shared it's better to use SortedDocValuesField . Here's an example usage: document.Add(new StraightBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. StringField A field that is indexed but not tokenized: the entire value is indexed as a single token. For example this might be used for a 'country' field or an 'id' field, or any field that you intend to use for sorting or access through the field cache. TextField A field that is indexed and tokenized, without term vectors. For example this would be used on a 'body' field, that contains the bulk of a document's text. Enums DateTools.Resolution Specifies the time granularity. Field.Index Specifies whether and how a field should be indexed. Field.Store Specifies whether and how a field should be stored. Field.TermVector Specifies whether and how a field should have term vectors. NumericFieldType Data type of the numeric IIndexableField value NumericType Data type of the numeric value @since 3.2"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int16DocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int16DocValuesField.html",
    "title": "Class Int16DocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int16DocValuesField Field that stores a per-document value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int16DocValuesField(name, (short) 22)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was ShortDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField Int16DocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class Int16DocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source Int16DocValuesField(String, Int16) Creates a new DocValues field with the specified 16-bit value Declaration public Int16DocValuesField(string name, short value) Parameters Type Name Description System.String name field name System.Int16 value 16-bit value Methods | Improve this Doc View Source SetInt16Value(Int16) Declaration public override void SetInt16Value(short value) Parameters Type Name Description System.Int16 value Overrides Field.SetInt16Value(Int16) Implements IIndexableField See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int32DocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int32DocValuesField.html",
    "title": "Class Int32DocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32DocValuesField Field that stores a per-document value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int32DocValuesField(name, 22)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was IntDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField Int32DocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class Int32DocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source Int32DocValuesField(String, Int32) Creates a new DocValues field with the specified 32-bit value Declaration public Int32DocValuesField(string name, int value) Parameters Type Name Description System.String name field name System.Int32 value 32-bit value Methods | Improve this Doc View Source SetInt32Value(Int32) Declaration public override void SetInt32Value(int value) Parameters Type Name Description System.Int32 value Overrides Field.SetInt32Value(Int32) Implements IIndexableField See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int32Field.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int32Field.html",
    "title": "Class Int32Field | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32Field Field that indexes values for efficient range filtering and sorting. Here's an example usage: document.Add(new Int32Field(name, 6, Field.Store.NO)); For optimal performance, re-use the Int32Field and Document instance for more than one document: Int32Field field = new Int32Field(name, 6, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetInt32Value(value) writer.AddDocument(document); ... } See also Int64Field , SingleField , DoubleField . To perform range querying or filtering against a Int32Field , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a Int32Field , use the normal numeric sort types, eg INT32 . Int32Field values can also be loaded directly from IFieldCache . You may add the same field name as an Int32Field to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued Int32Field . An Int32Field will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. this class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was IntField in Lucene @since 2.9 Inheritance System.Object Field Int32Field Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class Int32Field : Field, IIndexableField Constructors | Improve this Doc View Source Int32Field(String, Int32, Field.Store) Creates a stored or un-stored Int32Field with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public Int32Field(string name, int value, Field.Store stored) Parameters Type Name Description System.String name field name System.Int32 value 32-bit value Field.Store stored YES if the content should also be stored | Improve this Doc View Source Int32Field(String, Int32, FieldType) Expert: allows you to customize the FieldType . Declaration public Int32Field(string name, int value, FieldType type) Parameters Type Name Description System.String name field name System.Int32 value 32-bit value FieldType type customized field type: must have NumericType of INT32 . Fields | Improve this Doc View Source TYPE_NOT_STORED Type for an Int32Field that is not stored: normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Type for a stored Int32Field : normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int64DocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int64DocValuesField.html",
    "title": "Class Int64DocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64DocValuesField Field that stores a per-document value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int64DocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was LongDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField Int64DocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class Int64DocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source Int64DocValuesField(String, Int64) Creates a new DocValues field with the specified 64-bit value Declaration public Int64DocValuesField(string name, long value) Parameters Type Name Description System.String name field name System.Int64 value 64-bit value Implements IIndexableField See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int64Field.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int64Field.html",
    "title": "Class Int64Field | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64Field Field that indexes values for efficient range filtering and sorting. Here's an example usage: document.Add(new Int64Field(name, 6L, Field.Store.NO)); For optimal performance, re-use the Int64Field and Document instance for more than one document: Int64Field field = new Int64Field(name, 0L, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetInt64Value(value) writer.AddDocument(document); ... } See also Int32Field , SingleField , DoubleField . Any type that can be converted to long can also be indexed. For example, date/time values represented by a can be translated into a long value using the property. If you don't need millisecond precision, you can quantize the value, either by dividing the result of or using the separate getters (for year, month, etc.) to construct an or value. To perform range querying or filtering against a Int64Field , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a Int64Field , use the normal numeric sort types, eg INT64 . Int64Field values can also be loaded directly from IFieldCache . You may add the same field name as an Int64Field to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued Int64Field . An Int64Field will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. this class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was LongField in Lucene @since 2.9 Inheritance System.Object Field Int64Field Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class Int64Field : Field, IIndexableField Constructors | Improve this Doc View Source Int64Field(String, Int64, Field.Store) Creates a stored or un-stored Int64Field with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public Int64Field(string name, long value, Field.Store stored) Parameters Type Name Description System.String name field name System.Int64 value 64-bit value Field.Store stored YES if the content should also be stored | Improve this Doc View Source Int64Field(String, Int64, FieldType) Expert: allows you to customize the FieldType . Declaration public Int64Field(string name, long value, FieldType type) Parameters Type Name Description System.String name field name System.Int64 value 64-bit value FieldType type customized field type: must have NumericType of INT64 . Fields | Improve this Doc View Source TYPE_NOT_STORED Type for a Int64Field that is not stored: normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Type for a stored Int64Field : normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.NumericDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.NumericDocValuesField.html",
    "title": "Class NumericDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericDocValuesField Field that stores a per-document value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new NumericDocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field NumericDocValuesField ByteDocValuesField DoubleDocValuesField Int16DocValuesField Int32DocValuesField Int64DocValuesField PackedInt64DocValuesField SingleDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class NumericDocValuesField : Field, IIndexableField Constructors | Improve this Doc View Source NumericDocValuesField(String, Int64) Creates a new DocValues field with the specified 64-bit value Declaration public NumericDocValuesField(string name, long value) Parameters Type Name Description System.String name field name System.Int64 value 64-bit value Fields | Improve this Doc View Source TYPE Type for numeric DocValues . Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Implements IIndexableField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.NumericFieldType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.NumericFieldType.html",
    "title": "Enum NumericFieldType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum NumericFieldType Data type of the numeric IIndexableField value Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public enum NumericFieldType : int Fields Name Description BYTE 8-bit unsigned integer numeric type DOUBLE 64-bit double numeric type INT16 16-bit short numeric type INT32 32-bit integer numeric type INT64 64-bit long numeric type NONE No numeric type (the field is not numeric). SINGLE 32-bit float numeric type"
  },
  "api/Lucene.Net/Lucene.Net.Documents.NumericType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.NumericType.html",
    "title": "Enum NumericType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum NumericType Data type of the numeric value @since 3.2 Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public enum NumericType : int Fields Name Description DOUBLE 64-bit double numeric type INT32 32-bit integer numeric type NOTE: This was INT in Lucene INT64 64-bit long numeric type NOTE: This was LONG in Lucene NONE No numeric type will be used. NOTE: This is the same as setting to null in Lucene SINGLE 32-bit float numeric type NOTE: This was FLOAT in Lucene"
  },
  "api/Lucene.Net/Lucene.Net.Documents.PackedInt64DocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.PackedInt64DocValuesField.html",
    "title": "Class PackedInt64DocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt64DocValuesField Field that stores a per-document value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new PackedInt64DocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was PackedLongDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField PackedInt64DocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class PackedInt64DocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source PackedInt64DocValuesField(String, Int64) Creates a new DocValues field with the specified value Declaration public PackedInt64DocValuesField(string name, long value) Parameters Type Name Description System.String name field name System.Int64 value 64-bit value Implements IIndexableField See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SingleDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SingleDocValuesField.html",
    "title": "Class SingleDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleDocValuesField Syntactic sugar for encoding floats as NumericDocValues via . Per-document floating point values can be retrieved via GetSingles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring four bytes per document. Consider encoding floating point values yourself with only as much precision as you require. NOTE: This was FloatDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField SingleDocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class SingleDocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source SingleDocValuesField(String, Single) Creates a new DocValues field with the specified 32-bit value Declaration public SingleDocValuesField(string name, float value) Parameters Type Name Description System.String name field name System.Single value 32-bit value Methods | Improve this Doc View Source SetInt64Value(Int64) Declaration public override void SetInt64Value(long value) Parameters Type Name Description System.Int64 value Overrides Field.SetInt64Value(Int64) | Improve this Doc View Source SetSingleValue(Single) Declaration public override void SetSingleValue(float value) Parameters Type Name Description System.Single value Overrides Field.SetSingleValue(Single) Implements IIndexableField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SingleField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SingleField.html",
    "title": "Class SingleField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleField Field that indexes values for efficient range filtering and sorting. Here's an example usage: document.Add(new SingleField(name, 6.0F, Field.Store.NO)); For optimal performance, re-use the SingleField and Document instance for more than one document: FloatField field = new SingleField(name, 0.0F, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetSingleValue(value) writer.AddDocument(document); ... } See also Int32Field , Int64Field , DoubleField . To perform range querying or filtering against a SingleField , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a SingleField , use the normal numeric sort types, eg SINGLE . SingleField values can also be loaded directly from IFieldCache . You may add the same field name as an SingleField to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued SingleField . A SingleField will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. This class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was FloatField in Lucene @since 2.9 Inheritance System.Object Field SingleField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class SingleField : Field, IIndexableField Constructors | Improve this Doc View Source SingleField(String, Single, Field.Store) Creates a stored or un-stored SingleField with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public SingleField(string name, float value, Field.Store stored) Parameters Type Name Description System.String name field name System.Single value 32-bit value Field.Store stored YES if the content should also be stored | Improve this Doc View Source SingleField(String, Single, FieldType) Expert: allows you to customize the FieldType . Declaration public SingleField(string name, float value, FieldType type) Parameters Type Name Description System.String name field name System.Single value 32-bit value FieldType type customized field type: must have NumericType of SINGLE . Fields | Improve this Doc View Source TYPE_NOT_STORED Type for a SingleField that is not stored: normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Type for a stored SingleField : normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SortedBytesDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SortedBytesDocValuesField.html",
    "title": "Class SortedBytesDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedBytesDocValuesField Field that stores a per-document BytesRef value, indexed for sorting. Here's an example usage: document.Add(new SortedBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field SortedDocValuesField SortedBytesDocValuesField Implements IIndexableField Inherited Members SortedDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class SortedBytesDocValuesField : SortedDocValuesField, IIndexableField Constructors | Improve this Doc View Source SortedBytesDocValuesField(String, BytesRef) Create a new fixed or variable-length sorted DocValues field. Declaration public SortedBytesDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content | Improve this Doc View Source SortedBytesDocValuesField(String, BytesRef, Boolean) Create a new fixed or variable length sorted DocValues field. Declaration public SortedBytesDocValuesField(string name, BytesRef bytes, bool isFixedLength) Parameters Type Name Description System.String name field name BytesRef bytes binary content System.Boolean isFixedLength (ignored) Fields | Improve this Doc View Source TYPE_FIXED_LEN Type for sorted bytes DocValues : all with the same length Declaration public static readonly FieldType TYPE_FIXED_LEN Field Value Type Description FieldType | Improve this Doc View Source TYPE_VAR_LEN Type for sorted bytes DocValues : can have variable lengths Declaration public static readonly FieldType TYPE_VAR_LEN Field Value Type Description FieldType Implements IIndexableField See Also SortedDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SortedDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SortedDocValuesField.html",
    "title": "Class SortedDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedDocValuesField Field that stores a per-document BytesRef value, indexed for sorting. Here's an example usage: document.Add(new SortedDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field SortedDocValuesField SortedBytesDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class SortedDocValuesField : Field, IIndexableField Constructors | Improve this Doc View Source SortedDocValuesField(String, BytesRef) Create a new sorted DocValues field. Declaration public SortedDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content Fields | Improve this Doc View Source TYPE Type for sorted bytes DocValues Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Implements IIndexableField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SortedSetDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SortedSetDocValuesField.html",
    "title": "Class SortedSetDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedSetDocValuesField Field that stores a set of per-document BytesRef values, indexed for faceting,grouping,joining. Here's an example usage: document.Add(new SortedSetDocValuesField(name, new BytesRef(\"hello\"))); document.Add(new SortedSetDocValuesField(name, new BytesRef(\"world\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field SortedSetDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class SortedSetDocValuesField : Field, IIndexableField Constructors | Improve this Doc View Source SortedSetDocValuesField(String, BytesRef) Create a new sorted DocValues field. Declaration public SortedSetDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content Fields | Improve this Doc View Source TYPE Type for sorted bytes DocValues Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Implements IIndexableField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.StoredField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.StoredField.html",
    "title": "Class StoredField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StoredField A field whose value is stored so that Doc(Int32) and Document(Int32) will return the field and its value. Inheritance System.Object Field StoredField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class StoredField : Field, IIndexableField Constructors | Improve this Doc View Source StoredField(String, BytesRef) Create a stored-only field with the given binary value. NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field. Declaration public StoredField(string name, BytesRef value) Parameters Type Name Description System.String name field name BytesRef value BytesRef pointing to binary content (not copied) | Improve this Doc View Source StoredField(String, Byte[]) Create a stored-only field with the given binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public StoredField(string name, byte[] value) Parameters Type Name Description System.String name field name System.Byte [] value byte array pointing to binary content (not copied) | Improve this Doc View Source StoredField(String, Byte[], Int32, Int32) Create a stored-only field with the given binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public StoredField(string name, byte[] value, int offset, int length) Parameters Type Name Description System.String name field name System.Byte [] value array pointing to binary content (not copied) System.Int32 offset starting position of the byte array System.Int32 length valid length of the byte array | Improve this Doc View Source StoredField(String, Double) Create a stored-only field with the given value. Declaration public StoredField(string name, double value) Parameters Type Name Description System.String name field name System.Double value value | Improve this Doc View Source StoredField(String, Int32) Create a stored-only field with the given value. Declaration public StoredField(string name, int value) Parameters Type Name Description System.String name field name System.Int32 value value | Improve this Doc View Source StoredField(String, Int64) Create a stored-only field with the given value. Declaration public StoredField(string name, long value) Parameters Type Name Description System.String name field name System.Int64 value value | Improve this Doc View Source StoredField(String, Single) Create a stored-only field with the given value. Declaration public StoredField(string name, float value) Parameters Type Name Description System.String name field name System.Single value value | Improve this Doc View Source StoredField(String, String) Create a stored-only field with the given value. Declaration public StoredField(string name, string value) Parameters Type Name Description System.String name field name System.String value value Fields | Improve this Doc View Source TYPE Type for a stored-only field. Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Implements IIndexableField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.StraightBytesDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.StraightBytesDocValuesField.html",
    "title": "Class StraightBytesDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StraightBytesDocValuesField Field that stores a per-document BytesRef value. If values may be shared it's better to use SortedDocValuesField . Here's an example usage: document.Add(new StraightBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field BinaryDocValuesField StraightBytesDocValuesField Implements IIndexableField Inherited Members BinaryDocValuesField.fType Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class StraightBytesDocValuesField : BinaryDocValuesField, IIndexableField Constructors | Improve this Doc View Source StraightBytesDocValuesField(String, BytesRef) Create a new fixed or variable length DocValues field. Declaration public StraightBytesDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content | Improve this Doc View Source StraightBytesDocValuesField(String, BytesRef, Boolean) Create a new fixed or variable length direct DocValues field. Declaration public StraightBytesDocValuesField(string name, BytesRef bytes, bool isFixedLength) Parameters Type Name Description System.String name field name BytesRef bytes binary content System.Boolean isFixedLength (ignored) Fields | Improve this Doc View Source TYPE_FIXED_LEN Type for direct bytes DocValues : all with the same length Declaration public static readonly FieldType TYPE_FIXED_LEN Field Value Type Description FieldType | Improve this Doc View Source TYPE_VAR_LEN Type for direct bytes DocValues : can have variable lengths Declaration public static readonly FieldType TYPE_VAR_LEN Field Value Type Description FieldType Implements IIndexableField See Also BinaryDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.StringField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.StringField.html",
    "title": "Class StringField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringField A field that is indexed but not tokenized: the entire value is indexed as a single token. For example this might be used for a 'country' field or an 'id' field, or any field that you intend to use for sorting or access through the field cache. Inheritance System.Object Field StringField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class StringField : Field, IIndexableField Constructors | Improve this Doc View Source StringField(String, String, Field.Store) Creates a new StringField (a field that is indexed but not tokenized) Declaration public StringField(string name, string value, Field.Store stored) Parameters Type Name Description System.String name field name System.String value value Field.Store stored YES if the content should also be stored Fields | Improve this Doc View Source TYPE_NOT_STORED Indexed, not tokenized, omits norms, indexes DOCS_ONLY , not stored. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Indexed, not tokenized, omits norms, indexes DOCS_ONLY , stored Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.TextField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.TextField.html",
    "title": "Class TextField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TextField A field that is indexed and tokenized, without term vectors. For example this would be used on a 'body' field, that contains the bulk of a document's text. Inheritance System.Object Field TextField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class TextField : Field, IIndexableField Constructors | Improve this Doc View Source TextField(String, TokenStream) Creates a new un-stored TextField with TokenStream value. Declaration public TextField(string name, TokenStream stream) Parameters Type Name Description System.String name field name TokenStream stream TokenStream value | Improve this Doc View Source TextField(String, String, Field.Store) Creates a new TextField with value. Declaration public TextField(string name, string value, Field.Store store) Parameters Type Name Description System.String name field name System.String value value Field.Store store YES if the content should also be stored | Improve this Doc View Source TextField(String, TextReader) Creates a new un-stored TextField with value. Declaration public TextField(string name, TextReader reader) Parameters Type Name Description System.String name field name TextReader reader value Fields | Improve this Doc View Source TYPE_NOT_STORED Indexed, tokenized, not stored. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Indexed, tokenized, stored. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField"
  },
  "api/Lucene.Net/Lucene.Net.Index.AtomicReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.AtomicReader.html",
    "title": "Class AtomicReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AtomicReader AtomicReader is an abstract class, providing an interface for accessing an index. Search of an index is done entirely through this abstract interface, so that any subclass which implements it is searchable. IndexReader s implemented by this subclass do not consist of several sub-readers, they are atomic. They support retrieval of stored fields, doc values, terms, and postings. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader AtomicReader FilterAtomicReader ParallelAtomicReader SegmentReader SlowCompositeReaderWrapper Inherited Members IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVectors(Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDocs IndexReader.MaxDoc IndexReader.NumDeletedDocs IndexReader.Document(Int32, StoredFieldVisitor) IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.DoClose() IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class AtomicReader : IndexReader Constructors | Improve this Doc View Source AtomicReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected AtomicReader() Properties | Improve this Doc View Source AtomicContext LUCENENET specific propety that allows access to the context as AtomicReaderContext , which prevents the need to cast. Declaration public AtomicReaderContext AtomicContext { get; } Property Value Type Description AtomicReaderContext | Improve this Doc View Source Context Declaration public override sealed IndexReaderContext Context { get; } Property Value Type Description IndexReaderContext Overrides IndexReader.Context | Improve this Doc View Source FieldInfos Get the FieldInfos describing all fields in this reader. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public abstract FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos | Improve this Doc View Source Fields Returns Fields for this reader. this property may return null if the reader has no postings. Declaration public abstract Fields Fields { get; } Property Value Type Description Fields | Improve this Doc View Source LiveDocs Returns the IBits representing live (not deleted) docs. A set bit indicates the doc ID has not been deleted. If this method returns null it means there are no deleted documents (all documents are live). The returned instance has been safely published for use by multiple threads without additional synchronization. Declaration public abstract IBits LiveDocs { get; } Property Value Type Description IBits Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source DocFreq(Term) Declaration public override sealed int DocFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int32 Overrides IndexReader.DocFreq(Term) | Improve this Doc View Source GetBinaryDocValues(String) Returns BinaryDocValues for this field, or null if no BinaryDocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues | Improve this Doc View Source GetDocCount(String) Declaration public override sealed int GetDocCount(string field) Parameters Type Name Description System.String field Returns Type Description System.Int32 Overrides IndexReader.GetDocCount(String) | Improve this Doc View Source GetDocsWithField(String) Returns a IBits at the size of reader.MaxDoc , with turned on bits for each docid that does have a value for this field, or null if no DocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits | Improve this Doc View Source GetNormValues(String) Returns NumericDocValues representing norms for this field, or null if no NumericDocValues were indexed. The returned instance should only be used by a single thread. Declaration public abstract NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetNumericDocValues(String) Returns NumericDocValues for this field, or null if no NumericDocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetSortedDocValues(String) Returns SortedDocValues for this field, or null if no SortedDocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues | Improve this Doc View Source GetSortedSetDocValues(String) Returns SortedSetDocValues for this field, or null if no SortedSetDocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues | Improve this Doc View Source GetSumDocFreq(String) Declaration public override sealed long GetSumDocFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 Overrides IndexReader.GetSumDocFreq(String) | Improve this Doc View Source GetSumTotalTermFreq(String) Declaration public override sealed long GetSumTotalTermFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 Overrides IndexReader.GetSumTotalTermFreq(String) | Improve this Doc View Source GetTermDocsEnum(Term) Returns DocsEnum for the specified term. This will return null if either the field or term does not exist. Declaration public DocsEnum GetTermDocsEnum(Term term) Parameters Type Name Description Term term Returns Type Description DocsEnum See Also Docs ( IBits , DocsEnum ) | Improve this Doc View Source GetTermPositionsEnum(Term) Returns DocsAndPositionsEnum for the specified term. This will return null if the field or term does not exist or positions weren't indexed. Declaration public DocsAndPositionsEnum GetTermPositionsEnum(Term term) Parameters Type Name Description Term term Returns Type Description DocsAndPositionsEnum See Also DocsAndPositions ( IBits , DocsAndPositionsEnum ) | Improve this Doc View Source GetTerms(String) This may return null if the field does not exist. Declaration public Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms | Improve this Doc View Source HasNorms(String) Returns true if there are norms stored for this field . Declaration public bool HasNorms(string field) Parameters Type Name Description System.String field Returns Type Description System.Boolean | Improve this Doc View Source TotalTermFreq(Term) Returns the number of documents containing the term . This method returns 0 if the term or field does not exist. This method does not take into account deleted documents that have not yet been merged away. Declaration public override sealed long TotalTermFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int64 Overrides IndexReader.TotalTermFreq(Term)"
  },
  "api/Lucene.Net/Lucene.Net.Index.AtomicReaderContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.AtomicReaderContext.html",
    "title": "Class AtomicReaderContext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AtomicReaderContext IndexReaderContext for AtomicReader instances. Inheritance System.Object IndexReaderContext AtomicReaderContext Inherited Members IndexReaderContext.Parent IndexReaderContext.IsTopLevel IndexReaderContext.DocBaseInParent IndexReaderContext.OrdInParent Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class AtomicReaderContext : IndexReaderContext Properties | Improve this Doc View Source AtomicReader Declaration public AtomicReader AtomicReader { get; } Property Value Type Description AtomicReader | Improve this Doc View Source Children Declaration public override IList<IndexReaderContext> Children { get; } Property Value Type Description IList < IndexReaderContext > Overrides IndexReaderContext.Children | Improve this Doc View Source DocBase The readers absolute doc base Declaration public int DocBase { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Leaves Declaration public override IList<AtomicReaderContext> Leaves { get; } Property Value Type Description IList < AtomicReaderContext > Overrides IndexReaderContext.Leaves | Improve this Doc View Source Ord The readers ord in the top-level's leaves array Declaration public int Ord { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Reader Declaration public override IndexReader Reader { get; } Property Value Type Description IndexReader Overrides IndexReaderContext.Reader"
  },
  "api/Lucene.Net/Lucene.Net.Index.BaseCompositeReader-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.BaseCompositeReader-1.html",
    "title": "Class BaseCompositeReader<R> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseCompositeReader<R> Base class for implementing CompositeReader s based on an array of sub-readers. The implementing class has to add code for correctly refcounting and closing the sub-readers. User code will most likely use MultiReader to build a composite reader on a set of sub-readers (like several DirectoryReader s). For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object IndexReader CompositeReader BaseCompositeReader<R> DirectoryReader MultiReader ParallelCompositeReader Inherited Members CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.DoClose() IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class BaseCompositeReader<R> : CompositeReader where R : IndexReader Type Parameters Name Description R Constructors | Improve this Doc View Source BaseCompositeReader(R[]) Constructs a BaseCompositeReader<R> on the given subReaders . Declaration protected BaseCompositeReader(R[] subReaders) Parameters Type Name Description R[] subReaders the wrapped sub-readers. This array is returned by GetSequentialSubReaders() and used to resolve the correct subreader for docID-based methods. Please note: this array is not cloned and not protected for modification, the subclass is responsible to do this. Properties | Improve this Doc View Source MaxDoc Declaration public override sealed int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override sealed int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs Methods | Improve this Doc View Source DocFreq(Term) Declaration public override sealed int DocFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int32 Overrides IndexReader.DocFreq(Term) | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override sealed void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetDocCount(String) Declaration public override sealed int GetDocCount(string field) Parameters Type Name Description System.String field Returns Type Description System.Int32 Overrides IndexReader.GetDocCount(String) | Improve this Doc View Source GetSequentialSubReaders() Declaration protected override sealed IList<IndexReader> GetSequentialSubReaders() Returns Type Description IList < IndexReader > Overrides CompositeReader.GetSequentialSubReaders() | Improve this Doc View Source GetSumDocFreq(String) Declaration public override sealed long GetSumDocFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 Overrides IndexReader.GetSumDocFreq(String) | Improve this Doc View Source GetSumTotalTermFreq(String) Declaration public override sealed long GetSumTotalTermFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 Overrides IndexReader.GetSumTotalTermFreq(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override sealed Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source ReaderBase(Int32) Helper method for subclasses to get the docBase of the given sub-reader index. Declaration protected int ReaderBase(int readerIndex) Parameters Type Name Description System.Int32 readerIndex Returns Type Description System.Int32 | Improve this Doc View Source ReaderIndex(Int32) Helper method for subclasses to get the corresponding reader for a doc ID Declaration protected int ReaderIndex(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int32 | Improve this Doc View Source TotalTermFreq(Term) Declaration public override sealed long TotalTermFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int64 Overrides IndexReader.TotalTermFreq(Term) See Also MultiReader"
  },
  "api/Lucene.Net/Lucene.Net.Index.BinaryDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.BinaryDocValues.html",
    "title": "Class BinaryDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryDocValues A per-document byte[] Inheritance System.Object BinaryDocValues SortedDocValues Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class BinaryDocValues : object Constructors | Improve this Doc View Source BinaryDocValues() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected BinaryDocValues() Methods | Improve this Doc View Source Get(Int32, BytesRef) Lookup the value for document. Declaration public abstract void Get(int docID, BytesRef result) Parameters Type Name Description System.Int32 docID BytesRef result"
  },
  "api/Lucene.Net/Lucene.Net.Index.BufferedUpdates.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.BufferedUpdates.html",
    "title": "Class BufferedUpdates | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferedUpdates Holds buffered deletes and updates, by docID, term or query for a single segment. this is used to hold buffered pending deletes and updates against the to-be-flushed segment. Once the deletes and updates are pushed (on flush in Lucene.Net.Index.DocumentsWriter ), they are converted to a FrozenDeletes instance. NOTE: instances of this class are accessed either via a private instance on Lucene.Net.Index.DocumentsWriterPerThread , or via sync'd code by Lucene.Net.Index.DocumentsWriterDeleteQueue Inheritance System.Object BufferedUpdates Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class BufferedUpdates : object Fields | Improve this Doc View Source MAX_INT32 NOTE: This was MAX_INT in Lucene Declaration public static readonly int MAX_INT32 Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddBinaryUpdate(DocValuesUpdate.BinaryDocValuesUpdate, Int32) Declaration public virtual void AddBinaryUpdate(DocValuesUpdate.BinaryDocValuesUpdate update, int docIDUpto) Parameters Type Name Description DocValuesUpdate.BinaryDocValuesUpdate update System.Int32 docIDUpto | Improve this Doc View Source AddDocID(Int32) Declaration public virtual void AddDocID(int docID) Parameters Type Name Description System.Int32 docID | Improve this Doc View Source AddNumericUpdate(DocValuesUpdate.NumericDocValuesUpdate, Int32) Declaration public virtual void AddNumericUpdate(DocValuesUpdate.NumericDocValuesUpdate update, int docIDUpto) Parameters Type Name Description DocValuesUpdate.NumericDocValuesUpdate update System.Int32 docIDUpto | Improve this Doc View Source AddQuery(Query, Int32) Declaration public virtual void AddQuery(Query query, int docIDUpto) Parameters Type Name Description Query query System.Int32 docIDUpto | Improve this Doc View Source AddTerm(Term, Int32) Declaration public virtual void AddTerm(Term term, int docIDUpto) Parameters Type Name Description Term term System.Int32 docIDUpto | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.ByteSliceReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ByteSliceReader.html",
    "title": "Class ByteSliceReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteSliceReader IndexInput that knows how to read the byte slices written by Posting and PostingVector. We read the bytes in each slice until we hit the end of that slice at which point we read the forwarding address of the next slice and then jump to it. Inheritance System.Object DataInput ByteSliceReader Inherited Members DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.Clone() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class ByteSliceReader : DataInput Properties | Improve this Doc View Source BufferOffset Declaration public int BufferOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndIndex Declaration public int EndIndex { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Eof() Declaration public bool Eof() Returns Type Description System.Boolean | Improve this Doc View Source Init(ByteBlockPool, Int32, Int32) Declaration public void Init(ByteBlockPool pool, int startIndex, int endIndex) Parameters Type Name Description ByteBlockPool pool System.Int32 startIndex System.Int32 endIndex | Improve this Doc View Source NextSlice() Declaration public void NextSlice() | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source WriteTo(DataOutput) Declaration public long WriteTo(DataOutput out) Parameters Type Name Description DataOutput out Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckAbort.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckAbort.html",
    "title": "Class CheckAbort | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckAbort Class for recording units of work when merging segments. Inheritance System.Object CheckAbort Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class CheckAbort : object Constructors | Improve this Doc View Source CheckAbort(MergePolicy.OneMerge, Directory) Creates a CheckAbort instance. Declaration public CheckAbort(MergePolicy.OneMerge merge, Directory dir) Parameters Type Name Description MergePolicy.OneMerge merge Directory dir Fields | Improve this Doc View Source NONE If you use this: IW.Dispose(false) cannot abort your merge! This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static readonly CheckAbort NONE Field Value Type Description CheckAbort Methods | Improve this Doc View Source Work(Double) Records the fact that roughly units amount of work have been done since this method was last called. When adding time-consuming code into Lucene.Net.Index.SegmentMerger , you should test different values for units to ensure that the time in between calls to merge.CheckAborted is up to ~ 1 second. Declaration public virtual void Work(double units) Parameters Type Name Description System.Double units"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.html",
    "title": "Class CheckIndex | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex Basic tool and API to check the health of an index and write a new segments file that removes reference to problematic segments. As this tool checks every byte in the index, on a large index it can take quite a long time to run. Please make a complete backup of your index before using this to fix your index! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CheckIndex Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class CheckIndex : object Constructors | Improve this Doc View Source CheckIndex(Directory) Create a new CheckIndex on the directory. Declaration public CheckIndex(Directory dir) Parameters Type Name Description Directory dir Properties | Improve this Doc View Source CrossCheckTermVectors If true , term vectors are compared against postings to make sure they are the same. This will likely drastically increase time it takes to run CheckIndex ! Declaration public virtual bool CrossCheckTermVectors { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source InfoStream Gets or Sets infoStream where messages should go. If null, no messages are printed. If InfoStreamIsVerbose is true then more details are printed. Declaration public virtual TextWriter InfoStream { get; set; } Property Value Type Description TextWriter | Improve this Doc View Source InfoStreamIsVerbose If true , prints more details to the InfoStream , if set. Declaration public virtual bool InfoStreamIsVerbose { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source DoCheckIndex() Returns a CheckIndex.Status instance detailing the state of the index. As this method checks every byte in the index, on a large index it can take quite a long time to run. WARNING : make sure you only call this when the index is not opened by any writer. Declaration public virtual CheckIndex.Status DoCheckIndex() Returns Type Description CheckIndex.Status | Improve this Doc View Source DoCheckIndex(IList<String>) Returns a CheckIndex.Status instance detailing the state of the index. Declaration public virtual CheckIndex.Status DoCheckIndex(IList<string> onlySegments) Parameters Type Name Description IList < System.String > onlySegments list of specific segment names to check As this method checks every byte in the specified segments, on a large index it can take quite a long time to run. WARNING : make sure you only call this when the index is not opened by any writer. Returns Type Description CheckIndex.Status | Improve this Doc View Source FixIndex(CheckIndex.Status) Repairs the index using previously returned result from DoCheckIndex() . Note that this does not remove any of the unreferenced files after it's done; you must separately open an IndexWriter , which deletes unreferenced files when it's created. WARNING : this writes a new segments file into the index, effectively removing all documents in broken segments from the index. BE CAREFUL. WARNING : Make sure you only call this when the index is not opened by any writer. Declaration public virtual void FixIndex(CheckIndex.Status result) Parameters Type Name Description CheckIndex.Status result | Improve this Doc View Source FlushInfoStream() Declaration public virtual void FlushInfoStream() | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source TestDocValues(AtomicReader, TextWriter) Test docvalues. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.DocValuesStatus TestDocValues(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader TextWriter infoStream Returns Type Description CheckIndex.Status.DocValuesStatus | Improve this Doc View Source TestFieldNorms(AtomicReader, TextWriter) Test field norms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.FieldNormStatus TestFieldNorms(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader TextWriter infoStream Returns Type Description CheckIndex.Status.FieldNormStatus | Improve this Doc View Source TestPostings(AtomicReader, TextWriter) Test the term index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.TermIndexStatus TestPostings(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader TextWriter infoStream Returns Type Description CheckIndex.Status.TermIndexStatus | Improve this Doc View Source TestPostings(AtomicReader, TextWriter, Boolean) Test the term index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.TermIndexStatus TestPostings(AtomicReader reader, TextWriter infoStream, bool verbose) Parameters Type Name Description AtomicReader reader TextWriter infoStream System.Boolean verbose Returns Type Description CheckIndex.Status.TermIndexStatus | Improve this Doc View Source TestStoredFields(AtomicReader, TextWriter) Test stored fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.StoredFieldStatus TestStoredFields(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader TextWriter infoStream Returns Type Description CheckIndex.Status.StoredFieldStatus | Improve this Doc View Source TestTermVectors(AtomicReader, TextWriter) Test term vectors. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.TermVectorStatus TestTermVectors(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader TextWriter infoStream Returns Type Description CheckIndex.Status.TermVectorStatus | Improve this Doc View Source TestTermVectors(AtomicReader, TextWriter, Boolean, Boolean) Test term vectors. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.TermVectorStatus TestTermVectors(AtomicReader reader, TextWriter infoStream, bool verbose, bool crossCheckTermVectors) Parameters Type Name Description AtomicReader reader TextWriter infoStream System.Boolean verbose System.Boolean crossCheckTermVectors Returns Type Description CheckIndex.Status.TermVectorStatus"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.DocValuesStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.DocValuesStatus.html",
    "title": "Class CheckIndex.Status.DocValuesStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex.Status.DocValuesStatus Status from testing DocValues Inheritance System.Object CheckIndex.Status.DocValuesStatus Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class DocValuesStatus : object Properties | Improve this Doc View Source Error Exception thrown during doc values test ( null on success) Declaration public Exception Error { get; } Property Value Type Description Exception | Improve this Doc View Source TotalBinaryFields Total number of binary fields Declaration public long TotalBinaryFields { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalNumericFields Total number of numeric fields Declaration public long TotalNumericFields { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalSortedFields Total number of sorted fields Declaration public long TotalSortedFields { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalSortedSetFields Total number of sortedset fields Declaration public long TotalSortedSetFields { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalValueFields Total number of docValues tested. Declaration public long TotalValueFields { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.FieldNormStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.FieldNormStatus.html",
    "title": "Class CheckIndex.Status.FieldNormStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex.Status.FieldNormStatus Status from testing field norms. Inheritance System.Object CheckIndex.Status.FieldNormStatus Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class FieldNormStatus : object Properties | Improve this Doc View Source Error Exception thrown during term index test ( null on success) Declaration public Exception Error { get; } Property Value Type Description Exception | Improve this Doc View Source TotFields Number of fields successfully tested Declaration public long TotFields { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.html",
    "title": "Class CheckIndex.Status | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex.Status Returned from DoCheckIndex() detailing the health and status of the index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CheckIndex.Status Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class Status : object Properties | Improve this Doc View Source CantOpenSegments True if we were unable to open the segments_N file. Declaration public bool CantOpenSegments { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Clean True if no problems were found with the index. Declaration public bool Clean { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Dir Directory index is in. Declaration public Directory Dir { get; } Property Value Type Description Directory | Improve this Doc View Source MaxSegmentName The greatest segment name. Declaration public int MaxSegmentName { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MissingSegments True if we were unable to locate and load the segments_N file. Declaration public bool MissingSegments { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MissingSegmentVersion True if we were unable to read the version number from segments_N file. Declaration public bool MissingSegmentVersion { get; } Property Value Type Description System.Boolean | Improve this Doc View Source NumBadSegments How many bad segments were found. Declaration public int NumBadSegments { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumSegments Number of segments in the index. Declaration public int NumSegments { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Partial True if we checked only specific segments ( DoCheckIndex(IList<String>) was called with non-null argument). Declaration public bool Partial { get; } Property Value Type Description System.Boolean | Improve this Doc View Source SegmentInfos List of CheckIndex.Status.SegmentInfoStatus instances, detailing status of each segment. Declaration public IList<CheckIndex.Status.SegmentInfoStatus> SegmentInfos { get; } Property Value Type Description IList < CheckIndex.Status.SegmentInfoStatus > | Improve this Doc View Source SegmentsChecked Empty unless you passed specific segments list to check as optional 3rd argument. Declaration public IList<string> SegmentsChecked { get; } Property Value Type Description IList < System.String > See Also DoCheckIndex(IList<String>) | Improve this Doc View Source SegmentsFileName Name of latest segments_N file in the index. Declaration public string SegmentsFileName { get; } Property Value Type Description System.String | Improve this Doc View Source ToolOutOfDate True if the index was created with a newer version of Lucene than the CheckIndex tool. Declaration public bool ToolOutOfDate { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TotLoseDocCount How many documents will be lost to bad segments. Declaration public int TotLoseDocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source UserData Holds the userData of the last commit in the index Declaration public IDictionary<string, string> UserData { get; } Property Value Type Description IDictionary < System.String , System.String > | Improve this Doc View Source ValidCounter Whether the Counter is greater than any of the segments' names. Declaration public bool ValidCounter { get; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.SegmentInfoStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.SegmentInfoStatus.html",
    "title": "Class CheckIndex.Status.SegmentInfoStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex.Status.SegmentInfoStatus Holds the status of each segment in the index. See SegmentInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CheckIndex.Status.SegmentInfoStatus Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SegmentInfoStatus : object Properties | Improve this Doc View Source Codec Codec used to read this segment. Declaration public Codec Codec { get; } Property Value Type Description Codec | Improve this Doc View Source Compound True if segment is compound file format. Declaration public bool Compound { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DeletionsGen Current deletions generation. Declaration public long DeletionsGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Diagnostics Map that includes certain debugging details that IndexWriter records into each segment it creates Declaration public IDictionary<string, string> Diagnostics { get; } Property Value Type Description IDictionary < System.String , System.String > | Improve this Doc View Source DocCount Document count (does not take deletions into account). Declaration public int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source DocStoreCompoundFile True if the shared doc store files are compound file format. Declaration public bool DocStoreCompoundFile { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DocStoreOffset Doc store offset, if this segment shares the doc store files (stored fields and term vectors) with other segments. This is -1 if it does not share. Declaration public int DocStoreOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source DocStoreSegment String of the shared doc store segment, or null if this segment does not share the doc store files. Declaration public string DocStoreSegment { get; } Property Value Type Description System.String | Improve this Doc View Source DocValuesStatus Status for testing of DocValues ( null if DocValues could not be tested). Declaration public CheckIndex.Status.DocValuesStatus DocValuesStatus { get; } Property Value Type Description CheckIndex.Status.DocValuesStatus | Improve this Doc View Source FieldNormStatus Status for testing of field norms ( null if field norms could not be tested). Declaration public CheckIndex.Status.FieldNormStatus FieldNormStatus { get; } Property Value Type Description CheckIndex.Status.FieldNormStatus | Improve this Doc View Source HasDeletions True if this segment has pending deletions. Declaration public bool HasDeletions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Name Name of the segment. Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumDeleted Number of deleted documents. Declaration public int NumDeleted { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumFiles Number of files referenced by this segment. Declaration public int NumFiles { get; } Property Value Type Description System.Int32 | Improve this Doc View Source OpenReaderPassed True if we were able to open an AtomicReader on this segment. Declaration public bool OpenReaderPassed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source SizeMB Net size (MB) of the files referenced by this segment. Declaration public double SizeMB { get; } Property Value Type Description System.Double | Improve this Doc View Source StoredFieldStatus Status for testing of stored fields ( null if stored fields could not be tested). Declaration public CheckIndex.Status.StoredFieldStatus StoredFieldStatus { get; } Property Value Type Description CheckIndex.Status.StoredFieldStatus | Improve this Doc View Source TermIndexStatus Status for testing of indexed terms ( null if indexed terms could not be tested). Declaration public CheckIndex.Status.TermIndexStatus TermIndexStatus { get; } Property Value Type Description CheckIndex.Status.TermIndexStatus | Improve this Doc View Source TermVectorStatus Status for testing of term vectors ( null if term vectors could not be tested). Declaration public CheckIndex.Status.TermVectorStatus TermVectorStatus { get; } Property Value Type Description CheckIndex.Status.TermVectorStatus"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.StoredFieldStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.StoredFieldStatus.html",
    "title": "Class CheckIndex.Status.StoredFieldStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex.Status.StoredFieldStatus Status from testing stored fields. Inheritance System.Object CheckIndex.Status.StoredFieldStatus Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class StoredFieldStatus : object Properties | Improve this Doc View Source DocCount Number of documents tested. Declaration public int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Error Exception thrown during stored fields test ( null on success) Declaration public Exception Error { get; } Property Value Type Description Exception | Improve this Doc View Source TotFields Total number of stored fields tested. Declaration public long TotFields { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.TermIndexStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.TermIndexStatus.html",
    "title": "Class CheckIndex.Status.TermIndexStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex.Status.TermIndexStatus Status from testing term index. Inheritance System.Object CheckIndex.Status.TermIndexStatus Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class TermIndexStatus : object Properties | Improve this Doc View Source BlockTreeStats Holds details of block allocations in the block tree terms dictionary (this is only set if the PostingsFormat for this segment uses block tree. Declaration public IDictionary<string, BlockTreeTermsReader.Stats> BlockTreeStats { get; } Property Value Type Description IDictionary < System.String , BlockTreeTermsReader.Stats > | Improve this Doc View Source DelTermCount Number of terms with zero live docs docs. Declaration public long DelTermCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Error Exception thrown during term index test ( null on success) Declaration public Exception Error { get; } Property Value Type Description Exception | Improve this Doc View Source TermCount Number of terms with at least one live doc. Declaration public long TermCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotFreq Total frequency across all terms. Declaration public long TotFreq { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotPos Total number of positions. Declaration public long TotPos { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.TermVectorStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.TermVectorStatus.html",
    "title": "Class CheckIndex.Status.TermVectorStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex.Status.TermVectorStatus Status from testing stored fields. Inheritance System.Object CheckIndex.Status.TermVectorStatus Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class TermVectorStatus : object Properties | Improve this Doc View Source DocCount Number of documents tested. Declaration public int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Error Exception thrown during term vector test ( null on success) Declaration public Exception Error { get; } Property Value Type Description Exception | Improve this Doc View Source TotVectors Total number of term vectors tested. Declaration public long TotVectors { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.CompositeReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CompositeReader.html",
    "title": "Class CompositeReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompositeReader Instances of this reader type can only be used to get stored fields from the underlying AtomicReader s, but it is not possible to directly retrieve postings. To do that, get the AtomicReaderContext for all sub-readers via Leaves . Alternatively, you can mimic an AtomicReader (with a serious slowdown), by wrapping composite readers with SlowCompositeReaderWrapper . IndexReader instances for indexes on disk are usually constructed with a call to one of the static DirectoryReader.Open() methods, e.g. Open(Directory) . DirectoryReader implements the CompositeReader interface, it is not possible to directly get postings. Concrete subclasses of IndexReader are usually constructed with a call to one of the static Open() methods, e.g. Open(Directory) . For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader<R> Inherited Members IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVectors(Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDocs IndexReader.MaxDoc IndexReader.NumDeletedDocs IndexReader.Document(Int32, StoredFieldVisitor) IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.DoClose() IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey IndexReader.DocFreq(Term) IndexReader.TotalTermFreq(Term) IndexReader.GetSumDocFreq(String) IndexReader.GetDocCount(String) IndexReader.GetSumTotalTermFreq(String) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class CompositeReader : IndexReader Constructors | Improve this Doc View Source CompositeReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected CompositeReader() Properties | Improve this Doc View Source Context Declaration public override sealed IndexReaderContext Context { get; } Property Value Type Description IndexReaderContext Overrides IndexReader.Context Methods | Improve this Doc View Source GetSequentialSubReaders() Expert: returns the sequential sub readers that this reader is logically composed of. This method may not return null . NOTE: In contrast to previous Lucene versions this method is no longer public, code that wants to get all AtomicReader s this composite is composed of should use Leaves . Declaration protected abstract IList<IndexReader> GetSequentialSubReaders() Returns Type Description IList < IndexReader > See Also Leaves | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.CompositeReaderContext.Builder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CompositeReaderContext.Builder.html",
    "title": "Class CompositeReaderContext.Builder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompositeReaderContext.Builder Inheritance System.Object CompositeReaderContext.Builder Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class Builder : object Constructors | Improve this Doc View Source Builder(CompositeReader) Declaration public Builder(CompositeReader reader) Parameters Type Name Description CompositeReader reader Methods | Improve this Doc View Source Build() Declaration public CompositeReaderContext Build() Returns Type Description CompositeReaderContext"
  },
  "api/Lucene.Net/Lucene.Net.Index.CompositeReaderContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CompositeReaderContext.html",
    "title": "Class CompositeReaderContext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompositeReaderContext IndexReaderContext for CompositeReader instance. Inheritance System.Object IndexReaderContext CompositeReaderContext Inherited Members IndexReaderContext.Parent IndexReaderContext.IsTopLevel IndexReaderContext.DocBaseInParent IndexReaderContext.OrdInParent Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class CompositeReaderContext : IndexReaderContext Properties | Improve this Doc View Source Children Declaration public override IList<IndexReaderContext> Children { get; } Property Value Type Description IList < IndexReaderContext > Overrides IndexReaderContext.Children | Improve this Doc View Source Leaves Declaration public override IList<AtomicReaderContext> Leaves { get; } Property Value Type Description IList < AtomicReaderContext > Overrides IndexReaderContext.Leaves | Improve this Doc View Source Reader Declaration public override IndexReader Reader { get; } Property Value Type Description IndexReader Overrides IndexReaderContext.Reader"
  },
  "api/Lucene.Net/Lucene.Net.Index.ConcurrentMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ConcurrentMergeScheduler.html",
    "title": "Class ConcurrentMergeScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConcurrentMergeScheduler A MergeScheduler that runs each merge using a separate thread. Specify the max number of threads that may run at once, and the maximum number of simultaneous merges with SetMaxMergesAndThreads(Int32, Int32) . If the number of merges exceeds the max number of threads then the largest merges are paused until one of the smaller merges completes. If more than MaxMergeCount merges are requested then this class will forcefully throttle the incoming threads by pausing until one more more merges complete. Inheritance System.Object MergeScheduler ConcurrentMergeScheduler Implements IConcurrentMergeScheduler IMergeScheduler IDisposable Inherited Members MergeScheduler.Dispose() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class ConcurrentMergeScheduler : MergeScheduler, IConcurrentMergeScheduler, IMergeScheduler, IDisposable Constructors | Improve this Doc View Source ConcurrentMergeScheduler() Sole constructor, with all settings set to default values. Declaration public ConcurrentMergeScheduler() Fields | Improve this Doc View Source compareByMergeDocCount Sorts ConcurrentMergeScheduler.MergeThread s; larger merges come first. Declaration protected static readonly IComparer<ConcurrentMergeScheduler.MergeThread> compareByMergeDocCount Field Value Type Description IComparer < ConcurrentMergeScheduler.MergeThread > | Improve this Doc View Source DEFAULT_MAX_MERGE_COUNT Default MaxMergeCount . Declaration public const int DEFAULT_MAX_MERGE_COUNT = null Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MAX_THREAD_COUNT Default MaxThreadCount . We default to 1: tests on spinning-magnet drives showed slower indexing performance if more than one merge thread runs at once (though on an SSD it was faster) Declaration public const int DEFAULT_MAX_THREAD_COUNT = null Field Value Type Description System.Int32 | Improve this Doc View Source m_dir Directory that holds the index. Declaration protected Directory m_dir Field Value Type Description Directory | Improve this Doc View Source m_mergeThreadCount How many ConcurrentMergeScheduler.MergeThread s have kicked off (this is use to name them). Declaration protected int m_mergeThreadCount Field Value Type Description System.Int32 | Improve this Doc View Source m_mergeThreads List of currently active ConcurrentMergeScheduler.MergeThread s. Declaration protected IList<ConcurrentMergeScheduler.MergeThread> m_mergeThreads Field Value Type Description IList < ConcurrentMergeScheduler.MergeThread > | Improve this Doc View Source m_writer IndexWriter that owns this instance. Declaration protected IndexWriter m_writer Field Value Type Description IndexWriter Properties | Improve this Doc View Source IsVerbose Returns true if verbosing is enabled. This method is usually used in conjunction with , like that: if (IsVerbose) { Message(\"your message\"); } Declaration protected virtual bool IsVerbose { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxMergeCount See SetMaxMergesAndThreads(Int32, Int32) . Declaration public virtual int MaxMergeCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxThreadCount Returns Lucene.Net.Index.ConcurrentMergeScheduler.maxThreadCount . Declaration public virtual int MaxThreadCount { get; } Property Value Type Description System.Int32 See Also SetMaxMergesAndThreads(Int32, Int32) | Improve this Doc View Source MergeThreadCount Returns the number of merge threads that are alive. Note that this number is <= m_mergeThreads size. Declaration protected virtual int MergeThreadCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeThreadPriority Return the priority that merge threads run at. By default the priority is 1 plus the priority of (ie, slightly higher priority than) the first thread that calls merge. Declaration public virtual int MergeThreadPriority { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ClearSuppressExceptions() Used for testing Declaration public virtual void ClearSuppressExceptions() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides MergeScheduler.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergeScheduler.Dispose(Boolean) | Improve this Doc View Source DoMerge(MergePolicy.OneMerge) Does the actual merge, by calling Merge(MergePolicy.OneMerge) Declaration protected virtual void DoMerge(MergePolicy.OneMerge merge) Parameters Type Name Description MergePolicy.OneMerge merge | Improve this Doc View Source GetMergeThread(IndexWriter, MergePolicy.OneMerge) Create and return a new ConcurrentMergeScheduler.MergeThread Declaration protected virtual ConcurrentMergeScheduler.MergeThread GetMergeThread(IndexWriter writer, MergePolicy.OneMerge merge) Parameters Type Name Description IndexWriter writer MergePolicy.OneMerge merge Returns Type Description ConcurrentMergeScheduler.MergeThread | Improve this Doc View Source HandleMergeException(Exception) Called when an exception is hit in a background merge thread Declaration protected virtual void HandleMergeException(Exception exc) Parameters Type Name Description Exception exc | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Declaration public override void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer MergeTrigger trigger System.Boolean newMergesFound Overrides MergeScheduler.Merge(IndexWriter, MergeTrigger, Boolean) | Improve this Doc View Source Message(String) Outputs the given message - this method assumes IsVerbose was called and returned true . Declaration protected virtual void Message(string message) Parameters Type Name Description System.String message | Improve this Doc View Source SetMaxMergesAndThreads(Int32, Int32) Sets the maximum number of merge threads and simultaneous merges allowed. Declaration public virtual void SetMaxMergesAndThreads(int maxMergeCount, int maxThreadCount) Parameters Type Name Description System.Int32 maxMergeCount the max # simultaneous merges that are allowed. If a merge is necessary yet we already have this many threads running, the incoming thread (that is calling add/updateDocument) will block until a merge thread has completed. Note that we will only run the smallest maxThreadCount merges at a time. System.Int32 maxThreadCount The max # simultaneous merge threads that should be running at once. This must be <= maxMergeCount | Improve this Doc View Source SetMergeThreadPriority(Int32) Set the base priority that merge threads run at. Note that CMS may increase priority of some merge threads beyond this base priority. It's best not to set this any higher than (4)-maxThreadCount, so that CMS has room to set relative priority among threads. Declaration public virtual void SetMergeThreadPriority(int priority) Parameters Type Name Description System.Int32 priority | Improve this Doc View Source SetSuppressExceptions() Used for testing Declaration public virtual void SetSuppressExceptions() | Improve this Doc View Source Sync() Wait for any running merge threads to finish. This call is not interruptible as used by Dispose(Boolean) . Declaration public virtual void Sync() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source UpdateMergeThreads() Called whenever the running merges have changed, to pause & unpause threads. This method sorts the merge threads by their merge size in descending order and then pauses/unpauses threads from first to last -- that way, smaller merges are guaranteed to run before larger ones. Declaration protected virtual void UpdateMergeThreads() Implements IConcurrentMergeScheduler IMergeScheduler IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.ConcurrentMergeScheduler.MergeThread.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ConcurrentMergeScheduler.MergeThread.html",
    "title": "Class ConcurrentMergeScheduler.MergeThread | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConcurrentMergeScheduler.MergeThread Runs a merge thread, which may run one or more merges in sequence. Inheritance System.Object ConcurrentMergeScheduler.MergeThread Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax protected class MergeThread : ThreadJob Constructors | Improve this Doc View Source MergeThread(ConcurrentMergeScheduler, IndexWriter, MergePolicy.OneMerge) Sole constructor. Declaration public MergeThread(ConcurrentMergeScheduler outerInstance, IndexWriter writer, MergePolicy.OneMerge startMerge) Parameters Type Name Description ConcurrentMergeScheduler outerInstance IndexWriter writer MergePolicy.OneMerge startMerge Properties | Improve this Doc View Source CurrentMerge Return the current merge, or null if this ConcurrentMergeScheduler.MergeThread is done. Declaration public virtual MergePolicy.OneMerge CurrentMerge { get; } Property Value Type Description MergePolicy.OneMerge | Improve this Doc View Source RunningMerge Record the currently running merge. Declaration public virtual MergePolicy.OneMerge RunningMerge { get; set; } Property Value Type Description MergePolicy.OneMerge Methods | Improve this Doc View Source Run() Declaration public override void Run() | Improve this Doc View Source SetThreadPriority(ThreadPriority) Set the priority of this thread. Declaration public virtual void SetThreadPriority(ThreadPriority priority) Parameters Type Name Description ThreadPriority priority"
  },
  "api/Lucene.Net/Lucene.Net.Index.CorruptIndexException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CorruptIndexException.html",
    "title": "Class CorruptIndexException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CorruptIndexException This exception is thrown when Lucene detects an inconsistency in the index. Inheritance System.Object CorruptIndexException IndexFormatTooNewException IndexFormatTooOldException Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class CorruptIndexException : IOException Constructors | Improve this Doc View Source CorruptIndexException(String) Constructor. Declaration public CorruptIndexException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source CorruptIndexException(String, Exception) Constructor. Declaration public CorruptIndexException(string message, Exception ex) Parameters Type Name Description System.String message Exception ex"
  },
  "api/Lucene.Net/Lucene.Net.Index.DirectoryReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DirectoryReader.html",
    "title": "Class DirectoryReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectoryReader DirectoryReader is an implementation of CompositeReader that can read indexes in a Directory . DirectoryReader instances are usually constructed with a call to one of the static Open() methods, e.g. Open(Directory) . For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader < AtomicReader > DirectoryReader FilterDirectoryReader Inherited Members BaseCompositeReader<AtomicReader>.GetTermVectors(Int32) BaseCompositeReader<AtomicReader>.NumDocs BaseCompositeReader<AtomicReader>.MaxDoc BaseCompositeReader<AtomicReader>.Document(Int32, StoredFieldVisitor) BaseCompositeReader<AtomicReader>.DocFreq(Term) BaseCompositeReader<AtomicReader>.TotalTermFreq(Term) BaseCompositeReader<AtomicReader>.GetSumDocFreq(String) BaseCompositeReader<AtomicReader>.GetDocCount(String) BaseCompositeReader<AtomicReader>.GetSumTotalTermFreq(String) BaseCompositeReader<AtomicReader>.ReaderIndex(Int32) BaseCompositeReader<AtomicReader>.ReaderBase(Int32) BaseCompositeReader<AtomicReader>.GetSequentialSubReaders() CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.DoClose() IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class DirectoryReader : BaseCompositeReader<AtomicReader> Constructors | Improve this Doc View Source DirectoryReader(Directory, AtomicReader[]) Expert: Constructs a DirectoryReader on the given segmentReaders . Declaration protected DirectoryReader(Directory directory, AtomicReader[] segmentReaders) Parameters Type Name Description Directory directory AtomicReader [] segmentReaders the wrapped atomic index segment readers. This array is returned by GetSequentialSubReaders() and used to resolve the correct subreader for docID-based methods. Please note: this array is not cloned and not protected for modification outside of this reader. Subclasses of DirectoryReader should take care to not allow modification of this internal array, e.g. DoOpenIfChanged() . Fields | Improve this Doc View Source DEFAULT_TERMS_INDEX_DIVISOR Default termInfosIndexDivisor. Declaration public static readonly int DEFAULT_TERMS_INDEX_DIVISOR Field Value Type Description System.Int32 | Improve this Doc View Source m_directory The index directory. Declaration protected readonly Directory m_directory Field Value Type Description Directory Properties | Improve this Doc View Source Directory Returns the directory this index resides in. Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source IndexCommit Expert: return the IndexCommit that this reader has opened. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public abstract IndexCommit IndexCommit { get; } Property Value Type Description IndexCommit | Improve this Doc View Source Version Version number when this IndexReader was opened. This method returns the version recorded in the commit that the reader opened. This version is advanced every time a change is made with IndexWriter . Declaration public abstract long Version { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source DoOpenIfChanged() Implement this method to support OpenIfChanged(DirectoryReader) . If this reader does not support reopen, return null , so client code is happy. This should be consistent with IsCurrent() (should always return true ) if reopen is not supported. Declaration protected abstract DirectoryReader DoOpenIfChanged() Returns Type Description DirectoryReader null if there are no changes; else, a new DirectoryReader instance. | Improve this Doc View Source DoOpenIfChanged(IndexCommit) Implement this method to support OpenIfChanged(DirectoryReader, IndexCommit) . If this reader does not support reopen from a specific IndexCommit , throw . Declaration protected abstract DirectoryReader DoOpenIfChanged(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description DirectoryReader null if there are no changes; else, a new DirectoryReader instance. | Improve this Doc View Source DoOpenIfChanged(IndexWriter, Boolean) Implement this method to support OpenIfChanged(DirectoryReader, IndexWriter, Boolean) . If this reader does not support reopen from IndexWriter , throw . Declaration protected abstract DirectoryReader DoOpenIfChanged(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer System.Boolean applyAllDeletes Returns Type Description DirectoryReader null if there are no changes; else, a new DirectoryReader instance. | Improve this Doc View Source IndexExists(Directory) Returns true if an index likely exists at the specified directory. Note that if a corrupt index exists, or if an index in the process of committing Declaration public static bool IndexExists(Directory directory) Parameters Type Name Description Directory directory the directory to check for an index Returns Type Description System.Boolean true if an index exists; false otherwise | Improve this Doc View Source IsCurrent() Check whether any new changes have occurred to the index since this reader was opened. If this reader was created by calling an overload of Open(Directory) , then this method checks if any further commits (see Commit() ) have occurred in the directory. If instead this reader is a near real-time reader (ie, obtained by a call to Open(IndexWriter, Boolean) , or by calling an overload of OpenIfChanged(DirectoryReader) on a near real-time reader), then this method checks if either a new commit has occurred, or any new uncommitted changes have taken place via the writer. Note that even if the writer has only performed merging, this method will still return false . In any event, if this returns false , you should call an overload of OpenIfChanged(DirectoryReader) to get a new reader that sees the changes. Declaration public abstract bool IsCurrent() Returns Type Description System.Boolean | Improve this Doc View Source ListCommits(Directory) Returns all commit points that exist in the Directory . Normally, because the default is KeepOnlyLastCommitDeletionPolicy , there would be only one commit point. But if you're using a custom IndexDeletionPolicy then there could be many commits. Once you have a given commit, you can open a reader on it by calling Open(IndexCommit) There must be at least one commit in the Directory , else this method throws IndexNotFoundException . Note that if a commit is in progress while this method is running, that commit may or may not be returned. Declaration public static IList<IndexCommit> ListCommits(Directory dir) Parameters Type Name Description Directory dir Returns Type Description IList < IndexCommit > a sorted list of IndexCommit s, from oldest to latest. | Improve this Doc View Source Open(IndexCommit) Expert: returns an IndexReader reading the index in the given IndexCommit . Declaration public static DirectoryReader Open(IndexCommit commit) Parameters Type Name Description IndexCommit commit the commit point to open Returns Type Description DirectoryReader | Improve this Doc View Source Open(IndexCommit, Int32) Expert: returns an IndexReader reading the index in the given IndexCommit and termInfosIndexDivisor . Declaration public static DirectoryReader Open(IndexCommit commit, int termInfosIndexDivisor) Parameters Type Name Description IndexCommit commit the commit point to open System.Int32 termInfosIndexDivisor Subsamples which indexed terms are loaded into RAM. this has the same effect as setting TermIndexInterval (on IndexWriterConfig ) except that setting must be done at indexing time while this setting can be set per reader. When set to N, then one in every N*termIndexInterval terms in the index is loaded into memory. By setting this to a value > 1 you can reduce memory usage, at the expense of higher latency when loading a TermInfo. The default value is 1. Set this to -1 to skip loading the terms index entirely. NOTE: divisor settings > 1 do not apply to all PostingsFormat implementations, including the default one in this release. It only makes sense for terms indexes that can efficiently re-sample terms at load time. Returns Type Description DirectoryReader | Improve this Doc View Source Open(IndexWriter, Boolean) Open a near real time IndexReader from the IndexWriter . @lucene.experimental Declaration public static DirectoryReader Open(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer The IndexWriter to open from System.Boolean applyAllDeletes If true , all buffered deletes will be applied (made visible) in the returned reader. If false , the deletes are not applied but remain buffered (in IndexWriter) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false . Returns Type Description DirectoryReader The new IndexReader Exceptions Type Condition CorruptIndexException if the index is corrupt See Also OpenIfChanged(DirectoryReader, IndexWriter, Boolean) | Improve this Doc View Source Open(Directory) Returns a IndexReader reading the index in the given Directory Declaration public static DirectoryReader Open(Directory directory) Parameters Type Name Description Directory directory the index directory Returns Type Description DirectoryReader | Improve this Doc View Source Open(Directory, Int32) Expert: Returns a IndexReader reading the index in the given Directory with the given termInfosIndexDivisor. Declaration public static DirectoryReader Open(Directory directory, int termInfosIndexDivisor) Parameters Type Name Description Directory directory the index directory System.Int32 termInfosIndexDivisor Subsamples which indexed terms are loaded into RAM. this has the same effect as setting TermIndexInterval (on IndexWriterConfig ) except that setting must be done at indexing time while this setting can be set per reader. When set to N, then one in every N*termIndexInterval terms in the index is loaded into memory. By setting this to a value > 1 you can reduce memory usage, at the expense of higher latency when loading a TermInfo. The default value is 1. Set this to -1 to skip loading the terms index entirely. NOTE: divisor settings > 1 do not apply to all PostingsFormat implementations, including the default one in this release. It only makes sense for terms indexes that can efficiently re-sample terms at load time. Returns Type Description DirectoryReader | Improve this Doc View Source OpenIfChanged(DirectoryReader) If the index has changed since the provided reader was opened, open and return a new reader; else, return null . The new reader, if not null , will be the same type of reader as the previous one, ie a near-real-time (NRT) reader will open a new NRT reader, a MultiReader will open a new MultiReader , etc. This method is typically far less costly than opening a fully new DirectoryReader as it shares resources (for example sub-readers) with the provided DirectoryReader , when possible. The provided reader is not disposed (you are responsible for doing so); if a new reader is returned you also must eventually dispose it. Be sure to never dispose a reader while other threads are still using it; see SearcherManager to simplify managing this. Declaration public static DirectoryReader OpenIfChanged(DirectoryReader oldReader) Parameters Type Name Description DirectoryReader oldReader Returns Type Description DirectoryReader null if there are no changes; else, a new DirectoryReader instance which you must eventually dispose Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source OpenIfChanged(DirectoryReader, IndexCommit) If the IndexCommit differs from what the provided reader is searching, open and return a new reader; else, return null . Declaration public static DirectoryReader OpenIfChanged(DirectoryReader oldReader, IndexCommit commit) Parameters Type Name Description DirectoryReader oldReader IndexCommit commit Returns Type Description DirectoryReader See Also OpenIfChanged(DirectoryReader) | Improve this Doc View Source OpenIfChanged(DirectoryReader, IndexWriter, Boolean) Expert: If there changes (committed or not) in the IndexWriter versus what the provided reader is searching, then open and return a new IndexReader searching both committed and uncommitted changes from the writer; else, return null (though, the current implementation never returns null ). This provides \"near real-time\" searching, in that changes made during an IndexWriter session can be quickly made available for searching without closing the writer nor calling Commit() . It's near real-time because there is no hard guarantee on how quickly you can get a new reader after making changes with IndexWriter . You'll have to experiment in your situation to determine if it's fast enough. As this is a new and experimental feature, please report back on your findings so we can learn, improve and iterate. The very first time this method is called, this writer instance will make every effort to pool the readers that it opens for doing merges, applying deletes, etc. This means additional resources (RAM, file descriptors, CPU time) will be consumed. For lower latency on reopening a reader, you should call MergedSegmentWarmer (on IndexWriterConfig ) to pre-warm a newly merged segment before it's committed to the index. This is important for minimizing index-to-search delay after a large merge. If an AddIndexes* call is running in another thread, then this reader will only search those segments from the foreign index that have been successfully copied over, so far. NOTE : Once the writer is disposed, any outstanding readers may continue to be used. However, if you attempt to reopen any of those readers, you'll hit an . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static DirectoryReader OpenIfChanged(DirectoryReader oldReader, IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description DirectoryReader oldReader IndexWriter writer The IndexWriter to open from System.Boolean applyAllDeletes If true , all buffered deletes will be applied (made visible) in the returned reader. If false , the deletes are not applied but remain buffered (in IndexWriter ) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false . Returns Type Description DirectoryReader DirectoryReader that covers entire index plus all changes made so far by this IndexWriter instance, or null if there are no new changes"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocsAndPositionsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocsAndPositionsEnum.html",
    "title": "Class DocsAndPositionsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocsAndPositionsEnum Also iterates through positions. Inheritance System.Object DocIdSetIterator DocsEnum DocsAndPositionsEnum MappingMultiDocsAndPositionsEnum FilterAtomicReader.FilterDocsAndPositionsEnum MultiDocsAndPositionsEnum Inherited Members DocsEnum.Freq DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.DocID DocIdSetIterator.NextDoc() DocIdSetIterator.Advance(Int32) DocIdSetIterator.SlowAdvance(Int32) DocIdSetIterator.GetCost() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class DocsAndPositionsEnum : DocsEnum Constructors | Improve this Doc View Source DocsAndPositionsEnum() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected DocsAndPositionsEnum() Properties | Improve this Doc View Source EndOffset Returns end offset for the current position, or -1 if offsets were not indexed. Declaration public abstract int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Returns start offset for the current position, or -1 if offsets were not indexed. Declaration public abstract int StartOffset { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetPayload() Returns the payload at this position, or null if no payload was indexed. You should not modify anything (neither members of the returned BytesRef nor bytes in the byte[] ). Declaration public abstract BytesRef GetPayload() Returns Type Description BytesRef | Improve this Doc View Source NextPosition() Returns the next position. You should only call this up to Freq times else the behavior is not defined. If positions were not indexed this will return -1; this only happens if offsets were indexed and you passed needsOffset=true when pulling the enum. Declaration public abstract int NextPosition() Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocsAndPositionsFlags.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocsAndPositionsFlags.html",
    "title": "Enum DocsAndPositionsFlags | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DocsAndPositionsFlags Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum DocsAndPositionsFlags : int Fields Name Description NONE Flag to pass to DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) if you require that no offsets and payloads will be returned. OFFSETS Flag to pass to DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) if you require offsets in the returned enum. PAYLOADS Flag to pass to DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) if you require payloads in the returned enum."
  },
  "api/Lucene.Net/Lucene.Net.Index.DocsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocsEnum.html",
    "title": "Class DocsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocsEnum Iterates through the documents and term freqs. NOTE: you must first call NextDoc() before using any of the per-doc methods. Inheritance System.Object DocIdSetIterator DocsEnum MappingMultiDocsEnum DocsAndPositionsEnum FilterAtomicReader.FilterDocsEnum MultiDocsEnum Scorer Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.DocID DocIdSetIterator.NextDoc() DocIdSetIterator.Advance(Int32) DocIdSetIterator.SlowAdvance(Int32) DocIdSetIterator.GetCost() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class DocsEnum : DocIdSetIterator Constructors | Improve this Doc View Source DocsEnum() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected DocsEnum() Properties | Improve this Doc View Source Attributes Returns the related attributes. Declaration public virtual AttributeSource Attributes { get; } Property Value Type Description AttributeSource | Improve this Doc View Source Freq Returns term frequency in the current document, or 1 if the field was indexed with DOCS_ONLY . Do not call this before NextDoc() is first called, nor after NextDoc() returns NO_MORE_DOCS . NOTE: if the DocsEnum was obtain with NONE , the result of this method is undefined. Declaration public abstract int Freq { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocsFlags.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocsFlags.html",
    "title": "Enum DocsFlags | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DocsFlags Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum DocsFlags : int Fields Name Description FREQS Flag to pass to Docs(IBits, DocsEnum, DocsFlags) if you require term frequencies in the returned enum. NONE Flag to pass to Docs(IBits, DocsEnum, DocsFlags) if you don't require term frequencies in the returned enum."
  },
  "api/Lucene.Net/Lucene.Net.Index.DocTermOrds.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocTermOrds.html",
    "title": "Class DocTermOrds | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocTermOrds This class enables fast access to multiple term ords for a specified field across all docIDs. Like IFieldCache , it uninverts the index and holds a packed data structure in RAM to enable fast access. Unlike IFieldCache , it can handle multi-valued fields, and, it does not hold the term bytes in RAM. Rather, you must obtain a TermsEnum from the GetOrdTermsEnum(AtomicReader) method, and then seek-by-ord to get the term's bytes. While normally term ords are type , in this API they are as the internal representation here cannot address more than MAX_INT32 unique terms. Also, typically this class is used on fields with relatively few unique terms vs the number of documents. In addition, there is an internal limit (16 MB) on how many bytes each chunk of documents may consume. If you trip this limit you'll hit an . Deleted documents are skipped during uninversion, and if you look them up you'll get 0 ords. The returned per-document ords do not retain their original order in the document. Instead they are returned in sorted (by ord, ie term's BytesRef comparer) order. They are also de-dup'd (ie if doc has same term more than once in this field, you'll only get that ord back once). This class tests whether the provided reader is able to retrieve terms by ord (ie, it's single segment, and it uses an ord-capable terms index). If not, this class will create its own term index internally, allowing to create a wrapped TermsEnum that can handle ord. The GetOrdTermsEnum(AtomicReader) method then provides this wrapped enum, if necessary. The RAM consumption of this class can be high! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocTermOrds Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class DocTermOrds : object Remarks Final form of the un-inverted field: Each document points to a list of term numbers that are contained in that document. Term numbers are in sorted order, and are encoded as variable-length deltas from the previous term number. Real term numbers start at 2 since 0 and 1 are reserved. A term number of 0 signals the end of the termNumber list. There is a single int[maxDoc()] which either contains a pointer into a byte[] for the termNumber lists, or directly contains the termNumber list if it fits in the 4 bytes of an integer. If the first byte in the integer is 1, the next 3 bytes are a pointer into a byte[] where the termNumber list starts. There are actually 256 byte arrays, to compensate for the fact that the pointers into the byte arrays are only 3 bytes long. The correct byte array for a document is a function of it's id. To save space and speed up faceting, any term that matches enough documents will not be un-inverted... it will be skipped while building the un-inverted field structure, and will use a set intersection method during faceting. To further save memory, the terms (the actual string values) are not all stored in memory, but a TermIndex is used to convert term numbers to term values only for the terms needed after faceting has completed. Only every 128th term value is stored, along with it's corresponding term number, and this is used as an index to find the closest term and iterate until the desired number is hit (very much like Lucene's own internal term index). Constructors | Improve this Doc View Source DocTermOrds(AtomicReader, IBits, String) Inverts all terms Declaration public DocTermOrds(AtomicReader reader, IBits liveDocs, string field) Parameters Type Name Description AtomicReader reader IBits liveDocs System.String field | Improve this Doc View Source DocTermOrds(AtomicReader, IBits, String, BytesRef) Inverts only terms starting w/ prefix Declaration public DocTermOrds(AtomicReader reader, IBits liveDocs, string field, BytesRef termPrefix) Parameters Type Name Description AtomicReader reader IBits liveDocs System.String field BytesRef termPrefix | Improve this Doc View Source DocTermOrds(AtomicReader, IBits, String, BytesRef, Int32) Inverts only terms starting w/ prefix, and only terms whose docFreq (not taking deletions into account) is <= maxTermDocFreq Declaration public DocTermOrds(AtomicReader reader, IBits liveDocs, string field, BytesRef termPrefix, int maxTermDocFreq) Parameters Type Name Description AtomicReader reader IBits liveDocs System.String field BytesRef termPrefix System.Int32 maxTermDocFreq | Improve this Doc View Source DocTermOrds(AtomicReader, IBits, String, BytesRef, Int32, Int32) Inverts only terms starting w/ prefix, and only terms whose docFreq (not taking deletions into account) is <= maxTermDocFreq , with a custom indexing interval (default is every 128nd term). Declaration public DocTermOrds(AtomicReader reader, IBits liveDocs, string field, BytesRef termPrefix, int maxTermDocFreq, int indexIntervalBits) Parameters Type Name Description AtomicReader reader IBits liveDocs System.String field BytesRef termPrefix System.Int32 maxTermDocFreq System.Int32 indexIntervalBits | Improve this Doc View Source DocTermOrds(String, Int32, Int32) Subclass inits w/ this, but be sure you then call uninvert, only once Declaration protected DocTermOrds(string field, int maxTermDocFreq, int indexIntervalBits) Parameters Type Name Description System.String field System.Int32 maxTermDocFreq System.Int32 indexIntervalBits Fields | Improve this Doc View Source DEFAULT_INDEX_INTERVAL_BITS Every 128th term is indexed, by default. Declaration public static readonly int DEFAULT_INDEX_INTERVAL_BITS Field Value Type Description System.Int32 | Improve this Doc View Source m_docsEnum Used while uninverting. Declaration protected DocsEnum m_docsEnum Field Value Type Description DocsEnum | Improve this Doc View Source m_field Field we are uninverting. Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_index Holds the per-document ords or a pointer to the ords. Declaration protected int[] m_index Field Value Type Description System.Int32 [] | Improve this Doc View Source m_indexedTermsArray Holds the indexed (by default every 128th) terms. Declaration protected BytesRef[] m_indexedTermsArray Field Value Type Description BytesRef [] | Improve this Doc View Source m_maxTermDocFreq Don't uninvert terms that exceed this count. Declaration protected readonly int m_maxTermDocFreq Field Value Type Description System.Int32 | Improve this Doc View Source m_numTermsInField Number of terms in the field. Declaration protected int m_numTermsInField Field Value Type Description System.Int32 | Improve this Doc View Source m_ordBase Ordinal of the first term in the field, or 0 if the PostingsFormat does not implement Ord . Declaration protected int m_ordBase Field Value Type Description System.Int32 | Improve this Doc View Source m_phase1_time Time for phase1 of the uninvert process. Declaration protected int m_phase1_time Field Value Type Description System.Int32 | Improve this Doc View Source m_prefix If non-null, only terms matching this prefix were indexed. Declaration protected BytesRef m_prefix Field Value Type Description BytesRef | Improve this Doc View Source m_sizeOfIndexedStrings Total bytes (sum of term lengths) for all indexed terms. Declaration protected long m_sizeOfIndexedStrings Field Value Type Description System.Int64 | Improve this Doc View Source m_termInstances Total number of references to term numbers. Declaration protected long m_termInstances Field Value Type Description System.Int64 | Improve this Doc View Source m_tnums Holds term ords for documents. Declaration protected sbyte[][] m_tnums Field Value Type Description System.SByte [][] | Improve this Doc View Source m_total_time Total time to uninvert the field. Declaration protected int m_total_time Field Value Type Description System.Int32 Properties | Improve this Doc View Source IsEmpty Returns true if no terms were indexed. Declaration public virtual bool IsEmpty { get; } Property Value Type Description System.Boolean | Improve this Doc View Source NumTerms Returns the number of terms in this field Declaration public virtual int NumTerms { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetIterator(AtomicReader) Returns a SortedSetDocValues view of this instance Declaration public virtual SortedSetDocValues GetIterator(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description SortedSetDocValues | Improve this Doc View Source GetOrdTermsEnum(AtomicReader) Returns a TermsEnum that implements Ord . If the provided reader supports Ord , we just return its TermsEnum ; if it does not, we build a \"private\" terms index internally (WARNING: consumes RAM) and use that index to implement Ord . This also enables Ord on top of a composite reader. The returned TermsEnum is unpositioned. This returns null if there are no terms. NOTE : you must pass the same reader that was used when creating this class Declaration public virtual TermsEnum GetOrdTermsEnum(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description TermsEnum | Improve this Doc View Source LookupTerm(TermsEnum, Int32) Returns the term ( BytesRef ) corresponding to the provided ordinal. Declaration public virtual BytesRef LookupTerm(TermsEnum termsEnum, int ord) Parameters Type Name Description TermsEnum termsEnum System.Int32 ord Returns Type Description BytesRef | Improve this Doc View Source RamUsedInBytes() Returns total bytes used. Declaration public virtual long RamUsedInBytes() Returns Type Description System.Int64 | Improve this Doc View Source SetActualDocFreq(Int32, Int32) Invoked during Uninvert(AtomicReader, IBits, BytesRef) to record the document frequency for each uninverted term. Declaration protected virtual void SetActualDocFreq(int termNum, int df) Parameters Type Name Description System.Int32 termNum System.Int32 df | Improve this Doc View Source Uninvert(AtomicReader, IBits, BytesRef) Call this only once (if you subclass!) Declaration protected virtual void Uninvert(AtomicReader reader, IBits liveDocs, BytesRef termPrefix) Parameters Type Name Description AtomicReader reader IBits liveDocs BytesRef termPrefix | Improve this Doc View Source VisitTerm(TermsEnum, Int32) Subclass can override this Declaration protected virtual void VisitTerm(TermsEnum te, int termNum) Parameters Type Name Description TermsEnum te System.Int32 termNum"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValues.html",
    "title": "Class DocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValues This class contains utility methods and constants for DocValues Inheritance System.Object DocValues Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class DocValues : object Fields | Improve this Doc View Source EMPTY_BINARY An empty BinaryDocValues which returns EMPTY_BYTES for every document Declaration public static readonly BinaryDocValues EMPTY_BINARY Field Value Type Description BinaryDocValues | Improve this Doc View Source EMPTY_NUMERIC An empty NumericDocValues which returns zero for every document Declaration public static readonly NumericDocValues EMPTY_NUMERIC Field Value Type Description NumericDocValues | Improve this Doc View Source EMPTY_SORTED An empty SortedDocValues which returns EMPTY_BYTES for every document Declaration public static readonly SortedDocValues EMPTY_SORTED Field Value Type Description SortedDocValues | Improve this Doc View Source EMPTY_SORTED_SET An empty SortedDocValues which returns NO_MORE_ORDS for every document Declaration public static readonly SortedSetDocValues EMPTY_SORTED_SET Field Value Type Description SortedSetDocValues Methods | Improve this Doc View Source DocsWithValue(SortedDocValues, Int32) Returns a IBits representing all documents from dv that have a value. Declaration public static IBits DocsWithValue(SortedDocValues dv, int maxDoc) Parameters Type Name Description SortedDocValues dv System.Int32 maxDoc Returns Type Description IBits | Improve this Doc View Source DocsWithValue(SortedSetDocValues, Int32) Returns a IBits representing all documents from dv that have a value. Declaration public static IBits DocsWithValue(SortedSetDocValues dv, int maxDoc) Parameters Type Name Description SortedSetDocValues dv System.Int32 maxDoc Returns Type Description IBits | Improve this Doc View Source Singleton(SortedDocValues) Returns a multi-valued view over the provided SortedDocValues Declaration public static SortedSetDocValues Singleton(SortedDocValues dv) Parameters Type Name Description SortedDocValues dv Returns Type Description SortedSetDocValues | Improve this Doc View Source UnwrapSingleton(SortedSetDocValues) Returns a single-valued view of the SortedSetDocValues , if it was previously wrapped with Singleton(SortedDocValues) , or null . Declaration public static SortedDocValues UnwrapSingleton(SortedSetDocValues dv) Parameters Type Name Description SortedSetDocValues dv Returns Type Description SortedDocValues"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesFieldUpdatesType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesFieldUpdatesType.html",
    "title": "Enum DocValuesFieldUpdatesType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DocValuesFieldUpdatesType Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum DocValuesFieldUpdatesType : int Fields Name Description BINARY NUMERIC"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesType.html",
    "title": "Enum DocValuesType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DocValuesType DocValues types. Note that DocValues is strongly typed, so a field cannot have different types across different documents. Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum DocValuesType : int Fields Name Description BINARY A per-document byte[] . Values may be larger than 32766 bytes, but different codecs may enforce their own limits. NONE No doc values type will be used. NOTE: This is the same as setting to null in Lucene NUMERIC A per-document numeric type SORTED A pre-sorted byte[] . Fields with this type only store distinct byte values and store an additional offset pointer per document to dereference the shared byte[]. The stored byte[] is presorted and allows access via document id, ordinal and by-value. Values must be <= 32766 bytes. SORTED_SET A pre-sorted ISet<byte[]>. Fields with this type only store distinct byte values and store additional offset pointers per document to dereference the shared byte[] s. The stored byte[] is presorted and allows access via document id, ordinal and by-value. Values must be <= 32766 bytes."
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.BinaryDocValuesUpdate.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.BinaryDocValuesUpdate.html",
    "title": "Class DocValuesUpdate.BinaryDocValuesUpdate | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesUpdate.BinaryDocValuesUpdate An in-place update to a binary DocValues field Inheritance System.Object DocValuesUpdate DocValuesUpdate.BinaryDocValuesUpdate Inherited Members DocValuesUpdate.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class BinaryDocValuesUpdate : DocValuesUpdate"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.html",
    "title": "Class DocValuesUpdate | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesUpdate An in-place update to a DocValues field. Inheritance System.Object DocValuesUpdate DocValuesUpdate.BinaryDocValuesUpdate DocValuesUpdate.NumericDocValuesUpdate Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class DocValuesUpdate : object Constructors | Improve this Doc View Source DocValuesUpdate(DocValuesFieldUpdatesType, Term, String, Object) Constructor. Declaration protected DocValuesUpdate(DocValuesFieldUpdatesType type, Term term, string field, object value) Parameters Type Name Description DocValuesFieldUpdatesType type the DocValuesFieldUpdatesType Term term the Term which determines the documents that will be updated System.String field the NumericDocValuesField to update System.Object value the updated value Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.NumericDocValuesUpdate.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.NumericDocValuesUpdate.html",
    "title": "Class DocValuesUpdate.NumericDocValuesUpdate | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesUpdate.NumericDocValuesUpdate An in-place update to a numeric DocValues field Inheritance System.Object DocValuesUpdate DocValuesUpdate.NumericDocValuesUpdate Inherited Members DocValuesUpdate.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class NumericDocValuesUpdate : DocValuesUpdate Constructors | Improve this Doc View Source NumericDocValuesUpdate(Term, String, Nullable<Int64>) Declaration public NumericDocValuesUpdate(Term term, string field, long? value) Parameters Type Name Description Term term System.String field System.Nullable < System.Int64 > value"
  },
  "api/Lucene.Net/Lucene.Net.Index.Extensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Extensions.html",
    "title": "Namespace Lucene.Net.Index.Extensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Index.Extensions Classes IndexWriterConfigExtensions Extension methods that can be used to provide similar IndexWriterConfig syntax as Java Lucene. (config.SetCheckIntegrityAtMerge(100).SetMaxBufferedDocs(1000);)"
  },
  "api/Lucene.Net/Lucene.Net.Index.Extensions.IndexWriterConfigExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Extensions.IndexWriterConfigExtensions.html",
    "title": "Class IndexWriterConfigExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexWriterConfigExtensions Extension methods that can be used to provide similar IndexWriterConfig syntax as Java Lucene. (config.SetCheckIntegrityAtMerge(100).SetMaxBufferedDocs(1000);) Inheritance System.Object IndexWriterConfigExtensions Namespace : Lucene.Net.Index.Extensions Assembly : Lucene.Net.dll Syntax public static class IndexWriterConfigExtensions : object Methods | Improve this Doc View Source SetCheckIntegrityAtMerge(IndexWriterConfig, Boolean) Builder method for CheckIntegrityAtMerge . Declaration public static IndexWriterConfig SetCheckIntegrityAtMerge(this IndexWriterConfig config, bool checkIntegrityAtMerge) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Boolean checkIntegrityAtMerge Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetCheckIntegrityAtMerge(LiveIndexWriterConfig, Boolean) Builder method for CheckIntegrityAtMerge . Declaration public static LiveIndexWriterConfig SetCheckIntegrityAtMerge(this LiveIndexWriterConfig config, bool checkIntegrityAtMerge) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Boolean checkIntegrityAtMerge Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetCodec(IndexWriterConfig, Codec) Builder method for Codec . Declaration public static IndexWriterConfig SetCodec(this IndexWriterConfig config, Codec codec) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance Codec codec Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetDefaultWriteLockTimeout(IndexWriterConfig, Int64) Builder method for DefaultWriteLockTimeout . Declaration public static void SetDefaultWriteLockTimeout(this IndexWriterConfig config, long writeLockTimeout) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int64 writeLockTimeout | Improve this Doc View Source SetIndexCommit(IndexWriterConfig, IndexCommit) Builder method for IndexCommit . Declaration public static IndexWriterConfig SetIndexCommit(this IndexWriterConfig config, IndexCommit commit) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance IndexCommit commit Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetIndexDeletionPolicy(IndexWriterConfig, IndexDeletionPolicy) Builder method for IndexDeletionPolicy . Declaration public static IndexWriterConfig SetIndexDeletionPolicy(this IndexWriterConfig config, IndexDeletionPolicy deletionPolicy) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance IndexDeletionPolicy deletionPolicy Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMaxBufferedDeleteTerms(IndexWriterConfig, Int32) Builder method for MaxBufferedDeleteTerms . Declaration public static IndexWriterConfig SetMaxBufferedDeleteTerms(this IndexWriterConfig config, int maxBufferedDeleteTerms) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 maxBufferedDeleteTerms Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMaxBufferedDeleteTerms(LiveIndexWriterConfig, Int32) Builder method for MaxBufferedDeleteTerms . Declaration public static LiveIndexWriterConfig SetMaxBufferedDeleteTerms(this LiveIndexWriterConfig config, int maxBufferedDeleteTerms) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Int32 maxBufferedDeleteTerms Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetMaxBufferedDocs(IndexWriterConfig, Int32) Builder method for MaxBufferedDocs . Declaration public static IndexWriterConfig SetMaxBufferedDocs(this IndexWriterConfig config, int maxBufferedDocs) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 maxBufferedDocs Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMaxBufferedDocs(LiveIndexWriterConfig, Int32) Builder method for MaxBufferedDocs . Declaration public static LiveIndexWriterConfig SetMaxBufferedDocs(this LiveIndexWriterConfig config, int maxBufferedDocs) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Int32 maxBufferedDocs Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetMaxThreadStates(IndexWriterConfig, Int32) Builder method for MaxThreadStates . Declaration public static IndexWriterConfig SetMaxThreadStates(this IndexWriterConfig config, int maxThreadStates) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 maxThreadStates Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMergedSegmentWarmer(IndexWriterConfig, IndexWriter.IndexReaderWarmer) Builder method for MergedSegmentWarmer . Declaration public static IndexWriterConfig SetMergedSegmentWarmer(this IndexWriterConfig config, IndexWriter.IndexReaderWarmer mergeSegmentWarmer) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance IndexWriter.IndexReaderWarmer mergeSegmentWarmer Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMergedSegmentWarmer(LiveIndexWriterConfig, IndexWriter.IndexReaderWarmer) Builder method for MergedSegmentWarmer . Declaration public static LiveIndexWriterConfig SetMergedSegmentWarmer(this LiveIndexWriterConfig config, IndexWriter.IndexReaderWarmer mergeSegmentWarmer) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance IndexWriter.IndexReaderWarmer mergeSegmentWarmer Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetMergePolicy(IndexWriterConfig, MergePolicy) Builder method for MergePolicy . Declaration public static IndexWriterConfig SetMergePolicy(this IndexWriterConfig config, MergePolicy mergePolicy) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance MergePolicy mergePolicy Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMergeScheduler(IndexWriterConfig, IMergeScheduler) Builder method for MergeScheduler . Declaration public static IndexWriterConfig SetMergeScheduler(this IndexWriterConfig config, IMergeScheduler mergeScheduler) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance IMergeScheduler mergeScheduler Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetOpenMode(IndexWriterConfig, OpenMode) Builder method for OpenMode . Declaration public static IndexWriterConfig SetOpenMode(this IndexWriterConfig config, OpenMode openMode) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance OpenMode openMode Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetRAMBufferSizeMB(IndexWriterConfig, Double) Builder method for RAMBufferSizeMB . Declaration public static IndexWriterConfig SetRAMBufferSizeMB(this IndexWriterConfig config, double ramBufferSizeMB) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Double ramBufferSizeMB Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetRAMBufferSizeMB(LiveIndexWriterConfig, Double) Builder method for RAMBufferSizeMB . Declaration public static LiveIndexWriterConfig SetRAMBufferSizeMB(this LiveIndexWriterConfig config, double ramBufferSizeMB) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Double ramBufferSizeMB Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetRAMPerThreadHardLimitMB(IndexWriterConfig, Int32) Builder method for RAMPerThreadHardLimitMB . Declaration public static IndexWriterConfig SetRAMPerThreadHardLimitMB(this IndexWriterConfig config, int perThreadHardLimitMB) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 perThreadHardLimitMB Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetReaderPooling(IndexWriterConfig, Boolean) Builder method for UseReaderPooling . Declaration public static IndexWriterConfig SetReaderPooling(this IndexWriterConfig config, bool readerPooling) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Boolean readerPooling Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetReaderTermsIndexDivisor(IndexWriterConfig, Int32) Builder method for ReaderTermsIndexDivisor . Declaration public static IndexWriterConfig SetReaderTermsIndexDivisor(this IndexWriterConfig config, int divisor) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 divisor Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetReaderTermsIndexDivisor(LiveIndexWriterConfig, Int32) Builder method for ReaderTermsIndexDivisor . Declaration public static LiveIndexWriterConfig SetReaderTermsIndexDivisor(this LiveIndexWriterConfig config, int divisor) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Int32 divisor Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetSimilarity(IndexWriterConfig, Similarity) Builder method for Similarity . Declaration public static IndexWriterConfig SetSimilarity(this IndexWriterConfig config, Similarity similarity) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance Similarity similarity Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetTermIndexInterval(IndexWriterConfig, Int32) Builder method for TermIndexInterval . Declaration public static IndexWriterConfig SetTermIndexInterval(this IndexWriterConfig config, int interval) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 interval Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetTermIndexInterval(LiveIndexWriterConfig, Int32) Builder method for TermIndexInterval . Declaration public static LiveIndexWriterConfig SetTermIndexInterval(this LiveIndexWriterConfig config, int interval) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Int32 interval Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetUseCompoundFile(IndexWriterConfig, Boolean) Builder method for UseCompoundFile . Declaration public static IndexWriterConfig SetUseCompoundFile(this IndexWriterConfig config, bool useCompoundFile) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Boolean useCompoundFile Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetUseCompoundFile(LiveIndexWriterConfig, Boolean) Builder method for UseCompoundFile . Declaration public static LiveIndexWriterConfig SetUseCompoundFile(this LiveIndexWriterConfig config, bool useCompoundFile) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Boolean useCompoundFile Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetWriteLockTimeout(IndexWriterConfig, Int64) Builder method for WriteLockTimeout . Declaration public static IndexWriterConfig SetWriteLockTimeout(this IndexWriterConfig config, long writeLockTimeout) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int64 writeLockTimeout Returns Type Description IndexWriterConfig this IndexWriterConfig instance"
  },
  "api/Lucene.Net/Lucene.Net.Index.FieldInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FieldInfo.html",
    "title": "Class FieldInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldInfo Access to the Field Info file that describes document fields and whether or not they are indexed. Each segment has a separate Field Info file. Objects of this class are thread-safe for multiple readers, but only one thread can be adding documents at a time, with no other reader or writer threads accessing this object. Inheritance System.Object FieldInfo Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class FieldInfo : object Constructors | Improve this Doc View Source FieldInfo(String, Boolean, Int32, Boolean, Boolean, Boolean, IndexOptions, DocValuesType, DocValuesType, IDictionary<String, String>) Sole Constructor. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public FieldInfo(string name, bool indexed, int number, bool storeTermVector, bool omitNorms, bool storePayloads, IndexOptions indexOptions, DocValuesType docValues, DocValuesType normsType, IDictionary<string, string> attributes) Parameters Type Name Description System.String name System.Boolean indexed System.Int32 number System.Boolean storeTermVector System.Boolean omitNorms System.Boolean storePayloads IndexOptions indexOptions DocValuesType docValues DocValuesType normsType IDictionary < System.String , System.String > attributes Properties | Improve this Doc View Source Attributes Returns internal codec attributes map. May be null if no mappings exist. Declaration public IDictionary<string, string> Attributes { get; } Property Value Type Description IDictionary < System.String , System.String > | Improve this Doc View Source DocValuesGen Gets or Sets the docValues generation of this field, or -1 if no docValues. Declaration public long DocValuesGen { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source DocValuesType Declaration public DocValuesType DocValuesType { get; } Property Value Type Description DocValuesType | Improve this Doc View Source HasDocValues Returns true if this field has any docValues. Declaration public bool HasDocValues { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasNorms Returns true if this field actually has any norms. Declaration public bool HasNorms { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Returns true if any payloads exist for this field. Declaration public bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasVectors Returns true if any term vectors exist for this field. Declaration public bool HasVectors { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IndexOptions Returns IndexOptions for the field, or null if the field is not indexed Declaration public IndexOptions IndexOptions { get; } Property Value Type Description IndexOptions | Improve this Doc View Source IsIndexed Returns true if this field is indexed. Declaration public bool IsIndexed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Name Field's name Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NormType Returns DocValuesType of the norm. This may be NONE if the field has no norms. Declaration public DocValuesType NormType { get; } Property Value Type Description DocValuesType | Improve this Doc View Source Number Internal field number Declaration public int Number { get; } Property Value Type Description System.Int32 | Improve this Doc View Source OmitsNorms Returns true if norms are explicitly omitted for this field Declaration public bool OmitsNorms { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source GetAttribute(String) Get a codec attribute value, or null if it does not exist Declaration public string GetAttribute(string key) Parameters Type Name Description System.String key Returns Type Description System.String | Improve this Doc View Source PutAttribute(String, String) Puts a codec attribute value. this is a key-value mapping for the field that the codec can use to store additional metadata, and will be available to the codec when reading the segment via GetAttribute(String) If a value already exists for the field, it will be replaced with the new value. Declaration public string PutAttribute(string key, string value) Parameters Type Name Description System.String key System.String value Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.FieldInfos.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FieldInfos.html",
    "title": "Class FieldInfos | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldInfos Collection of FieldInfo s (accessible by number or by name). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfos Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FieldInfos : IEnumerable<FieldInfo> Constructors | Improve this Doc View Source FieldInfos(FieldInfo[]) Constructs a new FieldInfos from an array of FieldInfo objects Declaration public FieldInfos(FieldInfo[] infos) Parameters Type Name Description FieldInfo [] infos Properties | Improve this Doc View Source Count Returns the number of fields. NOTE: This was size() in Lucene. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source HasDocValues Returns true if any fields have DocValues Declaration public virtual bool HasDocValues { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasFreq Returns true if any fields have freqs Declaration public virtual bool HasFreq { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasNorms Returns true if any fields have norms Declaration public virtual bool HasNorms { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasOffsets Returns true if any fields have offsets Declaration public virtual bool HasOffsets { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Returns true if any fields have payloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasProx Returns true if any fields have positions Declaration public virtual bool HasProx { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasVectors Returns true if any fields have vectors Declaration public virtual bool HasVectors { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source FieldInfo(Int32) Return the FieldInfo object referenced by the fieldNumber . Declaration public virtual FieldInfo FieldInfo(int fieldNumber) Parameters Type Name Description System.Int32 fieldNumber field's number. Returns Type Description FieldInfo the FieldInfo object or null when the given fieldNumber doesn't exist. | Improve this Doc View Source FieldInfo(String) Return the FieldInfo object referenced by the fieldName Declaration public virtual FieldInfo FieldInfo(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description FieldInfo the FieldInfo object or null when the given fieldName doesn't exist. | Improve this Doc View Source GetEnumerator() Returns an iterator over all the fieldinfo objects present, ordered by ascending field number Declaration public virtual IEnumerator<FieldInfo> GetEnumerator() Returns Type Description IEnumerator < FieldInfo >"
  },
  "api/Lucene.Net/Lucene.Net.Index.FieldInvertState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FieldInvertState.html",
    "title": "Class FieldInvertState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldInvertState This class tracks the number and position / offset parameters of terms being added to the index. The information collected in this class is also used to calculate the normalization factor for a field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInvertState Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class FieldInvertState : object Constructors | Improve this Doc View Source FieldInvertState(String) Creates FieldInvertState for the specified field name. Declaration public FieldInvertState(string name) Parameters Type Name Description System.String name | Improve this Doc View Source FieldInvertState(String, Int32, Int32, Int32, Int32, Single) Creates FieldInvertState for the specified field name and values for all fields. Declaration public FieldInvertState(string name, int position, int length, int numOverlap, int offset, float boost) Parameters Type Name Description System.String name System.Int32 position System.Int32 length System.Int32 numOverlap System.Int32 offset System.Single boost Properties | Improve this Doc View Source AttributeSource Gets the AttributeSource from the TokenStream that provided the indexed tokens for this field. Declaration public AttributeSource AttributeSource { get; } Property Value Type Description AttributeSource | Improve this Doc View Source Boost Gets or Sets boost value. This is the cumulative product of document boost and field boost for all field instances sharing the same field name. Declaration public float Boost { get; set; } Property Value Type Description System.Single the boost | Improve this Doc View Source Length Gets or Sets total number of terms in this field. Declaration public int Length { get; set; } Property Value Type Description System.Int32 the length | Improve this Doc View Source MaxTermFrequency Get the maximum term-frequency encountered for any term in the field. A field containing \"the quick brown fox jumps over the lazy dog\" would have a value of 2, because \"the\" appears twice. Declaration public int MaxTermFrequency { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Name Gets the field's name Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumOverlap Gets or Sets the number of terms with positionIncrement == 0 . Declaration public int NumOverlap { get; set; } Property Value Type Description System.Int32 the numOverlap | Improve this Doc View Source Offset Gets end offset of the last processed term. Declaration public int Offset { get; } Property Value Type Description System.Int32 the offset | Improve this Doc View Source Position Gets the last processed term position. Declaration public int Position { get; } Property Value Type Description System.Int32 the position | Improve this Doc View Source UniqueTermCount Gets the number of unique terms encountered in this field. Declaration public int UniqueTermCount { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.Fields.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Fields.html",
    "title": "Class Fields | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Fields Flex API for access to fields and terms This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer FilterAtomicReader.FilterFields MultiFields Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class Fields : IEnumerable<string> Constructors | Improve this Doc View Source Fields() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected Fields() Fields | Improve this Doc View Source EMPTY_ARRAY Zero-length Fields array. Declaration public static readonly Fields[] EMPTY_ARRAY Field Value Type Description Fields [] Properties | Improve this Doc View Source Count Gets the number of fields or -1 if the number of distinct field names is unknown. If >= 0, GetEnumerator() will return as many field names. NOTE: This was size() in Lucene. Declaration public abstract int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source UniqueTermCount Returns the number of terms for all fields, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public virtual long UniqueTermCount { get; } Property Value Type Description System.Int64 See Also Count Methods | Improve this Doc View Source GetEnumerator() Returns an enumerator that will step through all field names. This will not return null . Declaration public abstract IEnumerator<string> GetEnumerator() Returns Type Description IEnumerator < System.String > | Improve this Doc View Source GetTerms(String) Get the Terms for this field. This will return null if the field does not exist. Declaration public abstract Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterDocsAndPositionsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterDocsAndPositionsEnum.html",
    "title": "Class FilterAtomicReader.FilterDocsAndPositionsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterAtomicReader.FilterDocsAndPositionsEnum Base class for filtering DocsAndPositionsEnum implementations. Inheritance System.Object DocIdSetIterator DocsEnum DocsAndPositionsEnum FilterAtomicReader.FilterDocsAndPositionsEnum Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FilterDocsAndPositionsEnum : DocsAndPositionsEnum Constructors | Improve this Doc View Source FilterDocsAndPositionsEnum(DocsAndPositionsEnum) Create a new FilterAtomicReader.FilterDocsAndPositionsEnum Declaration public FilterDocsAndPositionsEnum(DocsAndPositionsEnum input) Parameters Type Name Description DocsAndPositionsEnum input the underlying DocsAndPositionsEnum instance. Fields | Improve this Doc View Source m_input The underlying DocsAndPositionsEnum instance. Declaration protected readonly DocsAndPositionsEnum m_input Field Value Type Description DocsAndPositionsEnum Properties | Improve this Doc View Source Attributes Declaration public override AttributeSource Attributes { get; } Property Value Type Description AttributeSource Overrides DocsEnum.Attributes | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source EndOffset Declaration public override int EndOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.EndOffset | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source StartOffset Declaration public override int StartOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.StartOffset Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetPayload() Declaration public override BytesRef GetPayload() Returns Type Description BytesRef Overrides DocsAndPositionsEnum.GetPayload() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source NextPosition() Declaration public override int NextPosition() Returns Type Description System.Int32 Overrides DocsAndPositionsEnum.NextPosition()"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterDocsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterDocsEnum.html",
    "title": "Class FilterAtomicReader.FilterDocsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterAtomicReader.FilterDocsEnum Base class for filtering DocsEnum implementations. Inheritance System.Object DocIdSetIterator DocsEnum FilterAtomicReader.FilterDocsEnum Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FilterDocsEnum : DocsEnum Constructors | Improve this Doc View Source FilterDocsEnum(DocsEnum) Create a new FilterAtomicReader.FilterDocsEnum Declaration public FilterDocsEnum(DocsEnum input) Parameters Type Name Description DocsEnum input the underlying DocsEnum instance. Fields | Improve this Doc View Source m_input The underlying DocsEnum instance. Declaration protected DocsEnum m_input Field Value Type Description DocsEnum Properties | Improve this Doc View Source Attributes Declaration public override AttributeSource Attributes { get; } Property Value Type Description AttributeSource Overrides DocsEnum.Attributes | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterFields.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterFields.html",
    "title": "Class FilterAtomicReader.FilterFields | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterAtomicReader.FilterFields Base class for filtering Fields implementations. Inheritance System.Object Fields FilterAtomicReader.FilterFields Inherited Members Fields.UniqueTermCount Fields.EMPTY_ARRAY Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FilterFields : Fields Constructors | Improve this Doc View Source FilterFields(Fields) Creates a new FilterAtomicReader.FilterFields . Declaration public FilterFields(Fields input) Parameters Type Name Description Fields input the underlying Fields instance. Fields | Improve this Doc View Source m_input The underlying Fields instance. Declaration protected readonly Fields m_input Field Value Type Description Fields Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterTerms.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterTerms.html",
    "title": "Class FilterAtomicReader.FilterTerms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterAtomicReader.FilterTerms Base class for filtering Terms implementations. NOTE : If the order of terms and documents is not changed, and if these terms are going to be intersected with automata, you could consider overriding Intersect(CompiledAutomaton, BytesRef) for better performance. Inheritance System.Object Terms FilterAtomicReader.FilterTerms Inherited Members Terms.Intersect(CompiledAutomaton, BytesRef) Terms.EMPTY_ARRAY Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FilterTerms : Terms Constructors | Improve this Doc View Source FilterTerms(Terms) Creates a new FilterAtomicReader.FilterTerms Declaration public FilterTerms(Terms input) Parameters Type Name Description Terms input the underlying Terms instance. Fields | Improve this Doc View Source m_input The underlying Terms instance. Declaration protected readonly Terms m_input Field Value Type Description Terms Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Overrides Terms.Comparer | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Terms.Count | Improve this Doc View Source DocCount Declaration public override int DocCount { get; } Property Value Type Description System.Int32 Overrides Terms.DocCount | Improve this Doc View Source HasFreqs Declaration public override bool HasFreqs { get; } Property Value Type Description System.Boolean Overrides Terms.HasFreqs | Improve this Doc View Source HasOffsets Declaration public override bool HasOffsets { get; } Property Value Type Description System.Boolean Overrides Terms.HasOffsets | Improve this Doc View Source HasPayloads Declaration public override bool HasPayloads { get; } Property Value Type Description System.Boolean Overrides Terms.HasPayloads | Improve this Doc View Source HasPositions Declaration public override bool HasPositions { get; } Property Value Type Description System.Boolean Overrides Terms.HasPositions | Improve this Doc View Source SumDocFreq Declaration public override long SumDocFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumDocFreq | Improve this Doc View Source SumTotalTermFreq Declaration public override long SumTotalTermFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumTotalTermFreq Methods | Improve this Doc View Source GetIterator(TermsEnum) Declaration public override TermsEnum GetIterator(TermsEnum reuse) Parameters Type Name Description TermsEnum reuse Returns Type Description TermsEnum Overrides Terms.GetIterator(TermsEnum)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterTermsEnum.html",
    "title": "Class FilterAtomicReader.FilterTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterAtomicReader.FilterTermsEnum Base class for filtering TermsEnum implementations. Inheritance System.Object TermsEnum FilterAtomicReader.FilterTermsEnum Implements IBytesRefIterator Inherited Members TermsEnum.SeekExact(BytesRef) TermsEnum.SeekExact(BytesRef, TermState) TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.GetTermState() TermsEnum.EMPTY Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FilterTermsEnum : TermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source FilterTermsEnum(TermsEnum) Creates a new FilterAtomicReader.FilterTermsEnum Declaration public FilterTermsEnum(TermsEnum input) Parameters Type Name Description TermsEnum input the underlying TermsEnum instance. Fields | Improve this Doc View Source m_input The underlying TermsEnum instance. Declaration protected readonly TermsEnum m_input Field Value Type Description TermsEnum Properties | Improve this Doc View Source Attributes Declaration public override AttributeSource Attributes { get; } Property Value Type Description AttributeSource Overrides TermsEnum.Attributes | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Overrides TermsEnum.Comparer | Improve this Doc View Source DocFreq Declaration public override int DocFreq { get; } Property Value Type Description System.Int32 Overrides TermsEnum.DocFreq | Improve this Doc View Source Ord Declaration public override long Ord { get; } Property Value Type Description System.Int64 Overrides TermsEnum.Ord | Improve this Doc View Source Term Declaration public override BytesRef Term { get; } Property Value Type Description BytesRef Overrides TermsEnum.Term | Improve this Doc View Source TotalTermFreq Declaration public override long TotalTermFreq { get; } Property Value Type Description System.Int64 Overrides TermsEnum.TotalTermFreq Methods | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides TermsEnum.Docs(IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides TermsEnum.Next() | Improve this Doc View Source SeekCeil(BytesRef) Declaration public override TermsEnum.SeekStatus SeekCeil(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description TermsEnum.SeekStatus Overrides TermsEnum.SeekCeil(BytesRef) | Improve this Doc View Source SeekExact(Int64) Declaration public override void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Overrides TermsEnum.SeekExact(Int64) Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.html",
    "title": "Class FilterAtomicReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterAtomicReader A FilterAtomicReader contains another AtomicReader , which it uses as its basic source of data, possibly transforming the data along the way or providing additional functionality. The class FilterAtomicReader itself simply implements all abstract methods of IndexReader with versions that pass all requests to the contained index reader. Subclasses of FilterAtomicReader may further override some of these methods and may also provide additional methods and fields. NOTE : If you override LiveDocs , you will likely need to override NumDocs as well and vice-versa. NOTE : If this FilterAtomicReader does not change the content the contained reader, you could consider overriding CoreCacheKey so that IFieldCache and CachingWrapperFilter share the same entries for this atomic reader and the wrapped one. CombinedCoreAndDeletesKey could be overridden as well if the LiveDocs are not changed either. Inheritance System.Object IndexReader AtomicReader FilterAtomicReader Inherited Members AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FilterAtomicReader : AtomicReader Constructors | Improve this Doc View Source FilterAtomicReader(AtomicReader) Construct a FilterAtomicReader based on the specified base reader. Note that base reader is closed if this FilterAtomicReader is closed. Declaration public FilterAtomicReader(AtomicReader input) Parameters Type Name Description AtomicReader input specified base reader. Fields | Improve this Doc View Source m_input The underlying AtomicReader . Declaration protected readonly AtomicReader m_input Field Value Type Description AtomicReader Properties | Improve this Doc View Source FieldInfos Declaration public override FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos Overrides AtomicReader.FieldInfos | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides AtomicReader.Fields | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides AtomicReader.LiveDocs | Improve this Doc View Source MaxDoc Declaration public override int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides AtomicReader.CheckIntegrity() | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides AtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides AtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides AtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides AtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source Unwrap(AtomicReader) Get the wrapped instance by reader as long as this reader is an intance of FilterAtomicReader . Declaration public static AtomicReader Unwrap(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description AtomicReader"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.html",
    "title": "Class FilterDirectoryReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterDirectoryReader A FilterDirectoryReader wraps another DirectoryReader , allowing implementations to transform or extend it. Subclasses should implement DoWrapDirectoryReader(DirectoryReader) to return an instance of the subclass. If the subclass wants to wrap the DirectoryReader 's subreaders, it should also implement a FilterDirectoryReader.SubReaderWrapper subclass, and pass an instance to its base constructor. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader < AtomicReader > DirectoryReader FilterDirectoryReader Inherited Members DirectoryReader.DEFAULT_TERMS_INDEX_DIVISOR DirectoryReader.m_directory DirectoryReader.Open(Directory) DirectoryReader.Open(Directory, Int32) DirectoryReader.Open(IndexWriter, Boolean) DirectoryReader.Open(IndexCommit) DirectoryReader.Open(IndexCommit, Int32) DirectoryReader.OpenIfChanged(DirectoryReader) DirectoryReader.OpenIfChanged(DirectoryReader, IndexCommit) DirectoryReader.OpenIfChanged(DirectoryReader, IndexWriter, Boolean) DirectoryReader.ListCommits(Directory) DirectoryReader.IndexExists(Directory) DirectoryReader.Directory BaseCompositeReader<AtomicReader>.GetTermVectors(Int32) BaseCompositeReader<AtomicReader>.NumDocs BaseCompositeReader<AtomicReader>.MaxDoc BaseCompositeReader<AtomicReader>.Document(Int32, StoredFieldVisitor) BaseCompositeReader<AtomicReader>.DocFreq(Term) BaseCompositeReader<AtomicReader>.TotalTermFreq(Term) BaseCompositeReader<AtomicReader>.GetSumDocFreq(String) BaseCompositeReader<AtomicReader>.GetDocCount(String) BaseCompositeReader<AtomicReader>.GetSumTotalTermFreq(String) BaseCompositeReader<AtomicReader>.ReaderIndex(Int32) BaseCompositeReader<AtomicReader>.ReaderBase(Int32) BaseCompositeReader<AtomicReader>.GetSequentialSubReaders() CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class FilterDirectoryReader : DirectoryReader Constructors | Improve this Doc View Source FilterDirectoryReader(DirectoryReader) Create a new FilterDirectoryReader that filters a passed in DirectoryReader . Declaration public FilterDirectoryReader(DirectoryReader input) Parameters Type Name Description DirectoryReader input the DirectoryReader to filter | Improve this Doc View Source FilterDirectoryReader(DirectoryReader, FilterDirectoryReader.SubReaderWrapper) Create a new FilterDirectoryReader that filters a passed in DirectoryReader , using the supplied FilterDirectoryReader.SubReaderWrapper to wrap its subreader. Declaration public FilterDirectoryReader(DirectoryReader input, FilterDirectoryReader.SubReaderWrapper wrapper) Parameters Type Name Description DirectoryReader input the DirectoryReader to filter FilterDirectoryReader.SubReaderWrapper wrapper the FilterDirectoryReader.SubReaderWrapper to use to wrap subreaders Fields | Improve this Doc View Source m_input The filtered DirectoryReader Declaration protected readonly DirectoryReader m_input Field Value Type Description DirectoryReader Properties | Improve this Doc View Source IndexCommit Declaration public override IndexCommit IndexCommit { get; } Property Value Type Description IndexCommit Overrides DirectoryReader.IndexCommit | Improve this Doc View Source Version Declaration public override long Version { get; } Property Value Type Description System.Int64 Overrides DirectoryReader.Version Methods | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source DoOpenIfChanged() Declaration protected override sealed DirectoryReader DoOpenIfChanged() Returns Type Description DirectoryReader Overrides DirectoryReader.DoOpenIfChanged() | Improve this Doc View Source DoOpenIfChanged(IndexCommit) Declaration protected override sealed DirectoryReader DoOpenIfChanged(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description DirectoryReader Overrides DirectoryReader.DoOpenIfChanged(IndexCommit) | Improve this Doc View Source DoOpenIfChanged(IndexWriter, Boolean) Declaration protected override sealed DirectoryReader DoOpenIfChanged(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer System.Boolean applyAllDeletes Returns Type Description DirectoryReader Overrides DirectoryReader.DoOpenIfChanged(IndexWriter, Boolean) | Improve this Doc View Source DoWrapDirectoryReader(DirectoryReader) Called by the DoOpenIfChanged() methods to return a new wrapped DirectoryReader . Implementations should just return an instance of themselves, wrapping the passed in DirectoryReader . Declaration protected abstract DirectoryReader DoWrapDirectoryReader(DirectoryReader input) Parameters Type Name Description DirectoryReader input the DirectoryReader to wrap Returns Type Description DirectoryReader the wrapped DirectoryReader | Improve this Doc View Source IsCurrent() Declaration public override bool IsCurrent() Returns Type Description System.Boolean Overrides DirectoryReader.IsCurrent()"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.StandardReaderWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.StandardReaderWrapper.html",
    "title": "Class FilterDirectoryReader.StandardReaderWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterDirectoryReader.StandardReaderWrapper A no-op FilterDirectoryReader.SubReaderWrapper that simply returns the parent DirectoryReader 's original subreaders. Inheritance System.Object FilterDirectoryReader.SubReaderWrapper FilterDirectoryReader.StandardReaderWrapper Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class StandardReaderWrapper : FilterDirectoryReader.SubReaderWrapper Constructors | Improve this Doc View Source StandardReaderWrapper() Constructor Declaration public StandardReaderWrapper() Methods | Improve this Doc View Source Wrap(AtomicReader) Declaration public override AtomicReader Wrap(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description AtomicReader Overrides FilterDirectoryReader.SubReaderWrapper.Wrap(AtomicReader)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.SubReaderWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.SubReaderWrapper.html",
    "title": "Class FilterDirectoryReader.SubReaderWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterDirectoryReader.SubReaderWrapper Factory class passed to FilterDirectoryReader constructor that allows subclasses to wrap the filtered DirectoryReader 's subreaders. You can use this to, e.g., wrap the subreaders with specialized FilterAtomicReader implementations. Inheritance System.Object FilterDirectoryReader.SubReaderWrapper FilterDirectoryReader.StandardReaderWrapper Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class SubReaderWrapper : object Constructors | Improve this Doc View Source SubReaderWrapper() Constructor Declaration public SubReaderWrapper() Methods | Improve this Doc View Source Wrap(AtomicReader) Wrap one of the parent DirectoryReader 's subreaders Declaration public abstract AtomicReader Wrap(AtomicReader reader) Parameters Type Name Description AtomicReader reader the subreader to wrap Returns Type Description AtomicReader a wrapped/filtered AtomicReader"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilteredTermsEnum.AcceptStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilteredTermsEnum.AcceptStatus.html",
    "title": "Enum FilteredTermsEnum.AcceptStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum FilteredTermsEnum.AcceptStatus Return value, if term should be accepted or the iteration should END . The *_SEEK values denote, that after handling the current term the enum should call NextSeekTerm(BytesRef) and step forward. Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax protected enum AcceptStatus : int Fields Name Description END Reject the term and stop enumerating. NO Reject the term and position the enum at the next term. NO_AND_SEEK Reject the term and advance ( NextSeekTerm(BytesRef) ) to the next term. YES Accept the term and position the enum at the next term. YES_AND_SEEK Accept the term and advance ( NextSeekTerm(BytesRef) ) to the next term. See Also Accept ( BytesRef )"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilteredTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilteredTermsEnum.html",
    "title": "Class FilteredTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteredTermsEnum Abstract class for enumerating a subset of all terms. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Please note: Consumers of this enumeration cannot call Seek() , it is forward only; it throws when a seeking method is called. Inheritance System.Object TermsEnum FilteredTermsEnum SingleTermsEnum PrefixTermsEnum TermRangeTermsEnum Implements IBytesRefIterator Inherited Members TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class FilteredTermsEnum : TermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source FilteredTermsEnum(TermsEnum) Creates a filtered TermsEnum on a terms enum. Declaration public FilteredTermsEnum(TermsEnum tenum) Parameters Type Name Description TermsEnum tenum the terms enumeration to filter. | Improve this Doc View Source FilteredTermsEnum(TermsEnum, Boolean) Creates a filtered TermsEnum on a terms enum. Declaration public FilteredTermsEnum(TermsEnum tenum, bool startWithSeek) Parameters Type Name Description TermsEnum tenum the terms enumeration to filter. System.Boolean startWithSeek start with seek Properties | Improve this Doc View Source Attributes Returns the related attributes, the returned AttributeSource is shared with the delegate TermsEnum . Declaration public override AttributeSource Attributes { get; } Property Value Type Description AttributeSource Overrides TermsEnum.Attributes | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Overrides TermsEnum.Comparer | Improve this Doc View Source DocFreq Declaration public override int DocFreq { get; } Property Value Type Description System.Int32 Overrides TermsEnum.DocFreq | Improve this Doc View Source Ord Declaration public override long Ord { get; } Property Value Type Description System.Int64 Overrides TermsEnum.Ord | Improve this Doc View Source Term Declaration public override BytesRef Term { get; } Property Value Type Description BytesRef Overrides TermsEnum.Term | Improve this Doc View Source TotalTermFreq Declaration public override long TotalTermFreq { get; } Property Value Type Description System.Int64 Overrides TermsEnum.TotalTermFreq Methods | Improve this Doc View Source Accept(BytesRef) Return if term is accepted, not accepted or the iteration should ended (and possibly seek). Declaration protected abstract FilteredTermsEnum.AcceptStatus Accept(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description FilteredTermsEnum.AcceptStatus | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(IBits bits, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits bits DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides TermsEnum.Docs(IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(IBits bits, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits bits DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source GetTermState() Returns the filtered enums term state Declaration public override TermState GetTermState() Returns Type Description TermState Overrides TermsEnum.GetTermState() | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides TermsEnum.Next() | Improve this Doc View Source NextSeekTerm(BytesRef) On the first call to Next() or if Accept(BytesRef) returns YES_AND_SEEK or NO_AND_SEEK , this method will be called to eventually seek the underlying TermsEnum to a new position. On the first call, currentTerm will be null , later calls will provide the term the underlying enum is positioned at. This method returns per default only one time the initial seek term and then null , so no repositioning is ever done. Override this method, if you want a more sophisticated TermsEnum , that repositions the iterator during enumeration. If this method always returns null the enum is empty. Please note: this method should always provide a greater term than the last enumerated term, else the behavior of this enum violates the contract for TermsEnum s. Declaration protected virtual BytesRef NextSeekTerm(BytesRef currentTerm) Parameters Type Name Description BytesRef currentTerm Returns Type Description BytesRef | Improve this Doc View Source SeekCeil(BytesRef) this enum does not support seeking! Declaration public override TermsEnum.SeekStatus SeekCeil(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description TermsEnum.SeekStatus Overrides TermsEnum.SeekCeil(BytesRef) | Improve this Doc View Source SeekExact(BytesRef) this enum does not support seeking! Declaration public override bool SeekExact(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Boolean Overrides TermsEnum.SeekExact(BytesRef) | Improve this Doc View Source SeekExact(BytesRef, TermState) this enum does not support seeking! Declaration public override void SeekExact(BytesRef term, TermState state) Parameters Type Name Description BytesRef term TermState state Overrides TermsEnum.SeekExact(BytesRef, TermState) | Improve this Doc View Source SeekExact(Int64) this enum does not support seeking! Declaration public override void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Overrides TermsEnum.SeekExact(Int64) | Improve this Doc View Source SetInitialSeekTerm(BytesRef) Use this method to set the initial BytesRef to seek before iterating. This is a convenience method for subclasses that do not override NextSeekTerm(BytesRef) . If the initial seek term is null (default), the enum is empty. You can only use this method, if you keep the default implementation of NextSeekTerm(BytesRef) . Declaration protected void SetInitialSeekTerm(BytesRef term) Parameters Type Name Description BytesRef term Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Index.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.html",
    "title": "Namespace Lucene.Net.Index | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Index <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Misc index tools and index support. Classes AtomicReader AtomicReader is an abstract class, providing an interface for accessing an index. Search of an index is done entirely through this abstract interface, so that any subclass which implements it is searchable. IndexReader s implemented by this subclass do not consist of several sub-readers, they are atomic. They support retrieval of stored fields, doc values, terms, and postings. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. AtomicReaderContext IndexReaderContext for AtomicReader instances. BaseCompositeReader<R> Base class for implementing CompositeReader s based on an array of sub-readers. The implementing class has to add code for correctly refcounting and closing the sub-readers. User code will most likely use MultiReader to build a composite reader on a set of sub-readers (like several DirectoryReader s). For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. This is a Lucene.NET INTERNAL API, use at your own risk BinaryDocValues A per-document byte[] BufferedUpdates Holds buffered deletes and updates, by docID, term or query for a single segment. this is used to hold buffered pending deletes and updates against the to-be-flushed segment. Once the deletes and updates are pushed (on flush in Lucene.Net.Index.DocumentsWriter ), they are converted to a FrozenDeletes instance. NOTE: instances of this class are accessed either via a private instance on Lucene.Net.Index.DocumentsWriterPerThread , or via sync'd code by Lucene.Net.Index.DocumentsWriterDeleteQueue ByteSliceReader IndexInput that knows how to read the byte slices written by Posting and PostingVector. We read the bytes in each slice until we hit the end of that slice at which point we read the forwarding address of the next slice and then jump to it. CheckAbort Class for recording units of work when merging segments. CheckIndex Basic tool and API to check the health of an index and write a new segments file that removes reference to problematic segments. As this tool checks every byte in the index, on a large index it can take quite a long time to run. Please make a complete backup of your index before using this to fix your index! This is a Lucene.NET EXPERIMENTAL API, use at your own risk CheckIndex.Status Returned from DoCheckIndex() detailing the health and status of the index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CheckIndex.Status.DocValuesStatus Status from testing DocValues CheckIndex.Status.FieldNormStatus Status from testing field norms. CheckIndex.Status.SegmentInfoStatus Holds the status of each segment in the index. See SegmentInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CheckIndex.Status.StoredFieldStatus Status from testing stored fields. CheckIndex.Status.TermIndexStatus Status from testing term index. CheckIndex.Status.TermVectorStatus Status from testing stored fields. CompositeReader Instances of this reader type can only be used to get stored fields from the underlying AtomicReader s, but it is not possible to directly retrieve postings. To do that, get the AtomicReaderContext for all sub-readers via Leaves . Alternatively, you can mimic an AtomicReader (with a serious slowdown), by wrapping composite readers with SlowCompositeReaderWrapper . IndexReader instances for indexes on disk are usually constructed with a call to one of the static DirectoryReader.Open() methods, e.g. Open(Directory) . DirectoryReader implements the CompositeReader interface, it is not possible to directly get postings. Concrete subclasses of IndexReader are usually constructed with a call to one of the static Open() methods, e.g. Open(Directory) . For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. CompositeReaderContext IndexReaderContext for CompositeReader instance. CompositeReaderContext.Builder ConcurrentMergeScheduler A MergeScheduler that runs each merge using a separate thread. Specify the max number of threads that may run at once, and the maximum number of simultaneous merges with SetMaxMergesAndThreads(Int32, Int32) . If the number of merges exceeds the max number of threads then the largest merges are paused until one of the smaller merges completes. If more than MaxMergeCount merges are requested then this class will forcefully throttle the incoming threads by pausing until one more more merges complete. ConcurrentMergeScheduler.MergeThread Runs a merge thread, which may run one or more merges in sequence. CorruptIndexException This exception is thrown when Lucene detects an inconsistency in the index. DirectoryReader DirectoryReader is an implementation of CompositeReader that can read indexes in a Directory . DirectoryReader instances are usually constructed with a call to one of the static Open() methods, e.g. Open(Directory) . For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. DocsAndPositionsEnum Also iterates through positions. DocsEnum Iterates through the documents and term freqs. NOTE: you must first call NextDoc() before using any of the per-doc methods. DocTermOrds This class enables fast access to multiple term ords for a specified field across all docIDs. Like IFieldCache , it uninverts the index and holds a packed data structure in RAM to enable fast access. Unlike IFieldCache , it can handle multi-valued fields, and, it does not hold the term bytes in RAM. Rather, you must obtain a TermsEnum from the GetOrdTermsEnum(AtomicReader) method, and then seek-by-ord to get the term's bytes. While normally term ords are type , in this API they are as the internal representation here cannot address more than MAX_INT32 unique terms. Also, typically this class is used on fields with relatively few unique terms vs the number of documents. In addition, there is an internal limit (16 MB) on how many bytes each chunk of documents may consume. If you trip this limit you'll hit an . Deleted documents are skipped during uninversion, and if you look them up you'll get 0 ords. The returned per-document ords do not retain their original order in the document. Instead they are returned in sorted (by ord, ie term's BytesRef comparer) order. They are also de-dup'd (ie if doc has same term more than once in this field, you'll only get that ord back once). This class tests whether the provided reader is able to retrieve terms by ord (ie, it's single segment, and it uses an ord-capable terms index). If not, this class will create its own term index internally, allowing to create a wrapped TermsEnum that can handle ord. The GetOrdTermsEnum(AtomicReader) method then provides this wrapped enum, if necessary. The RAM consumption of this class can be high! This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocValues This class contains utility methods and constants for DocValues DocValuesUpdate An in-place update to a DocValues field. DocValuesUpdate.BinaryDocValuesUpdate An in-place update to a binary DocValues field DocValuesUpdate.NumericDocValuesUpdate An in-place update to a numeric DocValues field FieldInfo Access to the Field Info file that describes document fields and whether or not they are indexed. Each segment has a separate Field Info file. Objects of this class are thread-safe for multiple readers, but only one thread can be adding documents at a time, with no other reader or writer threads accessing this object. FieldInfos Collection of FieldInfo s (accessible by number or by name). This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldInvertState This class tracks the number and position / offset parameters of terms being added to the index. The information collected in this class is also used to calculate the normalization factor for a field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Fields Flex API for access to fields and terms This is a Lucene.NET EXPERIMENTAL API, use at your own risk FilterAtomicReader A FilterAtomicReader contains another AtomicReader , which it uses as its basic source of data, possibly transforming the data along the way or providing additional functionality. The class FilterAtomicReader itself simply implements all abstract methods of IndexReader with versions that pass all requests to the contained index reader. Subclasses of FilterAtomicReader may further override some of these methods and may also provide additional methods and fields. NOTE : If you override LiveDocs , you will likely need to override NumDocs as well and vice-versa. NOTE : If this FilterAtomicReader does not change the content the contained reader, you could consider overriding CoreCacheKey so that IFieldCache and CachingWrapperFilter share the same entries for this atomic reader and the wrapped one. CombinedCoreAndDeletesKey could be overridden as well if the LiveDocs are not changed either. FilterAtomicReader.FilterDocsAndPositionsEnum Base class for filtering DocsAndPositionsEnum implementations. FilterAtomicReader.FilterDocsEnum Base class for filtering DocsEnum implementations. FilterAtomicReader.FilterFields Base class for filtering Fields implementations. FilterAtomicReader.FilterTerms Base class for filtering Terms implementations. NOTE : If the order of terms and documents is not changed, and if these terms are going to be intersected with automata, you could consider overriding Intersect(CompiledAutomaton, BytesRef) for better performance. FilterAtomicReader.FilterTermsEnum Base class for filtering TermsEnum implementations. FilterDirectoryReader A FilterDirectoryReader wraps another DirectoryReader , allowing implementations to transform or extend it. Subclasses should implement DoWrapDirectoryReader(DirectoryReader) to return an instance of the subclass. If the subclass wants to wrap the DirectoryReader 's subreaders, it should also implement a FilterDirectoryReader.SubReaderWrapper subclass, and pass an instance to its base constructor. FilterDirectoryReader.StandardReaderWrapper A no-op FilterDirectoryReader.SubReaderWrapper that simply returns the parent DirectoryReader 's original subreaders. FilterDirectoryReader.SubReaderWrapper Factory class passed to FilterDirectoryReader constructor that allows subclasses to wrap the filtered DirectoryReader 's subreaders. You can use this to, e.g., wrap the subreaders with specialized FilterAtomicReader implementations. FilteredTermsEnum Abstract class for enumerating a subset of all terms. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Please note: Consumers of this enumeration cannot call Seek() , it is forward only; it throws when a seeking method is called. IndexCommit Expert: represents a single commit into an index as seen by the IndexDeletionPolicy or IndexReader . Changes to the content of an index are made visible only after the writer who made that change commits by writing a new segments file ( segments_N ). This point in time, when the action of writing of a new segments file to the directory is completed, is an index commit. Each index commit point has a unique segments file associated with it. The segments file associated with a later index commit point would have a larger N. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IndexDeletionPolicy Expert: policy for deletion of stale IndexCommit s. Implement this interface, and pass it to one of the IndexWriter or IndexReader constructors, to customize when older point-in-time commits ( IndexCommit ) are deleted from the index directory. The default deletion policy is KeepOnlyLastCommitDeletionPolicy , which always removes old commits as soon as a new commit is done (this matches the behavior before 2.2). One expected use case for this (and the reason why it was first created) is to work around problems with an index directory accessed via filesystems like NFS because NFS does not provide the \"delete on last close\" semantics that Lucene's \"point in time\" search normally relies on. By implementing a custom deletion policy, such as \"a commit is only removed once it has been stale for more than X minutes\", you can give your readers time to refresh to the new commit before IndexWriter removes the old commits. Note that doing so will increase the storage requirements of the index. See LUCENE-710 for details. Implementers of sub-classes should make sure that Clone() returns an independent instance able to work with any other IndexWriter or Directory instance. IndexFileNames This class contains useful constants representing filenames and extensions used by lucene, as well as convenience methods for querying whether a file name matches an extension ( MatchesExtension(String, String) ), as well as generating file names from a segment name, generation and extension ( FileNameFromGeneration(String, String, Int64) , SegmentFileName(String, String, String) ). NOTE : extensions used by codecs are not listed here. You must interact with the Codec directly. This is a Lucene.NET INTERNAL API, use at your own risk IndexFormatTooNewException This exception is thrown when Lucene detects an index that is newer than this Lucene version. IndexFormatTooOldException This exception is thrown when Lucene detects an index that is too old for this Lucene version IndexNotFoundException Signals that no index was found in the . Possibly because the directory is empty, however can also indicate an index corruption. IndexReader IndexReader is an abstract class, providing an interface for accessing an index. Search of an index is done entirely through this abstract interface, so that any subclass which implements it is searchable. There are two different types of IndexReader s: AtomicReader : These indexes do not consist of several sub-readers, they are atomic. They support retrieval of stored fields, doc values, terms, and postings. CompositeReader : Instances (like DirectoryReader ) of this reader can only be used to get stored fields from the underlying AtomicReader s, but it is not possible to directly retrieve postings. To do that, get the sub-readers via GetSequentialSubReaders() . Alternatively, you can mimic an AtomicReader (with a serious slowdown), by wrapping composite readers with SlowCompositeReaderWrapper . IndexReader instances for indexes on disk are usually constructed with a call to one of the static DirectoryReader.Open() methods, e.g. Open(Directory) . DirectoryReader inherits the CompositeReader abstract class, it is not possible to directly get postings. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. IndexReaderContext A struct like class that represents a hierarchical relationship between IndexReader instances. IndexUpgrader This is an easy-to-use tool that upgrades all segments of an index from previous Lucene versions to the current segment file format. It can be used from command line: java -cp lucene-core.jar Lucene.Net.Index.IndexUpgrader [-delete-prior-commits] [-verbose] indexDir Alternatively this class can be instantiated and Upgrade() invoked. It uses UpgradeIndexMergePolicy and triggers the upgrade via an ForceMerge(Int32) request to IndexWriter . This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify -delete-prior-commits to override this, allowing the tool to delete all but the last commit. From .NET code this can be enabled by passing true to IndexUpgrader(Directory, LuceneVersion, TextWriter, Boolean) . Warning: this tool may reorder documents if the index was partially upgraded before execution (e.g., documents were added). If your application relies on \"monotonicity\" of doc IDs (which means that the order in which the documents were added to the index is preserved), do a full ForceMerge instead. The MergePolicy set by IndexWriterConfig may also reorder documents. IndexWriter An IndexWriter creates and maintains an index. IndexWriter.IndexReaderWarmer If Open(IndexWriter, Boolean) has been called (ie, this writer is in near real-time mode), then after a merge completes, this class can be invoked to warm the reader on the newly merged segment, before the merge commits. This is not required for near real-time search, but will reduce search latency on opening a new near real-time reader after a merge completes. @lucene.experimental NOTE : Warm(AtomicReader) is called before any deletes have been carried over to the merged segment. IndexWriterConfig Holds all the configuration that is used to create an IndexWriter . Once IndexWriter has been created with this object, changes to this object will not affect the IndexWriter instance. For that, use LiveIndexWriterConfig that is returned from Config . LUCENENET NOTE: Unlike Lucene, we use property setters instead of setter methods. In C#, this allows you to initialize the IndexWriterConfig using the language features of C#, for example: IndexWriterConfig conf = new IndexWriterConfig(analyzer) { Codec = Lucene46Codec(), OpenMode = OpenMode.CREATE }; However, if you prefer to match the syntax of Lucene using chained setter methods, there are extension methods in the Lucene.Net.Support namespace. Example usage: using Lucene.Net.Support; .. IndexWriterConfig conf = new IndexWriterConfig(analyzer) .SetCodec(new Lucene46Codec()) .SetOpenMode(OpenMode.CREATE); @since 3.1 KeepOnlyLastCommitDeletionPolicy This IndexDeletionPolicy implementation that keeps only the most recent commit and immediately removes all prior commits after a new commit is done. This is the default deletion policy. LiveIndexWriterConfig Holds all the configuration used by IndexWriter with few setters for settings that can be changed on an IndexWriter instance \"live\". @since 4.0 LogByteSizeMergePolicy This is a LogMergePolicy that measures size of a segment as the total byte size of the segment's files. LogDocMergePolicy This is a LogMergePolicy that measures size of a segment as the number of documents (not taking deletions into account). LogMergePolicy This class implements a MergePolicy that tries to merge segments into levels of exponentially increasing size, where each level has fewer segments than the value of the merge factor. Whenever extra segments (beyond the merge factor upper bound) are encountered, all segments within the level are merged. You can get or set the merge factor using MergeFactor . This class is abstract and requires a subclass to define the Size(SegmentCommitInfo) method which specifies how a segment's size is determined. LogDocMergePolicy is one subclass that measures size by document count in the segment. LogByteSizeMergePolicy is another subclass that measures size as the total byte size of the file(s) for the segment. MergePolicy Expert: a MergePolicy determines the sequence of primitive merge operations. Whenever the segments in an index have been altered by IndexWriter , either the addition of a newly flushed segment, addition of many segments from AddIndexes* calls, or a previous merge that may now need to cascade, IndexWriter invokes FindMerges(MergeTrigger, SegmentInfos) to give the MergePolicy a chance to pick merges that are now required. This method returns a MergePolicy.MergeSpecification instance describing the set of merges that should be done, or null if no merges are necessary. When ForceMerge(Int32) is called, it calls FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) and the MergePolicy should then return the necessary merges. Note that the policy can return more than one merge at a time. In this case, if the writer is using SerialMergeScheduler , the merges will be run sequentially but if it is using ConcurrentMergeScheduler they will be run concurrently. The default MergePolicy is TieredMergePolicy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk MergePolicy.DocMap A map of doc IDs. MergePolicy.MergeAbortedException Thrown when a merge was explicity aborted because Dispose(Boolean) was called with false . Normally this exception is privately caught and suppresed by IndexWriter . MergePolicy.MergeException Exception thrown if there are any problems while executing a merge. MergePolicy.MergeSpecification A MergePolicy.MergeSpecification instance provides the information necessary to perform multiple merges. It simply contains a list of MergePolicy.OneMerge instances. MergePolicy.OneMerge OneMerge provides the information necessary to perform an individual primitive merge operation, resulting in a single new segment. The merge spec includes the subset of segments to be merged as well as whether the new segment should use the compound file format. MergeScheduler Expert: IndexWriter uses an instance implementing this interface to execute the merges selected by a MergePolicy . The default MergeScheduler is ConcurrentMergeScheduler . Implementers of sub-classes should make sure that Clone() returns an independent instance able to work with any IndexWriter instance. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MergeState Holds common state used during segment merging. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MergeState.DocMap Remaps docids around deletes during merge MultiDocsAndPositionsEnum Exposes flex API, merged from flex API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiDocsAndPositionsEnum.EnumWithSlice Holds a DocsAndPositionsEnum along with the corresponding ReaderSlice . MultiDocsEnum Exposes DocsEnum , merged from DocsEnum API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiDocsEnum.EnumWithSlice Holds a DocsEnum along with the corresponding ReaderSlice . MultiDocValues A wrapper for CompositeReader providing access to DocValues . NOTE : for multi readers, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. NOTE : this is very costly. @lucene.experimental This is a Lucene.NET INTERNAL API, use at your own risk MultiDocValues.MultiSortedDocValues Implements SortedDocValues over n subs, using an MultiDocValues.OrdinalMap This is a Lucene.NET INTERNAL API, use at your own risk MultiDocValues.MultiSortedSetDocValues Implements MultiDocValues.MultiSortedSetDocValues over n subs, using an MultiDocValues.OrdinalMap This is a Lucene.NET INTERNAL API, use at your own risk MultiDocValues.OrdinalMap maps per-segment ordinals to/from global ordinal space MultiFields Exposes flex API, merged from flex API of sub-segments. This is useful when you're interacting with an IndexReader implementation that consists of sequential sub-readers (eg DirectoryReader or MultiReader ). NOTE : for composite readers, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiReader A CompositeReader which reads multiple indexes, appending their content. It can be used to create a view on several sub-readers (like DirectoryReader ) and execute searches on it. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. MultiTerms Exposes flex API, merged from flex API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiTermsEnum Exposes TermsEnum API, merged from TermsEnum API of sub-segments. This does a merge sort, by term text, of the sub-readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiTermsEnum.TermsEnumIndex MultiTermsEnum.TermsEnumWithSlice NoDeletionPolicy An IndexDeletionPolicy which keeps all index commits around, never deleting them. This class is a singleton and can be accessed by referencing INSTANCE . NoMergePolicy A MergePolicy which never returns merges to execute (hence it's name). It is also a singleton and can be accessed through NO_COMPOUND_FILES if you want to indicate the index does not use compound files, or through COMPOUND_FILES otherwise. Use it if you want to prevent an IndexWriter from ever executing merges, without going through the hassle of tweaking a merge policy's settings to achieve that, such as changing its merge factor. NoMergeScheduler A MergeScheduler which never executes any merges. It is also a singleton and can be accessed through INSTANCE . Use it if you want to prevent an IndexWriter from ever executing merges, regardless of the MergePolicy used. Note that you can achieve the same thing by using NoMergePolicy , however with NoMergeScheduler you also ensure that no unnecessary code of any MergeScheduler implementation is ever executed. Hence it is recommended to use both if you want to disable merges from ever happening. NumericDocValues A per-document numeric value. OrdTermState An ordinal based TermState This is a Lucene.NET EXPERIMENTAL API, use at your own risk ParallelAtomicReader An AtomicReader which reads multiple, parallel indexes. Each index added must have the same number of documents, but typically each contains different fields. Deletions are taken from the first reader. Each document contains the union of the fields of all documents with the same document number. When searching, matches for a query term are from the first index added that has the field. This is useful, e.g., with collections that have large fields which change rarely and small fields that change more frequently. The smaller fields may be re-indexed in a new index and both indexes may be searched together. Warning: It is up to you to make sure all indexes are created and modified the same way. For example, if you add documents to one index, you need to add the same documents in the same order to the other indexes. Failure to do so will result in undefined behavior . ParallelCompositeReader A CompositeReader which reads multiple, parallel indexes. Each index added must have the same number of documents, and exactly the same hierarchical subreader structure, but typically each contains different fields. Deletions are taken from the first reader. Each document contains the union of the fields of all documents with the same document number. When searching, matches for a query term are from the first index added that has the field. This is useful, e.g., with collections that have large fields which change rarely and small fields that change more frequently. The smaller fields may be re-indexed in a new index and both indexes may be searched together. Warning: It is up to you to make sure all indexes are created and modified the same way. For example, if you add documents to one index, you need to add the same documents in the same order to the other indexes. Failure to do so will result in undefined behavior . A good strategy to create suitable indexes with IndexWriter is to use LogDocMergePolicy , as this one does not reorder documents during merging (like TieredMergePolicy ) and triggers merges by number of documents per segment. If you use different MergePolicy s it might happen that the segment structure of your index is no longer predictable. PersistentSnapshotDeletionPolicy A SnapshotDeletionPolicy which adds a persistence layer so that snapshots can be maintained across the life of an application. The snapshots are persisted in a Directory and are committed as soon as Snapshot() or Release(IndexCommit) is called. NOTE: Sharing PersistentSnapshotDeletionPolicy s that write to the same directory across IndexWriter s will corrupt snapshots. You should make sure every IndexWriter has its own PersistentSnapshotDeletionPolicy and that they all write to a different Directory . It is OK to use the same Directory that holds the index. This class adds a Release(Int64) method to release commits from a previous snapshot's Generation . This is a Lucene.NET EXPERIMENTAL API, use at your own risk RandomAccessOrds Extension of SortedSetDocValues that supports random access to the ordinals of a document. Operations via this API are independent of the iterator api ( NextOrd() ) and do not impact its state. Codecs can optionally extend this API if they support constant-time access to ordinals for the document. ReaderManager Utility class to safely share DirectoryReader instances across multiple threads, while periodically reopening. This class ensures each reader is disposed only once all threads have finished using it. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ReaderSlice Subreader slice from a parent composite reader. This is a Lucene.NET INTERNAL API, use at your own risk ReaderUtil Common util methods for dealing with IndexReader s and IndexReaderContext s. This is a Lucene.NET INTERNAL API, use at your own risk SegmentCommitInfo Embeds a [read-only] SegmentInfo and adds per-commit fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfo Information about a segment such as it's name, directory, and files related to the segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfos A collection of segmentInfo objects with methods for operating on those segments in relation to the file system. The active segments in the index are stored in the segment info file, segments_N . There may be one or more segments_N files in the index; however, the one with the largest generation is the active one (when older segments_N files are present it's because they temporarily cannot be deleted, or, a writer is in the process of committing, or a custom IndexDeletionPolicy is in use). This file lists each segment by name and has details about the codec and generation of deletes. There is also a file segments.gen . this file contains the current generation (the _N in segments_N ) of the index. This is used only as a fallback in case the current generation cannot be accurately determined by directory listing alone (as is the case for some NFS clients with time-based directory cache expiration). This file simply contains an WriteInt32(Int32) version header ( FORMAT_SEGMENTS_GEN_CURRENT ), followed by the generation recorded as WriteInt64(Int64) , written twice. Files: segments.gen : GenHeader, Generation, Generation, Footer segments_N : Header, Version, NameCounter, SegCount, <SegName, SegCodec, DelGen, DeletionCount, FieldInfosGen, UpdatesFiles> SegCount , CommitUserData, Footer Data types: Header --> WriteHeader(DataOutput, String, Int32) GenHeader, NameCounter, SegCount, DeletionCount --> WriteInt32(Int32) Generation, Version, DelGen, Checksum, FieldInfosGen --> WriteInt64(Int64) SegName, SegCodec --> WriteString(String) CommitUserData --> WriteStringStringMap(IDictionary<String, String>) UpdatesFiles --> WriteStringSet(ISet<String>) Footer --> WriteFooter(IndexOutput) Field Descriptions: Version counts how often the index has been changed by adding or deleting documents. NameCounter is used to generate names for new segment files. SegName is the name of the segment, and is used as the file name prefix for all of the files that compose the segment's index. DelGen is the generation count of the deletes file. If this is -1, there are no deletes. Anything above zero means there are deletes stored by LiveDocsFormat . DeletionCount records the number of deleted documents in this segment. SegCodec is the Name of the Codec that encoded this segment. CommitUserData stores an optional user-supplied opaque that was passed to SetCommitData(IDictionary<String, String>) . FieldInfosGen is the generation count of the fieldInfos file. If this is -1, there are no updates to the fieldInfos in that segment. Anything above zero means there are updates to fieldInfos stored by FieldInfosFormat . UpdatesFiles stores the list of files that were updated in that segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfos.FindSegmentsFile Utility class for executing code that needs to do something with the current segments file. This is necessary with lock-less commits because from the time you locate the current segments file name, until you actually open it, read its contents, or check modified time, etc., it could have been deleted due to a writer commit finishing. SegmentReader IndexReader implementation over a single segment. Instances pointing to the same segment (but with different deletes, etc) may share the same core data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentReadState Holder class for common parameters used during read. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentWriteState Holder class for common parameters used during write. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SerialMergeScheduler A MergeScheduler that simply does each merge sequentially, using the current thread. SimpleMergedSegmentWarmer A very simple merged segment warmer that just ensures data structures are initialized. SingleTermsEnum Subclass of FilteredTermsEnum for enumerating a single term. For example, this can be used by MultiTermQuery s that need only visit one term, but want to preserve MultiTermQuery semantics such as MultiTermRewriteMethod . SlowCompositeReaderWrapper This class forces a composite reader (eg a MultiReader or DirectoryReader ) to emulate an atomic reader. This requires implementing the postings APIs on-the-fly, using the static methods in MultiFields , MultiDocValues , by stepping through the sub-readers to merge fields/terms, appending docs, etc. NOTE : This class almost always results in a performance hit. If this is important to your use case, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. SnapshotDeletionPolicy An IndexDeletionPolicy that wraps any other IndexDeletionPolicy and adds the ability to hold and later release snapshots of an index. While a snapshot is held, the IndexWriter will not remove any files associated with it even if the index is otherwise being actively, arbitrarily changed. Because we wrap another arbitrary IndexDeletionPolicy , this gives you the freedom to continue using whatever IndexDeletionPolicy you would normally want to use with your index. This class maintains all snapshots in-memory, and so the information is not persisted and not protected against system failures. If persistence is important, you can use PersistentSnapshotDeletionPolicy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk SortedDocValues A per-document byte[] with presorted values. Per-Document values in a SortedDocValues are deduplicated, dereferenced, and sorted into a dictionary of unique values. A pointer to the dictionary value (ordinal) can be retrieved for each document. Ordinals are dense and in increasing sorted order. SortedSetDocValues A per-document set of presorted byte[] values. Per-Document values in a SortedDocValues are deduplicated, dereferenced, and sorted into a dictionary of unique values. A pointer to the dictionary value (ordinal) can be retrieved for each document. Ordinals are dense and in increasing sorted order. StoredFieldVisitor Expert: Provides a low-level means of accessing the stored field values in an index. See Document(Int32, StoredFieldVisitor) . NOTE : a StoredFieldVisitor implementation should not try to load or visit other stored documents in the same reader because the implementation of stored fields for most codecs is not reeentrant and you will see strange exceptions as a result. See DocumentStoredFieldVisitor , which is a StoredFieldVisitor that builds the Document containing all stored fields. This is used by Document(Int32) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TaskMergeScheduler A MergeScheduler that runs each merge using s on the default . If more than MaxMergeCount merges are requested then this class will forcefully throttle the incoming threads by pausing until one more more merges complete. LUCENENET specific Term A Term represents a word from text. This is the unit of search. It is composed of two elements, the text of the word, as a string, and the name of the field that the text occurred in. Note that terms may represent more than words from text fields, but also things like dates, email addresses, urls, etc. TermContext Maintains a IndexReader TermState view over IndexReader instances containing a single term. The TermContext doesn't track if the given TermState objects are valid, neither if the TermState instances refer to the same terms in the associated readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Terms Access to the terms in a specific field. See Fields . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsEnum Iterator to seek ( SeekCeil(BytesRef) , SeekExact(BytesRef) ) or step through ( Next() terms to obtain frequency information ( DocFreq ), DocsEnum or DocsAndPositionsEnum for the current term ( Docs(IBits, DocsEnum) ). Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than the one before it. The TermsEnum is unpositioned when you first obtain it and you must first successfully call Next() or one of the Seek methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermState Encapsulates all required internal state to position the associated TermsEnum without re-seeking. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TieredMergePolicy Merges segments of approximately equal size, subject to an allowed number of segments per tier. This is similar to LogByteSizeMergePolicy , except this merge policy is able to merge non-adjacent segment, and separates how many segments are merged at once ( MaxMergeAtOnce ) from how many segments are allowed per tier ( SegmentsPerTier ). This merge policy also does not over-merge (i.e. cascade merges). For normal merging, this policy first computes a \"budget\" of how many segments are allowed to be in the index. If the index is over-budget, then the policy sorts segments by decreasing size (pro-rating by percent deletes), and then finds the least-cost merge. Merge cost is measured by a combination of the \"skew\" of the merge (size of largest segment divided by smallest segment), total merge size and percent deletes reclaimed, so that merges with lower skew, smaller size and those reclaiming more deletes, are favored. If a merge will produce a segment that's larger than MaxMergedSegmentMB , then the policy will merge fewer segments (down to 1 at once, if that one has deletions) to keep the segment size under budget. NOTE : This policy freely merges non-adjacent segments; if this is a problem, use LogMergePolicy . NOTE : This policy always merges by byte size of the segments, always pro-rates by percent deletes, and does not apply any maximum segment size during forceMerge (unlike LogByteSizeMergePolicy ). This is a Lucene.NET EXPERIMENTAL API, use at your own risk TieredMergePolicy.MergeScore Holds score and explanation for a single candidate merge. TrackingIndexWriter Class that tracks changes to a delegated IndexWriter , used by ControlledRealTimeReopenThread<T> to ensure specific changes are visible. Create this class (passing your IndexWriter ), and then pass this class to ControlledRealTimeReopenThread<T> . Be sure to make all changes via the TrackingIndexWriter , otherwise ControlledRealTimeReopenThread<T> won't know about the changes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TwoPhaseCommitTool A utility for executing 2-phase commit on several objects. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TwoPhaseCommitTool.CommitFailException Thrown by Execute(ITwoPhaseCommit[]) when an object fails to Commit() . TwoPhaseCommitTool.PrepareCommitFailException Thrown by Execute(ITwoPhaseCommit[]) when an object fails to PrepareCommit() . UpgradeIndexMergePolicy This MergePolicy is used for upgrading all existing segments of an index when calling ForceMerge(Int32) . All other methods delegate to the base MergePolicy given to the constructor. This allows for an as-cheap-as possible upgrade of an older index by only upgrading segments that are created by previous Lucene versions. ForceMerge does no longer really merge; it is just used to \"ForceMerge\" older segment versions away. In general one would use IndexUpgrader , but for a fully customizeable upgrade, you can use this like any other MergePolicy and call ForceMerge(Int32) : IndexWriterConfig iwc = new IndexWriterConfig(LuceneVersion.LUCENE_XX, new KeywordAnalyzer()); iwc.MergePolicy = new UpgradeIndexMergePolicy(iwc.MergePolicy); using (IndexWriter w = new IndexWriter(dir, iwc)) { w.ForceMerge(1); } Warning: this merge policy may reorder documents if the index was partially upgraded before calling ForceMerge(Int32) (e.g., documents were added). If your application relies on \"monotonicity\" of doc IDs (which means that the order in which the documents were added to the index is preserved), do a ForceMerge(1) instead. Please note, the delegate MergePolicy may also reorder documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces IConcurrentMergeScheduler IIndexableField Represents a single field for indexing. IndexWriter consumes IEnumerable<IndexableField> as a document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IIndexableFieldType Describes the properties of a field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IMergeScheduler IndexReader.IReaderClosedListener A custom listener that's invoked when the IndexReader is closed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IndexWriter.IEvent Interface for internal atomic events. See Lucene.Net.Index.DocumentsWriter for details. Events are executed concurrently and no order is guaranteed. Each event should only rely on the serializeability within it's process method. All actions that must happen before or after a certain action must be encoded inside the Process(IndexWriter, Boolean, Boolean) method. ITwoPhaseCommit An interface for implementations that support 2-phase commit. You can use TwoPhaseCommitTool to execute a 2-phase commit algorithm over several ITwoPhaseCommit s. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentReader.ICoreDisposedListener Called when the shared core for this SegmentReader is disposed. This listener is called only once all SegmentReader s sharing the same core are disposed. At this point it is safe for apps to evict this reader from any caches keyed on CoreCacheKey . This is the same interface that IFieldCache uses, internally, to evict entries. NOTE: This was CoreClosedListener in Lucene. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums DocsAndPositionsFlags DocsFlags DocValuesFieldUpdatesType DocValuesType DocValues types. Note that DocValues is strongly typed, so a field cannot have different types across different documents. FilteredTermsEnum.AcceptStatus Return value, if term should be accepted or the iteration should END . The *_SEEK values denote, that after handling the current term the enum should call NextSeekTerm(BytesRef) and step forward. IndexOptions Controls how much information is stored in the postings lists. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MergeTrigger MergeTrigger is passed to FindMerges(MergeTrigger, SegmentInfos) to indicate the event that triggered the merge. OpenMode Specifies the open mode for IndexWriter . StoredFieldVisitor.Status Enumeration of possible return values for NeedsField(FieldInfo) . TermsEnum.SeekStatus Represents returned result from SeekCeil(BytesRef) ."
  },
  "api/Lucene.Net/Lucene.Net.Index.IConcurrentMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IConcurrentMergeScheduler.html",
    "title": "Interface IConcurrentMergeScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IConcurrentMergeScheduler Inherited Members IMergeScheduler.Merge(IndexWriter, MergeTrigger, Boolean) IMergeScheduler.Clone() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IConcurrentMergeScheduler : IMergeScheduler, IDisposable Properties | Improve this Doc View Source MaxMergeCount Declaration int MaxMergeCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxThreadCount Declaration int MaxThreadCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeThreadPriority Declaration int MergeThreadPriority { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ClearSuppressExceptions() Declaration void ClearSuppressExceptions() | Improve this Doc View Source SetMaxMergesAndThreads(Int32, Int32) Declaration void SetMaxMergesAndThreads(int maxMergeCount, int maxThreadCount) Parameters Type Name Description System.Int32 maxMergeCount System.Int32 maxThreadCount | Improve this Doc View Source SetMergeThreadPriority(Int32) Declaration void SetMergeThreadPriority(int priority) Parameters Type Name Description System.Int32 priority | Improve this Doc View Source SetSuppressExceptions() Declaration void SetSuppressExceptions() | Improve this Doc View Source Sync() Declaration void Sync()"
  },
  "api/Lucene.Net/Lucene.Net.Index.IIndexableField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IIndexableField.html",
    "title": "Interface IIndexableField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IIndexableField Represents a single field for indexing. IndexWriter consumes IEnumerable<IndexableField> as a document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IIndexableField Properties | Improve this Doc View Source Boost Returns the field's index-time boost. Only fields can have an index-time boost, if you want to simulate a \"document boost\", then you must pre-multiply it across all the relevant fields yourself. The boost is used to compute the norm factor for the field. By default, in the ComputeNorm(FieldInvertState) method, the boost value is multiplied by the length normalization factor and then rounded by EncodeNormValue(Single) before it is stored in the index. One should attempt to ensure that this product does not overflow the range of that encoding. It is illegal to return a boost other than 1.0f for a field that is not indexed ( IsIndexed is false) or omits normalization values ( OmitNorms returns true). Declaration float Boost { get; } Property Value Type Description System.Single See Also ComputeNorm ( FieldInvertState ) EncodeNormValue(Single) | Improve this Doc View Source IndexableFieldType IIndexableFieldType describing the properties of this field. Declaration IIndexableFieldType IndexableFieldType { get; } Property Value Type Description IIndexableFieldType | Improve this Doc View Source Name Field name Declaration string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumericType Gets the NumericFieldType of the underlying value, or NONE if the value is not set or non-numeric. Expert: The difference between this property and NumericType is this is represents the current state of the field (whether being written or read) and the FieldType property represents instructions on how the field will be written, but does not re-populate when reading back from an index (it is write-only). In Java, the numeric type was determined by checking the type of GetNumericValue() . However, since there are no reference number types in .NET, using GetNumericValue() so will cause boxing/unboxing. It is therefore recommended to use this property to check the underlying type and the corresponding Get*Value() method to retrieve the value. NOTE: Since Lucene codecs do not support BYTE or INT16 , fields created with these types will always be INT32 when read back from the index. Declaration NumericFieldType NumericType { get; } Property Value Type Description NumericFieldType Methods | Improve this Doc View Source GetBinaryValue() Non-null if this field has a binary value. Declaration BytesRef GetBinaryValue() Returns Type Description BytesRef | Improve this Doc View Source GetByteValue() Returns the field value as or null if the type is non-numeric. Declaration byte? GetByteValue() Returns Type Description System.Nullable < System.Byte > The field value or null if the type is non-numeric. | Improve this Doc View Source GetDoubleValue() Returns the field value as or null if the type is non-numeric. Declaration double? GetDoubleValue() Returns Type Description System.Nullable < System.Double > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt16Value() Returns the field value as or null if the type is non-numeric. Declaration short? GetInt16Value() Returns Type Description System.Nullable < System.Int16 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt32Value() Returns the field value as or null if the type is non-numeric. Declaration int? GetInt32Value() Returns Type Description System.Nullable < System.Int32 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt64Value() Returns the field value as or null if the type is non-numeric. Declaration long? GetInt64Value() Returns Type Description System.Nullable < System.Int64 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetNumericValue() Non-null if this field has a numeric value. Declaration object GetNumericValue() Returns Type Description System.Object | Improve this Doc View Source GetReaderValue() Non-null if this field has a value Declaration TextReader GetReaderValue() Returns Type Description TextReader | Improve this Doc View Source GetSingleValue() Returns the field value as or null if the type is non-numeric. Declaration float? GetSingleValue() Returns Type Description System.Nullable < System.Single > The field value or null if the type is non-numeric. | Improve this Doc View Source GetStringValue() Non-null if this field has a string value. Declaration string GetStringValue() Returns Type Description System.String The string representation of the value if it is either a or numeric type. | Improve this Doc View Source GetStringValue(IFormatProvider) The value of the field as a , or null . If null , the value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration string GetStringValue(IFormatProvider provider) Parameters Type Name Description IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a or numeric type. | Improve this Doc View Source GetStringValue(String) The value of the field as a , or null . If null , the value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration string GetStringValue(string format) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a or numeric type. | Improve this Doc View Source GetStringValue(String, IFormatProvider) The value of the field as a , or null . If null , the value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration string GetStringValue(string format, IFormatProvider provider) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a or numeric type. | Improve this Doc View Source GetTokenStream(Analyzer) Creates the TokenStream used for indexing this field. If appropriate, implementations should use the given Analyzer to create the TokenStream s. Declaration TokenStream GetTokenStream(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Analyzer that should be used to create the TokenStream s from Returns Type Description TokenStream TokenStream value for indexing the document. Should always return a non-null value if the field is to be indexed Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IIndexableFieldType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IIndexableFieldType.html",
    "title": "Interface IIndexableFieldType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IIndexableFieldType Describes the properties of a field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IIndexableFieldType Properties | Improve this Doc View Source DocValueType DocValues DocValuesType : if not NONE then the field's value will be indexed into docValues. Declaration DocValuesType DocValueType { get; } Property Value Type Description DocValuesType | Improve this Doc View Source IndexOptions IndexOptions , describing what should be recorded into the inverted index Declaration IndexOptions IndexOptions { get; } Property Value Type Description IndexOptions | Improve this Doc View Source IsIndexed true if this field should be indexed (inverted) Declaration bool IsIndexed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsStored true if the field's value should be stored Declaration bool IsStored { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsTokenized true if this field's value should be analyzed by the Analyzer . This has no effect if IsIndexed returns false . Declaration bool IsTokenized { get; } Property Value Type Description System.Boolean | Improve this Doc View Source OmitNorms true if normalization values should be omitted for the field. This saves memory, but at the expense of scoring quality (length normalization will be disabled), and if you omit norms, you cannot use index-time boosts. Declaration bool OmitNorms { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectorOffsets true if this field's token character offsets should also be stored into term vectors. This option is illegal if term vectors are not enabled for the field ( StoreTermVectors is false ) Declaration bool StoreTermVectorOffsets { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectorPayloads true if this field's token payloads should also be stored into the term vectors. This option is illegal if term vector positions are not enabled for the field ( StoreTermVectors is false ). Declaration bool StoreTermVectorPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectorPositions true if this field's token positions should also be stored into the term vectors. This option is illegal if term vectors are not enabled for the field ( StoreTermVectors is false ). Declaration bool StoreTermVectorPositions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectors true if this field's indexed form should be also stored into term vectors. this builds a miniature inverted-index for this field which can be accessed in a document-oriented way from GetTermVector(Int32, String) . This option is illegal if IsIndexed returns false . Declaration bool StoreTermVectors { get; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Index.IMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IMergeScheduler.html",
    "title": "Interface IMergeScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IMergeScheduler Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IMergeScheduler : IDisposable Methods | Improve this Doc View Source Clone() Declaration object Clone() Returns Type Description System.Object | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Declaration void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer MergeTrigger trigger System.Boolean newMergesFound"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexCommit.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexCommit.html",
    "title": "Class IndexCommit | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexCommit Expert: represents a single commit into an index as seen by the IndexDeletionPolicy or IndexReader . Changes to the content of an index are made visible only after the writer who made that change commits by writing a new segments file ( segments_N ). This point in time, when the action of writing of a new segments file to the directory is completed, is an index commit. Each index commit point has a unique segments file associated with it. The segments file associated with a later index commit point would have a larger N. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexCommit Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexCommit : IComparable<IndexCommit> Constructors | Improve this Doc View Source IndexCommit() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected IndexCommit() Properties | Improve this Doc View Source Directory Returns the Directory for the index. Declaration public abstract Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source FileNames Returns all index files referenced by this commit point. Declaration public abstract ICollection<string> FileNames { get; } Property Value Type Description ICollection < System.String > | Improve this Doc View Source Generation Returns the generation (the _N in segments_N) for this IndexCommit Declaration public abstract long Generation { get; } Property Value Type Description System.Int64 | Improve this Doc View Source IsDeleted Returns true if this commit should be deleted; this is only used by IndexWriter after invoking the IndexDeletionPolicy . Declaration public abstract bool IsDeleted { get; } Property Value Type Description System.Boolean | Improve this Doc View Source SegmentCount Returns number of segments referenced by this commit. Declaration public abstract int SegmentCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source SegmentsFileName Get the segments file ( segments_N ) associated with this commit point. Declaration public abstract string SegmentsFileName { get; } Property Value Type Description System.String | Improve this Doc View Source UserData Returns userData, previously passed to SetCommitData(IDictionary<String, String>) } for this commit. The dictionary is -> . Declaration public abstract IDictionary<string, string> UserData { get; } Property Value Type Description IDictionary < System.String , System.String > Methods | Improve this Doc View Source CompareTo(IndexCommit) Declaration public virtual int CompareTo(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description System.Int32 | Improve this Doc View Source Delete() Delete this commit point. This only applies when using the commit point in the context of IndexWriter 's IndexDeletionPolicy . Upon calling this, the writer is notified that this commit point should be deleted. Decision that a commit-point should be deleted is taken by the IndexDeletionPolicy in effect and therefore this should only be called by its OnInit<T>(IList<T>) or OnCommit<T>(IList<T>) methods. Declaration public abstract void Delete() | Improve this Doc View Source Equals(Object) Two IndexCommits are equal if both their Directory and versions are equal. Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexDeletionPolicy.html",
    "title": "Class IndexDeletionPolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexDeletionPolicy Expert: policy for deletion of stale IndexCommit s. Implement this interface, and pass it to one of the IndexWriter or IndexReader constructors, to customize when older point-in-time commits ( IndexCommit ) are deleted from the index directory. The default deletion policy is KeepOnlyLastCommitDeletionPolicy , which always removes old commits as soon as a new commit is done (this matches the behavior before 2.2). One expected use case for this (and the reason why it was first created) is to work around problems with an index directory accessed via filesystems like NFS because NFS does not provide the \"delete on last close\" semantics that Lucene's \"point in time\" search normally relies on. By implementing a custom deletion policy, such as \"a commit is only removed once it has been stale for more than X minutes\", you can give your readers time to refresh to the new commit before IndexWriter removes the old commits. Note that doing so will increase the storage requirements of the index. See LUCENE-710 for details. Implementers of sub-classes should make sure that Clone() returns an independent instance able to work with any other IndexWriter or Directory instance. Inheritance System.Object IndexDeletionPolicy KeepOnlyLastCommitDeletionPolicy NoDeletionPolicy SnapshotDeletionPolicy Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexDeletionPolicy : object Constructors | Improve this Doc View Source IndexDeletionPolicy() Sole constructor, typically called by sub-classes constructors. Declaration protected IndexDeletionPolicy() Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source OnCommit<T>(IList<T>) this is called each time the writer completed a commit. this gives the policy a chance to remove old commit points with each commit. The policy may now choose to delete old commit points by calling method Delete() of IndexCommit . This method is only called when Commit() } or Dispose() is called, or possibly not at all if the Rollback() } method is called. Note: the last CommitPoint is the most recent one, i.e. the \"front index state\". Be careful not to delete it, unless you know for sure what you are doing, and unless you can afford to lose the index content while doing that. Declaration public abstract void OnCommit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description IList <T> commits List of IndexCommit s, sorted by age (the 0th one is the oldest commit). Type Parameters Name Description T | Improve this Doc View Source OnInit<T>(IList<T>) this is called once when a writer is first instantiated to give the policy a chance to remove old commit points. The writer locates all index commits present in the index directory and calls this method. The policy may choose to delete some of the commit points, doing so by calling method Delete() . Note: the last CommitPoint is the most recent one, i.e. the \"front index state\". Be careful not to delete it, unless you know for sure what you are doing, and unless you can afford to lose the index content while doing that. Declaration public abstract void OnInit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description IList <T> commits List of current point-in-time commits ( IndexCommit ), sorted by age (the 0th one is the oldest commit). Note that for a new index this method is invoked with an empty list. Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexFileNames.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexFileNames.html",
    "title": "Class IndexFileNames | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexFileNames This class contains useful constants representing filenames and extensions used by lucene, as well as convenience methods for querying whether a file name matches an extension ( MatchesExtension(String, String) ), as well as generating file names from a segment name, generation and extension ( FileNameFromGeneration(String, String, Int64) , SegmentFileName(String, String, String) ). NOTE : extensions used by codecs are not listed here. You must interact with the Codec directly. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object IndexFileNames Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class IndexFileNames : object Fields | Improve this Doc View Source CODEC_FILE_PATTERN All files created by codecs much match this pattern (checked in SegmentInfo ). Declaration public static readonly Regex CODEC_FILE_PATTERN Field Value Type Description Regex | Improve this Doc View Source COMPOUND_FILE_ENTRIES_EXTENSION Extension of compound file entries Declaration public static readonly string COMPOUND_FILE_ENTRIES_EXTENSION Field Value Type Description System.String | Improve this Doc View Source COMPOUND_FILE_EXTENSION Extension of compound file Declaration public static readonly string COMPOUND_FILE_EXTENSION Field Value Type Description System.String | Improve this Doc View Source GEN_EXTENSION Extension of gen file Declaration public static readonly string GEN_EXTENSION Field Value Type Description System.String | Improve this Doc View Source INDEX_EXTENSIONS This array contains all filename extensions used by Lucene's index files, with one exception, namely the extension made up from .s + a number. Also note that Lucene's segments_N files do not have any filename extension. Declaration public static readonly string[] INDEX_EXTENSIONS Field Value Type Description System.String [] | Improve this Doc View Source SEGMENTS Name of the index segment file Declaration public static readonly string SEGMENTS Field Value Type Description System.String | Improve this Doc View Source SEGMENTS_GEN Name of the generation reference file name Declaration public static readonly string SEGMENTS_GEN Field Value Type Description System.String Methods | Improve this Doc View Source FileNameFromGeneration(String, String, Int64) Computes the full file name from base, extension and generation. If the generation is -1, the file name is null . If it's 0, the file name is <base>.<ext>. If it's > 0, the file name is <base>_<gen>.<ext>. NOTE: .<ext> is added to the name only if ext is not an empty string. Declaration public static string FileNameFromGeneration(string base, string ext, long gen) Parameters Type Name Description System.String base main part of the file name System.String ext extension of the filename System.Int64 gen generation Returns Type Description System.String | Improve this Doc View Source GetExtension(String) Return the extension (anything after the first '.'), or null if there is no '.' in the file name. Declaration public static string GetExtension(string filename) Parameters Type Name Description System.String filename Returns Type Description System.String | Improve this Doc View Source MatchesExtension(String, String) Returns true if the given filename ends with the given extension. One should provide a pure extension, without '.'. Declaration public static bool MatchesExtension(string filename, string ext) Parameters Type Name Description System.String filename System.String ext Returns Type Description System.Boolean | Improve this Doc View Source ParseSegmentName(String) Parses the segment name out of the given file name. Declaration public static string ParseSegmentName(string filename) Parameters Type Name Description System.String filename Returns Type Description System.String the segment name only, or filename if it does not contain a '.' and '_'. | Improve this Doc View Source SegmentFileName(String, String, String) Returns a file name that includes the given segment name, your own custom name and extension. The format of the filename is: <segmentName>(_<name>)(.<ext>). NOTE: .<ext> is added to the result file name only if ext is not empty. NOTE: _<segmentSuffix> is added to the result file name only if it's not the empty string NOTE: all custom files should be named using this method, or otherwise some structures may fail to handle them properly (such as if they are added to compound files). Declaration public static string SegmentFileName(string segmentName, string segmentSuffix, string ext) Parameters Type Name Description System.String segmentName System.String segmentSuffix System.String ext Returns Type Description System.String | Improve this Doc View Source StripExtension(String) Removes the extension (anything after the first '.'), otherwise returns the original filename. Declaration public static string StripExtension(string filename) Parameters Type Name Description System.String filename Returns Type Description System.String | Improve this Doc View Source StripSegmentName(String) Strips the segment name out of the given file name. If you used SegmentFileName(String, String, String) or FileNameFromGeneration(String, String, Int64) to create your files, then this method simply removes whatever comes before the first '.', or the second '_' (excluding both). Declaration public static string StripSegmentName(string filename) Parameters Type Name Description System.String filename Returns Type Description System.String the filename with the segment name removed, or the given filename if it does not contain a '.' and '_'."
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexFormatTooNewException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexFormatTooNewException.html",
    "title": "Class IndexFormatTooNewException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexFormatTooNewException This exception is thrown when Lucene detects an index that is newer than this Lucene version. Inheritance System.Object CorruptIndexException IndexFormatTooNewException Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class IndexFormatTooNewException : CorruptIndexException Constructors | Improve this Doc View Source IndexFormatTooNewException(DataInput, Int32, Int32, Int32) Creates an IndexFormatTooNewException This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooNewException(DataInput input, int version, int minVersion, int maxVersion) Parameters Type Name Description DataInput input the open file that's too old System.Int32 version the version of the file that was too old System.Int32 minVersion the minimum version accepted System.Int32 maxVersion the maxium version accepted | Improve this Doc View Source IndexFormatTooNewException(String, Int32, Int32, Int32) Creates an IndexFormatTooNewException This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooNewException(string resourceDesc, int version, int minVersion, int maxVersion) Parameters Type Name Description System.String resourceDesc describes the file that was too old System.Int32 version the version of the file that was too old System.Int32 minVersion the minimum version accepted System.Int32 maxVersion the maxium version accepted"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexFormatTooOldException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexFormatTooOldException.html",
    "title": "Class IndexFormatTooOldException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexFormatTooOldException This exception is thrown when Lucene detects an index that is too old for this Lucene version Inheritance System.Object CorruptIndexException IndexFormatTooOldException Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class IndexFormatTooOldException : CorruptIndexException Constructors | Improve this Doc View Source IndexFormatTooOldException(DataInput, Int32, Int32, Int32) Creates an IndexFormatTooOldException . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooOldException(DataInput input, int version, int minVersion, int maxVersion) Parameters Type Name Description DataInput input the open file that's too old System.Int32 version the version of the file that was too old System.Int32 minVersion the minimum version accepted System.Int32 maxVersion the maxium version accepted | Improve this Doc View Source IndexFormatTooOldException(DataInput, String) Creates an IndexFormatTooOldException . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooOldException(DataInput input, string version) Parameters Type Name Description DataInput input the open file that's too old System.String version the version of the file that was too old | Improve this Doc View Source IndexFormatTooOldException(String, Int32, Int32, Int32) Creates an IndexFormatTooOldException . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooOldException(string resourceDesc, int version, int minVersion, int maxVersion) Parameters Type Name Description System.String resourceDesc describes the file that was too old System.Int32 version the version of the file that was too old System.Int32 minVersion the minimum version accepted System.Int32 maxVersion the maxium version accepted | Improve this Doc View Source IndexFormatTooOldException(String, String) Creates an IndexFormatTooOldException . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooOldException(string resourceDesc, string version) Parameters Type Name Description System.String resourceDesc describes the file that was too old System.String version the version of the file that was too old"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexNotFoundException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexNotFoundException.html",
    "title": "Class IndexNotFoundException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexNotFoundException Signals that no index was found in the . Possibly because the directory is empty, however can also indicate an index corruption. Inheritance System.Object IndexNotFoundException Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class IndexNotFoundException : FileNotFoundException Constructors | Improve this Doc View Source IndexNotFoundException(String) Creates IndexNotFoundException with the description message. Declaration public IndexNotFoundException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexOptions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexOptions.html",
    "title": "Enum IndexOptions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum IndexOptions Controls how much information is stored in the postings lists. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum IndexOptions : int Fields Name Description DOCS_AND_FREQS Only documents and term frequencies are indexed: positions are omitted. this enables normal scoring, except Phrase and other positional queries will throw an exception. DOCS_AND_FREQS_AND_POSITIONS Indexes documents, frequencies and positions. this is a typical default for full-text search: full scoring is enabled and positional queries are supported. DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS Indexes documents, frequencies, positions and offsets. Character offsets are encoded alongside the positions. DOCS_ONLY Only documents are indexed: term frequencies and positions are omitted. Phrase and other positional queries on the field will throw an exception, and scoring will behave as if any term in the document appears only once. NONE No index options will be used. NOTE: This is the same as setting to null in Lucene"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexReader.html",
    "title": "Class IndexReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexReader IndexReader is an abstract class, providing an interface for accessing an index. Search of an index is done entirely through this abstract interface, so that any subclass which implements it is searchable. There are two different types of IndexReader s: AtomicReader : These indexes do not consist of several sub-readers, they are atomic. They support retrieval of stored fields, doc values, terms, and postings. CompositeReader : Instances (like DirectoryReader ) of this reader can only be used to get stored fields from the underlying AtomicReader s, but it is not possible to directly retrieve postings. To do that, get the sub-readers via GetSequentialSubReaders() . Alternatively, you can mimic an AtomicReader (with a serious slowdown), by wrapping composite readers with SlowCompositeReaderWrapper . IndexReader instances for indexes on disk are usually constructed with a call to one of the static DirectoryReader.Open() methods, e.g. Open(Directory) . DirectoryReader inherits the CompositeReader abstract class, it is not possible to directly get postings. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader AtomicReader CompositeReader Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexReader : IDisposable Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Expert: Returns a key for this IndexReader that also includes deletions, so IFieldCache / CachingWrapperFilter can find it again. This key must not have Equals()/GetHashCode() methods, so \"equals\" means \"identical\". Declaration public virtual object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object | Improve this Doc View Source Context Expert: Returns the root IndexReaderContext for this IndexReader 's sub-reader tree. Iff this reader is composed of sub readers, i.e. this reader being a composite reader, this method returns a CompositeReaderContext holding the reader's direct children as well as a view of the reader tree's atomic leaf contexts. All sub- IndexReaderContext instances referenced from this readers top-level context are private to this reader and are not shared with another context tree. For example, IndexSearcher uses this API to drive searching by one atomic leaf reader at a time. If this reader is not composed of child readers, this method returns an AtomicReaderContext . Note: Any of the sub- CompositeReaderContext instances referenced from this top-level context do not support Leaves . Only the top-level context maintains the convenience leaf-view for performance reasons. Declaration public abstract IndexReaderContext Context { get; } Property Value Type Description IndexReaderContext | Improve this Doc View Source CoreCacheKey Expert: Returns a key for this IndexReader , so IFieldCache / CachingWrapperFilter can find it again. This key must not have Equals()/GetHashCode() methods, so \"equals\" means \"identical\". Declaration public virtual object CoreCacheKey { get; } Property Value Type Description System.Object | Improve this Doc View Source HasDeletions Returns true if any documents have been deleted. Implementers should consider overriding this property if MaxDoc or NumDocs are not constant-time operations. Declaration public virtual bool HasDeletions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Leaves Returns the reader's leaves, or itself if this reader is atomic. This is a convenience method calling this.Context.Leaves . Declaration public IList<AtomicReaderContext> Leaves { get; } Property Value Type Description IList < AtomicReaderContext > See Also Leaves | Improve this Doc View Source MaxDoc Returns one greater than the largest possible document number. this may be used to, e.g., determine how big to allocate an array which will have an element for every document number in an index. Declaration public abstract int MaxDoc { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumDeletedDocs Returns the number of deleted documents. Declaration public int NumDeletedDocs { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumDocs Returns the number of documents in this index. Declaration public abstract int NumDocs { get; } Property Value Type Description System.Int32 | Improve this Doc View Source RefCount Expert: returns the current refCount for this reader Declaration public int RefCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddReaderClosedListener(IndexReader.IReaderClosedListener) Expert: adds a IndexReader.IReaderClosedListener . The provided listener will be invoked when this reader is closed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void AddReaderClosedListener(IndexReader.IReaderClosedListener listener) Parameters Type Name Description IndexReader.IReaderClosedListener listener | Improve this Doc View Source DecRef() Expert: decreases the RefCount of this IndexReader instance. If the RefCount drops to 0, then this reader is disposed. If an exception is hit, the RefCount is unchanged. Declaration public void DecRef() See Also IncRef() | Improve this Doc View Source Dispose() Closes files associated with this index. Also saves any new deletions to disk. No other methods should be called after this has been called. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Closes files associated with this index. This method implements the disposable pattern. It may be overridden to dispose any managed or unmanaged resources, but be sure to call base.Dispose(disposing) to close files associated with the underlying IndexReader . Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing true indicates to dispose all managed and unmanaged resources, false indicates dispose unmanaged resources only | Improve this Doc View Source DocFreq(Term) Returns the number of documents containing the term . This method returns 0 if the term or field does not exist. This method does not take into account deleted documents that have not yet been merged away. Declaration public abstract int DocFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int32 See Also DocFreq | Improve this Doc View Source DoClose() Implements close. Declaration protected abstract void DoClose() | Improve this Doc View Source Document(Int32) Returns the stored fields of the n th Document in this index. This is just sugar for using DocumentStoredFieldVisitor . NOTE: for performance reasons, this method does not check if the requested document is deleted, and therefore asking for a deleted document may yield unspecified results. Usually this is not required, however you can test if the doc is deleted by checking the IBits returned from GetLiveDocs(IndexReader) . NOTE: only the content of a field is returned, if that field was stored during indexing. Metadata like boost, omitNorm, IndexOptions, tokenized, etc., are not preserved. Declaration public Document Document(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Document | Improve this Doc View Source Document(Int32, ISet<String>) Like Document(Int32) but only loads the specified fields. Note that this is simply sugar for DocumentStoredFieldVisitor(ISet<String>) . Declaration public Document Document(int docID, ISet<string> fieldsToLoad) Parameters Type Name Description System.Int32 docID ISet < System.String > fieldsToLoad Returns Type Description Document | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Expert: visits the fields of a stored document, for custom processing/loading of each field. If you simply want to load all fields, use Document(Int32) . If you want to load a subset, use DocumentStoredFieldVisitor . Declaration public abstract void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor | Improve this Doc View Source EnsureOpen() Throws if this IndexReader or any of its child readers is disposed, otherwise returns. Declaration protected void EnsureOpen() | Improve this Doc View Source Equals(Object) Determines whether two object instances are equal. For caching purposes, IndexReader subclasses are not allowed to implement Equals/GetHashCode, so methods are declared sealed. To lookup instances from caches use CoreCacheKey and CombinedCoreAndDeletesKey . Declaration public override sealed bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetDocCount(String) Returns the number of documents that have at least one term for this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract int GetDocCount(string field) Parameters Type Name Description System.String field Returns Type Description System.Int32 See Also DocCount | Improve this Doc View Source GetHashCode() Serves as the default hash function. For caching purposes, IndexReader subclasses are not allowed to implement Equals/GetHashCode, so methods are declared sealed. To lookup instances from caches use CoreCacheKey and CombinedCoreAndDeletesKey . Declaration public override sealed int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source GetSumDocFreq(String) Returns the sum of DocFreq for all terms in this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract long GetSumDocFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 See Also SumDocFreq | Improve this Doc View Source GetSumTotalTermFreq(String) Returns the sum of TotalTermFreq for all terms in this field, or -1 if this measure isn't stored by the codec (or if this fields omits term freq and positions). Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract long GetSumTotalTermFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 See Also SumTotalTermFreq | Improve this Doc View Source GetTermVector(Int32, String) Retrieve term vector for this document and field, or null if term vectors were not indexed. The returned Fields instance acts like a single-document inverted index (the docID will be 0). Declaration public Terms GetTermVector(int docID, string field) Parameters Type Name Description System.Int32 docID System.String field Returns Type Description Terms | Improve this Doc View Source GetTermVectors(Int32) Retrieve term vectors for this document, or null if term vectors were not indexed. The returned Fields instance acts like a single-document inverted index (the docID will be 0). Declaration public abstract Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields | Improve this Doc View Source IncRef() Expert: increments the RefCount of this IndexReader instance. RefCount s are used to determine when a reader can be disposed safely, i.e. as soon as there are no more references. Be sure to always call a corresponding DecRef() , in a finally clause; otherwise the reader may never be disposed. Note that Dispose(Boolean) simply calls DecRef() , which means that the IndexReader will not really be disposed until DecRef() has been called for all outstanding references. Declaration public void IncRef() See Also DecRef() TryIncRef() | Improve this Doc View Source Open(IndexCommit) Expert: returns an IndexReader reading the index in the given IndexCommit . Declaration public static DirectoryReader Open(IndexCommit commit) Parameters Type Name Description IndexCommit commit the commit point to open Returns Type Description DirectoryReader | Improve this Doc View Source Open(IndexCommit, Int32) Expert: returns an IndexReader reading the index in the given IndexCommit and termInfosIndexDivisor . Declaration public static DirectoryReader Open(IndexCommit commit, int termInfosIndexDivisor) Parameters Type Name Description IndexCommit commit the commit point to open System.Int32 termInfosIndexDivisor Subsamples which indexed terms are loaded into RAM. this has the same effect as TermIndexInterval (which can be set in IndexWriterConfig ) except that setting must be done at indexing time while this setting can be set per reader. When set to N , then one in every N*termIndexInterval terms in the index is loaded into memory. By setting this to a value > 1 you can reduce memory usage, at the expense of higher latency when loading a TermInfo. The default value is 1. Set this to -1 to skip loading the terms index entirely. Returns Type Description DirectoryReader | Improve this Doc View Source Open(IndexWriter, Boolean) Open a near real time IndexReader from the IndexWriter . Declaration public static DirectoryReader Open(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer The IndexWriter to open from System.Boolean applyAllDeletes If true, all buffered deletes will be applied (made visible) in the returned reader. If false, the deletes are not applied but remain buffered (in IndexWriter ) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false. Returns Type Description DirectoryReader The new IndexReader See Also OpenIfChanged ( DirectoryReader , IndexWriter , System.Boolean ) | Improve this Doc View Source Open(Directory) Returns a IndexReader reading the index in the given Directory Declaration public static DirectoryReader Open(Directory directory) Parameters Type Name Description Directory directory the index directory Returns Type Description DirectoryReader | Improve this Doc View Source Open(Directory, Int32) Expert: Returns a IndexReader reading the index in the given Directory with the given termInfosIndexDivisor . Declaration public static DirectoryReader Open(Directory directory, int termInfosIndexDivisor) Parameters Type Name Description Directory directory the index directory System.Int32 termInfosIndexDivisor Subsamples which indexed terms are loaded into RAM. this has the same effect as TermIndexInterval (which can be set on IndexWriterConfig ) except that setting must be done at indexing time while this setting can be set per reader. When set to N , then one in every N*termIndexInterval terms in the index is loaded into memory. By setting this to a value > 1 you can reduce memory usage, at the expense of higher latency when loading a TermInfo. The default value is 1. Set this to -1 to skip loading the terms index entirely. Returns Type Description DirectoryReader | Improve this Doc View Source RegisterParentReader(IndexReader) Expert: this method is called by IndexReader s which wrap other readers (e.g. CompositeReader or FilterAtomicReader ) to register the parent at the child (this reader) on construction of the parent. When this reader is disposed, it will mark all registered parents as disposed, too. The references to parent readers are weak only, so they can be GCed once they are no longer in use. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void RegisterParentReader(IndexReader reader) Parameters Type Name Description IndexReader reader | Improve this Doc View Source RemoveReaderClosedListener(IndexReader.IReaderClosedListener) Expert: remove a previously added IndexReader.IReaderClosedListener . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void RemoveReaderClosedListener(IndexReader.IReaderClosedListener listener) Parameters Type Name Description IndexReader.IReaderClosedListener listener | Improve this Doc View Source TotalTermFreq(Term) Returns the total number of occurrences of term across all documents (the sum of the Freq for each doc that has this term). This will be -1 if the codec doesn't support this measure. Note that, like other term measures, this measure does not take deleted documents into account. Declaration public abstract long TotalTermFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int64 | Improve this Doc View Source TryIncRef() Expert: increments the RefCount of this IndexReader instance only if the IndexReader has not been disposed yet and returns true iff the RefCount was successfully incremented, otherwise false . If this method returns false the reader is either already disposed or is currently being disposed. Either way this reader instance shouldn't be used by an application unless true is returned. RefCount s are used to determine when a reader can be disposed safely, i.e. as soon as there are no more references. Be sure to always call a corresponding DecRef() , in a finally clause; otherwise the reader may never be disposed. Note that Dispose(Boolean) simply calls DecRef() , which means that the IndexReader will not really be disposed until DecRef() has been called for all outstanding references. Declaration public bool TryIncRef() Returns Type Description System.Boolean See Also DecRef() IncRef()"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexReader.IReaderClosedListener.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexReader.IReaderClosedListener.html",
    "title": "Interface IndexReader.IReaderClosedListener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IndexReader.IReaderClosedListener A custom listener that's invoked when the IndexReader is closed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IReaderClosedListener Methods | Improve this Doc View Source OnClose(IndexReader) Invoked when the IndexReader is closed. Declaration void OnClose(IndexReader reader) Parameters Type Name Description IndexReader reader"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexReaderContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexReaderContext.html",
    "title": "Class IndexReaderContext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexReaderContext A struct like class that represents a hierarchical relationship between IndexReader instances. Inheritance System.Object IndexReaderContext AtomicReaderContext CompositeReaderContext Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexReaderContext : object Properties | Improve this Doc View Source Children Returns the context's children iff this context is a composite context otherwise null . Declaration public abstract IList<IndexReaderContext> Children { get; } Property Value Type Description IList < IndexReaderContext > | Improve this Doc View Source DocBaseInParent the doc base for this reader in the parent, 0 if parent is null Declaration public int DocBaseInParent { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsTopLevel true if this context struct represents the top level reader within the hierarchical context Declaration public bool IsTopLevel { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Leaves Returns the context's leaves if this context is a top-level context. For convenience, if this is an AtomicReaderContext this returns itself as the only leaf. Note: this is convenience method since leaves can always be obtained by walking the context tree using Children . Declaration public abstract IList<AtomicReaderContext> Leaves { get; } Property Value Type Description IList < AtomicReaderContext > See Also Children | Improve this Doc View Source OrdInParent the ord for this reader in the parent, 0 if parent is null Declaration public int OrdInParent { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Parent The reader context for this reader's immediate parent, or null if none Declaration public CompositeReaderContext Parent { get; } Property Value Type Description CompositeReaderContext | Improve this Doc View Source Reader Returns the IndexReader , this context represents. Declaration public abstract IndexReader Reader { get; } Property Value Type Description IndexReader"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexUpgrader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexUpgrader.html",
    "title": "Class IndexUpgrader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexUpgrader This is an easy-to-use tool that upgrades all segments of an index from previous Lucene versions to the current segment file format. It can be used from command line: java -cp lucene-core.jar Lucene.Net.Index.IndexUpgrader [-delete-prior-commits] [-verbose] indexDir Alternatively this class can be instantiated and Upgrade() invoked. It uses UpgradeIndexMergePolicy and triggers the upgrade via an ForceMerge(Int32) request to IndexWriter . This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify -delete-prior-commits to override this, allowing the tool to delete all but the last commit. From .NET code this can be enabled by passing true to IndexUpgrader(Directory, LuceneVersion, TextWriter, Boolean) . Warning: this tool may reorder documents if the index was partially upgraded before execution (e.g., documents were added). If your application relies on \"monotonicity\" of doc IDs (which means that the order in which the documents were added to the index is preserved), do a full ForceMerge instead. The MergePolicy set by IndexWriterConfig may also reorder documents. Inheritance System.Object IndexUpgrader Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class IndexUpgrader : object Constructors | Improve this Doc View Source IndexUpgrader(Directory, IndexWriterConfig, Boolean) Creates index upgrader on the given directory, using an IndexWriter using the given config. You have the possibility to upgrade indexes with multiple commit points by removing all older ones. Declaration public IndexUpgrader(Directory dir, IndexWriterConfig iwc, bool deletePriorCommits) Parameters Type Name Description Directory dir IndexWriterConfig iwc System.Boolean deletePriorCommits | Improve this Doc View Source IndexUpgrader(Directory, LuceneVersion) Creates index upgrader on the given directory, using an IndexWriter using the given matchVersion . The tool refuses to upgrade indexes with multiple commit points. Declaration public IndexUpgrader(Directory dir, LuceneVersion matchVersion) Parameters Type Name Description Directory dir LuceneVersion matchVersion | Improve this Doc View Source IndexUpgrader(Directory, LuceneVersion, TextWriter, Boolean) Creates index upgrader on the given directory, using an IndexWriter using the given matchVersion . You have the possibility to upgrade indexes with multiple commit points by removing all older ones. If infoStream is not null , all logging output will be sent to this stream. Declaration public IndexUpgrader(Directory dir, LuceneVersion matchVersion, TextWriter infoStream, bool deletePriorCommits) Parameters Type Name Description Directory dir LuceneVersion matchVersion TextWriter infoStream System.Boolean deletePriorCommits Methods | Improve this Doc View Source Main(String[]) Main method to run IndexUpgrader from the command-line. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source ParseArgs(String[]) Declaration public static IndexUpgrader ParseArgs(string[] args) Parameters Type Name Description System.String [] args Returns Type Description IndexUpgrader | Improve this Doc View Source Upgrade() Perform the upgrade. Declaration public void Upgrade()"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexWriter.html",
    "title": "Class IndexWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexWriter An IndexWriter creates and maintains an index. Inheritance System.Object IndexWriter Implements ITwoPhaseCommit Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class IndexWriter : IDisposable, ITwoPhaseCommit Remarks The OpenMode option on OpenMode determines whether a new index is created, or whether an existing index is opened. Note that you can open an index with CREATE even while readers are using the index. The old readers will continue to search the \"point in time\" snapshot they had opened, and won't see the newly created index until they re-open. If CREATE_OR_APPEND is used IndexWriter will create a new index if there is not already an index at the provided path and otherwise open the existing index. In either case, documents are added with AddDocument(IEnumerable<IIndexableField>) and removed with DeleteDocuments(Term) or DeleteDocuments(Query) . A document can be updated with UpdateDocument(Term, IEnumerable<IIndexableField>) (which just deletes and then adds the entire document). When finished adding, deleting and updating documents, Dispose() should be called. These changes are buffered in memory and periodically flushed to the Directory (during the above method calls). A flush is triggered when there are enough added documents since the last flush. Flushing is triggered either by RAM usage of the documents (see RAMBufferSizeMB ) or the number of added documents (see MaxBufferedDocs ). The default is to flush when RAM usage hits DEFAULT_RAM_BUFFER_SIZE_MB MB. For best indexing speed you should flush by RAM usage with a large RAM buffer. Additionally, if IndexWriter reaches the configured number of buffered deletes (see MaxBufferedDeleteTerms ) the deleted terms and queries are flushed and applied to existing segments. In contrast to the other flush options RAMBufferSizeMB and MaxBufferedDocs , deleted terms won't trigger a segment flush. Note that flushing just moves the internal buffered state in IndexWriter into the index, but these changes are not visible to IndexReader until either Commit() or Dispose() is called. A flush may also trigger one or more segment merges which by default run with a background thread so as not to block the addDocument calls (see below for changing the Lucene.Net.Index.IndexWriter.mergeScheduler ). Opening an IndexWriter creates a lock file for the directory in use. Trying to open another IndexWriter on the same directory will lead to a LockObtainFailedException . The LockObtainFailedException is also thrown if an IndexReader on the same directory is used to delete documents from the index. Expert: IndexWriter allows an optional IndexDeletionPolicy implementation to be specified. You can use this to control when prior commits are deleted from the index. The default policy is KeepOnlyLastCommitDeletionPolicy which removes all prior commits as soon as a new commit is done (this matches behavior before 2.2). Creating your own policy can allow you to explicitly keep previous \"point in time\" commits alive in the index for some time, to allow readers to refresh to the new commit without having the old commit deleted out from under them. This is necessary on filesystems like NFS that do not support \"delete on last close\" semantics, which Lucene's \"point in time\" search normally relies on. Expert: IndexWriter allows you to separately change the Lucene.Net.Index.IndexWriter.mergePolicy and the Lucene.Net.Index.IndexWriter.mergeScheduler . The Lucene.Net.Index.IndexWriter.mergePolicy is invoked whenever there are changes to the segments in the index. Its role is to select which merges to do, if any, and return a MergePolicy.MergeSpecification describing the merges. The default is LogByteSizeMergePolicy . Then, the MergeScheduler is invoked with the requested merges and it decides when and how to run the merges. The default is ConcurrentMergeScheduler . NOTE : if you hit an then IndexWriter will quietly record this fact and block all future segment commits. This is a defensive measure in case any internal state (buffered documents and deletions) were corrupted. Any subsequent calls to Commit() will throw an . The only course of action is to call Dispose() , which internally will call Rollback() , to undo any changes to the index since the last commit. You can also just call Rollback() directly. NOTE : IndexWriter instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexWriter instance as this may cause deadlock; use your own (non-Lucene) objects instead. NOTE : If you call on a thread that's within IndexWriter , IndexWriter will try to catch this (eg, if it's in a Wait() or ), and will then throw the unchecked exception and clear the interrupt status on the thread. Constructors | Improve this Doc View Source IndexWriter(Directory, IndexWriterConfig) Constructs a new IndexWriter per the settings given in conf . If you want to make \"live\" changes to this writer instance, use Config . NOTE: after ths writer is created, the given configuration instance cannot be passed to another writer. If you intend to do so, you should Clone() it beforehand. Declaration public IndexWriter(Directory d, IndexWriterConfig conf) Parameters Type Name Description Directory d the index directory. The index is either created or appended according OpenMode . IndexWriterConfig conf the configuration settings according to which IndexWriter should be initialized. Fields | Improve this Doc View Source MAX_TERM_LENGTH Absolute hard maximum length for a term, in bytes once encoded as UTF8. If a term arrives from the analyzer longer than this length, an is thrown and a message is printed to Lucene.Net.Index.IndexWriter.infoStream , if set (see SetInfoStream(InfoStream) ). Declaration public static readonly int MAX_TERM_LENGTH Field Value Type Description System.Int32 | Improve this Doc View Source SOURCE Key for the source of a segment in the Diagnostics . Declaration public static readonly string SOURCE Field Value Type Description System.String | Improve this Doc View Source SOURCE_ADDINDEXES_READERS Source of a segment which results from a call to AddIndexes(IndexReader[]) . Declaration public static readonly string SOURCE_ADDINDEXES_READERS Field Value Type Description System.String | Improve this Doc View Source SOURCE_FLUSH Source of a segment which results from a flush. Declaration public static readonly string SOURCE_FLUSH Field Value Type Description System.String | Improve this Doc View Source SOURCE_MERGE Source of a segment which results from a merge of other segments. Declaration public static readonly string SOURCE_MERGE Field Value Type Description System.String | Improve this Doc View Source WRITE_LOCK_NAME Name of the write lock in the index. Declaration public static readonly string WRITE_LOCK_NAME Field Value Type Description System.String Properties | Improve this Doc View Source Analyzer Gets the analyzer used by this index. Declaration public virtual Analyzer Analyzer { get; } Property Value Type Description Analyzer | Improve this Doc View Source CommitData Returns the commit user data map that was last committed, or the one that was set on SetCommitData(IDictionary<String, String>) . Declaration public IDictionary<string, string> CommitData { get; } Property Value Type Description IDictionary < System.String , System.String > | Improve this Doc View Source Config Returns a LiveIndexWriterConfig , which can be used to query the IndexWriter current settings, as well as modify \"live\" ones. Declaration public virtual LiveIndexWriterConfig Config { get; } Property Value Type Description LiveIndexWriterConfig | Improve this Doc View Source Directory Gets the Directory used by this index. Declaration public virtual Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source IsClosed Declaration public virtual bool IsClosed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source KeepFullyDeletedSegments Only for testing. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual bool KeepFullyDeletedSegments { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxDoc Gets total number of docs in this index, including docs not yet flushed (still in the RAM buffer), not counting deletions. Declaration public virtual int MaxDoc { get; } Property Value Type Description System.Int32 See Also NumDocs | Improve this Doc View Source MergingSegments Expert: to be used by a MergePolicy to avoid selecting merges for segments already being merged. The returned collection is not cloned, and thus is only safe to access if you hold IndexWriter 's lock (which you do when IndexWriter invokes the MergePolicy ). Do not alter the returned collection! Declaration public virtual ICollection<SegmentCommitInfo> MergingSegments { get; } Property Value Type Description ICollection < SegmentCommitInfo > | Improve this Doc View Source NumDocs Gets total number of docs in this index, including docs not yet flushed (still in the RAM buffer), and including deletions. NOTE: buffered deletions are not counted. If you really need these to be counted you should call Commit() first. Declaration public virtual int NumDocs { get; } Property Value Type Description System.Int32 See Also MaxDoc Methods | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>) Adds a document to this index. Note that if an is hit (for example disk full) then the index will be consistent, but this document may not have been added. Furthermore, it's possible the index will have one segment in non-compound format even when using compound files (when a merge has partially succeeded). This method periodically flushes pending documents to the Directory (see IndexWriter ), and also periodically triggers segment merges in the index according to the MergePolicy in use. Merges temporarily consume space in the directory. The amount of space required is up to 1X the size of all segments being merged, when no readers/searchers are open against the index, and up to 2X the size of all segments being merged when readers/searchers are open against the index (see ForceMerge(Int32) for details). The sequence of primitive merge operations performed is governed by the merge policy. Note that each term in the document can be no longer than MAX_TERM_LENGTH in bytes, otherwise an will be thrown. Note that it's possible to create an invalid Unicode string in java if a UTF16 surrogate pair is malformed. In this case, the invalid characters are silently replaced with the Unicode replacement character U+FFFD. NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void AddDocument(IEnumerable<IIndexableField> doc) Parameters Type Name Description IEnumerable < IIndexableField > doc Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>, Analyzer) Adds a document to this index, using the provided analyzer instead of the value of Analyzer . See AddDocument(IEnumerable<IIndexableField>) for details on index and IndexWriter state after an , and flushing/merging temporary free space requirements. NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void AddDocument(IEnumerable<IIndexableField> doc, Analyzer analyzer) Parameters Type Name Description IEnumerable < IIndexableField > doc Analyzer analyzer Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) Atomically adds a block of documents with sequentially assigned document IDs, such that an external reader will see all or none of the documents. WARNING : the index does not currently record which documents were added as a block. Today this is fine, because merging will preserve a block. The order of documents within a segment will be preserved, even when child documents within a block are deleted. Most search features (like result grouping and block joining) require you to mark documents; when these documents are deleted these search features will not work as expected. Obviously adding documents to an existing block will require you the reindex the entire block. However it's possible that in the future Lucene may merge more aggressively re-order documents (for example, perhaps to obtain better index compression), in which case you may need to fully re-index your documents at that time. See AddDocument(IEnumerable<IIndexableField>) for details on index and IndexWriter state after an , and flushing/merging temporary free space requirements. NOTE : tools that do offline splitting of an index (for example, IndexSplitter in Lucene.Net.Misc) or re-sorting of documents (for example, IndexSorter in contrib) are not aware of these atomically added documents and will likely break them up. Use such tools at your own risk! NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. @lucene.experimental Declaration public virtual void AddDocuments(IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description IEnumerable < IEnumerable < IIndexableField >> docs Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) Atomically adds a block of documents, analyzed using the provided analyzer , with sequentially assigned document IDs, such that an external reader will see all or none of the documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual void AddDocuments(IEnumerable<IEnumerable<IIndexableField>> docs, Analyzer analyzer) Parameters Type Name Description IEnumerable < IEnumerable < IIndexableField >> docs Analyzer analyzer Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source AddIndexes(IndexReader[]) Merges the provided indexes into this index. The provided IndexReader s are not closed. See AddIndexes(IndexReader[]) for details on transactional semantics, temporary free space required in the Directory , and non-CFS segments on an . NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. NOTE: empty segments are dropped by this method and not added to this index. NOTE: this method merges all given IndexReader s in one merge. If you intend to merge a large number of readers, it may be better to call this method multiple times, each time with a small set of readers. In principle, if you use a merge policy with a mergeFactor or maxMergeAtOnce parameter, you should pass that many readers in one call. Also, if the given readers are DirectoryReader s, they can be opened with termIndexInterval=-1 to save RAM, since during merge the in-memory structure is not used. See Open(Directory, Int32) . NOTE : if you call Dispose(Boolean) with false , which aborts all running merges, then any thread still running this method might hit a MergePolicy.MergeAbortedException . Declaration public virtual void AddIndexes(params IndexReader[] readers) Parameters Type Name Description IndexReader [] readers Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source AddIndexes(Directory[]) Adds all segments from an array of indexes into this index. This may be used to parallelize batch indexing. A large document collection can be broken into sub-collections. Each sub-collection can be indexed in parallel, on a different thread, process or machine. The complete index can then be created by merging sub-collection indexes with this method. NOTE: this method acquires the write lock in each directory, to ensure that no IndexWriter is currently open or tries to open while this is running. This method is transactional in how s are handled: it does not commit a new segments_N file until all indexes are added. this means if an occurs (for example disk full), then either no indexes will have been added or they all will have been. Note that this requires temporary free space in the Directory up to 2X the sum of all input indexes (including the starting index). If readers/searchers are open against the starting index, then temporary free space required will be higher by the size of the starting index (see ForceMerge(Int32) for details). NOTE: this method only copies the segments of the incoming indexes and does not merge them. Therefore deleted documents are not removed and the new segments are not merged with the existing ones. This requires this index not be among those to be added. NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void AddIndexes(params Directory[] dirs) Parameters Type Name Description Directory [] dirs Exceptions Type Condition CorruptIndexException if the index is corrupt LockObtainFailedException if we were unable to acquire the write lock in at least one directory | Improve this Doc View Source Commit() Commits all pending changes (added & deleted documents, segment merges, added indexes, etc.) to the index, and syncs all referenced index files, such that a reader will see the changes and the index updates will survive an OS or machine crash or power loss. Note that this does not wait for any running background merges to finish. This may be a costly operation, so you should test the cost in your application and do it only when really necessary. Note that this operation calls Sync(ICollection<String>) on the index files. That call should not return until the file contents & metadata are on stable storage. For FSDirectory , this calls the OS's fsync. But, beware: some hardware devices may in fact cache writes even during fsync, and return before the bits are actually on stable storage, to give the appearance of faster performance. If you have such a device, and it does not have a battery backup (for example) then on power loss it may still lose data. Lucene cannot guarantee consistency on such devices. NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public void Commit() | Improve this Doc View Source DeleteAll() Delete all documents in the index. This method will drop all buffered documents and will remove all segments from the index. This change will not be visible until a Commit() has been called. This method can be rolled back using Rollback() . NOTE: this method is much faster than using DeleteDocuments(new MatchAllDocsQuery()) . Yet, this method also has different semantics compared to DeleteDocuments(Query) / DeleteDocuments(Query[]) since internal data-structures are cleared as well as all segment information is forcefully dropped anti-viral semantics like omitting norms are reset or doc value types are cleared. Essentially a call to DeleteAll() is equivalent to creating a new IndexWriter with CREATE which a delete query only marks documents as deleted. NOTE: this method will forcefully abort all merges in progress. If other threads are running ForceMerge(Int32) , AddIndexes(IndexReader[]) or ForceMergeDeletes() methods, they may receive MergePolicy.MergeAbortedException s. Declaration public virtual void DeleteAll() | Improve this Doc View Source DeleteDocuments(Term) Deletes the document(s) containing term . NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void DeleteDocuments(Term term) Parameters Type Name Description Term term the term to identify the documents to be deleted Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source DeleteDocuments(Term[]) Deletes the document(s) containing any of the terms. All given deletes are applied and flushed atomically at the same time. NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void DeleteDocuments(params Term[] terms) Parameters Type Name Description Term [] terms array of terms to identify the documents to be deleted Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source DeleteDocuments(Query) Deletes the document(s) matching the provided query. NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void DeleteDocuments(Query query) Parameters Type Name Description Query query the query to identify the documents to be deleted Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source DeleteDocuments(Query[]) Deletes the document(s) matching any of the provided queries. All given deletes are applied and flushed atomically at the same time. NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void DeleteDocuments(params Query[] queries) Parameters Type Name Description Query [] queries array of queries to identify the documents to be deleted Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source DeleteUnusedFiles() Expert: remove any index files that are no longer used. IndexWriter normally deletes unused files itself, during indexing. However, on Windows, which disallows deletion of open files, if there is a reader open on the index then those files cannot be deleted. This is fine, because IndexWriter will periodically retry the deletion. However, IndexWriter doesn't try that often: only on open, close, flushing a new segment, and finishing a merge. If you don't do any of these actions with your IndexWriter , you'll see the unused files linger. If that's a problem, call this method to delete them (once you've closed the open readers that were preventing their deletion). In addition, you can call this method to delete unreferenced index commits. this might be useful if you are using an IndexDeletionPolicy which holds onto index commits until some criteria are met, but those commits are no longer needed. Otherwise, those commits will be deleted the next time Commit() is called. Declaration public virtual void DeleteUnusedFiles() | Improve this Doc View Source Dispose() Commits all changes to an index, waits for pending merges to complete, and closes all associated files. This is a \"slow graceful shutdown\" which may take a long time especially if a big merge is pending: If you only want to close resources use Rollback() . If you only want to commit pending changes and close resources see Dispose(Boolean) . Note that this may be a costly operation, so, try to re-use a single writer instead of closing and opening a new one. See Commit() for caveats about write caching done by some IO devices. If an is hit during close, eg due to disk full or some other reason, then both the on-disk index and the internal state of the IndexWriter instance will be consistent. However, the close will not be complete even though part of it (flushing buffered documents) may have succeeded, so the write lock will still be held. If you can correct the underlying cause (eg free up some disk space) then you can call Dispose() again. Failing that, if you want to force the write lock to be released (dangerous, because you may then lose buffered docs in the IndexWriter instance) then you can do something like this: try { writer.Dispose(); } finally { if (IndexWriter.IsLocked(directory)) { IndexWriter.Unlock(directory); } } after which, you must be certain not to use the writer instance anymore. NOTE : if this method hits an you should immediately dispose the writer, again. See IndexWriter for details. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Closes the index with or without waiting for currently running merges to finish. This is only meaningful when using a MergeScheduler that runs merges in background threads. NOTE : if this method hits an you should immediately dispose the writer, again. See IndexWriter for details. NOTE : it is dangerous to always call Dispose(false) , especially when IndexWriter is not open for very long, because this can result in \"merge starvation\" whereby long merges will never have a chance to finish. This will cause too many segments in your index over time. Declaration public virtual void Dispose(bool waitForMerges) Parameters Type Name Description System.Boolean waitForMerges if true , this call will block until all merges complete; else, it will ask all running merges to abort, wait until those merges have finished (which should be at most a few seconds), and then return. | Improve this Doc View Source DoAfterFlush() A hook for extending classes to execute operations after pending added and deleted documents have been flushed to the Directory but before the change is committed (new segments_N file written). Declaration protected virtual void DoAfterFlush() | Improve this Doc View Source DoBeforeFlush() A hook for extending classes to execute operations before pending added and deleted documents are flushed to the Directory . Declaration protected virtual void DoBeforeFlush() | Improve this Doc View Source EnsureOpen() Used internally to throw an if this IndexWriter has been disposed ( closed=true ) or is in the process of disposing ( closing=true ). Calls EnsureOpen(Boolean) . Declaration protected void EnsureOpen() | Improve this Doc View Source EnsureOpen(Boolean) Used internally to throw an if this IndexWriter has been disposed or is in the process of diposing. Declaration protected void EnsureOpen(bool failIfDisposing) Parameters Type Name Description System.Boolean failIfDisposing if true , also fail when IndexWriter is in the process of disposing ( closing=true ) but not yet done disposing ( closed=false ) | Improve this Doc View Source Flush(Boolean, Boolean) Flush all in-memory buffered updates (adds and deletes) to the Directory . Declaration public void Flush(bool triggerMerge, bool applyAllDeletes) Parameters Type Name Description System.Boolean triggerMerge if true , we may merge segments (if deletes or docs were flushed) if necessary System.Boolean applyAllDeletes whether pending deletes should also | Improve this Doc View Source ForceMerge(Int32) Forces merge policy to merge segments until there are <= maxNumSegments . The actual merges to be executed are determined by the MergePolicy . This is a horribly costly operation, especially when you pass a small maxNumSegments ; usually you should only call this if the index is static (will no longer be changed). Note that this requires up to 2X the index size free space in your Directory (3X if you're using compound file format). For example, if your index size is 10 MB then you need up to 20 MB free for this to complete (30 MB if you're using compound file format). Also, it's best to call Commit() afterwards, to allow IndexWriter to free up disk space. If some but not all readers re-open while merging is underway, this will cause > 2X temporary space to be consumed as those new readers will then hold open the temporary segments at that time. It is best not to re-open readers while merging is running. The actual temporary usage could be much less than these figures (it depends on many factors). In general, once this completes, the total size of the index will be less than the size of the starting index. It could be quite a bit smaller (if there were many pending deletes) or just slightly smaller. If an is hit, for example due to disk full, the index will not be corrupted and no documents will be lost. However, it may have been partially merged (some segments were merged but not all), and it's possible that one of the segments in the index will be in non-compound format even when using compound file format. This will occur when the is hit during conversion of the segment into compound format. This call will merge those segments present in the index when the call started. If other threads are still adding documents and flushing segments, those newly created segments will not be merged unless you call ForceMerge(Int32) again. NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. NOTE : if you call Dispose(Boolean) with false , which aborts all running merges, then any thread still running this method might hit a MergePolicy.MergeAbortedException . Declaration public virtual void ForceMerge(int maxNumSegments) Parameters Type Name Description System.Int32 maxNumSegments maximum number of segments left in the index after merging finishes Exceptions Type Condition CorruptIndexException if the index is corrupt See Also FindMerges ( MergeTrigger , SegmentInfos ) | Improve this Doc View Source ForceMerge(Int32, Boolean) Just like ForceMerge(Int32) , except you can specify whether the call should block until all merging completes. This is only meaningful with a Lucene.Net.Index.IndexWriter.mergeScheduler that is able to run merges in background threads. NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void ForceMerge(int maxNumSegments, bool doWait) Parameters Type Name Description System.Int32 maxNumSegments System.Boolean doWait | Improve this Doc View Source ForceMergeDeletes() Forces merging of all segments that have deleted documents. The actual merges to be executed are determined by the MergePolicy . For example, the default TieredMergePolicy will only pick a segment if the percentage of deleted docs is over 10%. This is often a horribly costly operation; rarely is it warranted. To see how many deletions you have pending in your index, call NumDeletedDocs . NOTE : this method first flushes a new segment (if there are indexed documents), and applies all buffered deletes. NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void ForceMergeDeletes() | Improve this Doc View Source ForceMergeDeletes(Boolean) Just like ForceMergeDeletes() , except you can specify whether the call should block until the operation completes. This is only meaningful with a MergeScheduler that is able to run merges in background threads. NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. NOTE : if you call Dispose(Boolean) with false , which aborts all running merges, then any thread still running this method might hit a MergePolicy.MergeAbortedException . Declaration public virtual void ForceMergeDeletes(bool doWait) Parameters Type Name Description System.Boolean doWait | Improve this Doc View Source GetReader(Boolean) Expert: returns a readonly reader, covering all committed as well as un-committed changes to the index. this provides \"near real-time\" searching, in that changes made during an IndexWriter session can be quickly made available for searching without closing the writer nor calling Commit() . Note that this is functionally equivalent to calling Flush() and then opening a new reader. But the turnaround time of this method should be faster since it avoids the potentially costly Commit() . You must close the IndexReader returned by this method once you are done using it. It's near real-time because there is no hard guarantee on how quickly you can get a new reader after making changes with IndexWriter . You'll have to experiment in your situation to determine if it's fast enough. As this is a new and experimental feature, please report back on your findings so we can learn, improve and iterate. The resulting reader supports DoOpenIfChanged() , but that call will simply forward back to this method (though this may change in the future). The very first time this method is called, this writer instance will make every effort to pool the readers that it opens for doing merges, applying deletes, etc. This means additional resources (RAM, file descriptors, CPU time) will be consumed. For lower latency on reopening a reader, you should set MergedSegmentWarmer to pre-warm a newly merged segment before it's committed to the index. This is important for minimizing index-to-search delay after a large merge. If an AddIndexes* call is running in another thread, then this reader will only search those segments from the foreign index that have been successfully copied over, so far. NOTE : Once the writer is disposed, any outstanding readers may continue to be used. However, if you attempt to reopen any of those readers, you'll hit an . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual DirectoryReader GetReader(bool applyAllDeletes) Parameters Type Name Description System.Boolean applyAllDeletes Returns Type Description DirectoryReader IndexReader that covers entire index plus all changes made so far by this IndexWriter instance | Improve this Doc View Source HasDeletions() Returns true if this index has deletions (including buffered deletions). Note that this will return true if there are buffered Term/Query deletions, even if it turns out those buffered deletions don't match any documents. Also, if a merge kicked off as a result of flushing a Declaration public virtual bool HasDeletions() Returns Type Description System.Boolean | Improve this Doc View Source HasPendingMerges() Expert: returns true if there are merges waiting to be scheduled. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual bool HasPendingMerges() Returns Type Description System.Boolean | Improve this Doc View Source HasUncommittedChanges() Returns true if there may be changes that have not been committed. There are cases where this may return true when there are no actual \"real\" changes to the index, for example if you've deleted by Term or Query but that Term or Query does not match any documents. Also, if a merge kicked off as a result of flushing a new segment during Commit() , or a concurrent merged finished, this method may return true right after you had just called Commit() . Declaration public bool HasUncommittedChanges() Returns Type Description System.Boolean | Improve this Doc View Source IsLocked(Directory) Returns true iff the index in the named directory is currently locked. Declaration public static bool IsLocked(Directory directory) Parameters Type Name Description Directory directory the directory to check for a lock Returns Type Description System.Boolean | Improve this Doc View Source MaybeMerge() Expert: asks the Lucene.Net.Index.IndexWriter.mergePolicy whether any merges are necessary now and if so, runs the requested merges and then iterate (test again if merges are needed) until no more merges are returned by the Lucene.Net.Index.IndexWriter.mergePolicy . Explicit calls to MaybeMerge() are usually not necessary. The most common case is when merge policy parameters have changed. this method will call the Lucene.Net.Index.IndexWriter.mergePolicy with EXPLICIT . NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public void MaybeMerge() | Improve this Doc View Source Merge(MergePolicy.OneMerge) Merges the indicated segments, replacing them in the stack with a single segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual void Merge(MergePolicy.OneMerge merge) Parameters Type Name Description MergePolicy.OneMerge merge | Improve this Doc View Source MergeFinish(MergePolicy.OneMerge) Does fininishing for a merge, which is fast but holds the synchronized lock on IndexWriter instance. Declaration public void MergeFinish(MergePolicy.OneMerge merge) Parameters Type Name Description MergePolicy.OneMerge merge | Improve this Doc View Source NextMerge() Expert: the Lucene.Net.Index.IndexWriter.mergeScheduler calls this method to retrieve the next merge requested by the MergePolicy This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual MergePolicy.OneMerge NextMerge() Returns Type Description MergePolicy.OneMerge | Improve this Doc View Source NumDeletedDocs(SegmentCommitInfo) Obtain the number of deleted docs for a pooled reader. If the reader isn't being pooled, the segmentInfo's delCount is returned. Declaration public virtual int NumDeletedDocs(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int32 | Improve this Doc View Source NumRamDocs() Expert: Return the number of documents currently buffered in RAM. Declaration public int NumRamDocs() Returns Type Description System.Int32 | Improve this Doc View Source PrepareCommit() Expert: prepare for commit. This does the first phase of 2-phase commit. this method does all steps necessary to commit changes since this writer was opened: flushes pending added and deleted docs, syncs the index files, writes most of next segments_N file. After calling this you must call either Commit() to finish the commit, or Rollback() to revert the commit and undo all changes done since the writer was opened. You can also just call Commit() directly without PrepareCommit() first in which case that method will internally call PrepareCommit() . NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public void PrepareCommit() | Improve this Doc View Source RamSizeInBytes() Expert: Return the total size of all index files currently cached in memory. Useful for size management with flushRamDocs() Declaration public long RamSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source Rollback() Close the IndexWriter without committing any changes that have occurred since the last commit (or since it was opened, if commit hasn't been called). this removes any temporary files that had been created, after which the state of the index will be the same as it was when Commit() was last called or when this writer was first opened. This also clears a previous call to PrepareCommit() . Declaration public virtual void Rollback() | Improve this Doc View Source SegString() Returns a string description of all segments, for debugging. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual string SegString() Returns Type Description System.String | Improve this Doc View Source SegString(IEnumerable<SegmentCommitInfo>) Returns a string description of the specified segments, for debugging. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual string SegString(IEnumerable<SegmentCommitInfo> infos) Parameters Type Name Description IEnumerable < SegmentCommitInfo > infos Returns Type Description System.String | Improve this Doc View Source SegString(SegmentCommitInfo) Returns a string description of the specified segment, for debugging. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual string SegString(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.String | Improve this Doc View Source SetCommitData(IDictionary<String, String>) Sets the commit user data map. That method is considered a transaction by IndexWriter and will be committed ( Commit() even if no other changes were made to the writer instance. Note that you must call this method before PrepareCommit() , or otherwise it won't be included in the follow-on Commit() . NOTE: the dictionary is cloned internally, therefore altering the dictionary's contents after calling this method has no effect. Declaration public void SetCommitData(IDictionary<string, string> commitUserData) Parameters Type Name Description IDictionary < System.String , System.String > commitUserData | Improve this Doc View Source TryDeleteDocument(IndexReader, Int32) Expert: attempts to delete by document ID, as long as the provided readerIn is a near-real-time reader (from Open(IndexWriter, Boolean) . If the provided readerIn is an NRT reader obtained from this writer, and its segment has not been merged away, then the delete succeeds and this method returns true ; else, it returns false the caller must then separately delete by Term or Query. NOTE : this method can only delete documents visible to the currently open NRT reader. If you need to delete documents indexed after opening the NRT reader you must use the other DeleteDocument() methods (e.g., DeleteDocuments(Term) ). Declaration public virtual bool TryDeleteDocument(IndexReader readerIn, int docID) Parameters Type Name Description IndexReader readerIn System.Int32 docID Returns Type Description System.Boolean | Improve this Doc View Source Unlock(Directory) Forcibly unlocks the index in the named directory. Caution: this should only be used by failure recovery code, when it is known that no other process nor thread is in fact currently accessing this index. Declaration public static void Unlock(Directory directory) Parameters Type Name Description Directory directory | Improve this Doc View Source UpdateBinaryDocValue(Term, String, BytesRef) Updates a document's BinaryDocValues for field to the given value . this method can be used to 'unset' a document's value by passing null as the new value . Also, you can only update fields that already exist in the index, not add new fields through this method. NOTE: this method currently replaces the existing value of all affected documents with the new value. NOTE: if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void UpdateBinaryDocValue(Term term, string field, BytesRef value) Parameters Type Name Description Term term the term to identify the document(s) to be updated System.String field field name of the BinaryDocValues field BytesRef value new value for the field Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>) Updates a document by first deleting the document(s) containing term and then adding the new document. The delete and then add are atomic as seen by a reader on the same index (flush may happen only after the add). NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void UpdateDocument(Term term, IEnumerable<IIndexableField> doc) Parameters Type Name Description Term term the term to identify the document(s) to be deleted IEnumerable < IIndexableField > doc the document to be added Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>, Analyzer) Updates a document by first deleting the document(s) containing term and then adding the new document. The delete and then add are atomic as seen by a reader on the same index (flush may happen only after the add). NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void UpdateDocument(Term term, IEnumerable<IIndexableField> doc, Analyzer analyzer) Parameters Type Name Description Term term the term to identify the document(s) to be deleted IEnumerable < IIndexableField > doc the document to be added Analyzer analyzer the analyzer to use when analyzing the document Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) Atomically deletes documents matching the provided delTerm and adds a block of documents with sequentially assigned document IDs, such that an external reader will see all or none of the documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual void UpdateDocuments(Term delTerm, IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description Term delTerm IEnumerable < IEnumerable < IIndexableField >> docs Exceptions Type Condition CorruptIndexException if the index is corrupt See Also AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) Atomically deletes documents matching the provided delTerm and adds a block of documents, analyzed using the provided analyzer , with sequentially assigned document IDs, such that an external reader will see all or none of the documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual void UpdateDocuments(Term delTerm, IEnumerable<IEnumerable<IIndexableField>> docs, Analyzer analyzer) Parameters Type Name Description Term delTerm IEnumerable < IEnumerable < IIndexableField >> docs Analyzer analyzer Exceptions Type Condition CorruptIndexException if the index is corrupt See Also AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) | Improve this Doc View Source UpdateNumericDocValue(Term, String, Nullable<Int64>) Updates a document's NumericDocValues for field to the given value . This method can be used to 'unset' a document's value by passing null as the new value . Also, you can only update fields that already exist in the index, not add new fields through this method. NOTE : if this method hits an you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void UpdateNumericDocValue(Term term, string field, long? value) Parameters Type Name Description Term term the term to identify the document(s) to be updated System.String field field name of the NumericDocValues field System.Nullable < System.Int64 > value new value for the field Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source WaitForMerges() Wait for any currently outstanding merges to finish. It is guaranteed that any merges started prior to calling this method will have completed once this method completes. Declaration public virtual void WaitForMerges() Implements ITwoPhaseCommit"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexWriter.IEvent.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexWriter.IEvent.html",
    "title": "Interface IndexWriter.IEvent | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IndexWriter.IEvent Interface for internal atomic events. See Lucene.Net.Index.DocumentsWriter for details. Events are executed concurrently and no order is guaranteed. Each event should only rely on the serializeability within it's process method. All actions that must happen before or after a certain action must be encoded inside the Process(IndexWriter, Boolean, Boolean) method. Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IEvent Methods | Improve this Doc View Source Process(IndexWriter, Boolean, Boolean) Processes the event. this method is called by the IndexWriter passed as the first argument. Declaration void Process(IndexWriter writer, bool triggerMerge, bool clearBuffers) Parameters Type Name Description IndexWriter writer the IndexWriter that executes the event. System.Boolean triggerMerge false iff this event should not trigger any segment merges System.Boolean clearBuffers true iff this event should clear all buffers associated with the event."
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexWriter.IndexReaderWarmer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexWriter.IndexReaderWarmer.html",
    "title": "Class IndexWriter.IndexReaderWarmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexWriter.IndexReaderWarmer If Open(IndexWriter, Boolean) has been called (ie, this writer is in near real-time mode), then after a merge completes, this class can be invoked to warm the reader on the newly merged segment, before the merge commits. This is not required for near real-time search, but will reduce search latency on opening a new near real-time reader after a merge completes. @lucene.experimental NOTE : Warm(AtomicReader) is called before any deletes have been carried over to the merged segment. Inheritance System.Object IndexWriter.IndexReaderWarmer SimpleMergedSegmentWarmer Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexReaderWarmer : object Constructors | Improve this Doc View Source IndexReaderWarmer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected IndexReaderWarmer() Methods | Improve this Doc View Source Warm(AtomicReader) Invoked on the AtomicReader for the newly merged segment, before that segment is made visible to near-real-time readers. Declaration public abstract void Warm(AtomicReader reader) Parameters Type Name Description AtomicReader reader"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexWriterConfig.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexWriterConfig.html",
    "title": "Class IndexWriterConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexWriterConfig Holds all the configuration that is used to create an IndexWriter . Once IndexWriter has been created with this object, changes to this object will not affect the IndexWriter instance. For that, use LiveIndexWriterConfig that is returned from Config . LUCENENET NOTE: Unlike Lucene, we use property setters instead of setter methods. In C#, this allows you to initialize the IndexWriterConfig using the language features of C#, for example: IndexWriterConfig conf = new IndexWriterConfig(analyzer) { Codec = Lucene46Codec(), OpenMode = OpenMode.CREATE }; However, if you prefer to match the syntax of Lucene using chained setter methods, there are extension methods in the Lucene.Net.Support namespace. Example usage: using Lucene.Net.Support; .. IndexWriterConfig conf = new IndexWriterConfig(analyzer) .SetCodec(new Lucene46Codec()) .SetOpenMode(OpenMode.CREATE); @since 3.1 Inheritance System.Object LiveIndexWriterConfig IndexWriterConfig Inherited Members LiveIndexWriterConfig.Analyzer LiveIndexWriterConfig.TermIndexInterval LiveIndexWriterConfig.MaxBufferedDeleteTerms LiveIndexWriterConfig.RAMBufferSizeMB LiveIndexWriterConfig.MaxBufferedDocs LiveIndexWriterConfig.MergedSegmentWarmer LiveIndexWriterConfig.ReaderTermsIndexDivisor LiveIndexWriterConfig.InfoStream LiveIndexWriterConfig.UseCompoundFile LiveIndexWriterConfig.CheckIntegrityAtMerge Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class IndexWriterConfig : LiveIndexWriterConfig Constructors | Improve this Doc View Source IndexWriterConfig(LuceneVersion, Analyzer) Creates a new config that with defaults that match the specified LuceneVersion as well as the default Analyzer . If matchVersion is >= LUCENE_32 , TieredMergePolicy is used for merging; else LogByteSizeMergePolicy . Note that TieredMergePolicy is free to select non-contiguous merges, which means docIDs may not remain monotonic over time. If this is a problem you should switch to LogByteSizeMergePolicy or LogDocMergePolicy . Declaration public IndexWriterConfig(LuceneVersion matchVersion, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Analyzer analyzer Fields | Improve this Doc View Source DEFAULT_CHECK_INTEGRITY_AT_MERGE Default value for calling CheckIntegrity() before merging segments (set to false ). You can set this to true for additional safety. Declaration public static readonly bool DEFAULT_CHECK_INTEGRITY_AT_MERGE Field Value Type Description System.Boolean | Improve this Doc View Source DEFAULT_MAX_BUFFERED_DELETE_TERMS Disabled by default (because IndexWriter flushes by RAM usage by default). Declaration public static readonly int DEFAULT_MAX_BUFFERED_DELETE_TERMS Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MAX_BUFFERED_DOCS Disabled by default (because IndexWriter flushes by RAM usage by default). Declaration public static readonly int DEFAULT_MAX_BUFFERED_DOCS Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MAX_THREAD_STATES The maximum number of simultaneous threads that may be indexing documents at once in IndexWriter ; if more than this many threads arrive they will wait for others to finish. Default value is 8. Declaration public static readonly int DEFAULT_MAX_THREAD_STATES Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_RAM_BUFFER_SIZE_MB Default value is 16 MB (which means flush when buffered docs consume approximately 16 MB RAM). Declaration public static readonly double DEFAULT_RAM_BUFFER_SIZE_MB Field Value Type Description System.Double | Improve this Doc View Source DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB Default value is 1945. Change using RAMPerThreadHardLimitMB setter. Declaration public static readonly int DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_READER_POOLING Default setting for UseReaderPooling . Declaration public static readonly bool DEFAULT_READER_POOLING Field Value Type Description System.Boolean | Improve this Doc View Source DEFAULT_READER_TERMS_INDEX_DIVISOR Default value is 1. Change using ReaderTermsIndexDivisor setter. Declaration public static readonly int DEFAULT_READER_TERMS_INDEX_DIVISOR Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_TERM_INDEX_INTERVAL Default value is 32. Change using TermIndexInterval setter. Declaration public static readonly int DEFAULT_TERM_INDEX_INTERVAL Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_USE_COMPOUND_FILE_SYSTEM Default value for compound file system for newly written segments (set to true ). For batch indexing with very large ram buffers use false Declaration public static readonly bool DEFAULT_USE_COMPOUND_FILE_SYSTEM Field Value Type Description System.Boolean | Improve this Doc View Source DISABLE_AUTO_FLUSH Denotes a flush trigger is disabled. Declaration public static readonly int DISABLE_AUTO_FLUSH Field Value Type Description System.Int32 | Improve this Doc View Source WRITE_LOCK_TIMEOUT Default value for the write lock timeout (1,000 ms). Declaration public static long WRITE_LOCK_TIMEOUT Field Value Type Description System.Int64 Properties | Improve this Doc View Source Codec Gets or sets the Codec . Only takes effect when IndexWriter is first created. Declaration public Codec Codec { get; set; } Property Value Type Description Codec | Improve this Doc View Source DefaultWriteLockTimeout Gets or sets the default (for any instance) maximum time to wait for a write lock (in milliseconds). Declaration public static long DefaultWriteLockTimeout { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source IndexCommit Expert: allows to open a certain commit point. The default is null which opens the latest commit point. Only takes effect when IndexWriter is first created. Declaration public IndexCommit IndexCommit { get; set; } Property Value Type Description IndexCommit | Improve this Doc View Source IndexDeletionPolicy Expert: allows an optional IndexDeletionPolicy implementation to be specified. You can use this to control when prior commits are deleted from the index. The default policy is KeepOnlyLastCommitDeletionPolicy which removes all prior commits as soon as a new commit is done (this matches behavior before 2.2). Creating your own policy can allow you to explicitly keep previous \"point in time\" commits alive in the index for some time, to allow readers to refresh to the new commit without having the old commit deleted out from under them. This is necessary on filesystems like NFS that do not support \"delete on last close\" semantics, which Lucene's \"point in time\" search normally relies on. NOTE: the deletion policy cannot be null . Only takes effect when IndexWriter is first created. Declaration public IndexDeletionPolicy IndexDeletionPolicy { get; set; } Property Value Type Description IndexDeletionPolicy | Improve this Doc View Source MaxThreadStates Gets or sets the max number of simultaneous threads that may be indexing documents at once in IndexWriter . Values < 1 are invalid and if passed maxThreadStates will be set to DEFAULT_MAX_THREAD_STATES . Only takes effect when IndexWriter is first created. Declaration public int MaxThreadStates { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergePolicy Expert: MergePolicy is invoked whenever there are changes to the segments in the index. Its role is to select which merges to do, if any, and return a MergePolicy.MergeSpecification describing the merges. It also selects merges to do for ForceMerge(Int32) . Only takes effect when IndexWriter is first created. Declaration public MergePolicy MergePolicy { get; set; } Property Value Type Description MergePolicy | Improve this Doc View Source MergeScheduler Expert: Gets or sets the merge scheduler used by this writer. The default is ConcurrentMergeScheduler . NOTE: the merge scheduler cannot be null . Only takes effect when IndexWriter is first created. Declaration public IMergeScheduler MergeScheduler { get; set; } Property Value Type Description IMergeScheduler | Improve this Doc View Source OpenMode Specifies OpenMode of the index. Only takes effect when IndexWriter is first created. Declaration public OpenMode OpenMode { get; set; } Property Value Type Description OpenMode | Improve this Doc View Source RAMPerThreadHardLimitMB Expert: Gets or sets the maximum memory consumption per thread triggering a forced flush if exceeded. A Lucene.Net.Index.DocumentsWriterPerThread is forcefully flushed once it exceeds this limit even if the RAMBufferSizeMB has not been exceeded. This is a safety limit to prevent a Lucene.Net.Index.DocumentsWriterPerThread from address space exhaustion due to its internal 32 bit signed integer based memory addressing. The given value must be less that 2GB (2048MB). Declaration public int RAMPerThreadHardLimitMB { get; set; } Property Value Type Description System.Int32 See Also DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB | Improve this Doc View Source Similarity Expert: set the Similarity implementation used by this IndexWriter . NOTE: the similarity cannot be null . Only takes effect when IndexWriter is first created. Declaration public Similarity Similarity { get; set; } Property Value Type Description Similarity | Improve this Doc View Source UseReaderPooling By default, IndexWriter does not pool the SegmentReader s it must open for deletions and merging, unless a near-real-time reader has been obtained by calling Open(IndexWriter, Boolean) . this setting lets you enable pooling without getting a near-real-time reader. NOTE: if you set this to false , IndexWriter will still pool readers once Open(IndexWriter, Boolean) is called. Only takes effect when IndexWriter is first created. Declaration public bool UseReaderPooling { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source WriteLockTimeout Gets or sets the maximum time to wait for a write lock (in milliseconds) for this instance. You can change the default value for all instances by calling the DefaultWriteLockTimeout setter. Only takes effect when IndexWriter is first created. Declaration public long WriteLockTimeout { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object | Improve this Doc View Source SetInfoStream(InfoStream) Information about merges, deletes and a message when maxFieldLength is reached will be printed to this. Must not be null , but NO_OUTPUT may be used to supress output. Declaration public IndexWriterConfig SetInfoStream(InfoStream infoStream) Parameters Type Name Description InfoStream infoStream Returns Type Description IndexWriterConfig | Improve this Doc View Source SetInfoStream(TextWriter) Convenience method that uses TextWriterInfoStream to write to the passed in . Must not be null . Declaration public IndexWriterConfig SetInfoStream(TextWriter printStream) Parameters Type Name Description TextWriter printStream Returns Type Description IndexWriterConfig | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides LiveIndexWriterConfig.ToString() Extension Methods IndexWriterConfigExtensions.SetTermIndexInterval(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMaxBufferedDeleteTerms(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetRAMBufferSizeMB(LiveIndexWriterConfig, Double) IndexWriterConfigExtensions.SetMaxBufferedDocs(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMergedSegmentWarmer(LiveIndexWriterConfig, IndexWriter.IndexReaderWarmer) IndexWriterConfigExtensions.SetReaderTermsIndexDivisor(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetUseCompoundFile(LiveIndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetCheckIntegrityAtMerge(LiveIndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetTermIndexInterval(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMaxBufferedDeleteTerms(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetRAMBufferSizeMB(IndexWriterConfig, Double) IndexWriterConfigExtensions.SetMaxBufferedDocs(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMergedSegmentWarmer(IndexWriterConfig, IndexWriter.IndexReaderWarmer) IndexWriterConfigExtensions.SetReaderTermsIndexDivisor(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetUseCompoundFile(IndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetCheckIntegrityAtMerge(IndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetDefaultWriteLockTimeout(IndexWriterConfig, Int64) IndexWriterConfigExtensions.SetOpenMode(IndexWriterConfig, OpenMode) IndexWriterConfigExtensions.SetIndexDeletionPolicy(IndexWriterConfig, IndexDeletionPolicy) IndexWriterConfigExtensions.SetIndexCommit(IndexWriterConfig, IndexCommit) IndexWriterConfigExtensions.SetSimilarity(IndexWriterConfig, Similarity) IndexWriterConfigExtensions.SetMergeScheduler(IndexWriterConfig, IMergeScheduler) IndexWriterConfigExtensions.SetWriteLockTimeout(IndexWriterConfig, Int64) IndexWriterConfigExtensions.SetMergePolicy(IndexWriterConfig, MergePolicy) IndexWriterConfigExtensions.SetCodec(IndexWriterConfig, Codec) IndexWriterConfigExtensions.SetMaxThreadStates(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetReaderPooling(IndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetRAMPerThreadHardLimitMB(IndexWriterConfig, Int32) See Also Config"
  },
  "api/Lucene.Net/Lucene.Net.Index.ITwoPhaseCommit.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ITwoPhaseCommit.html",
    "title": "Interface ITwoPhaseCommit | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITwoPhaseCommit An interface for implementations that support 2-phase commit. You can use TwoPhaseCommitTool to execute a 2-phase commit algorithm over several ITwoPhaseCommit s. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface ITwoPhaseCommit Methods | Improve this Doc View Source Commit() The second phase of a 2-phase commit. Implementations should ideally do very little work in this method (following PrepareCommit() , and after it returns, the caller can assume that the changes were successfully committed to the underlying storage. Declaration void Commit() | Improve this Doc View Source PrepareCommit() The first stage of a 2-phase commit. Implementations should do as much work as possible in this method, but avoid actual committing changes. If the 2-phase commit fails, Rollback() is called to discard all changes since last successful commit. Declaration void PrepareCommit() | Improve this Doc View Source Rollback() Discards any changes that have occurred since the last commit. In a 2-phase commit algorithm, where one of the objects failed to Commit() or PrepareCommit() , this method is used to roll all other objects back to their previous state. Declaration void Rollback()"
  },
  "api/Lucene.Net/Lucene.Net.Index.KeepOnlyLastCommitDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.KeepOnlyLastCommitDeletionPolicy.html",
    "title": "Class KeepOnlyLastCommitDeletionPolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeepOnlyLastCommitDeletionPolicy This IndexDeletionPolicy implementation that keeps only the most recent commit and immediately removes all prior commits after a new commit is done. This is the default deletion policy. Inheritance System.Object IndexDeletionPolicy KeepOnlyLastCommitDeletionPolicy Inherited Members IndexDeletionPolicy.Clone() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class KeepOnlyLastCommitDeletionPolicy : IndexDeletionPolicy Constructors | Improve this Doc View Source KeepOnlyLastCommitDeletionPolicy() Sole constructor. Declaration public KeepOnlyLastCommitDeletionPolicy() Methods | Improve this Doc View Source OnCommit<T>(IList<T>) Deletes all commits except the most recent one. Declaration public override void OnCommit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnCommit<T>(IList<T>) | Improve this Doc View Source OnInit<T>(IList<T>) Deletes all commits except the most recent one. Declaration public override void OnInit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnInit<T>(IList<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Index.LiveIndexWriterConfig.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.LiveIndexWriterConfig.html",
    "title": "Class LiveIndexWriterConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LiveIndexWriterConfig Holds all the configuration used by IndexWriter with few setters for settings that can be changed on an IndexWriter instance \"live\". @since 4.0 Inheritance System.Object LiveIndexWriterConfig IndexWriterConfig Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class LiveIndexWriterConfig : object Properties | Improve this Doc View Source Analyzer Gets the default analyzer to use for indexing documents. Declaration public virtual Analyzer Analyzer { get; } Property Value Type Description Analyzer | Improve this Doc View Source CheckIntegrityAtMerge Gets or sets if IndexWriter should call CheckIntegrity() on existing segments before merging them into a new one. Use true to enable this safety check, which can help reduce the risk of propagating index corruption from older segments into new ones, at the expense of slower merging. Declaration public virtual bool CheckIntegrityAtMerge { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Codec Returns the current Codec . Declaration public virtual Codec Codec { get; } Property Value Type Description Codec | Improve this Doc View Source IndexCommit Gets the IndexCommit as specified in IndexCommit setter or the default, null which specifies to open the latest index commit point. Declaration public virtual IndexCommit IndexCommit { get; } Property Value Type Description IndexCommit | Improve this Doc View Source IndexDeletionPolicy Gets the IndexDeletionPolicy specified in IndexDeletionPolicy setter or the default KeepOnlyLastCommitDeletionPolicy Declaration public virtual IndexDeletionPolicy IndexDeletionPolicy { get; } Property Value Type Description IndexDeletionPolicy | Improve this Doc View Source InfoStream Returns InfoStream used for debugging. Declaration public virtual InfoStream InfoStream { get; } Property Value Type Description InfoStream See Also SetInfoStream(InfoStream) | Improve this Doc View Source MaxBufferedDeleteTerms Gets or sets a value that determines the maximum number of delete-by-term operations that will be buffered before both the buffered in-memory delete terms and queries are applied and flushed. Disabled by default (writer flushes by RAM usage). NOTE: this setting won't trigger a segment flush. Takes effect immediately, but only the next time a document is added, updated or deleted. Also, if you only delete-by-query, this setting has no effect, i.e. delete queries are buffered until the next segment is flushed. Declaration public virtual int MaxBufferedDeleteTerms { get; set; } Property Value Type Description System.Int32 See Also RAMBufferSizeMB | Improve this Doc View Source MaxBufferedDocs Gets or sets a value that determines the minimal number of documents required before the buffered in-memory documents are flushed as a new Segment. Large values generally give faster indexing. When this is set, the writer will flush every maxBufferedDocs added documents. Pass in DISABLE_AUTO_FLUSH to prevent triggering a flush due to number of buffered documents. Note that if flushing by RAM usage is also enabled, then the flush will be triggered by whichever comes first. Disabled by default (writer flushes by RAM usage). Takes effect immediately, but only the next time a document is added, updated or deleted. Declaration public virtual int MaxBufferedDocs { get; set; } Property Value Type Description System.Int32 See Also RAMBufferSizeMB | Improve this Doc View Source MaxThreadStates Returns the max number of simultaneous threads that may be indexing documents at once in IndexWriter . Declaration public virtual int MaxThreadStates { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MergedSegmentWarmer Gets or sets the merged segment warmer. See IndexWriter.IndexReaderWarmer . Takes effect on the next merge. Declaration public virtual IndexWriter.IndexReaderWarmer MergedSegmentWarmer { get; set; } Property Value Type Description IndexWriter.IndexReaderWarmer | Improve this Doc View Source MergePolicy Returns the current MergePolicy in use by this writer. Declaration public virtual MergePolicy MergePolicy { get; } Property Value Type Description MergePolicy See Also MergePolicy | Improve this Doc View Source MergeScheduler Returns the IMergeScheduler that was set by MergeScheduler setter. Declaration public virtual IMergeScheduler MergeScheduler { get; } Property Value Type Description IMergeScheduler | Improve this Doc View Source OpenMode Gets the OpenMode set by OpenMode setter. Declaration public virtual OpenMode OpenMode { get; } Property Value Type Description OpenMode | Improve this Doc View Source RAMBufferSizeMB Gets or sets a value that determines the amount of RAM that may be used for buffering added documents and deletions before they are flushed to the Directory . Generally for faster indexing performance it's best to flush by RAM usage instead of document count and use as large a RAM buffer as you can. When this is set, the writer will flush whenever buffered documents and deletions use this much RAM. Pass in DISABLE_AUTO_FLUSH to prevent triggering a flush due to RAM usage. Note that if flushing by document count is also enabled, then the flush will be triggered by whichever comes first. The maximum RAM limit is inherently determined by the runtime's available memory. Yet, an IndexWriter session can consume a significantly larger amount of memory than the given RAM limit since this limit is just an indicator when to flush memory resident documents to the Directory . Flushes are likely happen concurrently while other threads adding documents to the writer. For application stability the available memory in the runtime should be significantly larger than the RAM buffer used for indexing. NOTE : the account of RAM usage for pending deletions is only approximate. Specifically, if you delete by Query , Lucene currently has no way to measure the RAM usage of individual Queries so the accounting will under-estimate and you should compensate by either calling Commit() periodically yourself, or by setting MaxBufferedDeleteTerms to flush and apply buffered deletes by count instead of RAM usage (for each buffered delete Query a constant number of bytes is used to estimate RAM usage). Note that enabling MaxBufferedDeleteTerms will not trigger any segment flushes. NOTE : It's not guaranteed that all memory resident documents are flushed once this limit is exceeded. Depending on the configured Lucene.Net.Index.LiveIndexWriterConfig.FlushPolicy only a subset of the buffered documents are flushed and therefore only parts of the RAM buffer is released. The default value is DEFAULT_RAM_BUFFER_SIZE_MB . Takes effect immediately, but only the next time a document is added, updated or deleted. Declaration public virtual double RAMBufferSizeMB { get; set; } Property Value Type Description System.Double See Also RAMPerThreadHardLimitMB | Improve this Doc View Source RAMPerThreadHardLimitMB Returns the max amount of memory each Lucene.Net.Index.DocumentsWriterPerThread can consume until forcefully flushed. Declaration public virtual int RAMPerThreadHardLimitMB { get; } Property Value Type Description System.Int32 See Also RAMPerThreadHardLimitMB | Improve this Doc View Source ReaderTermsIndexDivisor Gets or sets the termsIndexDivisor passed to any readers that IndexWriter opens, for example when applying deletes or creating a near-real-time reader in Open(IndexWriter, Boolean) . If you pass -1, the terms index won't be loaded by the readers. This is only useful in advanced situations when you will only .Next() through all terms; attempts to seek will hit an exception. Takes effect immediately, but only applies to readers opened after this call NOTE: divisor settings > 1 do not apply to all PostingsFormat implementations, including the default one in this release. It only makes sense for terms indexes that can efficiently re-sample terms at load time. Declaration public virtual int ReaderTermsIndexDivisor { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Similarity Expert: returns the Similarity implementation used by this IndexWriter . Declaration public virtual Similarity Similarity { get; } Property Value Type Description Similarity | Improve this Doc View Source TermIndexInterval Expert: Gets or sets the interval between indexed terms. Large values cause less memory to be used by IndexReader , but slow random-access to terms. Small values cause more memory to be used by an IndexReader , and speed random-access to terms. This parameter determines the amount of computation required per query term, regardless of the number of documents that contain that term. In particular, it is the maximum number of other terms that must be scanned before a term is located and its frequency and position information may be processed. In a large index with user-entered query terms, query processing time is likely to be dominated not by term lookup but rather by the processing of frequency and positional data. In a small index or when many uncommon query terms are generated (e.g., by wildcard queries) term lookup may become a dominant cost. In particular, numUniqueTerms/interval terms are read into memory by an IndexReader , and, on average, interval/2 terms must be scanned for each random term access. Takes effect immediately, but only applies to newly flushed/merged segments. NOTE: this parameter does not apply to all PostingsFormat implementations, including the default one in this release. It only makes sense for term indexes that are implemented as a fixed gap between terms. For example, Lucene41PostingsFormat implements the term index instead based upon how terms share prefixes. To configure its parameters (the minimum and maximum size for a block), you would instead use Lucene41PostingsFormat(Int32, Int32) . which can also be configured on a per-field basis: public class MyLucene45Codec : Lucene45Codec { //customize Lucene41PostingsFormat, passing minBlockSize=50, maxBlockSize=100 private readonly PostingsFormat tweakedPostings = new Lucene41PostingsFormat(50, 100); public override PostingsFormat GetPostingsFormatForField(string field) { if (field.Equals(\"fieldWithTonsOfTerms\", StringComparison.Ordinal)) return tweakedPostings; else return base.GetPostingsFormatForField(field); } } ... iwc.Codec = new MyLucene45Codec(); Note that other implementations may have their own parameters, or no parameters at all. Declaration public virtual int TermIndexInterval { get; set; } Property Value Type Description System.Int32 See Also DEFAULT_TERM_INDEX_INTERVAL | Improve this Doc View Source UseCompoundFile Gets or sets if the IndexWriter should pack newly written segments in a compound file. Default is true . Use false for batch indexing with very large RAM buffer settings. Note: To control compound file usage during segment merges see NoCFSRatio and MaxCFSSegmentSizeMB . This setting only applies to newly created segments. Declaration public virtual bool UseCompoundFile { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source UseReaderPooling Returns true if IndexWriter should pool readers even if Open(IndexWriter, Boolean) has not been called. Declaration public virtual bool UseReaderPooling { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WriteLockTimeout Returns allowed timeout when acquiring the write lock. Declaration public virtual long WriteLockTimeout { get; } Property Value Type Description System.Int64 See Also WriteLockTimeout Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Extension Methods IndexWriterConfigExtensions.SetTermIndexInterval(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMaxBufferedDeleteTerms(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetRAMBufferSizeMB(LiveIndexWriterConfig, Double) IndexWriterConfigExtensions.SetMaxBufferedDocs(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMergedSegmentWarmer(LiveIndexWriterConfig, IndexWriter.IndexReaderWarmer) IndexWriterConfigExtensions.SetReaderTermsIndexDivisor(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetUseCompoundFile(LiveIndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetCheckIntegrityAtMerge(LiveIndexWriterConfig, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Index.LogByteSizeMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.LogByteSizeMergePolicy.html",
    "title": "Class LogByteSizeMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LogByteSizeMergePolicy This is a LogMergePolicy that measures size of a segment as the total byte size of the segment's files. Inheritance System.Object MergePolicy LogMergePolicy LogByteSizeMergePolicy Inherited Members LogMergePolicy.LEVEL_LOG_SPAN LogMergePolicy.DEFAULT_MERGE_FACTOR LogMergePolicy.DEFAULT_MAX_MERGE_DOCS LogMergePolicy.DEFAULT_NO_CFS_RATIO LogMergePolicy.m_mergeFactor LogMergePolicy.m_minMergeSize LogMergePolicy.m_maxMergeSize LogMergePolicy.m_maxMergeSizeForForcedMerge LogMergePolicy.m_maxMergeDocs LogMergePolicy.m_calibrateSizeByDeletes LogMergePolicy.IsVerbose LogMergePolicy.Message(String) LogMergePolicy.MergeFactor LogMergePolicy.CalibrateSizeByDeletes LogMergePolicy.Dispose(Boolean) LogMergePolicy.SizeDocs(SegmentCommitInfo) LogMergePolicy.SizeBytes(SegmentCommitInfo) LogMergePolicy.IsMerged(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) LogMergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) LogMergePolicy.FindForcedDeletesMerges(SegmentInfos) LogMergePolicy.FindMerges(MergeTrigger, SegmentInfos) LogMergePolicy.MaxMergeDocs LogMergePolicy.ToString() MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.SetIndexWriter(IndexWriter) MergePolicy.Dispose() MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class LogByteSizeMergePolicy : LogMergePolicy Constructors | Improve this Doc View Source LogByteSizeMergePolicy() Sole constructor, setting all settings to their defaults. Declaration public LogByteSizeMergePolicy() Fields | Improve this Doc View Source DEFAULT_MAX_MERGE_MB Default maximum segment size. A segment of this size or larger will never be merged. Declaration public static readonly double DEFAULT_MAX_MERGE_MB Field Value Type Description System.Double See Also MaxMergeMB | Improve this Doc View Source DEFAULT_MAX_MERGE_MB_FOR_FORCED_MERGE Default maximum segment size. A segment of this size or larger will never be merged during ForceMerge(Int32) . Declaration public static readonly double DEFAULT_MAX_MERGE_MB_FOR_FORCED_MERGE Field Value Type Description System.Double See Also MaxMergeMBForForcedMerge | Improve this Doc View Source DEFAULT_MIN_MERGE_MB Default minimum segment size. Declaration public static readonly double DEFAULT_MIN_MERGE_MB Field Value Type Description System.Double See Also MinMergeMB Properties | Improve this Doc View Source MaxMergeMB Determines the largest segment (measured by total byte size of the segment's files, in MB) that may be merged with other segments. Small values (e.g., less than 50 MB) are best for interactive indexing, as this limits the length of pauses while indexing to a few seconds. Larger values are best for batched indexing and speedier searches. Note that MaxMergeDocs is also used to check whether a segment is too large for merging (it's either or). Declaration public virtual double MaxMergeMB { get; set; } Property Value Type Description System.Double | Improve this Doc View Source MaxMergeMBForForcedMerge Determines the largest segment (measured by total byte size of the segment's files, in MB) that may be merged with other segments during forceMerge. Setting it low will leave the index with more than 1 segment, even if ForceMerge(Int32) is called. Declaration public virtual double MaxMergeMBForForcedMerge { get; set; } Property Value Type Description System.Double | Improve this Doc View Source MinMergeMB Sets the minimum size for the lowest level segments. Any segments below this size are considered to be on the same level (even if they vary drastically in size) and will be merged whenever there are mergeFactor of them. This effectively truncates the \"long tail\" of small segments that would otherwise be created into a single level. If you set this too large, it could greatly increase the merging cost during indexing (if you flush many small segments). Declaration public virtual double MinMergeMB { get; set; } Property Value Type Description System.Double Methods | Improve this Doc View Source Size(SegmentCommitInfo) Declaration protected override long Size(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 Overrides MergePolicy.Size(SegmentCommitInfo)"
  },
  "api/Lucene.Net/Lucene.Net.Index.LogDocMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.LogDocMergePolicy.html",
    "title": "Class LogDocMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LogDocMergePolicy This is a LogMergePolicy that measures size of a segment as the number of documents (not taking deletions into account). Inheritance System.Object MergePolicy LogMergePolicy LogDocMergePolicy Inherited Members LogMergePolicy.LEVEL_LOG_SPAN LogMergePolicy.DEFAULT_MERGE_FACTOR LogMergePolicy.DEFAULT_MAX_MERGE_DOCS LogMergePolicy.DEFAULT_NO_CFS_RATIO LogMergePolicy.m_mergeFactor LogMergePolicy.m_minMergeSize LogMergePolicy.m_maxMergeSize LogMergePolicy.m_maxMergeSizeForForcedMerge LogMergePolicy.m_maxMergeDocs LogMergePolicy.m_calibrateSizeByDeletes LogMergePolicy.IsVerbose LogMergePolicy.Message(String) LogMergePolicy.MergeFactor LogMergePolicy.CalibrateSizeByDeletes LogMergePolicy.Dispose(Boolean) LogMergePolicy.SizeDocs(SegmentCommitInfo) LogMergePolicy.SizeBytes(SegmentCommitInfo) LogMergePolicy.IsMerged(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) LogMergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) LogMergePolicy.FindForcedDeletesMerges(SegmentInfos) LogMergePolicy.FindMerges(MergeTrigger, SegmentInfos) LogMergePolicy.MaxMergeDocs LogMergePolicy.ToString() MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.SetIndexWriter(IndexWriter) MergePolicy.Dispose() MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class LogDocMergePolicy : LogMergePolicy Constructors | Improve this Doc View Source LogDocMergePolicy() Sole constructor, setting all settings to their defaults. Declaration public LogDocMergePolicy() Fields | Improve this Doc View Source DEFAULT_MIN_MERGE_DOCS Default minimum segment size. Declaration public static readonly int DEFAULT_MIN_MERGE_DOCS Field Value Type Description System.Int32 See Also MinMergeDocs Properties | Improve this Doc View Source MinMergeDocs Sets the minimum size for the lowest level segments. Any segments below this size are considered to be on the same level (even if they vary drastically in size) and will be merged whenever there are mergeFactor of them. This effectively truncates the \"long tail\" of small segments that would otherwise be created into a single level. If you set this too large, it could greatly increase the merging cost during indexing (if you flush many small segments). Declaration public virtual int MinMergeDocs { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Size(SegmentCommitInfo) Declaration protected override long Size(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 Overrides MergePolicy.Size(SegmentCommitInfo)"
  },
  "api/Lucene.Net/Lucene.Net.Index.LogMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.LogMergePolicy.html",
    "title": "Class LogMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LogMergePolicy This class implements a MergePolicy that tries to merge segments into levels of exponentially increasing size, where each level has fewer segments than the value of the merge factor. Whenever extra segments (beyond the merge factor upper bound) are encountered, all segments within the level are merged. You can get or set the merge factor using MergeFactor . This class is abstract and requires a subclass to define the Size(SegmentCommitInfo) method which specifies how a segment's size is determined. LogDocMergePolicy is one subclass that measures size by document count in the segment. LogByteSizeMergePolicy is another subclass that measures size as the total byte size of the file(s) for the segment. Inheritance System.Object MergePolicy LogMergePolicy LogByteSizeMergePolicy LogDocMergePolicy Inherited Members MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.SetIndexWriter(IndexWriter) MergePolicy.Dispose() MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) MergePolicy.Size(SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class LogMergePolicy : MergePolicy Constructors | Improve this Doc View Source LogMergePolicy() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public LogMergePolicy() Fields | Improve this Doc View Source DEFAULT_MAX_MERGE_DOCS Default maximum segment size. A segment of this size or larger will never be merged. Declaration public static readonly int DEFAULT_MAX_MERGE_DOCS Field Value Type Description System.Int32 See Also MaxMergeDocs | Improve this Doc View Source DEFAULT_MERGE_FACTOR Default merge factor, which is how many segments are merged at a time Declaration public static readonly int DEFAULT_MERGE_FACTOR Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_NO_CFS_RATIO Default noCFSRatio. If a merge's size is >= 10% of the index, then we disable compound file for it. Declaration public static readonly double DEFAULT_NO_CFS_RATIO Field Value Type Description System.Double See Also NoCFSRatio | Improve this Doc View Source LEVEL_LOG_SPAN Defines the allowed range of log(size) for each level. A level is computed by taking the max segment log size, minus LEVEL_LOG_SPAN, and finding all segments falling within that range. Declaration public static readonly double LEVEL_LOG_SPAN Field Value Type Description System.Double | Improve this Doc View Source m_calibrateSizeByDeletes If true, we pro-rate a segment's size by the percentage of non-deleted documents. Declaration protected bool m_calibrateSizeByDeletes Field Value Type Description System.Boolean | Improve this Doc View Source m_maxMergeDocs If a segment has more than this many documents then it will never be merged. Declaration protected int m_maxMergeDocs Field Value Type Description System.Int32 | Improve this Doc View Source m_maxMergeSize If the size of a segment exceeds this value then it will never be merged. Declaration protected long m_maxMergeSize Field Value Type Description System.Int64 | Improve this Doc View Source m_maxMergeSizeForForcedMerge If the size of a segment exceeds this value then it will never be merged during ForceMerge(Int32) . Declaration protected long m_maxMergeSizeForForcedMerge Field Value Type Description System.Int64 | Improve this Doc View Source m_mergeFactor How many segments to merge at a time. Declaration protected int m_mergeFactor Field Value Type Description System.Int32 | Improve this Doc View Source m_minMergeSize Any segments whose size is smaller than this value will be rounded up to this value. This ensures that tiny segments are aggressively merged. Declaration protected long m_minMergeSize Field Value Type Description System.Int64 Properties | Improve this Doc View Source CalibrateSizeByDeletes Gets or Sets whether the segment size should be calibrated by the number of deletes when choosing segments for merge. Declaration public virtual bool CalibrateSizeByDeletes { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsVerbose Returns true if LogMergePolicy is enabled in Lucene.Net.Index.IndexWriter.infoStream . Declaration protected virtual bool IsVerbose { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxMergeDocs Determines the largest segment (measured by document count) that may be merged with other segments. Small values (e.g., less than 10,000) are best for interactive indexing, as this limits the length of pauses while indexing to a few seconds. Larger values are best for batched indexing and speedier searches. The default value is . The default merge policy ( LogByteSizeMergePolicy ) also allows you to set this limit by net size (in MB) of the segment, using MaxMergeMB . Declaration public virtual int MaxMergeDocs { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeFactor Gets or Sets the number of segments that are merged at once and also controls the total number of segments allowed to accumulate in the index. This determines how often segment indices are merged by AddDocument(IEnumerable<IIndexableField>) . With smaller values, less RAM is used while indexing, and searches are faster, but indexing speed is slower. With larger values, more RAM is used during indexing, and while searches is slower, indexing is faster. Thus larger values (> 10) are best for batch index creation, and smaller values (< 10) for indices that are interactively maintained. Declaration public virtual int MergeFactor { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Finds merges necessary to force-merge all deletes from the index. We simply merge adjacent segments that have deletes, up to mergeFactor at a time. Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Returns the merges necessary to merge the index down to a specified number of segments. this respects the m_maxMergeSizeForForcedMerge setting. By default, and assuming maxNumSegments=1 , only one segment will be left in the index, where that segment has no deletions pending nor separate norms, and it is in compound file format if the current useCompoundFile setting is true . This method returns multiple merges (mergeFactor at a time) so the MergeScheduler in use may make use of concurrency. Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos infos, int maxNumSegments, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos infos System.Int32 maxNumSegments IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Checks if any merges are now necessary and returns a MergePolicy.MergeSpecification if so. A merge is necessary when there are more than MergeFactor segments at a given level. When multiple levels have too many segments, this method will return multiple merges, allowing the MergeScheduler to use concurrency. Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos infos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos infos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source IsMerged(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Returns true if the number of segments eligible for merging is less than or equal to the specified maxNumSegments . Declaration protected virtual bool IsMerged(SegmentInfos infos, int maxNumSegments, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos infos System.Int32 maxNumSegments IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description System.Boolean | Improve this Doc View Source Message(String) Print a debug message to Lucene.Net.Index.IndexWriter.infoStream . Declaration protected virtual void Message(string message) Parameters Type Name Description System.String message | Improve this Doc View Source SizeBytes(SegmentCommitInfo) Return the byte size of the provided SegmentCommitInfo , pro-rated by percentage of non-deleted documents if CalibrateSizeByDeletes is set. Declaration protected virtual long SizeBytes(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 | Improve this Doc View Source SizeDocs(SegmentCommitInfo) Return the number of documents in the provided SegmentCommitInfo , pro-rated by percentage of non-deleted documents if CalibrateSizeByDeletes is set. Declaration protected virtual long SizeDocs(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.DocMap.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.DocMap.html",
    "title": "Class MergePolicy.DocMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergePolicy.DocMap A map of doc IDs. Inheritance System.Object MergePolicy.DocMap Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class DocMap : object Constructors | Improve this Doc View Source DocMap() Sole constructor, typically invoked from sub-classes constructors. Declaration protected DocMap() Methods | Improve this Doc View Source Map(Int32) Return the new doc ID according to its old value. Declaration public abstract int Map(int old) Parameters Type Name Description System.Int32 old Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.html",
    "title": "Class MergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergePolicy Expert: a MergePolicy determines the sequence of primitive merge operations. Whenever the segments in an index have been altered by IndexWriter , either the addition of a newly flushed segment, addition of many segments from AddIndexes* calls, or a previous merge that may now need to cascade, IndexWriter invokes FindMerges(MergeTrigger, SegmentInfos) to give the MergePolicy a chance to pick merges that are now required. This method returns a MergePolicy.MergeSpecification instance describing the set of merges that should be done, or null if no merges are necessary. When ForceMerge(Int32) is called, it calls FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) and the MergePolicy should then return the necessary merges. Note that the policy can return more than one merge at a time. In this case, if the writer is using SerialMergeScheduler , the merges will be run sequentially but if it is using ConcurrentMergeScheduler they will be run concurrently. The default MergePolicy is TieredMergePolicy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergePolicy LogMergePolicy NoMergePolicy TieredMergePolicy UpgradeIndexMergePolicy Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class MergePolicy : IDisposable Constructors | Improve this Doc View Source MergePolicy() Creates a new merge policy instance. Note that if you intend to use it without passing it to IndexWriter , you should call SetIndexWriter(IndexWriter) . Declaration public MergePolicy() | Improve this Doc View Source MergePolicy(Double, Int64) Creates a new merge policy instance with default settings for m_noCFSRatio and m_maxCFSSegmentSize . This ctor should be used by subclasses using different defaults than the MergePolicy Declaration protected MergePolicy(double defaultNoCFSRatio, long defaultMaxCFSSegmentSize) Parameters Type Name Description System.Double defaultNoCFSRatio System.Int64 defaultMaxCFSSegmentSize Fields | Improve this Doc View Source DEFAULT_MAX_CFS_SEGMENT_SIZE Default max segment size in order to use compound file system. Set to . Declaration protected static readonly long DEFAULT_MAX_CFS_SEGMENT_SIZE Field Value Type Description System.Int64 | Improve this Doc View Source DEFAULT_NO_CFS_RATIO Default ratio for compound file system usage. Set to 1.0 , always use compound file system. Declaration protected static readonly double DEFAULT_NO_CFS_RATIO Field Value Type Description System.Double | Improve this Doc View Source m_maxCFSSegmentSize If the size of the merged segment exceeds this value then it will not use compound file format. Declaration protected long m_maxCFSSegmentSize Field Value Type Description System.Int64 | Improve this Doc View Source m_noCFSRatio If the size of the merge segment exceeds this ratio of the total index size then it will remain in non-compound format Declaration protected double m_noCFSRatio Field Value Type Description System.Double | Improve this Doc View Source m_writer IndexWriter that contains this instance. Declaration protected SetOnce<IndexWriter> m_writer Field Value Type Description SetOnce < IndexWriter > Properties | Improve this Doc View Source MaxCFSSegmentSizeMB Gets or Sets the largest size allowed for a compound file segment. If a merged segment will be more than this value, leave the segment as non-compound file even if compound file is enabled. Set this to (default) and NoCFSRatio to 1.0 to always use CFS regardless of merge size. Declaration public double MaxCFSSegmentSizeMB { get; set; } Property Value Type Description System.Double | Improve this Doc View Source NoCFSRatio Gets or Sets current m_noCFSRatio . If a merged segment will be more than this percentage of the total size of the index, leave the segment as non-compound file even if compound file is enabled. Set to 1.0 to always use CFS regardless of merge size. Declaration public double NoCFSRatio { get; set; } Property Value Type Description System.Double Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Release all resources for the policy. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Release all resources for the policy. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Determine what set of merge operations is necessary in order to expunge all deletes from the index. Declaration public abstract MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos the total set of segments in the index Returns Type Description MergePolicy.MergeSpecification | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Determine what set of merge operations is necessary in order to merge to <= the specified segment count. IndexWriter calls this when its ForceMerge(Int32, Boolean) method is called. This call is always synchronized on the IndexWriter instance so only one thread at a time will call this method. Declaration public abstract MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos segmentInfos The total set of segments in the index System.Int32 maxSegmentCount Requested maximum number of segments in the index (currently this is always 1) IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Contains the specific SegmentInfo instances that must be merged away. This may be a subset of all SegmentInfos. If the value is true for a given SegmentInfo , that means this segment was an original segment present in the to-be-merged index; else, it was a segment produced by a cascaded merge. Returns Type Description MergePolicy.MergeSpecification | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Determine what set of merge operations are now necessary on the index. IndexWriter calls this whenever there is a change to the segments. This call is always synchronized on the IndexWriter instance so only one thread at a time will call this method. Declaration public abstract MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos) Parameters Type Name Description MergeTrigger mergeTrigger the event that triggered the merge SegmentInfos segmentInfos the total set of segments in the index Returns Type Description MergePolicy.MergeSpecification | Improve this Doc View Source IsMerged(SegmentInfos, SegmentCommitInfo) Returns true if this single info is already fully merged (has no pending deletes, is in the same dir as the writer, and matches the current compound file setting Declaration protected bool IsMerged(SegmentInfos infos, SegmentCommitInfo info) Parameters Type Name Description SegmentInfos infos SegmentCommitInfo info Returns Type Description System.Boolean | Improve this Doc View Source SetIndexWriter(IndexWriter) Sets the IndexWriter to use by this merge policy. This method is allowed to be called only once, and is usually set by IndexWriter . If it is called more than once, AlreadySetException is thrown. Declaration public virtual void SetIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer See Also SetOnce <T> | Improve this Doc View Source Size(SegmentCommitInfo) Return the byte size of the provided SegmentCommitInfo , pro-rated by percentage of non-deleted documents is set. Declaration protected virtual long Size(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 | Improve this Doc View Source UseCompoundFile(SegmentInfos, SegmentCommitInfo) Returns true if a new segment (regardless of its origin) should use the compound file format. The default implementation returns true iff the size of the given mergedInfo is less or equal to MaxCFSSegmentSizeMB and the size is less or equal to the TotalIndexSize * NoCFSRatio otherwise false . Declaration public virtual bool UseCompoundFile(SegmentInfos infos, SegmentCommitInfo mergedInfo) Parameters Type Name Description SegmentInfos infos SegmentCommitInfo mergedInfo Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeAbortedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeAbortedException.html",
    "title": "Class MergePolicy.MergeAbortedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergePolicy.MergeAbortedException Thrown when a merge was explicity aborted because Dispose(Boolean) was called with false . Normally this exception is privately caught and suppresed by IndexWriter . Inheritance System.Object MergePolicy.MergeAbortedException Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MergeAbortedException : System.IO.IOException Constructors | Improve this Doc View Source MergeAbortedException() Create a MergePolicy.MergeAbortedException . Declaration public MergeAbortedException() | Improve this Doc View Source MergeAbortedException(String) Create a MergePolicy.MergeAbortedException with a specified message. Declaration public MergeAbortedException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeException.html",
    "title": "Class MergePolicy.MergeException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergePolicy.MergeException Exception thrown if there are any problems while executing a merge. Inheritance System.Object MergePolicy.MergeException Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MergeException : Exception Constructors | Improve this Doc View Source MergeException(Exception, Directory) Create a MergePolicy.MergeException . Declaration public MergeException(Exception exc, Directory dir) Parameters Type Name Description Exception exc Directory dir | Improve this Doc View Source MergeException(String, Directory) Create a MergePolicy.MergeException . Declaration public MergeException(string message, Directory dir) Parameters Type Name Description System.String message Directory dir Properties | Improve this Doc View Source Directory Returns the Directory of the index that hit the exception. Declaration public virtual Directory Directory { get; } Property Value Type Description Directory"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeSpecification.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeSpecification.html",
    "title": "Class MergePolicy.MergeSpecification | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergePolicy.MergeSpecification A MergePolicy.MergeSpecification instance provides the information necessary to perform multiple merges. It simply contains a list of MergePolicy.OneMerge instances. Inheritance System.Object MergePolicy.MergeSpecification Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MergeSpecification : object Constructors | Improve this Doc View Source MergeSpecification() Sole constructor. Use Add(MergePolicy.OneMerge) to add merges. Declaration public MergeSpecification() Properties | Improve this Doc View Source Merges The subset of segments to be included in the primitive merge. Declaration public IList<MergePolicy.OneMerge> Merges { get; } Property Value Type Description IList < MergePolicy.OneMerge > Methods | Improve this Doc View Source Add(MergePolicy.OneMerge) Adds the provided MergePolicy.OneMerge to this specification. Declaration public virtual void Add(MergePolicy.OneMerge merge) Parameters Type Name Description MergePolicy.OneMerge merge | Improve this Doc View Source SegString(Directory) Returns a description of the merges in this specification. Declaration public virtual string SegString(Directory dir) Parameters Type Name Description Directory dir Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.OneMerge.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.OneMerge.html",
    "title": "Class MergePolicy.OneMerge | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergePolicy.OneMerge OneMerge provides the information necessary to perform an individual primitive merge operation, resulting in a single new segment. The merge spec includes the subset of segments to be merged as well as whether the new segment should use the compound file format. Inheritance System.Object MergePolicy.OneMerge Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class OneMerge : object Constructors | Improve this Doc View Source OneMerge(IList<SegmentCommitInfo>) Sole constructor. Declaration public OneMerge(IList<SegmentCommitInfo> segments) Parameters Type Name Description IList < SegmentCommitInfo > segments List of SegmentCommitInfo s to be merged. Properties | Improve this Doc View Source EstimatedMergeBytes Estimated size in bytes of the merged segment. Declaration public long EstimatedMergeBytes { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Info Expert: Sets the SegmentCommitInfo of this MergePolicy.OneMerge . Allows sub-classes to e.g. set diagnostics properties. Declaration public virtual SegmentCommitInfo Info { get; set; } Property Value Type Description SegmentCommitInfo | Improve this Doc View Source MaxNumSegments Declaration public int MaxNumSegments { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeInfo Return MergeInfo describing this merge. Declaration public virtual MergeInfo MergeInfo { get; } Property Value Type Description MergeInfo | Improve this Doc View Source Segments Segments to be merged. Declaration public IList<SegmentCommitInfo> Segments { get; } Property Value Type Description IList < SegmentCommitInfo > | Improve this Doc View Source TotalBytesSize Returns the total size in bytes of this merge. Note that this does not indicate the size of the merged segment, but the input total size. This is only set once the merge is initialized by IndexWriter . Declaration public virtual long TotalBytesSize { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalDocCount Number of documents in the merged segment. Declaration public int TotalDocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalNumDocs Returns the total number of documents that are included with this merge. Note that this does not indicate the number of documents after the merge. Declaration public virtual int TotalNumDocs { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CheckAborted(Directory) Called periodically by IndexWriter while merging to see if the merge is aborted. Declaration public virtual void CheckAborted(Directory dir) Parameters Type Name Description Directory dir | Improve this Doc View Source GetDocMap(MergeState) Expert: If GetMergeReaders() reorders document IDs, this method must be overridden to return a mapping from the natural doc ID (the doc ID that would result from a natural merge) to the actual doc ID. This mapping is used to apply deletions that happened during the merge to the new segment. Declaration public virtual MergePolicy.DocMap GetDocMap(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description MergePolicy.DocMap | Improve this Doc View Source GetMergeReaders() Expert: Get the list of readers to merge. Note that this list does not necessarily match the list of segments to merge and should only be used to feed SegmentMerger to initialize a merge. When a MergePolicy.OneMerge reorders doc IDs, it must override GetDocMap(MergeState) too so that deletes that happened during the merge can be applied to the newly merged segment. Declaration public virtual IList<AtomicReader> GetMergeReaders() Returns Type Description IList < AtomicReader > | Improve this Doc View Source SegString(Directory) Returns a readable description of the current merge state. Declaration public virtual string SegString(Directory dir) Parameters Type Name Description Directory dir Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergeScheduler.html",
    "title": "Class MergeScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergeScheduler Expert: IndexWriter uses an instance implementing this interface to execute the merges selected by a MergePolicy . The default MergeScheduler is ConcurrentMergeScheduler . Implementers of sub-classes should make sure that Clone() returns an independent instance able to work with any IndexWriter instance. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergeScheduler ConcurrentMergeScheduler NoMergeScheduler SerialMergeScheduler TaskMergeScheduler Implements IMergeScheduler IDisposable Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class MergeScheduler : IDisposable, IMergeScheduler, IDisposable Constructors | Improve this Doc View Source MergeScheduler() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected MergeScheduler() Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Dispose this MergeScheduler. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Dispose this MergeScheduler. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Run the merges provided by NextMerge() . Declaration public abstract void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer the IndexWriter to obtain the merges from. MergeTrigger trigger the MergeTrigger that caused this merge to happen System.Boolean newMergesFound true iff any new merges were found by the caller; otherwise false Implements IMergeScheduler IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergeState.DocMap.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergeState.DocMap.html",
    "title": "Class MergeState.DocMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergeState.DocMap Remaps docids around deletes during merge Inheritance System.Object MergeState.DocMap Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class DocMap : object Properties | Improve this Doc View Source HasDeletions Returns true if there are any deletions. Declaration public virtual bool HasDeletions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxDoc Returns the total number of documents, ignoring deletions. Declaration public abstract int MaxDoc { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumDeletedDocs Returns the number of deleted documents. Declaration public abstract int NumDeletedDocs { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumDocs Returns the number of not-deleted documents. Declaration public int NumDocs { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Build(AtomicReader) Creates a MergeState.DocMap instance appropriate for this reader. Declaration public static MergeState.DocMap Build(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description MergeState.DocMap | Improve this Doc View Source Get(Int32) Returns the mapped docID corresponding to the provided one. Declaration public abstract int Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergeState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergeState.html",
    "title": "Class MergeState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergeState Holds common state used during segment merging. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergeState Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MergeState : object Properties | Improve this Doc View Source CheckAbort Holds the CheckAbort instance, which is invoked periodically to see if the merge has been aborted. Declaration public CheckAbort CheckAbort { get; } Property Value Type Description CheckAbort | Improve this Doc View Source DocBase New docID base per reader. Declaration public int[] DocBase { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source DocMaps Maps docIDs around deletions. Declaration public MergeState.DocMap[] DocMaps { get; set; } Property Value Type Description MergeState.DocMap [] | Improve this Doc View Source FieldInfos FieldInfos of the newly merged segment. Declaration public FieldInfos FieldInfos { get; set; } Property Value Type Description FieldInfos | Improve this Doc View Source InfoStream InfoStream for debugging messages. Declaration public InfoStream InfoStream { get; } Property Value Type Description InfoStream | Improve this Doc View Source MatchedCount How many MatchingSegmentReaders are set. Declaration public int MatchedCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MatchingSegmentReaders SegmentReader s that have identical field name/number mapping, so their stored fields and term vectors may be bulk merged. Declaration public SegmentReader[] MatchingSegmentReaders { get; set; } Property Value Type Description SegmentReader [] | Improve this Doc View Source Readers Readers being merged. Declaration public IList<AtomicReader> Readers { get; } Property Value Type Description IList < AtomicReader > | Improve this Doc View Source SegmentInfo SegmentInfo of the newly merged segment. Declaration public SegmentInfo SegmentInfo { get; } Property Value Type Description SegmentInfo"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergeTrigger.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergeTrigger.html",
    "title": "Enum MergeTrigger | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum MergeTrigger MergeTrigger is passed to FindMerges(MergeTrigger, SegmentInfos) to indicate the event that triggered the merge. Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum MergeTrigger : int Fields Name Description CLOSING Merge was triggered by a disposing IndexWriter . EXPLICIT Merge has been triggered explicitly by the user. FULL_FLUSH Merge was triggered by a full flush. Full flushes can be caused by a commit, NRT reader reopen or a Dispose() call on the index writer. MERGE_FINISHED Merge was triggered by a successfully finished merge. SEGMENT_FLUSH Merge was triggered by a segment flush."
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocsAndPositionsEnum.EnumWithSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocsAndPositionsEnum.EnumWithSlice.html",
    "title": "Class MultiDocsAndPositionsEnum.EnumWithSlice | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocsAndPositionsEnum.EnumWithSlice Holds a DocsAndPositionsEnum along with the corresponding ReaderSlice . Inheritance System.Object MultiDocsAndPositionsEnum.EnumWithSlice Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class EnumWithSlice : object Properties | Improve this Doc View Source DocsAndPositionsEnum DocsAndPositionsEnum for this sub-reader. Declaration public DocsAndPositionsEnum DocsAndPositionsEnum { get; } Property Value Type Description DocsAndPositionsEnum | Improve this Doc View Source Slice ReaderSlice describing how this sub-reader fits into the composite reader. Declaration public ReaderSlice Slice { get; } Property Value Type Description ReaderSlice Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocsAndPositionsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocsAndPositionsEnum.html",
    "title": "Class MultiDocsAndPositionsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocsAndPositionsEnum Exposes flex API, merged from flex API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSetIterator DocsEnum DocsAndPositionsEnum MultiDocsAndPositionsEnum Inherited Members DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiDocsAndPositionsEnum : DocsAndPositionsEnum Constructors | Improve this Doc View Source MultiDocsAndPositionsEnum(MultiTermsEnum, Int32) Sole constructor. Declaration public MultiDocsAndPositionsEnum(MultiTermsEnum parent, int subReaderCount) Parameters Type Name Description MultiTermsEnum parent System.Int32 subReaderCount Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source EndOffset Declaration public override int EndOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.EndOffset | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source NumSubs How many sub-readers we are merging. Declaration public int NumSubs { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public override int StartOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.StartOffset | Improve this Doc View Source Subs Returns sub-readers we are merging. Declaration public MultiDocsAndPositionsEnum.EnumWithSlice[] Subs { get; } Property Value Type Description MultiDocsAndPositionsEnum.EnumWithSlice [] Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source CanReuse(MultiTermsEnum) Returns true if this instance can be reused by the provided MultiTermsEnum . Declaration public bool CanReuse(MultiTermsEnum parent) Parameters Type Name Description MultiTermsEnum parent Returns Type Description System.Boolean | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetPayload() Declaration public override BytesRef GetPayload() Returns Type Description BytesRef Overrides DocsAndPositionsEnum.GetPayload() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source NextPosition() Declaration public override int NextPosition() Returns Type Description System.Int32 Overrides DocsAndPositionsEnum.NextPosition() | Improve this Doc View Source Reset(MultiDocsAndPositionsEnum.EnumWithSlice[], Int32) Re-use and reset this instance on the provided slices. Declaration public MultiDocsAndPositionsEnum Reset(MultiDocsAndPositionsEnum.EnumWithSlice[] subs, int numSubs) Parameters Type Name Description MultiDocsAndPositionsEnum.EnumWithSlice [] subs System.Int32 numSubs Returns Type Description MultiDocsAndPositionsEnum | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocsEnum.EnumWithSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocsEnum.EnumWithSlice.html",
    "title": "Class MultiDocsEnum.EnumWithSlice | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocsEnum.EnumWithSlice Holds a DocsEnum along with the corresponding ReaderSlice . Inheritance System.Object MultiDocsEnum.EnumWithSlice Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class EnumWithSlice : object Properties | Improve this Doc View Source DocsEnum DocsEnum of this sub-reader. Declaration public DocsEnum DocsEnum { get; } Property Value Type Description DocsEnum | Improve this Doc View Source Slice ReaderSlice describing how this sub-reader fits into the composite reader. Declaration public ReaderSlice Slice { get; } Property Value Type Description ReaderSlice Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocsEnum.html",
    "title": "Class MultiDocsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocsEnum Exposes DocsEnum , merged from DocsEnum API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSetIterator DocsEnum MultiDocsEnum Inherited Members DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiDocsEnum : DocsEnum Constructors | Improve this Doc View Source MultiDocsEnum(MultiTermsEnum, Int32) Sole constructor Declaration public MultiDocsEnum(MultiTermsEnum parent, int subReaderCount) Parameters Type Name Description MultiTermsEnum parent The MultiTermsEnum that created us. System.Int32 subReaderCount How many sub-readers are being merged. Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source NumSubs How many sub-readers we are merging. Declaration public int NumSubs { get; } Property Value Type Description System.Int32 See Also Subs | Improve this Doc View Source Subs Returns sub-readers we are merging. Declaration public MultiDocsEnum.EnumWithSlice[] Subs { get; } Property Value Type Description MultiDocsEnum.EnumWithSlice [] Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source CanReuse(MultiTermsEnum) Returns true if this instance can be reused by the provided MultiTermsEnum . Declaration public bool CanReuse(MultiTermsEnum parent) Parameters Type Name Description MultiTermsEnum parent Returns Type Description System.Boolean | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.html",
    "title": "Class MultiDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocValues A wrapper for CompositeReader providing access to DocValues . NOTE : for multi readers, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. NOTE : this is very costly. @lucene.experimental This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object MultiDocValues Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MultiDocValues : object Methods | Improve this Doc View Source GetBinaryValues(IndexReader, String) Returns a BinaryDocValues for a reader's docvalues (potentially merging on-the-fly) This is a slow way to access binary values. Instead, access them per-segment with GetBinaryDocValues(String) Declaration public static BinaryDocValues GetBinaryValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description BinaryDocValues | Improve this Doc View Source GetDocsWithField(IndexReader, String) Returns a IBits for a reader's docsWithField (potentially merging on-the-fly) This is a slow way to access this bitset. Instead, access them per-segment with GetDocsWithField(String) Declaration public static IBits GetDocsWithField(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description IBits | Improve this Doc View Source GetNormValues(IndexReader, String) Returns a NumericDocValues for a reader's norms (potentially merging on-the-fly). This is a slow way to access normalization values. Instead, access them per-segment with GetNormValues(String) Declaration public static NumericDocValues GetNormValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetNumericValues(IndexReader, String) Returns a NumericDocValues for a reader's docvalues (potentially merging on-the-fly) This is a slow way to access numeric values. Instead, access them per-segment with GetNumericDocValues(String) Declaration public static NumericDocValues GetNumericValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetSortedSetValues(IndexReader, String) Returns a SortedSetDocValues for a reader's docvalues (potentially doing extremely slow things). This is an extremely slow way to access sorted values. Instead, access them per-segment with GetSortedSetDocValues(String) Declaration public static SortedSetDocValues GetSortedSetValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description SortedSetDocValues | Improve this Doc View Source GetSortedValues(IndexReader, String) Returns a SortedDocValues for a reader's docvalues (potentially doing extremely slow things). this is an extremely slow way to access sorted values. Instead, access them per-segment with GetSortedDocValues(String) Declaration public static SortedDocValues GetSortedValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description SortedDocValues"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.MultiSortedDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.MultiSortedDocValues.html",
    "title": "Class MultiDocValues.MultiSortedDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocValues.MultiSortedDocValues Implements SortedDocValues over n subs, using an MultiDocValues.OrdinalMap This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BinaryDocValues SortedDocValues MultiDocValues.MultiSortedDocValues Inherited Members SortedDocValues.Get(Int32, BytesRef) SortedDocValues.LookupTerm(BytesRef) SortedDocValues.GetTermsEnum() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MultiSortedDocValues : SortedDocValues Properties | Improve this Doc View Source DocStarts docbase for each leaf: parallel with Values Declaration public int[] DocStarts { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Mapping ordinal map mapping ords from values to global ord space Declaration public MultiDocValues.OrdinalMap Mapping { get; } Property Value Type Description MultiDocValues.OrdinalMap | Improve this Doc View Source ValueCount Declaration public override int ValueCount { get; } Property Value Type Description System.Int32 Overrides SortedDocValues.ValueCount | Improve this Doc View Source Values leaf values Declaration public SortedDocValues[] Values { get; } Property Value Type Description SortedDocValues [] Methods | Improve this Doc View Source GetOrd(Int32) Declaration public override int GetOrd(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int32 Overrides SortedDocValues.GetOrd(Int32) | Improve this Doc View Source LookupOrd(Int32, BytesRef) Declaration public override void LookupOrd(int ord, BytesRef result) Parameters Type Name Description System.Int32 ord BytesRef result Overrides SortedDocValues.LookupOrd(Int32, BytesRef)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.MultiSortedSetDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.MultiSortedSetDocValues.html",
    "title": "Class MultiDocValues.MultiSortedSetDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocValues.MultiSortedSetDocValues Implements MultiDocValues.MultiSortedSetDocValues over n subs, using an MultiDocValues.OrdinalMap This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SortedSetDocValues MultiDocValues.MultiSortedSetDocValues Inherited Members SortedSetDocValues.NO_MORE_ORDS SortedSetDocValues.LookupTerm(BytesRef) SortedSetDocValues.GetTermsEnum() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MultiSortedSetDocValues : SortedSetDocValues Properties | Improve this Doc View Source DocStarts docbase for each leaf: parallel with Values Declaration public int[] DocStarts { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Mapping ordinal map mapping ords from values to global ord space Declaration public MultiDocValues.OrdinalMap Mapping { get; } Property Value Type Description MultiDocValues.OrdinalMap | Improve this Doc View Source ValueCount Declaration public override long ValueCount { get; } Property Value Type Description System.Int64 Overrides SortedSetDocValues.ValueCount | Improve this Doc View Source Values leaf values Declaration public SortedSetDocValues[] Values { get; } Property Value Type Description SortedSetDocValues [] Methods | Improve this Doc View Source LookupOrd(Int64, BytesRef) Declaration public override void LookupOrd(long ord, BytesRef result) Parameters Type Name Description System.Int64 ord BytesRef result Overrides SortedSetDocValues.LookupOrd(Int64, BytesRef) | Improve this Doc View Source NextOrd() Declaration public override long NextOrd() Returns Type Description System.Int64 Overrides SortedSetDocValues.NextOrd() | Improve this Doc View Source SetDocument(Int32) Declaration public override void SetDocument(int docID) Parameters Type Name Description System.Int32 docID Overrides SortedSetDocValues.SetDocument(Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.OrdinalMap.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.OrdinalMap.html",
    "title": "Class MultiDocValues.OrdinalMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocValues.OrdinalMap maps per-segment ordinals to/from global ordinal space Inheritance System.Object MultiDocValues.OrdinalMap Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class OrdinalMap : object Constructors | Improve this Doc View Source OrdinalMap(Object, TermsEnum[]) Creates an ordinal map that allows mapping ords to/from a merged space from subs . Declaration public OrdinalMap(object owner, TermsEnum[] subs) Parameters Type Name Description System.Object owner a cache key TermsEnum [] subs TermsEnum s that support Ord . They need not be dense (e.g. can be FilteredTermsEnums). Properties | Improve this Doc View Source ValueCount Returns the total number of unique terms in global ord space. Declaration public virtual long ValueCount { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source GetFirstSegmentNumber(Int64) Given a global ordinal, returns the index of the first segment that contains this term. Declaration public virtual int GetFirstSegmentNumber(long globalOrd) Parameters Type Name Description System.Int64 globalOrd Returns Type Description System.Int32 | Improve this Doc View Source GetFirstSegmentOrd(Int64) Given global ordinal, returns the ordinal of the first segment which contains this ordinal (the corresponding to the segment return GetFirstSegmentNumber(Int64) ). Declaration public virtual long GetFirstSegmentOrd(long globalOrd) Parameters Type Name Description System.Int64 globalOrd Returns Type Description System.Int64 | Improve this Doc View Source GetGlobalOrd(Int32, Int64) Given a segment number and segment ordinal, returns the corresponding global ordinal. Declaration public virtual long GetGlobalOrd(int segmentIndex, long segmentOrd) Parameters Type Name Description System.Int32 segmentIndex System.Int64 segmentOrd Returns Type Description System.Int64 | Improve this Doc View Source RamBytesUsed() Returns total byte size used by this ordinal map. Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiFields.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiFields.html",
    "title": "Class MultiFields | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiFields Exposes flex API, merged from flex API of sub-segments. This is useful when you're interacting with an IndexReader implementation that consists of sequential sub-readers (eg DirectoryReader or MultiReader ). NOTE : for composite readers, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields MultiFields Inherited Members Fields.UniqueTermCount Fields.EMPTY_ARRAY Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiFields : Fields Constructors | Improve this Doc View Source MultiFields(Fields[], ReaderSlice[]) Expert: construct a new MultiFields instance directly. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public MultiFields(Fields[] subs, ReaderSlice[] subSlices) Parameters Type Name Description Fields [] subs ReaderSlice [] subSlices Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetFields(IndexReader) Returns a single Fields instance for this reader, merging fields/terms/docs/positions on the fly. This method will return null if the reader has no postings. NOTE : this is a slow way to access postings. It's better to get the sub-readers and iterate through them yourself. Declaration public static Fields GetFields(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Fields | Improve this Doc View Source GetIndexedFields(IndexReader) Call this to get the (merged) FieldInfos representing the set of indexed fields only for a composite reader. NOTE: the returned field numbers will likely not correspond to the actual field numbers in the underlying readers, and codec metadata ( GetAttribute(String) ) will be unavailable. Declaration public static ICollection<string> GetIndexedFields(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description ICollection < System.String > | Improve this Doc View Source GetLiveDocs(IndexReader) Returns a single IBits instance for this reader, merging live Documents on the fly. This method will return null if the reader has no deletions. NOTE : this is a very slow way to access live docs. For example, each IBits access will require a binary search. It's better to get the sub-readers and iterate through them yourself. Declaration public static IBits GetLiveDocs(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description IBits | Improve this Doc View Source GetMergedFieldInfos(IndexReader) Call this to get the (merged) FieldInfos for a composite reader. NOTE: the returned field numbers will likely not correspond to the actual field numbers in the underlying readers, and codec metadata ( GetAttribute(String) ) will be unavailable. Declaration public static FieldInfos GetMergedFieldInfos(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description FieldInfos | Improve this Doc View Source GetTermDocsEnum(IndexReader, IBits, String, BytesRef) Returns DocsEnum for the specified field & term. This will return null if the field or term does not exist. Declaration public static DocsEnum GetTermDocsEnum(IndexReader r, IBits liveDocs, string field, BytesRef term) Parameters Type Name Description IndexReader r IBits liveDocs System.String field BytesRef term Returns Type Description DocsEnum | Improve this Doc View Source GetTermDocsEnum(IndexReader, IBits, String, BytesRef, DocsFlags) Returns DocsEnum for the specified field & term, with control over whether freqs are required. Some codecs may be able to optimize their implementation when freqs are not required. This will return null if the field or term does not exist. See Docs(IBits, DocsEnum, DocsFlags) . Declaration public static DocsEnum GetTermDocsEnum(IndexReader r, IBits liveDocs, string field, BytesRef term, DocsFlags flags) Parameters Type Name Description IndexReader r IBits liveDocs System.String field BytesRef term DocsFlags flags Returns Type Description DocsEnum | Improve this Doc View Source GetTermPositionsEnum(IndexReader, IBits, String, BytesRef) Returns DocsAndPositionsEnum for the specified field & term. This will return null if the field or term does not exist or positions were not indexed. Declaration public static DocsAndPositionsEnum GetTermPositionsEnum(IndexReader r, IBits liveDocs, string field, BytesRef term) Parameters Type Name Description IndexReader r IBits liveDocs System.String field BytesRef term Returns Type Description DocsAndPositionsEnum See Also GetTermPositionsEnum(IndexReader, IBits, String, BytesRef, DocsAndPositionsFlags) | Improve this Doc View Source GetTermPositionsEnum(IndexReader, IBits, String, BytesRef, DocsAndPositionsFlags) Returns DocsAndPositionsEnum for the specified field & term, with control over whether offsets and payloads are required. Some codecs may be able to optimize their implementation when offsets and/or payloads are not required. This will return null if the field or term does not exist or positions were not indexed. See DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) . Declaration public static DocsAndPositionsEnum GetTermPositionsEnum(IndexReader r, IBits liveDocs, string field, BytesRef term, DocsAndPositionsFlags flags) Parameters Type Name Description IndexReader r IBits liveDocs System.String field BytesRef term DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum | Improve this Doc View Source GetTerms(IndexReader, String) this method may return null if the field does not exist. Declaration public static Terms GetTerms(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description Terms | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiReader.html",
    "title": "Class MultiReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiReader A CompositeReader which reads multiple indexes, appending their content. It can be used to create a view on several sub-readers (like DirectoryReader ) and execute searches on it. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader < IndexReader > MultiReader Inherited Members BaseCompositeReader<IndexReader>.GetTermVectors(Int32) BaseCompositeReader<IndexReader>.NumDocs BaseCompositeReader<IndexReader>.MaxDoc BaseCompositeReader<IndexReader>.Document(Int32, StoredFieldVisitor) BaseCompositeReader<IndexReader>.DocFreq(Term) BaseCompositeReader<IndexReader>.TotalTermFreq(Term) BaseCompositeReader<IndexReader>.GetSumDocFreq(String) BaseCompositeReader<IndexReader>.GetDocCount(String) BaseCompositeReader<IndexReader>.GetSumTotalTermFreq(String) BaseCompositeReader<IndexReader>.ReaderIndex(Int32) BaseCompositeReader<IndexReader>.ReaderBase(Int32) BaseCompositeReader<IndexReader>.GetSequentialSubReaders() CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MultiReader : BaseCompositeReader<IndexReader> Constructors | Improve this Doc View Source MultiReader(IndexReader[]) Construct a MultiReader aggregating the named set of (sub)readers. Note that all subreaders are closed if this Multireader is closed. Declaration public MultiReader(params IndexReader[] subReaders) Parameters Type Name Description IndexReader [] subReaders set of (sub)readers | Improve this Doc View Source MultiReader(IndexReader[], Boolean) Construct a MultiReader aggregating the named set of (sub)readers. Declaration public MultiReader(IndexReader[] subReaders, bool closeSubReaders) Parameters Type Name Description IndexReader [] subReaders set of (sub)readers; this array will be cloned. System.Boolean closeSubReaders indicates whether the subreaders should be disposed when this MultiReader is disposed Methods | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose()"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiTerms.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiTerms.html",
    "title": "Class MultiTerms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTerms Exposes flex API, merged from flex API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Terms MultiTerms Inherited Members Terms.EMPTY_ARRAY Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiTerms : Terms Constructors | Improve this Doc View Source MultiTerms(Terms[], ReaderSlice[]) Sole constructor. Declaration public MultiTerms(Terms[] subs, ReaderSlice[] subSlices) Parameters Type Name Description Terms [] subs The Terms instances of all sub-readers. ReaderSlice [] subSlices A parallel array (matching subs ) describing the sub-reader slices. Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Overrides Terms.Comparer | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Terms.Count | Improve this Doc View Source DocCount Declaration public override int DocCount { get; } Property Value Type Description System.Int32 Overrides Terms.DocCount | Improve this Doc View Source HasFreqs Declaration public override bool HasFreqs { get; } Property Value Type Description System.Boolean Overrides Terms.HasFreqs | Improve this Doc View Source HasOffsets Declaration public override bool HasOffsets { get; } Property Value Type Description System.Boolean Overrides Terms.HasOffsets | Improve this Doc View Source HasPayloads Declaration public override bool HasPayloads { get; } Property Value Type Description System.Boolean Overrides Terms.HasPayloads | Improve this Doc View Source HasPositions Declaration public override bool HasPositions { get; } Property Value Type Description System.Boolean Overrides Terms.HasPositions | Improve this Doc View Source SumDocFreq Declaration public override long SumDocFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumDocFreq | Improve this Doc View Source SumTotalTermFreq Declaration public override long SumTotalTermFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumTotalTermFreq Methods | Improve this Doc View Source GetIterator(TermsEnum) Declaration public override TermsEnum GetIterator(TermsEnum reuse) Parameters Type Name Description TermsEnum reuse Returns Type Description TermsEnum Overrides Terms.GetIterator(TermsEnum) | Improve this Doc View Source Intersect(CompiledAutomaton, BytesRef) Declaration public override TermsEnum Intersect(CompiledAutomaton compiled, BytesRef startTerm) Parameters Type Name Description CompiledAutomaton compiled BytesRef startTerm Returns Type Description TermsEnum Overrides Terms.Intersect(CompiledAutomaton, BytesRef)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.html",
    "title": "Class MultiTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermsEnum Exposes TermsEnum API, merged from TermsEnum API of sub-segments. This does a merge sort, by term text, of the sub-readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsEnum MultiTermsEnum Implements IBytesRefIterator Inherited Members TermsEnum.Attributes TermsEnum.SeekExact(BytesRef, TermState) TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.GetTermState() TermsEnum.EMPTY Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiTermsEnum : TermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source MultiTermsEnum(ReaderSlice[]) Sole constructor. Declaration public MultiTermsEnum(ReaderSlice[] slices) Parameters Type Name Description ReaderSlice [] slices Which sub-reader slices we should merge. Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Overrides TermsEnum.Comparer | Improve this Doc View Source DocFreq Declaration public override int DocFreq { get; } Property Value Type Description System.Int32 Overrides TermsEnum.DocFreq | Improve this Doc View Source MatchArray Returns sub-reader slices positioned to the current term. Declaration public MultiTermsEnum.TermsEnumWithSlice[] MatchArray { get; } Property Value Type Description MultiTermsEnum.TermsEnumWithSlice [] | Improve this Doc View Source MatchCount Returns how many sub-reader slices contain the current term. Declaration public int MatchCount { get; } Property Value Type Description System.Int32 See Also MatchArray | Improve this Doc View Source Ord Declaration public override long Ord { get; } Property Value Type Description System.Int64 Overrides TermsEnum.Ord | Improve this Doc View Source Term Declaration public override BytesRef Term { get; } Property Value Type Description BytesRef Overrides TermsEnum.Term | Improve this Doc View Source TotalTermFreq Declaration public override long TotalTermFreq { get; } Property Value Type Description System.Int64 Overrides TermsEnum.TotalTermFreq Methods | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides TermsEnum.Docs(IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides TermsEnum.Next() | Improve this Doc View Source Reset(MultiTermsEnum.TermsEnumIndex[]) The terms array must be newly created TermsEnum , ie Next() has not yet been called. Declaration public TermsEnum Reset(MultiTermsEnum.TermsEnumIndex[] termsEnumsIndex) Parameters Type Name Description MultiTermsEnum.TermsEnumIndex [] termsEnumsIndex Returns Type Description TermsEnum | Improve this Doc View Source SeekCeil(BytesRef) Declaration public override TermsEnum.SeekStatus SeekCeil(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description TermsEnum.SeekStatus Overrides TermsEnum.SeekCeil(BytesRef) | Improve this Doc View Source SeekExact(BytesRef) Declaration public override bool SeekExact(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Boolean Overrides TermsEnum.SeekExact(BytesRef) | Improve this Doc View Source SeekExact(Int64) Declaration public override void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Overrides TermsEnum.SeekExact(Int64) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.TermsEnumIndex.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.TermsEnumIndex.html",
    "title": "Class MultiTermsEnum.TermsEnumIndex | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermsEnum.TermsEnumIndex Inheritance System.Object MultiTermsEnum.TermsEnumIndex Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class TermsEnumIndex : object Constructors | Improve this Doc View Source TermsEnumIndex(TermsEnum, Int32) Declaration public TermsEnumIndex(TermsEnum termsEnum, int subIndex) Parameters Type Name Description TermsEnum termsEnum System.Int32 subIndex Fields | Improve this Doc View Source EMPTY_ARRAY Declaration public static readonly MultiTermsEnum.TermsEnumIndex[] EMPTY_ARRAY Field Value Type Description MultiTermsEnum.TermsEnumIndex []"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.TermsEnumWithSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.TermsEnumWithSlice.html",
    "title": "Class MultiTermsEnum.TermsEnumWithSlice | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermsEnum.TermsEnumWithSlice Inheritance System.Object MultiTermsEnum.TermsEnumWithSlice Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class TermsEnumWithSlice : object Constructors | Improve this Doc View Source TermsEnumWithSlice(Int32, ReaderSlice) Declaration public TermsEnumWithSlice(int index, ReaderSlice subSlice) Parameters Type Name Description System.Int32 index ReaderSlice subSlice Properties | Improve this Doc View Source Current Declaration public BytesRef Current { get; set; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Reset(TermsEnum, BytesRef) Declaration public void Reset(TermsEnum terms, BytesRef term) Parameters Type Name Description TermsEnum terms BytesRef term | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.NoDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.NoDeletionPolicy.html",
    "title": "Class NoDeletionPolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoDeletionPolicy An IndexDeletionPolicy which keeps all index commits around, never deleting them. This class is a singleton and can be accessed by referencing INSTANCE . Inheritance System.Object IndexDeletionPolicy NoDeletionPolicy Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class NoDeletionPolicy : IndexDeletionPolicy Fields | Improve this Doc View Source INSTANCE The single instance of this class. Declaration public static readonly IndexDeletionPolicy INSTANCE Field Value Type Description IndexDeletionPolicy Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides IndexDeletionPolicy.Clone() | Improve this Doc View Source OnCommit<T>(IList<T>) Declaration public override void OnCommit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnCommit<T>(IList<T>) | Improve this Doc View Source OnInit<T>(IList<T>) Declaration public override void OnInit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnInit<T>(IList<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Index.NoMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.NoMergePolicy.html",
    "title": "Class NoMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoMergePolicy A MergePolicy which never returns merges to execute (hence it's name). It is also a singleton and can be accessed through NO_COMPOUND_FILES if you want to indicate the index does not use compound files, or through COMPOUND_FILES otherwise. Use it if you want to prevent an IndexWriter from ever executing merges, without going through the hassle of tweaking a merge policy's settings to achieve that, such as changing its merge factor. Inheritance System.Object MergePolicy NoMergePolicy Inherited Members MergePolicy.DEFAULT_NO_CFS_RATIO MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.Dispose() MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class NoMergePolicy : MergePolicy Fields | Improve this Doc View Source COMPOUND_FILES A singleton NoMergePolicy which indicates the index uses compound files. Declaration public static readonly MergePolicy COMPOUND_FILES Field Value Type Description MergePolicy | Improve this Doc View Source NO_COMPOUND_FILES A singleton NoMergePolicy which indicates the index does not use compound files. Declaration public static readonly MergePolicy NO_COMPOUND_FILES Field Value Type Description MergePolicy Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos segmentInfos System.Int32 maxSegmentCount IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source SetIndexWriter(IndexWriter) Declaration public override void SetIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer Overrides MergePolicy.SetIndexWriter(IndexWriter) | Improve this Doc View Source Size(SegmentCommitInfo) Declaration protected override long Size(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 Overrides MergePolicy.Size(SegmentCommitInfo) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source UseCompoundFile(SegmentInfos, SegmentCommitInfo) Declaration public override bool UseCompoundFile(SegmentInfos segments, SegmentCommitInfo newSegment) Parameters Type Name Description SegmentInfos segments SegmentCommitInfo newSegment Returns Type Description System.Boolean Overrides MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo)"
  },
  "api/Lucene.Net/Lucene.Net.Index.NoMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.NoMergeScheduler.html",
    "title": "Class NoMergeScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoMergeScheduler A MergeScheduler which never executes any merges. It is also a singleton and can be accessed through INSTANCE . Use it if you want to prevent an IndexWriter from ever executing merges, regardless of the MergePolicy used. Note that you can achieve the same thing by using NoMergePolicy , however with NoMergeScheduler you also ensure that no unnecessary code of any MergeScheduler implementation is ever executed. Hence it is recommended to use both if you want to disable merges from ever happening. Inheritance System.Object MergeScheduler NoMergeScheduler Implements IMergeScheduler IDisposable Inherited Members MergeScheduler.Dispose() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class NoMergeScheduler : MergeScheduler, IMergeScheduler, IDisposable Fields | Improve this Doc View Source INSTANCE The single instance of NoMergeScheduler Declaration public static readonly MergeScheduler INSTANCE Field Value Type Description MergeScheduler Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides MergeScheduler.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergeScheduler.Dispose(Boolean) | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Declaration public override void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer MergeTrigger trigger System.Boolean newMergesFound Overrides MergeScheduler.Merge(IndexWriter, MergeTrigger, Boolean) Implements IMergeScheduler IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.NumericDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.NumericDocValues.html",
    "title": "Class NumericDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericDocValues A per-document numeric value. Inheritance System.Object NumericDocValues Int64Values PackedInt32s.Reader Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class NumericDocValues : object Constructors | Improve this Doc View Source NumericDocValues() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected NumericDocValues() Methods | Improve this Doc View Source Get(Int32) Returns the numeric value for the specified document ID. Declaration public abstract long Get(int docID) Parameters Type Name Description System.Int32 docID document ID to lookup Returns Type Description System.Int64 numeric value"
  },
  "api/Lucene.Net/Lucene.Net.Index.OpenMode.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.OpenMode.html",
    "title": "Enum OpenMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum OpenMode Specifies the open mode for IndexWriter . Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum OpenMode : int Fields Name Description APPEND Opens an existing index. CREATE Creates a new index or overwrites an existing one. CREATE_OR_APPEND Creates a new index if one does not exist, otherwise it opens the index and documents will be appended."
  },
  "api/Lucene.Net/Lucene.Net.Index.OrdTermState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.OrdTermState.html",
    "title": "Class OrdTermState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OrdTermState An ordinal based TermState This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermState OrdTermState BlockTermState Inherited Members TermState.Clone() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class OrdTermState : TermState Constructors | Improve this Doc View Source OrdTermState() Sole constructor. Declaration public OrdTermState() Properties | Improve this Doc View Source Ord Term ordinal, i.e. it's position in the full list of sorted terms. Declaration public long Ord { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CopyFrom(TermState) Declaration public override void CopyFrom(TermState other) Parameters Type Name Description TermState other Overrides TermState.CopyFrom(TermState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides TermState.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Index.ParallelAtomicReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ParallelAtomicReader.html",
    "title": "Class ParallelAtomicReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParallelAtomicReader An AtomicReader which reads multiple, parallel indexes. Each index added must have the same number of documents, but typically each contains different fields. Deletions are taken from the first reader. Each document contains the union of the fields of all documents with the same document number. When searching, matches for a query term are from the first index added that has the field. This is useful, e.g., with collections that have large fields which change rarely and small fields that change more frequently. The smaller fields may be re-indexed in a new index and both indexes may be searched together. Warning: It is up to you to make sure all indexes are created and modified the same way. For example, if you add documents to one index, you need to add the same documents in the same order to the other indexes. Failure to do so will result in undefined behavior . Inheritance System.Object IndexReader AtomicReader ParallelAtomicReader Inherited Members AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class ParallelAtomicReader : AtomicReader Constructors | Improve this Doc View Source ParallelAtomicReader(AtomicReader[]) Create a ParallelAtomicReader based on the provided readers; auto-disposes the given readers on Dispose() . Declaration public ParallelAtomicReader(params AtomicReader[] readers) Parameters Type Name Description AtomicReader [] readers | Improve this Doc View Source ParallelAtomicReader(Boolean, AtomicReader[]) Create a ParallelAtomicReader based on the provided readers . Declaration public ParallelAtomicReader(bool closeSubReaders, params AtomicReader[] readers) Parameters Type Name Description System.Boolean closeSubReaders AtomicReader [] readers | Improve this Doc View Source ParallelAtomicReader(Boolean, AtomicReader[], AtomicReader[]) Expert: create a ParallelAtomicReader based on the provided readers and storedFieldsReaders ; when a document is loaded, only storedFieldsReaders will be used. Declaration public ParallelAtomicReader(bool closeSubReaders, AtomicReader[] readers, AtomicReader[] storedFieldsReaders) Parameters Type Name Description System.Boolean closeSubReaders AtomicReader [] readers AtomicReader [] storedFieldsReaders Properties | Improve this Doc View Source FieldInfos Get the FieldInfos describing all fields in this reader. NOTE: the returned field numbers will likely not correspond to the actual field numbers in the underlying readers, and codec metadata ( GetAttribute(String) will be unavailable. Declaration public override FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos Overrides AtomicReader.FieldInfos | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides AtomicReader.Fields | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides AtomicReader.LiveDocs | Improve this Doc View Source MaxDoc Declaration public override int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides AtomicReader.CheckIntegrity() | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides AtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides AtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides AtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides AtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.ParallelCompositeReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ParallelCompositeReader.html",
    "title": "Class ParallelCompositeReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParallelCompositeReader A CompositeReader which reads multiple, parallel indexes. Each index added must have the same number of documents, and exactly the same hierarchical subreader structure, but typically each contains different fields. Deletions are taken from the first reader. Each document contains the union of the fields of all documents with the same document number. When searching, matches for a query term are from the first index added that has the field. This is useful, e.g., with collections that have large fields which change rarely and small fields that change more frequently. The smaller fields may be re-indexed in a new index and both indexes may be searched together. Warning: It is up to you to make sure all indexes are created and modified the same way. For example, if you add documents to one index, you need to add the same documents in the same order to the other indexes. Failure to do so will result in undefined behavior . A good strategy to create suitable indexes with IndexWriter is to use LogDocMergePolicy , as this one does not reorder documents during merging (like TieredMergePolicy ) and triggers merges by number of documents per segment. If you use different MergePolicy s it might happen that the segment structure of your index is no longer predictable. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader < IndexReader > ParallelCompositeReader Inherited Members BaseCompositeReader<IndexReader>.GetTermVectors(Int32) BaseCompositeReader<IndexReader>.NumDocs BaseCompositeReader<IndexReader>.MaxDoc BaseCompositeReader<IndexReader>.Document(Int32, StoredFieldVisitor) BaseCompositeReader<IndexReader>.DocFreq(Term) BaseCompositeReader<IndexReader>.TotalTermFreq(Term) BaseCompositeReader<IndexReader>.GetSumDocFreq(String) BaseCompositeReader<IndexReader>.GetDocCount(String) BaseCompositeReader<IndexReader>.GetSumTotalTermFreq(String) BaseCompositeReader<IndexReader>.ReaderIndex(Int32) BaseCompositeReader<IndexReader>.ReaderBase(Int32) BaseCompositeReader<IndexReader>.GetSequentialSubReaders() CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class ParallelCompositeReader : BaseCompositeReader<IndexReader> Constructors | Improve this Doc View Source ParallelCompositeReader(CompositeReader[]) Create a ParallelCompositeReader based on the provided readers; auto-disposes the given readers on Dispose() . Declaration public ParallelCompositeReader(params CompositeReader[] readers) Parameters Type Name Description CompositeReader [] readers | Improve this Doc View Source ParallelCompositeReader(Boolean, CompositeReader[]) Create a ParallelCompositeReader based on the provided readers . Declaration public ParallelCompositeReader(bool closeSubReaders, params CompositeReader[] readers) Parameters Type Name Description System.Boolean closeSubReaders CompositeReader [] readers | Improve this Doc View Source ParallelCompositeReader(Boolean, CompositeReader[], CompositeReader[]) Expert: create a ParallelCompositeReader based on the provided readers and storedFieldReaders ; when a document is loaded, only storedFieldReaders will be used. Declaration public ParallelCompositeReader(bool closeSubReaders, CompositeReader[] readers, CompositeReader[] storedFieldReaders) Parameters Type Name Description System.Boolean closeSubReaders CompositeReader [] readers CompositeReader [] storedFieldReaders Methods | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose()"
  },
  "api/Lucene.Net/Lucene.Net.Index.PersistentSnapshotDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.PersistentSnapshotDeletionPolicy.html",
    "title": "Class PersistentSnapshotDeletionPolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PersistentSnapshotDeletionPolicy A SnapshotDeletionPolicy which adds a persistence layer so that snapshots can be maintained across the life of an application. The snapshots are persisted in a Directory and are committed as soon as Snapshot() or Release(IndexCommit) is called. NOTE: Sharing PersistentSnapshotDeletionPolicy s that write to the same directory across IndexWriter s will corrupt snapshots. You should make sure every IndexWriter has its own PersistentSnapshotDeletionPolicy and that they all write to a different Directory . It is OK to use the same Directory that holds the index. This class adds a Release(Int64) method to release commits from a previous snapshot's Generation . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexDeletionPolicy SnapshotDeletionPolicy PersistentSnapshotDeletionPolicy Inherited Members SnapshotDeletionPolicy.m_refCounts SnapshotDeletionPolicy.m_indexCommits SnapshotDeletionPolicy.m_lastCommit SnapshotDeletionPolicy.OnCommit<T>(IList<T>) SnapshotDeletionPolicy.OnInit<T>(IList<T>) SnapshotDeletionPolicy.ReleaseGen(Int64) SnapshotDeletionPolicy.IncRef(IndexCommit) SnapshotDeletionPolicy.GetSnapshots() SnapshotDeletionPolicy.SnapshotCount SnapshotDeletionPolicy.GetIndexCommit(Int64) SnapshotDeletionPolicy.Clone() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class PersistentSnapshotDeletionPolicy : SnapshotDeletionPolicy Constructors | Improve this Doc View Source PersistentSnapshotDeletionPolicy(IndexDeletionPolicy, Directory) PersistentSnapshotDeletionPolicy wraps another IndexDeletionPolicy to enable flexible snapshotting, passing CREATE_OR_APPEND by default. Declaration public PersistentSnapshotDeletionPolicy(IndexDeletionPolicy primary, Directory dir) Parameters Type Name Description IndexDeletionPolicy primary the IndexDeletionPolicy that is used on non-snapshotted commits. Snapshotted commits, by definition, are not deleted until explicitly released via Release(IndexCommit) . Directory dir the Directory which will be used to persist the snapshots information. | Improve this Doc View Source PersistentSnapshotDeletionPolicy(IndexDeletionPolicy, Directory, OpenMode) PersistentSnapshotDeletionPolicy wraps another IndexDeletionPolicy to enable flexible snapshotting. Declaration public PersistentSnapshotDeletionPolicy(IndexDeletionPolicy primary, Directory dir, OpenMode mode) Parameters Type Name Description IndexDeletionPolicy primary the IndexDeletionPolicy that is used on non-snapshotted commits. Snapshotted commits, by definition, are not deleted until explicitly released via Release(IndexCommit) . Directory dir the Directory which will be used to persist the snapshots information. OpenMode mode specifies whether a new index should be created, deleting all existing snapshots information (immediately), or open an existing index, initializing the class with the snapshots information. Fields | Improve this Doc View Source SNAPSHOTS_PREFIX Prefix used for the save file. Declaration public static readonly string SNAPSHOTS_PREFIX Field Value Type Description System.String Properties | Improve this Doc View Source LastSaveFile Returns the file name the snapshots are currently saved to, or null if no snapshots have been saved. Declaration public virtual string LastSaveFile { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Release(IndexCommit) Deletes a snapshotted commit. Once this method returns, the snapshot information is persisted in the directory. Declaration public override void Release(IndexCommit commit) Parameters Type Name Description IndexCommit commit Overrides SnapshotDeletionPolicy.Release(IndexCommit) See Also Release ( IndexCommit ) | Improve this Doc View Source Release(Int64) Deletes a snapshotted commit by generation. Once this method returns, the snapshot information is persisted in the directory. Declaration public virtual void Release(long gen) Parameters Type Name Description System.Int64 gen See Also Generation Release ( IndexCommit ) | Improve this Doc View Source Snapshot() Snapshots the last commit. Once this method returns, the snapshot information is persisted in the directory. Declaration public override IndexCommit Snapshot() Returns Type Description IndexCommit Overrides SnapshotDeletionPolicy.Snapshot() See Also Snapshot ()"
  },
  "api/Lucene.Net/Lucene.Net.Index.RandomAccessOrds.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.RandomAccessOrds.html",
    "title": "Class RandomAccessOrds | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RandomAccessOrds Extension of SortedSetDocValues that supports random access to the ordinals of a document. Operations via this API are independent of the iterator api ( NextOrd() ) and do not impact its state. Codecs can optionally extend this API if they support constant-time access to ordinals for the document. Inheritance System.Object SortedSetDocValues RandomAccessOrds Inherited Members SortedSetDocValues.NO_MORE_ORDS SortedSetDocValues.NextOrd() SortedSetDocValues.SetDocument(Int32) SortedSetDocValues.LookupOrd(Int64, BytesRef) SortedSetDocValues.ValueCount SortedSetDocValues.LookupTerm(BytesRef) SortedSetDocValues.GetTermsEnum() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class RandomAccessOrds : SortedSetDocValues Constructors | Improve this Doc View Source RandomAccessOrds() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected RandomAccessOrds() Methods | Improve this Doc View Source Cardinality() Returns the cardinality for the current document (previously set by SetDocument(Int32) . Declaration public abstract int Cardinality() Returns Type Description System.Int32 | Improve this Doc View Source OrdAt(Int32) Retrieve the ordinal for the current document (previously set by SetDocument(Int32) at the specified index. An index ranges from 0 to Cardinality()-1 . The first ordinal value is at index 0 , the next at index 1 , and so on, as for array indexing. Declaration public abstract long OrdAt(int index) Parameters Type Name Description System.Int32 index index of the ordinal for the document. Returns Type Description System.Int64 ordinal for the document at the specified index."
  },
  "api/Lucene.Net/Lucene.Net.Index.ReaderManager.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ReaderManager.html",
    "title": "Class ReaderManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReaderManager Utility class to safely share DirectoryReader instances across multiple threads, while periodically reopening. This class ensures each reader is disposed only once all threads have finished using it. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ReferenceManager < DirectoryReader > ReaderManager Inherited Members ReferenceManager<DirectoryReader>.Current ReferenceManager<DirectoryReader>.Acquire() ReferenceManager<DirectoryReader>.Dispose() ReferenceManager<DirectoryReader>.Dispose(Boolean) ReferenceManager<DirectoryReader>.MaybeRefresh() ReferenceManager<DirectoryReader>.MaybeRefreshBlocking() ReferenceManager<DirectoryReader>.AfterMaybeRefresh() ReferenceManager<DirectoryReader>.Release(DirectoryReader) ReferenceManager<DirectoryReader>.AddListener(ReferenceManager.IRefreshListener) ReferenceManager<DirectoryReader>.RemoveListener(ReferenceManager.IRefreshListener) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class ReaderManager : ReferenceManager<DirectoryReader> Constructors | Improve this Doc View Source ReaderManager(IndexWriter, Boolean) Creates and returns a new ReaderManager from the given IndexWriter . Declaration public ReaderManager(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer the IndexWriter to open the IndexReader from. System.Boolean applyAllDeletes If true , all buffered deletes will be applied (made visible) in the IndexSearcher / DirectoryReader . If false , the deletes may or may not be applied, but remain buffered (in IndexWriter ) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false . See OpenIfChanged(DirectoryReader, IndexWriter, Boolean) . | Improve this Doc View Source ReaderManager(Directory) Creates and returns a new ReaderManager from the given Directory . Declaration public ReaderManager(Directory dir) Parameters Type Name Description Directory dir the directory to open the DirectoryReader on. Methods | Improve this Doc View Source DecRef(DirectoryReader) Declaration protected override void DecRef(DirectoryReader reference) Parameters Type Name Description DirectoryReader reference Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Index.DirectoryReader>.DecRef(Lucene.Net.Index.DirectoryReader) | Improve this Doc View Source GetRefCount(DirectoryReader) Declaration protected override int GetRefCount(DirectoryReader reference) Parameters Type Name Description DirectoryReader reference Returns Type Description System.Int32 Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Index.DirectoryReader>.GetRefCount(Lucene.Net.Index.DirectoryReader) | Improve this Doc View Source RefreshIfNeeded(DirectoryReader) Declaration protected override DirectoryReader RefreshIfNeeded(DirectoryReader referenceToRefresh) Parameters Type Name Description DirectoryReader referenceToRefresh Returns Type Description DirectoryReader Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Index.DirectoryReader>.RefreshIfNeeded(Lucene.Net.Index.DirectoryReader) | Improve this Doc View Source TryIncRef(DirectoryReader) Declaration protected override bool TryIncRef(DirectoryReader reference) Parameters Type Name Description DirectoryReader reference Returns Type Description System.Boolean Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Index.DirectoryReader>.TryIncRef(Lucene.Net.Index.DirectoryReader) Extension Methods ReferenceManagerExtensions.GetContext<T>(ReferenceManager<T>) See Also SearcherManager"
  },
  "api/Lucene.Net/Lucene.Net.Index.ReaderSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ReaderSlice.html",
    "title": "Class ReaderSlice | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReaderSlice Subreader slice from a parent composite reader. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ReaderSlice Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class ReaderSlice : object Constructors | Improve this Doc View Source ReaderSlice(Int32, Int32, Int32) Sole constructor. Declaration public ReaderSlice(int start, int length, int readerIndex) Parameters Type Name Description System.Int32 start System.Int32 length System.Int32 readerIndex Fields | Improve this Doc View Source EMPTY_ARRAY Zero-length ReaderSlice array. Declaration public static readonly ReaderSlice[] EMPTY_ARRAY Field Value Type Description ReaderSlice [] Properties | Improve this Doc View Source Length Number of documents in this slice. Declaration public int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ReaderIndex Sub-reader index for this slice. Declaration public int ReaderIndex { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Start Document ID this slice starts from. Declaration public int Start { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.ReaderUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ReaderUtil.html",
    "title": "Class ReaderUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReaderUtil Common util methods for dealing with IndexReader s and IndexReaderContext s. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ReaderUtil Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class ReaderUtil : object Methods | Improve this Doc View Source GetTopLevelContext(IndexReaderContext) Walks up the reader tree and return the given context's top level reader context, or in other words the reader tree's root context. Declaration public static IndexReaderContext GetTopLevelContext(IndexReaderContext context) Parameters Type Name Description IndexReaderContext context Returns Type Description IndexReaderContext | Improve this Doc View Source SubIndex(Int32, IList<AtomicReaderContext>) Returns index of the searcher/reader for document n in the array used to construct this searcher/reader. Declaration public static int SubIndex(int n, IList<AtomicReaderContext> leaves) Parameters Type Name Description System.Int32 n IList < AtomicReaderContext > leaves Returns Type Description System.Int32 | Improve this Doc View Source SubIndex(Int32, Int32[]) Returns index of the searcher/reader for document n in the array used to construct this searcher/reader. Declaration public static int SubIndex(int n, int[] docStarts) Parameters Type Name Description System.Int32 n System.Int32 [] docStarts Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentCommitInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentCommitInfo.html",
    "title": "Class SegmentCommitInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentCommitInfo Embeds a [read-only] SegmentInfo and adds per-commit fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentCommitInfo Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SegmentCommitInfo : object Constructors | Improve this Doc View Source SegmentCommitInfo(SegmentInfo, Int32, Int64, Int64) Sole constructor. Declaration public SegmentCommitInfo(SegmentInfo info, int delCount, long delGen, long fieldInfosGen) Parameters Type Name Description SegmentInfo info SegmentInfo that we wrap System.Int32 delCount number of deleted documents in this segment System.Int64 delGen deletion generation number (used to name deletion files) System.Int64 fieldInfosGen FieldInfos generation number (used to name field-infos files) Properties | Improve this Doc View Source DelCount Returns the number of deleted docs in the segment. Declaration public virtual int DelCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source DelGen Returns generation number of the live docs file or -1 if there are no deletes yet. Declaration public virtual long DelGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source FieldInfosGen Returns the generation number of the field infos file or -1 if there are no field updates yet. Declaration public virtual long FieldInfosGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source HasDeletions Returns true if there are any deletions for the segment at this commit. Declaration public virtual bool HasDeletions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasFieldUpdates Returns true if there are any field updates for the segment in this commit. Declaration public virtual bool HasFieldUpdates { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Info The SegmentInfo that we wrap. Declaration public SegmentInfo Info { get; } Property Value Type Description SegmentInfo | Improve this Doc View Source NextDelGen Returns the next available generation number of the live docs file. Declaration public virtual long NextDelGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source NextFieldInfosGen Returns the next available generation number of the FieldInfos files. Declaration public virtual long NextFieldInfosGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source UpdatesFiles Returns the per generation updates files. Declaration public virtual IDictionary<long, ISet<string>> UpdatesFiles { get; } Property Value Type Description IDictionary < System.Int64 , ISet < System.String >> Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source GetFiles() Returns all files in use by this segment. Declaration public virtual ICollection<string> GetFiles() Returns Type Description ICollection < System.String > | Improve this Doc View Source GetSizeInBytes() Returns total size in bytes of all files for this segment. NOTE: this value is not correct for 3.0 segments that have shared docstores. To get the correct value, upgrade! Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source SetGenUpdatesFiles(IDictionary<Int64, ISet<String>>) Sets the updates file names per generation. Does not deep clone the map. Declaration public virtual void SetGenUpdatesFiles(IDictionary<long, ISet<string>> genUpdatesFiles) Parameters Type Name Description IDictionary < System.Int64 , ISet < System.String >> genUpdatesFiles | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source ToString(Directory, Int32) Returns a description of this segment. Declaration public virtual string ToString(Directory dir, int pendingDelCount) Parameters Type Name Description Directory dir System.Int32 pendingDelCount Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentInfo.html",
    "title": "Class SegmentInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentInfo Information about a segment such as it's name, directory, and files related to the segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfo Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class SegmentInfo : object Constructors | Improve this Doc View Source SegmentInfo(Directory, String, String, Int32, Boolean, Codec, IDictionary<String, String>) Construct a new complete SegmentInfo instance from input. Note: this is public only to allow access from the codecs package. Declaration public SegmentInfo(Directory dir, string version, string name, int docCount, bool isCompoundFile, Codec codec, IDictionary<string, string> diagnostics) Parameters Type Name Description Directory dir System.String version System.String name System.Int32 docCount System.Boolean isCompoundFile Codec codec IDictionary < System.String , System.String > diagnostics | Improve this Doc View Source SegmentInfo(Directory, String, String, Int32, Boolean, Codec, IDictionary<String, String>, IDictionary<String, String>) Construct a new complete SegmentInfo instance from input. Note: this is public only to allow access from the codecs package. Declaration public SegmentInfo(Directory dir, string version, string name, int docCount, bool isCompoundFile, Codec codec, IDictionary<string, string> diagnostics, IDictionary<string, string> attributes) Parameters Type Name Description Directory dir System.String version System.String name System.Int32 docCount System.Boolean isCompoundFile Codec codec IDictionary < System.String , System.String > diagnostics IDictionary < System.String , System.String > attributes Fields | Improve this Doc View Source NO Used by some member fields to mean not present (e.g., norms, deletions). Declaration public static readonly int NO Field Value Type Description System.Int32 | Improve this Doc View Source YES Used by some member fields to mean present (e.g., norms, deletions). Declaration public static readonly int YES Field Value Type Description System.Int32 Properties | Improve this Doc View Source Attributes Returns the internal codec attributes map. May be null if no mappings exist. Declaration public IDictionary<string, string> Attributes { get; } Property Value Type Description IDictionary < System.String , System.String > | Improve this Doc View Source Codec Gets or Sets Codec that wrote this segment. Setter can only be called once. Declaration public Codec Codec { get; set; } Property Value Type Description Codec | Improve this Doc View Source Diagnostics Gets or Sets diagnostics saved into the segment when it was written. Declaration public IDictionary<string, string> Diagnostics { get; set; } Property Value Type Description IDictionary < System.String , System.String > | Improve this Doc View Source Dir Where this segment resides. Declaration public Directory Dir { get; } Property Value Type Description Directory | Improve this Doc View Source DocCount Returns number of documents in this segment (deletions are not taken into account). Declaration public int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Name Unique segment name in the directory. Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source UseCompoundFile Gets or Sets whether this segment is stored as a compound file. true if this is a compound file; else, false Declaration public bool UseCompoundFile { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Version Used by DefaultSegmentInfosReader to upgrade a 3.0 segment to record its version is \"3.0\". this method can be removed when we're not required to support 3x indexes anymore, e.g. in 5.0. NOTE: this method is used for internal purposes only - you should not modify the version of a SegmentInfo , or it may result in unexpected exceptions thrown when you attempt to open the index. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public string Version { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source AddFile(String) Add this file to the set of files written for this segment. Declaration public void AddFile(string file) Parameters Type Name Description System.String file | Improve this Doc View Source AddFiles(ICollection<String>) Add these files to the set of files written for this segment. Declaration public void AddFiles(ICollection<string> files) Parameters Type Name Description ICollection < System.String > files | Improve this Doc View Source Equals(Object) We consider another SegmentInfo instance equal if it has the same dir and same name. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetAttribute(String) Get a codec attribute value, or null if it does not exist Declaration public string GetAttribute(string key) Parameters Type Name Description System.String key Returns Type Description System.String | Improve this Doc View Source GetFiles() Return all files referenced by this SegmentInfo . Declaration public ISet<string> GetFiles() Returns Type Description ISet < System.String > | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source PutAttribute(String, String) Puts a codec attribute value. This is a key-value mapping for the field that the codec can use to store additional metadata, and will be available to the codec when reading the segment via GetAttribute(String) If a value already exists for the field, it will be replaced with the new value. Declaration public string PutAttribute(string key, string value) Parameters Type Name Description System.String key System.String value Returns Type Description System.String | Improve this Doc View Source SetFiles(ISet<String>) Sets the files written for this segment. Declaration public void SetFiles(ISet<string> files) Parameters Type Name Description ISet < System.String > files | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source ToString(Directory, Int32) Used for debugging. Format may suddenly change. Current format looks like _a(3.1):c45/4 , which means the segment's name is _a ; it was created with Lucene 3.1 (or '?' if it's unknown); it's using compound file format (would be C if not compound); it has 45 documents; it has 4 deletions (this part is left off when there are no deletions). Declaration public string ToString(Directory dir, int delCount) Parameters Type Name Description Directory dir System.Int32 delCount Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentInfos.FindSegmentsFile.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentInfos.FindSegmentsFile.html",
    "title": "Class SegmentInfos.FindSegmentsFile | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentInfos.FindSegmentsFile Utility class for executing code that needs to do something with the current segments file. This is necessary with lock-less commits because from the time you locate the current segments file name, until you actually open it, read its contents, or check modified time, etc., it could have been deleted due to a writer commit finishing. Inheritance System.Object SegmentInfos.FindSegmentsFile Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class FindSegmentsFile : object Constructors | Improve this Doc View Source FindSegmentsFile(Directory) Sole constructor. Declaration public FindSegmentsFile(Directory directory) Parameters Type Name Description Directory directory Methods | Improve this Doc View Source DoBody(String) Subclass must implement this. The assumption is an will be thrown if something goes wrong during the processing that could have been caused by a writer committing. Declaration protected abstract object DoBody(string segmentFileName) Parameters Type Name Description System.String segmentFileName Returns Type Description System.Object | Improve this Doc View Source Run() Locate the most recent segments file and run DoBody(String) on it. Declaration public virtual object Run() Returns Type Description System.Object | Improve this Doc View Source Run(IndexCommit) Run DoBody(String) on the provided commit. Declaration public virtual object Run(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description System.Object"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentInfos.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentInfos.html",
    "title": "Class SegmentInfos | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentInfos A collection of segmentInfo objects with methods for operating on those segments in relation to the file system. The active segments in the index are stored in the segment info file, segments_N . There may be one or more segments_N files in the index; however, the one with the largest generation is the active one (when older segments_N files are present it's because they temporarily cannot be deleted, or, a writer is in the process of committing, or a custom IndexDeletionPolicy is in use). This file lists each segment by name and has details about the codec and generation of deletes. There is also a file segments.gen . this file contains the current generation (the _N in segments_N ) of the index. This is used only as a fallback in case the current generation cannot be accurately determined by directory listing alone (as is the case for some NFS clients with time-based directory cache expiration). This file simply contains an WriteInt32(Int32) version header ( FORMAT_SEGMENTS_GEN_CURRENT ), followed by the generation recorded as WriteInt64(Int64) , written twice. Files: segments.gen : GenHeader, Generation, Generation, Footer segments_N : Header, Version, NameCounter, SegCount, <SegName, SegCodec, DelGen, DeletionCount, FieldInfosGen, UpdatesFiles> SegCount , CommitUserData, Footer Data types: Header --> WriteHeader(DataOutput, String, Int32) GenHeader, NameCounter, SegCount, DeletionCount --> WriteInt32(Int32) Generation, Version, DelGen, Checksum, FieldInfosGen --> WriteInt64(Int64) SegName, SegCodec --> WriteString(String) CommitUserData --> WriteStringStringMap(IDictionary<String, String>) UpdatesFiles --> WriteStringSet(ISet<String>) Footer --> WriteFooter(IndexOutput) Field Descriptions: Version counts how often the index has been changed by adding or deleting documents. NameCounter is used to generate names for new segment files. SegName is the name of the segment, and is used as the file name prefix for all of the files that compose the segment's index. DelGen is the generation count of the deletes file. If this is -1, there are no deletes. Anything above zero means there are deletes stored by LiveDocsFormat . DeletionCount records the number of deleted documents in this segment. SegCodec is the Name of the Codec that encoded this segment. CommitUserData stores an optional user-supplied opaque that was passed to SetCommitData(IDictionary<String, String>) . FieldInfosGen is the generation count of the fieldInfos file. If this is -1, there are no updates to the fieldInfos in that segment. Anything above zero means there are updates to fieldInfos stored by FieldInfosFormat . UpdatesFiles stores the list of files that were updated in that segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfos Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class SegmentInfos : IEnumerable<SegmentCommitInfo> Constructors | Improve this Doc View Source SegmentInfos() Sole constructor. Typically you call this and then use Read(Directory) or Read(Directory, String) to populate each SegmentCommitInfo . Alternatively, you can add/remove your own SegmentCommitInfo s. Declaration public SegmentInfos() Fields | Improve this Doc View Source FORMAT_SEGMENTS_GEN_CURRENT Current format of segments.gen Declaration public static readonly int FORMAT_SEGMENTS_GEN_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_40 The file format version for the segments_N codec header, up to 4.5. Declaration public static readonly int VERSION_40 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_46 The file format version for the segments_N codec header, since 4.6+. Declaration public static readonly int VERSION_46 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_48 The file format version for the segments_N codec header, since 4.8+ Declaration public static readonly int VERSION_48 Field Value Type Description System.Int32 Properties | Improve this Doc View Source Count Returns number of SegmentCommitInfo s. NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Counter Used to name new segments. Declaration public int Counter { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source DefaultGenLookaheadCount Gets or Sets the Lucene.Net.Index.SegmentInfos.defaultGenLookaheadCount . Advanced: set how many times to try incrementing the gen when loading the segments file. this only runs if the primary (listing directory) and secondary (opening segments.gen file) methods fail to find the segments file. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static int DefaultGenLookaheadCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Generation Returns current generation. Declaration public long Generation { get; } Property Value Type Description System.Int64 | Improve this Doc View Source InfoStream If non-null, information about retries when loading the segments file will be printed to this. Declaration public static TextWriter InfoStream { get; set; } Property Value Type Description TextWriter | Improve this Doc View Source LastGeneration Returns last succesfully read or written generation. Declaration public long LastGeneration { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Segments Declaration public IList<SegmentCommitInfo> Segments { get; } Property Value Type Description IList < SegmentCommitInfo > | Improve this Doc View Source TotalDocCount Returns sum of all segment's docCounts. Note that this does not include deletions Declaration public int TotalDocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source UserData Gets Lucene.Net.Index.SegmentInfos.userData saved with this commit. Declaration public IDictionary<string, string> UserData { get; } Property Value Type Description IDictionary < System.String , System.String > See Also Commit() | Improve this Doc View Source Version Version number when this SegmentInfos was generated. Declaration public long Version { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Add(SegmentCommitInfo) Appends the provided SegmentCommitInfo . Declaration public void Add(SegmentCommitInfo si) Parameters Type Name Description SegmentCommitInfo si | Improve this Doc View Source AddAll(IEnumerable<SegmentCommitInfo>) Appends the provided SegmentCommitInfo s. Declaration public void AddAll(IEnumerable<SegmentCommitInfo> sis) Parameters Type Name Description IEnumerable < SegmentCommitInfo > sis | Improve this Doc View Source AsList() Returns all contained segments as an unmodifiable IList{SegmentCommitInfo} view. Declaration public IList<SegmentCommitInfo> AsList() Returns Type Description IList < SegmentCommitInfo > | Improve this Doc View Source Changed() Call this before committing if changes have been made to the segments. Declaration public void Changed() | Improve this Doc View Source Clear() Clear all SegmentCommitInfo s. Declaration public void Clear() | Improve this Doc View Source Clone() Returns a copy of this instance, also copying each SegmentInfo . Declaration public object Clone() Returns Type Description System.Object | Improve this Doc View Source GenerationFromSegmentsFileName(String) Parse the generation off the segments file name and return it. Declaration public static long GenerationFromSegmentsFileName(string fileName) Parameters Type Name Description System.String fileName Returns Type Description System.Int64 | Improve this Doc View Source GetEnumerator() Returns an unmodifiable IEnumerator{SegmentCommitInfo} of contained segments in order. Declaration public IEnumerator<SegmentCommitInfo> GetEnumerator() Returns Type Description IEnumerator < SegmentCommitInfo > | Improve this Doc View Source GetFiles(Directory, Boolean) Returns all file names referenced by SegmentInfo instances matching the provided Directory (ie files associated with any \"external\" segments are skipped). The returned collection is recomputed on each invocation. Declaration public ICollection<string> GetFiles(Directory dir, bool includeSegmentsFile) Parameters Type Name Description Directory dir System.Boolean includeSegmentsFile Returns Type Description ICollection < System.String > | Improve this Doc View Source GetLastCommitGeneration(Directory) Get the generation of the most recent commit to the index in this directory (N in the segments_N file). Declaration public static long GetLastCommitGeneration(Directory directory) Parameters Type Name Description Directory directory directory to search for the latest segments_N file Returns Type Description System.Int64 | Improve this Doc View Source GetLastCommitGeneration(String[]) Get the generation of the most recent commit to the list of index files (N in the segments_N file). Declaration public static long GetLastCommitGeneration(string[] files) Parameters Type Name Description System.String [] files array of file names to check Returns Type Description System.Int64 | Improve this Doc View Source GetLastCommitSegmentsFileName(Directory) Get the filename of the segments_N file for the most recent commit to the index in this Directory. Declaration public static string GetLastCommitSegmentsFileName(Directory directory) Parameters Type Name Description Directory directory directory to search for the latest segments_N file Returns Type Description System.String | Improve this Doc View Source GetLastCommitSegmentsFileName(String[]) Get the filename of the segments_N file for the most recent commit in the list of index files. Declaration public static string GetLastCommitSegmentsFileName(string[] files) Parameters Type Name Description System.String [] files array of file names to check Returns Type Description System.String | Improve this Doc View Source GetNextSegmentFileName() Get the next segments_N filename that will be written. Declaration public string GetNextSegmentFileName() Returns Type Description System.String | Improve this Doc View Source GetSegmentsFileName() Get the segments_N filename in use by this segment infos. Declaration public string GetSegmentsFileName() Returns Type Description System.String | Improve this Doc View Source Info(Int32) Returns SegmentCommitInfo at the provided index. Declaration public SegmentCommitInfo Info(int i) Parameters Type Name Description System.Int32 i Returns Type Description SegmentCommitInfo | Improve this Doc View Source Read(Directory) Find the latest commit ( segments_N file ) and load all SegmentCommitInfo s. Declaration public void Read(Directory directory) Parameters Type Name Description Directory directory | Improve this Doc View Source Read(Directory, String) Read a particular segmentFileName . Note that this may throw an if a commit is in process. Declaration public void Read(Directory directory, string segmentFileName) Parameters Type Name Description Directory directory directory containing the segments file System.String segmentFileName segment file to load Exceptions Type Condition CorruptIndexException if the index is corrupt | Improve this Doc View Source Remove(SegmentCommitInfo) Remove the provided SegmentCommitInfo . WARNING : O(N) cost Declaration public void Remove(SegmentCommitInfo si) Parameters Type Name Description SegmentCommitInfo si | Improve this Doc View Source ToString(Directory) Returns readable description of this segment. Declaration public string ToString(Directory directory) Parameters Type Name Description Directory directory Returns Type Description System.String | Improve this Doc View Source Write3xInfo(Directory, SegmentInfo, IOContext) Declaration public static string Write3xInfo(Directory dir, SegmentInfo si, IOContext context) Parameters Type Name Description Directory dir SegmentInfo si IOContext context Returns Type Description System.String | Improve this Doc View Source WriteSegmentsGen(Directory, Int64) A utility for writing the SEGMENTS_GEN file to a Directory . NOTE: this is an internal utility which is kept public so that it's accessible by code from other packages. You should avoid calling this method unless you're absolutely sure what you're doing! This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static void WriteSegmentsGen(Directory dir, long generation) Parameters Type Name Description Directory dir System.Int64 generation"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentReader.html",
    "title": "Class SegmentReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentReader IndexReader implementation over a single segment. Instances pointing to the same segment (but with different deletes, etc) may share the same core data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexReader AtomicReader SegmentReader Inherited Members AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class SegmentReader : AtomicReader Constructors | Improve this Doc View Source SegmentReader(SegmentCommitInfo, Int32, IOContext) Constructs a new SegmentReader with a new core. Declaration public SegmentReader(SegmentCommitInfo si, int termInfosIndexDivisor, IOContext context) Parameters Type Name Description SegmentCommitInfo si System.Int32 termInfosIndexDivisor IOContext context Exceptions Type Condition CorruptIndexException if the index is corrupt Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Declaration public override object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object Overrides IndexReader.CombinedCoreAndDeletesKey | Improve this Doc View Source CoreCacheKey Declaration public override object CoreCacheKey { get; } Property Value Type Description System.Object Overrides IndexReader.CoreCacheKey | Improve this Doc View Source Directory Returns the directory this index resides in. Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source FieldInfos Declaration public override FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos Overrides AtomicReader.FieldInfos | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides AtomicReader.Fields | Improve this Doc View Source FieldsReader Expert: retrieve thread-private StoredFieldsReader This is a Lucene.NET INTERNAL API, use at your own risk Declaration public StoredFieldsReader FieldsReader { get; } Property Value Type Description StoredFieldsReader | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides AtomicReader.LiveDocs | Improve this Doc View Source MaxDoc Declaration public override int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs | Improve this Doc View Source SegmentInfo Return the SegmentCommitInfo of the segment this reader is reading. Declaration public SegmentCommitInfo SegmentInfo { get; } Property Value Type Description SegmentCommitInfo | Improve this Doc View Source SegmentName Return the name of the segment this reader is reading. Declaration public string SegmentName { get; } Property Value Type Description System.String | Improve this Doc View Source TermInfosIndexDivisor Returns term infos index divisor originally passed to SegmentReader(SegmentCommitInfo, Int32, IOContext) . Declaration public int TermInfosIndexDivisor { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TermVectorsReader Expert: retrieve thread-private TermVectorsReader This is a Lucene.NET INTERNAL API, use at your own risk Declaration public TermVectorsReader TermVectorsReader { get; } Property Value Type Description TermVectorsReader Methods | Improve this Doc View Source AddCoreDisposedListener(SegmentReader.ICoreDisposedListener) Expert: adds a SegmentReader.ICoreDisposedListener to this reader's shared core Declaration public void AddCoreDisposedListener(SegmentReader.ICoreDisposedListener listener) Parameters Type Name Description SegmentReader.ICoreDisposedListener listener | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides AtomicReader.CheckIntegrity() | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides AtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides AtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides AtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides AtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source RamBytesUsed() Returns approximate RAM Bytes used Declaration public long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source RemoveCoreDisposedListener(SegmentReader.ICoreDisposedListener) Expert: removes a SegmentReader.ICoreDisposedListener from this reader's shared core Declaration public void RemoveCoreDisposedListener(SegmentReader.ICoreDisposedListener listener) Parameters Type Name Description SegmentReader.ICoreDisposedListener listener | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentReader.ICoreDisposedListener.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentReader.ICoreDisposedListener.html",
    "title": "Interface SegmentReader.ICoreDisposedListener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface SegmentReader.ICoreDisposedListener Called when the shared core for this SegmentReader is disposed. This listener is called only once all SegmentReader s sharing the same core are disposed. At this point it is safe for apps to evict this reader from any caches keyed on CoreCacheKey . This is the same interface that IFieldCache uses, internally, to evict entries. NOTE: This was CoreClosedListener in Lucene. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface ICoreDisposedListener Methods | Improve this Doc View Source OnDispose(Object) Invoked when the shared core of the original SegmentReader has disposed. Declaration void OnDispose(object ownerCoreCacheKey) Parameters Type Name Description System.Object ownerCoreCacheKey"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentReadState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentReadState.html",
    "title": "Class SegmentReadState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentReadState Holder class for common parameters used during read. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentReadState Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SegmentReadState : object Constructors | Improve this Doc View Source SegmentReadState(SegmentReadState, String) Create a SegmentReadState . Declaration public SegmentReadState(SegmentReadState other, string newSegmentSuffix) Parameters Type Name Description SegmentReadState other System.String newSegmentSuffix | Improve this Doc View Source SegmentReadState(Directory, SegmentInfo, FieldInfos, IOContext, Int32) Create a SegmentReadState . Declaration public SegmentReadState(Directory dir, SegmentInfo info, FieldInfos fieldInfos, IOContext context, int termsIndexDivisor) Parameters Type Name Description Directory dir SegmentInfo info FieldInfos fieldInfos IOContext context System.Int32 termsIndexDivisor | Improve this Doc View Source SegmentReadState(Directory, SegmentInfo, FieldInfos, IOContext, Int32, String) Create a SegmentReadState . Declaration public SegmentReadState(Directory dir, SegmentInfo info, FieldInfos fieldInfos, IOContext context, int termsIndexDivisor, string segmentSuffix) Parameters Type Name Description Directory dir SegmentInfo info FieldInfos fieldInfos IOContext context System.Int32 termsIndexDivisor System.String segmentSuffix Properties | Improve this Doc View Source Context IOContext to pass to OpenInput(String, IOContext) . Declaration public IOContext Context { get; } Property Value Type Description IOContext | Improve this Doc View Source Directory Directory where this segment is read from. Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source FieldInfos FieldInfos describing all fields in this segment. Declaration public FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos | Improve this Doc View Source SegmentInfo SegmentInfo describing this segment. Declaration public SegmentInfo SegmentInfo { get; } Property Value Type Description SegmentInfo | Improve this Doc View Source SegmentSuffix Unique suffix for any postings files read for this segment. PerFieldPostingsFormat sets this for each of the postings formats it wraps. If you create a new PostingsFormat then any files you write/read must be derived using this suffix (use SegmentFileName(String, String, String) ). Declaration public string SegmentSuffix { get; } Property Value Type Description System.String | Improve this Doc View Source TermsIndexDivisor The termInfosIndexDivisor to use, if appropriate (not all PostingsFormat s support it; in particular the current default does not). NOTE: if this is < 0, that means \"defer terms index load until needed\". But if the codec must load the terms index on init (preflex is the only once currently that must do so), then it should negate this value to get the app's terms divisor Declaration public int TermsIndexDivisor { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentWriteState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentWriteState.html",
    "title": "Class SegmentWriteState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentWriteState Holder class for common parameters used during write. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentWriteState Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SegmentWriteState : object Constructors | Improve this Doc View Source SegmentWriteState(SegmentWriteState, String) Create a shallow copy of SegmentWriteState with a new segment suffix. Declaration public SegmentWriteState(SegmentWriteState state, string segmentSuffix) Parameters Type Name Description SegmentWriteState state System.String segmentSuffix | Improve this Doc View Source SegmentWriteState(InfoStream, Directory, SegmentInfo, FieldInfos, Int32, BufferedUpdates, IOContext) Sole constructor. Declaration public SegmentWriteState(InfoStream infoStream, Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, int termIndexInterval, BufferedUpdates segUpdates, IOContext context) Parameters Type Name Description InfoStream infoStream Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos System.Int32 termIndexInterval BufferedUpdates segUpdates IOContext context | Improve this Doc View Source SegmentWriteState(InfoStream, Directory, SegmentInfo, FieldInfos, Int32, BufferedUpdates, IOContext, String) Constructor which takes segment suffix. Declaration public SegmentWriteState(InfoStream infoStream, Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, int termIndexInterval, BufferedUpdates segUpdates, IOContext context, string segmentSuffix) Parameters Type Name Description InfoStream infoStream Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos System.Int32 termIndexInterval BufferedUpdates segUpdates IOContext context System.String segmentSuffix See Also SegmentWriteState(InfoStream, Directory, SegmentInfo, FieldInfos, Int32, BufferedUpdates, IOContext) Properties | Improve this Doc View Source Context IOContext for all writes; you should pass this to CreateOutput(String, IOContext) . Declaration public IOContext Context { get; } Property Value Type Description IOContext | Improve this Doc View Source DelCountOnFlush Number of deleted documents set while flushing the segment. Declaration public int DelCountOnFlush { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Directory Directory where this segment will be written to. Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source FieldInfos FieldInfos describing all fields in this segment. Declaration public FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos | Improve this Doc View Source InfoStream InfoStream used for debugging messages. Declaration public InfoStream InfoStream { get; } Property Value Type Description InfoStream | Improve this Doc View Source LiveDocs IMutableBits recording live documents; this is only set if there is one or more deleted documents. Declaration public IMutableBits LiveDocs { get; set; } Property Value Type Description IMutableBits | Improve this Doc View Source SegmentInfo SegmentInfo describing this segment. Declaration public SegmentInfo SegmentInfo { get; } Property Value Type Description SegmentInfo | Improve this Doc View Source SegmentSuffix Unique suffix for any postings files written for this segment. PerFieldPostingsFormat sets this for each of the postings formats it wraps. If you create a new PostingsFormat then any files you write/read must be derived using this suffix (use SegmentFileName(String, String, String) ). Declaration public string SegmentSuffix { get; } Property Value Type Description System.String | Improve this Doc View Source SegUpdates Deletes and updates to apply while we are flushing the segment. A Term is enrolled in here if it was deleted/updated at one point, and it's mapped to the docIDUpto, meaning any docID < docIDUpto containing this term should be deleted/updated. Declaration public BufferedUpdates SegUpdates { get; } Property Value Type Description BufferedUpdates | Improve this Doc View Source TermIndexInterval Expert: The fraction of terms in the \"dictionary\" which should be stored in RAM. Smaller values use more memory, but make searching slightly faster, while larger values use less memory and make searching slightly slower. Searching is typically not dominated by dictionary lookup, so tweaking this is rarely useful. Declaration public int TermIndexInterval { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.SerialMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SerialMergeScheduler.html",
    "title": "Class SerialMergeScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SerialMergeScheduler A MergeScheduler that simply does each merge sequentially, using the current thread. Inheritance System.Object MergeScheduler SerialMergeScheduler Implements IMergeScheduler IDisposable Inherited Members MergeScheduler.Dispose() MergeScheduler.Clone() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SerialMergeScheduler : MergeScheduler, IMergeScheduler, IDisposable Constructors | Improve this Doc View Source SerialMergeScheduler() Sole constructor. Declaration public SerialMergeScheduler() Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergeScheduler.Dispose(Boolean) | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Just do the merges in sequence. We do this \"synchronized\" so that even if the application is using multiple threads, only one merge may run at a time. Declaration public override void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer MergeTrigger trigger System.Boolean newMergesFound Overrides MergeScheduler.Merge(IndexWriter, MergeTrigger, Boolean) Implements IMergeScheduler IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.SimpleMergedSegmentWarmer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SimpleMergedSegmentWarmer.html",
    "title": "Class SimpleMergedSegmentWarmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleMergedSegmentWarmer A very simple merged segment warmer that just ensures data structures are initialized. Inheritance System.Object IndexWriter.IndexReaderWarmer SimpleMergedSegmentWarmer Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SimpleMergedSegmentWarmer : IndexWriter.IndexReaderWarmer Constructors | Improve this Doc View Source SimpleMergedSegmentWarmer(InfoStream) Creates a new SimpleMergedSegmentWarmer Declaration public SimpleMergedSegmentWarmer(InfoStream infoStream) Parameters Type Name Description InfoStream infoStream InfoStream to log statistics about warming. Methods | Improve this Doc View Source Warm(AtomicReader) Declaration public override void Warm(AtomicReader reader) Parameters Type Name Description AtomicReader reader Overrides IndexWriter.IndexReaderWarmer.Warm(AtomicReader)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SingleTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SingleTermsEnum.html",
    "title": "Class SingleTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleTermsEnum Subclass of FilteredTermsEnum for enumerating a single term. For example, this can be used by MultiTermQuery s that need only visit one term, but want to preserve MultiTermQuery semantics such as MultiTermRewriteMethod . Inheritance System.Object TermsEnum FilteredTermsEnum SingleTermsEnum Implements IBytesRefIterator Inherited Members FilteredTermsEnum.SetInitialSeekTerm(BytesRef) FilteredTermsEnum.NextSeekTerm(BytesRef) FilteredTermsEnum.Attributes FilteredTermsEnum.Term FilteredTermsEnum.Comparer FilteredTermsEnum.DocFreq FilteredTermsEnum.TotalTermFreq FilteredTermsEnum.SeekExact(BytesRef) FilteredTermsEnum.SeekCeil(BytesRef) FilteredTermsEnum.SeekExact(Int64) FilteredTermsEnum.Ord FilteredTermsEnum.Docs(IBits, DocsEnum, DocsFlags) FilteredTermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) FilteredTermsEnum.SeekExact(BytesRef, TermState) FilteredTermsEnum.GetTermState() FilteredTermsEnum.Next() TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class SingleTermsEnum : FilteredTermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source SingleTermsEnum(TermsEnum, BytesRef) Creates a new SingleTermsEnum . After calling the constructor the enumeration is already pointing to the term, if it exists. Declaration public SingleTermsEnum(TermsEnum tenum, BytesRef termText) Parameters Type Name Description TermsEnum tenum BytesRef termText Methods | Improve this Doc View Source Accept(BytesRef) Declaration protected override FilteredTermsEnum.AcceptStatus Accept(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description FilteredTermsEnum.AcceptStatus Overrides FilteredTermsEnum.Accept(BytesRef) Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Index.SlowCompositeReaderWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SlowCompositeReaderWrapper.html",
    "title": "Class SlowCompositeReaderWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SlowCompositeReaderWrapper This class forces a composite reader (eg a MultiReader or DirectoryReader ) to emulate an atomic reader. This requires implementing the postings APIs on-the-fly, using the static methods in MultiFields , MultiDocValues , by stepping through the sub-readers to merge fields/terms, appending docs, etc. NOTE : This class almost always results in a performance hit. If this is important to your use case, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. Inheritance System.Object IndexReader AtomicReader SlowCompositeReaderWrapper Inherited Members AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class SlowCompositeReaderWrapper : AtomicReader Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Declaration public override object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object Overrides IndexReader.CombinedCoreAndDeletesKey | Improve this Doc View Source CoreCacheKey Declaration public override object CoreCacheKey { get; } Property Value Type Description System.Object Overrides IndexReader.CoreCacheKey | Improve this Doc View Source FieldInfos Declaration public override FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos Overrides AtomicReader.FieldInfos | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides AtomicReader.Fields | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides AtomicReader.LiveDocs | Improve this Doc View Source MaxDoc Declaration public override int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides AtomicReader.CheckIntegrity() | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides AtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides AtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides AtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides AtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source Wrap(IndexReader) This method is sugar for getting an AtomicReader from an IndexReader of any kind. If the reader is already atomic, it is returned unchanged, otherwise wrapped by this class. Declaration public static AtomicReader Wrap(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description AtomicReader"
  },
  "api/Lucene.Net/Lucene.Net.Index.SnapshotDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SnapshotDeletionPolicy.html",
    "title": "Class SnapshotDeletionPolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SnapshotDeletionPolicy An IndexDeletionPolicy that wraps any other IndexDeletionPolicy and adds the ability to hold and later release snapshots of an index. While a snapshot is held, the IndexWriter will not remove any files associated with it even if the index is otherwise being actively, arbitrarily changed. Because we wrap another arbitrary IndexDeletionPolicy , this gives you the freedom to continue using whatever IndexDeletionPolicy you would normally want to use with your index. This class maintains all snapshots in-memory, and so the information is not persisted and not protected against system failures. If persistence is important, you can use PersistentSnapshotDeletionPolicy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexDeletionPolicy SnapshotDeletionPolicy PersistentSnapshotDeletionPolicy Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SnapshotDeletionPolicy : IndexDeletionPolicy Constructors | Improve this Doc View Source SnapshotDeletionPolicy(IndexDeletionPolicy) Sole constructor, taking the incoming IndexDeletionPolicy to wrap. Declaration public SnapshotDeletionPolicy(IndexDeletionPolicy primary) Parameters Type Name Description IndexDeletionPolicy primary Fields | Improve this Doc View Source m_indexCommits Used to map gen to IndexCommit . Declaration protected IDictionary<long?, IndexCommit> m_indexCommits Field Value Type Description IDictionary < System.Nullable < System.Int64 >, IndexCommit > | Improve this Doc View Source m_lastCommit Most recently committed IndexCommit . Declaration protected IndexCommit m_lastCommit Field Value Type Description IndexCommit | Improve this Doc View Source m_refCounts Records how many snapshots are held against each commit generation Declaration protected IDictionary<long, int> m_refCounts Field Value Type Description IDictionary < System.Int64 , System.Int32 > Properties | Improve this Doc View Source SnapshotCount Returns the total number of snapshots currently held. Declaration public virtual int SnapshotCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides IndexDeletionPolicy.Clone() | Improve this Doc View Source GetIndexCommit(Int64) Retrieve an IndexCommit from its generation; returns null if this IndexCommit is not currently snapshotted Declaration public virtual IndexCommit GetIndexCommit(long gen) Parameters Type Name Description System.Int64 gen Returns Type Description IndexCommit | Improve this Doc View Source GetSnapshots() Returns all IndexCommit s held by at least one snapshot. Declaration public virtual IList<IndexCommit> GetSnapshots() Returns Type Description IList < IndexCommit > | Improve this Doc View Source IncRef(IndexCommit) Increments the refCount for this IndexCommit . Declaration protected virtual void IncRef(IndexCommit ic) Parameters Type Name Description IndexCommit ic | Improve this Doc View Source OnCommit<T>(IList<T>) Declaration public override void OnCommit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnCommit<T>(IList<T>) | Improve this Doc View Source OnInit<T>(IList<T>) Declaration public override void OnInit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnInit<T>(IList<T>) | Improve this Doc View Source Release(IndexCommit) Release a snapshotted commit. Declaration public virtual void Release(IndexCommit commit) Parameters Type Name Description IndexCommit commit the commit previously returned by Snapshot() | Improve this Doc View Source ReleaseGen(Int64) Release a snapshot by generation. Declaration protected virtual void ReleaseGen(long gen) Parameters Type Name Description System.Int64 gen | Improve this Doc View Source Snapshot() Snapshots the last commit and returns it. Once a commit is 'snapshotted,' it is protected from deletion (as long as this IndexDeletionPolicy is used). The snapshot can be removed by calling Release(IndexCommit) followed by a call to DeleteUnusedFiles() . NOTE: while the snapshot is held, the files it references will not be deleted, which will consume additional disk space in your index. If you take a snapshot at a particularly bad time (say just before you call ForceMerge(Int32) ) then in the worst case this could consume an extra 1X of your total index size, until you release the snapshot. Declaration public virtual IndexCommit Snapshot() Returns Type Description IndexCommit the IndexCommit that was snapshotted."
  },
  "api/Lucene.Net/Lucene.Net.Index.SortedDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SortedDocValues.html",
    "title": "Class SortedDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedDocValues A per-document byte[] with presorted values. Per-Document values in a SortedDocValues are deduplicated, dereferenced, and sorted into a dictionary of unique values. A pointer to the dictionary value (ordinal) can be retrieved for each document. Ordinals are dense and in increasing sorted order. Inheritance System.Object BinaryDocValues SortedDocValues MultiDocValues.MultiSortedDocValues Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class SortedDocValues : BinaryDocValues Constructors | Improve this Doc View Source SortedDocValues() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SortedDocValues() Properties | Improve this Doc View Source ValueCount Returns the number of unique values. Declaration public abstract int ValueCount { get; } Property Value Type Description System.Int32 Number of unique values in this SortedDocValues . This is also equivalent to one plus the maximum ordinal. Methods | Improve this Doc View Source Get(Int32, BytesRef) Declaration public override void Get(int docID, BytesRef result) Parameters Type Name Description System.Int32 docID BytesRef result Overrides BinaryDocValues.Get(Int32, BytesRef) | Improve this Doc View Source GetOrd(Int32) Returns the ordinal for the specified docID. Declaration public abstract int GetOrd(int docID) Parameters Type Name Description System.Int32 docID document ID to lookup Returns Type Description System.Int32 ordinal for the document: this is dense, starts at 0, then increments by 1 for the next value in sorted order. Note that missing values are indicated by -1. | Improve this Doc View Source GetTermsEnum() Returns a TermsEnum over the values. The enum supports Ord and SeekExact(Int64) . Declaration public virtual TermsEnum GetTermsEnum() Returns Type Description TermsEnum | Improve this Doc View Source LookupOrd(Int32, BytesRef) Retrieves the value for the specified ordinal. Declaration public abstract void LookupOrd(int ord, BytesRef result) Parameters Type Name Description System.Int32 ord ordinal to lookup (must be >= 0 and < ValueCount ) BytesRef result will be populated with the ordinal's value See Also GetOrd(Int32) | Improve this Doc View Source LookupTerm(BytesRef) If key exists, returns its ordinal, else returns -insertionPoint-1 , like Declaration public virtual int LookupTerm(BytesRef key) Parameters Type Name Description BytesRef key Key to look up Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Index.SortedSetDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SortedSetDocValues.html",
    "title": "Class SortedSetDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedSetDocValues A per-document set of presorted byte[] values. Per-Document values in a SortedDocValues are deduplicated, dereferenced, and sorted into a dictionary of unique values. A pointer to the dictionary value (ordinal) can be retrieved for each document. Ordinals are dense and in increasing sorted order. Inheritance System.Object SortedSetDocValues MultiDocValues.MultiSortedSetDocValues RandomAccessOrds Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class SortedSetDocValues : object Constructors | Improve this Doc View Source SortedSetDocValues() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SortedSetDocValues() Fields | Improve this Doc View Source NO_MORE_ORDS When returned by NextOrd() it means there are no more ordinals for the document. Declaration public static readonly long NO_MORE_ORDS Field Value Type Description System.Int64 Properties | Improve this Doc View Source ValueCount Returns the number of unique values. Declaration public abstract long ValueCount { get; } Property Value Type Description System.Int64 Number of unique values in this SortedDocValues . This is also equivalent to one plus the maximum ordinal. Methods | Improve this Doc View Source GetTermsEnum() Returns a TermsEnum over the values. The enum supports Ord and SeekExact(Int64) . Declaration public virtual TermsEnum GetTermsEnum() Returns Type Description TermsEnum | Improve this Doc View Source LookupOrd(Int64, BytesRef) Retrieves the value for the specified ordinal. Declaration public abstract void LookupOrd(long ord, BytesRef result) Parameters Type Name Description System.Int64 ord ordinal to lookup BytesRef result will be populated with the ordinal's value See Also NextOrd() | Improve this Doc View Source LookupTerm(BytesRef) If key exists, returns its ordinal, else returns -insertionPoint-1 , like . Declaration public virtual long LookupTerm(BytesRef key) Parameters Type Name Description BytesRef key Key to look up Returns Type Description System.Int64 | Improve this Doc View Source NextOrd() Returns the next ordinal for the current document (previously set by SetDocument(Int32) . Declaration public abstract long NextOrd() Returns Type Description System.Int64 Next ordinal for the document, or NO_MORE_ORDS . ordinals are dense, start at 0, then increment by 1 for the next value in sorted order. | Improve this Doc View Source SetDocument(Int32) Sets iteration to the specified docID Declaration public abstract void SetDocument(int docID) Parameters Type Name Description System.Int32 docID document ID"
  },
  "api/Lucene.Net/Lucene.Net.Index.StoredFieldVisitor.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.StoredFieldVisitor.html",
    "title": "Class StoredFieldVisitor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StoredFieldVisitor Expert: Provides a low-level means of accessing the stored field values in an index. See Document(Int32, StoredFieldVisitor) . NOTE : a StoredFieldVisitor implementation should not try to load or visit other stored documents in the same reader because the implementation of stored fields for most codecs is not reeentrant and you will see strange exceptions as a result. See DocumentStoredFieldVisitor , which is a StoredFieldVisitor that builds the Document containing all stored fields. This is used by Document(Int32) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldVisitor DocumentStoredFieldVisitor Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class StoredFieldVisitor : object Constructors | Improve this Doc View Source StoredFieldVisitor() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected StoredFieldVisitor() Methods | Improve this Doc View Source BinaryField(FieldInfo, Byte[]) Process a binary field. Declaration public virtual void BinaryField(FieldInfo fieldInfo, byte[] value) Parameters Type Name Description FieldInfo fieldInfo System.Byte [] value newly allocated byte array with the binary contents. | Improve this Doc View Source DoubleField(FieldInfo, Double) Process a numeric field. Declaration public virtual void DoubleField(FieldInfo fieldInfo, double value) Parameters Type Name Description FieldInfo fieldInfo System.Double value | Improve this Doc View Source Int32Field(FieldInfo, Int32) Process a numeric field. Declaration public virtual void Int32Field(FieldInfo fieldInfo, int value) Parameters Type Name Description FieldInfo fieldInfo System.Int32 value | Improve this Doc View Source Int64Field(FieldInfo, Int64) Process a numeric field. Declaration public virtual void Int64Field(FieldInfo fieldInfo, long value) Parameters Type Name Description FieldInfo fieldInfo System.Int64 value | Improve this Doc View Source NeedsField(FieldInfo) Hook before processing a field. Before a field is processed, this method is invoked so that subclasses can return a StoredFieldVisitor.Status representing whether they need that particular field or not, or to stop processing entirely. Declaration public abstract StoredFieldVisitor.Status NeedsField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description StoredFieldVisitor.Status | Improve this Doc View Source SingleField(FieldInfo, Single) Process a numeric field. Declaration public virtual void SingleField(FieldInfo fieldInfo, float value) Parameters Type Name Description FieldInfo fieldInfo System.Single value | Improve this Doc View Source StringField(FieldInfo, String) Process a field Declaration public virtual void StringField(FieldInfo fieldInfo, string value) Parameters Type Name Description FieldInfo fieldInfo System.String value"
  },
  "api/Lucene.Net/Lucene.Net.Index.StoredFieldVisitor.Status.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.StoredFieldVisitor.Status.html",
    "title": "Enum StoredFieldVisitor.Status | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum StoredFieldVisitor.Status Enumeration of possible return values for NeedsField(FieldInfo) . Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum Status : int Fields Name Description NO NO: don't visit this field, but continue processing fields for this document. STOP STOP: don't visit this field and stop processing any other fields for this document. YES YES: the field should be visited."
  },
  "api/Lucene.Net/Lucene.Net.Index.TaskMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TaskMergeScheduler.html",
    "title": "Class TaskMergeScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaskMergeScheduler A MergeScheduler that runs each merge using s on the default . If more than MaxMergeCount merges are requested then this class will forcefully throttle the incoming threads by pausing until one more more merges complete. LUCENENET specific Inheritance System.Object MergeScheduler TaskMergeScheduler Implements IConcurrentMergeScheduler IMergeScheduler IDisposable Inherited Members MergeScheduler.Dispose() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class TaskMergeScheduler : MergeScheduler, IConcurrentMergeScheduler, IMergeScheduler, IDisposable Constructors | Improve this Doc View Source TaskMergeScheduler() Sole constructor, with all settings set to default values. Declaration public TaskMergeScheduler() Fields | Improve this Doc View Source COMPONENT_NAME Declaration public const string COMPONENT_NAME = null Field Value Type Description System.String Properties | Improve this Doc View Source MaxMergeCount Max number of merges we accept before forcefully throttling the incoming threads Declaration public int MaxMergeCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxThreadCount Max number of merge threads allowed to be running at once. When there are more merges then this, we forcefully pause the larger ones, letting the smaller ones run, up until MaxMergeCount merges at which point we forcefully pause incoming threads (that presumably are the ones causing so much merging). Declaration public int MaxThreadCount { get; } Property Value Type Description System.Int32 See Also SetMaxMergesAndThreads(Int32, Int32) | Improve this Doc View Source MergeThreadPriority Return the priority that merge threads run at. This is always the same. Declaration public int MergeThreadPriority { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Verbose Returns true if verbosing is enabled. This method is usually used in conjunction with Message(String) , like that: if (Verbose) { Message(\"your message\"); } Declaration protected bool Verbose { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source ClearSuppressExceptions() Used for testing Declaration public virtual void ClearSuppressExceptions() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides MergeScheduler.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergeScheduler.Dispose(Boolean) | Improve this Doc View Source DoMerge(MergePolicy.OneMerge) Does the actual merge, by calling Merge(MergePolicy.OneMerge) Declaration protected virtual void DoMerge(MergePolicy.OneMerge merge) Parameters Type Name Description MergePolicy.OneMerge merge | Improve this Doc View Source HandleMergeException(Exception) Called when an exception is hit in a background merge thread Declaration protected virtual void HandleMergeException(Exception exc) Parameters Type Name Description Exception exc | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Declaration public override void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer MergeTrigger trigger System.Boolean newMergesFound Overrides MergeScheduler.Merge(IndexWriter, MergeTrigger, Boolean) | Improve this Doc View Source Message(String) Outputs the given message - this method assumes Verbose was called and returned true . Declaration protected virtual void Message(string message) Parameters Type Name Description System.String message | Improve this Doc View Source SetMaxMergesAndThreads(Int32, Int32) Sets the maximum number of merge threads and simultaneous merges allowed. Declaration public void SetMaxMergesAndThreads(int maxMergeCount, int maxThreadCount) Parameters Type Name Description System.Int32 maxMergeCount The max # simultaneous merges that are allowed. If a merge is necessary yet we already have this many threads running, the incoming thread (that is calling add/updateDocument) will block until a merge thread has completed. Note that we will only run the smallest maxThreadCount merges at a time. System.Int32 maxThreadCount The max # simultaneous merge threads that should be running at once. This must be <= maxMergeCount | Improve this Doc View Source SetMergeThreadPriority(Int32) This method has no effect in TaskMergeScheduler because the MergeThreadPriority returns a constant value. Declaration public void SetMergeThreadPriority(int priority) Parameters Type Name Description System.Int32 priority | Improve this Doc View Source SetSuppressExceptions() Used for testing Declaration public virtual void SetSuppressExceptions() | Improve this Doc View Source Sync() Wait for any running merge threads to finish. This call is not interruptible as used by Dispose() . Declaration public virtual void Sync() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Implements IConcurrentMergeScheduler IMergeScheduler IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.Term.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Term.html",
    "title": "Class Term | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Term A Term represents a word from text. This is the unit of search. It is composed of two elements, the text of the word, as a string, and the name of the field that the text occurred in. Note that terms may represent more than words from text fields, but also things like dates, email addresses, urls, etc. Inheritance System.Object Term Implements IEquatable < Term > Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class Term : IComparable<Term>, IEquatable<Term> Constructors | Improve this Doc View Source Term(String) Constructs a Term with the given field and empty text. this serves two purposes: 1) reuse of a Term with the same field. 2) pattern for a query. Declaration public Term(string fld) Parameters Type Name Description System.String fld field's name | Improve this Doc View Source Term(String, BytesRef) Constructs a Term with the given field and bytes. Note that a null field or null bytes value results in undefined behavior for most Lucene APIs that accept a Term parameter. WARNING: the provided BytesRef is not copied, but used directly. Therefore the bytes should not be modified after construction, for example, you should clone a copy by DeepCopyOf(BytesRef) rather than pass reused bytes from a TermsEnum . Declaration public Term(string fld, BytesRef bytes) Parameters Type Name Description System.String fld BytesRef bytes | Improve this Doc View Source Term(String, String) Constructs a Term with the given field and text. Note that a null field or null text value results in undefined behavior for most Lucene APIs that accept a Term parameter. Declaration public Term(string fld, string text) Parameters Type Name Description System.String fld System.String text Properties | Improve this Doc View Source Bytes Returns the bytes of this term. Declaration public BytesRef Bytes { get; } Property Value Type Description BytesRef | Improve this Doc View Source Field Returns the field of this term. The field indicates the part of a document which this term came from. Declaration public string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(Term) Compares two terms, returning a negative integer if this term belongs before the argument, zero if this term is equal to the argument, and a positive integer if this term belongs after the argument. The ordering of terms is first by field, then by text. Declaration public int CompareTo(Term other) Parameters Type Name Description Term other Returns Type Description System.Int32 | Improve this Doc View Source Equals(Term) Declaration public bool Equals(Term other) Parameters Type Name Description Term other Returns Type Description System.Boolean | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Text() Returns the text of this term. In the case of words, this is simply the text of the word. In the case of dates and other types, this is an encoding of the object as a string. Declaration public string Text() Returns Type Description System.String | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source ToString(BytesRef) Returns human-readable form of the term text. If the term is not unicode, the raw bytes will be printed instead. Declaration public static string ToString(BytesRef termText) Parameters Type Name Description BytesRef termText Returns Type Description System.String Implements IEquatable<>"
  },
  "api/Lucene.Net/Lucene.Net.Index.TermContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TermContext.html",
    "title": "Class TermContext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermContext Maintains a IndexReader TermState view over IndexReader instances containing a single term. The TermContext doesn't track if the given TermState objects are valid, neither if the TermState instances refer to the same terms in the associated readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermContext Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class TermContext : object Constructors | Improve this Doc View Source TermContext(IndexReaderContext) Creates an empty TermContext from a IndexReaderContext Declaration public TermContext(IndexReaderContext context) Parameters Type Name Description IndexReaderContext context | Improve this Doc View Source TermContext(IndexReaderContext, TermState, Int32, Int32, Int64) Creates a TermContext with an initial TermState , IndexReader pair. Declaration public TermContext(IndexReaderContext context, TermState state, int ord, int docFreq, long totalTermFreq) Parameters Type Name Description IndexReaderContext context TermState state System.Int32 ord System.Int32 docFreq System.Int64 totalTermFreq Properties | Improve this Doc View Source DocFreq expert: only available for queries that want to lie about docfreq This is a Lucene.NET INTERNAL API, use at your own risk Declaration public int DocFreq { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TopReaderContext Holds the IndexReaderContext of the top-level IndexReader , used internally only for asserting. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexReaderContext TopReaderContext { get; } Property Value Type Description IndexReaderContext | Improve this Doc View Source TotalTermFreq Returns the accumulated term frequency of all TermState instances passed to Register(TermState, Int32, Int32, Int64) . Declaration public long TotalTermFreq { get; } Property Value Type Description System.Int64 the accumulated term frequency of all TermState instances passed to Register(TermState, Int32, Int32, Int64) . Methods | Improve this Doc View Source Build(IndexReaderContext, Term) Creates a TermContext from a top-level IndexReaderContext and the given Term . this method will lookup the given term in all context's leaf readers and register each of the readers containing the term in the returned TermContext using the leaf reader's ordinal. Note: the given context must be a top-level context. Declaration public static TermContext Build(IndexReaderContext context, Term term) Parameters Type Name Description IndexReaderContext context Term term Returns Type Description TermContext | Improve this Doc View Source Clear() Clears the TermContext internal state and removes all registered TermState s Declaration public void Clear() | Improve this Doc View Source Get(Int32) Returns the TermState for an leaf ordinal or null if no TermState for the ordinal was registered. Declaration public TermState Get(int ord) Parameters Type Name Description System.Int32 ord The readers leaf ordinal to get the TermState for. Returns Type Description TermState The TermState for the given readers ord or null if no TermState for the reader was registered | Improve this Doc View Source Register(TermState, Int32, Int32, Int64) Registers and associates a TermState with an leaf ordinal. The leaf ordinal should be derived from a IndexReaderContext 's leaf ord. Declaration public void Register(TermState state, int ord, int docFreq, long totalTermFreq) Parameters Type Name Description TermState state System.Int32 ord System.Int32 docFreq System.Int64 totalTermFreq"
  },
  "api/Lucene.Net/Lucene.Net.Index.Terms.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Terms.html",
    "title": "Class Terms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Terms Access to the terms in a specific field. See Fields . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Terms BlockTreeTermsReader.FieldReader FilterAtomicReader.FilterTerms MultiTerms Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class Terms : object Constructors | Improve this Doc View Source Terms() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected Terms() Fields | Improve this Doc View Source EMPTY_ARRAY Zero-length array of Terms . Declaration public static readonly Terms[] EMPTY_ARRAY Field Value Type Description Terms [] Properties | Improve this Doc View Source Comparer Return the IComparer<BytesRef> used to sort terms provided by the iterator. This method may return null if there are no terms. This method may be invoked many times; it's best to cache a single instance & reuse it. Declaration public abstract IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > | Improve this Doc View Source Count Returns the number of terms for this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. NOTE: This was size() in Lucene. Declaration public abstract long Count { get; } Property Value Type Description System.Int64 | Improve this Doc View Source DocCount Returns the number of documents that have at least one term for this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source HasFreqs Returns true if documents in this field store per-document term frequency ( Freq ). Declaration public abstract bool HasFreqs { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasOffsets Returns true if documents in this field store offsets. Declaration public abstract bool HasOffsets { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Returns true if documents in this field store payloads. Declaration public abstract bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPositions Returns true if documents in this field store positions. Declaration public abstract bool HasPositions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source SumDocFreq Returns the sum of DocFreq for all terms in this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract long SumDocFreq { get; } Property Value Type Description System.Int64 | Improve this Doc View Source SumTotalTermFreq Returns the sum of TotalTermFreq for all terms in this field, or -1 if this measure isn't stored by the codec (or if this fields omits term freq and positions). Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract long SumTotalTermFreq { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source GetIterator(TermsEnum) Returns an iterator that will step through all terms. This method will not return null . If you have a previous TermsEnum , for example from a different field, you can pass it for possible reuse if the implementation can do so. Declaration public abstract TermsEnum GetIterator(TermsEnum reuse) Parameters Type Name Description TermsEnum reuse Returns Type Description TermsEnum | Improve this Doc View Source Intersect(CompiledAutomaton, BytesRef) Returns a TermsEnum that iterates over all terms that are accepted by the provided CompiledAutomaton . If the startTerm is provided then the returned enum will only accept terms startTerm , but you still must call Next() first to get to the first term. Note that the provided startTerm must be accepted by the automaton. NOTE : the returned TermsEnum cannot seek . Declaration public virtual TermsEnum Intersect(CompiledAutomaton compiled, BytesRef startTerm) Parameters Type Name Description CompiledAutomaton compiled BytesRef startTerm Returns Type Description TermsEnum"
  },
  "api/Lucene.Net/Lucene.Net.Index.TermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TermsEnum.html",
    "title": "Class TermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsEnum Iterator to seek ( SeekCeil(BytesRef) , SeekExact(BytesRef) ) or step through ( Next() terms to obtain frequency information ( DocFreq ), DocsEnum or DocsAndPositionsEnum for the current term ( Docs(IBits, DocsEnum) ). Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than the one before it. The TermsEnum is unpositioned when you first obtain it and you must first successfully call Next() or one of the Seek methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsEnum FilterAtomicReader.FilterTermsEnum FilteredTermsEnum MultiTermsEnum FuzzyTermsEnum Implements IBytesRefIterator Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class TermsEnum : object, IBytesRefIterator Constructors | Improve this Doc View Source TermsEnum() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermsEnum() Fields | Improve this Doc View Source EMPTY An empty TermsEnum for quickly returning an empty instance e.g. in MultiTermQuery Please note: this enum should be unmodifiable, but it is currently possible to add Attributes to it. This should not be a problem, as the enum is always empty and the existence of unused Attributes does not matter. Declaration public static readonly TermsEnum EMPTY Field Value Type Description TermsEnum Properties | Improve this Doc View Source Attributes Returns the related attributes. Declaration public virtual AttributeSource Attributes { get; } Property Value Type Description AttributeSource | Improve this Doc View Source Comparer Declaration public abstract IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > | Improve this Doc View Source DocFreq Returns the number of documents containing the current term. Do not call this when the enum is unpositioned. Declaration public abstract int DocFreq { get; } Property Value Type Description System.Int32 See Also END | Improve this Doc View Source Ord Returns ordinal position for current term. This is an optional property (the codec may throw . Do not call this when the enum is unpositioned. Declaration public abstract long Ord { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Term Returns current term. Do not call this when the enum is unpositioned. Declaration public abstract BytesRef Term { get; } Property Value Type Description BytesRef | Improve this Doc View Source TotalTermFreq Returns the total number of occurrences of this term across all documents (the sum of the Freq for each doc that has this term). This will be -1 if the codec doesn't support this measure. Note that, like other term measures, this measure does not take deleted documents into account. Declaration public abstract long TotalTermFreq { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Docs(IBits, DocsEnum) Get DocsEnum for the current term. Do not call this when the enum is unpositioned. This method will not return null . Declaration public DocsEnum Docs(IBits liveDocs, DocsEnum reuse) Parameters Type Name Description IBits liveDocs Unset bits are documents that should not be returned DocsEnum reuse Pass a prior DocsEnum for possible reuse Returns Type Description DocsEnum | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Get DocsEnum for the current term, with control over whether freqs are required. Do not call this when the enum is unpositioned. This method will not return null . Declaration public abstract DocsEnum Docs(IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits liveDocs Unset bits are documents that should not be returned DocsEnum reuse Pass a prior DocsEnum for possible reuse DocsFlags flags Specifies which optional per-document values you require; DocsFlags Returns Type Description DocsEnum See Also Docs(IBits, DocsEnum) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum) Get DocsAndPositionsEnum for the current term. Do not call this when the enum is unpositioned. This method will return null if positions were not indexed. Declaration public DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse) Parameters Type Name Description IBits liveDocs Unset bits are documents that should not be returned DocsAndPositionsEnum reuse Pass a prior DocsAndPositionsEnum for possible reuse Returns Type Description DocsAndPositionsEnum See Also DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Get DocsAndPositionsEnum for the current term, with control over whether offsets and payloads are required. Some codecs may be able to optimize their implementation when offsets and/or payloads are not required. Do not call this when the enum is unpositioned. This will return null if positions were not indexed. Declaration public abstract DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits liveDocs Unset bits are documents that should not be returned DocsAndPositionsEnum reuse Pass a prior DocsAndPositionsEnum for possible reuse DocsAndPositionsFlags flags Specifies which optional per-position values you require; see DocsAndPositionsFlags . Returns Type Description DocsAndPositionsEnum | Improve this Doc View Source GetTermState() Expert: Returns the TermsEnum s internal state to position the TermsEnum without re-seeking the term dictionary. NOTE: A seek by GetTermState() might not capture the AttributeSource 's state. Callers must maintain the AttributeSource states separately Declaration public virtual TermState GetTermState() Returns Type Description TermState See Also TermState SeekExact(BytesRef, TermState) | Improve this Doc View Source Next() Declaration public abstract BytesRef Next() Returns Type Description BytesRef | Improve this Doc View Source SeekCeil(BytesRef) Seeks to the specified term, if it exists, or to the next (ceiling) term. Returns TermsEnum.SeekStatus to indicate whether exact term was found, a different term was found, or EOF was hit. The target term may be before or after the current term. If this returns END , the enum is unpositioned. Declaration public abstract TermsEnum.SeekStatus SeekCeil(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description TermsEnum.SeekStatus | Improve this Doc View Source SeekExact(BytesRef) Attempts to seek to the exact term, returning true if the term is found. If this returns false , the enum is unpositioned. For some codecs, SeekExact(BytesRef) may be substantially faster than SeekCeil(BytesRef) . Declaration public virtual bool SeekExact(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description System.Boolean | Improve this Doc View Source SeekExact(BytesRef, TermState) Expert: Seeks a specific position by TermState previously obtained from GetTermState() . Callers should maintain the TermState to use this method. Low-level implementations may position the TermsEnum without re-seeking the term dictionary. Seeking by TermState should only be used iff the state was obtained from the same TermsEnum instance. NOTE: Using this method with an incompatible TermState might leave this TermsEnum in undefined state. On a segment level TermState instances are compatible only iff the source and the target TermsEnum operate on the same field. If operating on segment level, TermState instances must not be used across segments. NOTE: A seek by TermState might not restore the AttributeSource 's state. AttributeSource states must be maintained separately if this method is used. Declaration public virtual void SeekExact(BytesRef term, TermState state) Parameters Type Name Description BytesRef term the term the TermState corresponds to TermState state the TermState | Improve this Doc View Source SeekExact(Int64) Seeks to the specified term by ordinal (position) as previously returned by Ord . The target ord may be before or after the current ord, and must be within bounds. Declaration public abstract void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Index.TermsEnum.SeekStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TermsEnum.SeekStatus.html",
    "title": "Enum TermsEnum.SeekStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum TermsEnum.SeekStatus Represents returned result from SeekCeil(BytesRef) . Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum SeekStatus : int Fields Name Description END The term was not found, and the end of iteration was hit. FOUND The precise term was found. NOT_FOUND A different term was found after the requested term"
  },
  "api/Lucene.Net/Lucene.Net.Index.TermState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TermState.html",
    "title": "Class TermState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermState Encapsulates all required internal state to position the associated TermsEnum without re-seeking. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermState OrdTermState Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class TermState : object Constructors | Improve this Doc View Source TermState() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermState() Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source CopyFrom(TermState) Copies the content of the given TermState to this instance Declaration public abstract void CopyFrom(TermState other) Parameters Type Name Description TermState other the TermState to copy | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String See Also SeekExact ( BytesRef , TermState ) GetTermState ()"
  },
  "api/Lucene.Net/Lucene.Net.Index.TieredMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TieredMergePolicy.html",
    "title": "Class TieredMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TieredMergePolicy Merges segments of approximately equal size, subject to an allowed number of segments per tier. This is similar to LogByteSizeMergePolicy , except this merge policy is able to merge non-adjacent segment, and separates how many segments are merged at once ( MaxMergeAtOnce ) from how many segments are allowed per tier ( SegmentsPerTier ). This merge policy also does not over-merge (i.e. cascade merges). For normal merging, this policy first computes a \"budget\" of how many segments are allowed to be in the index. If the index is over-budget, then the policy sorts segments by decreasing size (pro-rating by percent deletes), and then finds the least-cost merge. Merge cost is measured by a combination of the \"skew\" of the merge (size of largest segment divided by smallest segment), total merge size and percent deletes reclaimed, so that merges with lower skew, smaller size and those reclaiming more deletes, are favored. If a merge will produce a segment that's larger than MaxMergedSegmentMB , then the policy will merge fewer segments (down to 1 at once, if that one has deletions) to keep the segment size under budget. NOTE : This policy freely merges non-adjacent segments; if this is a problem, use LogMergePolicy . NOTE : This policy always merges by byte size of the segments, always pro-rates by percent deletes, and does not apply any maximum segment size during forceMerge (unlike LogByteSizeMergePolicy ). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergePolicy TieredMergePolicy Inherited Members MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.SetIndexWriter(IndexWriter) MergePolicy.Dispose() MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) MergePolicy.Size(SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class TieredMergePolicy : MergePolicy Constructors | Improve this Doc View Source TieredMergePolicy() Sole constructor, setting all settings to their defaults. Declaration public TieredMergePolicy() Fields | Improve this Doc View Source DEFAULT_NO_CFS_RATIO Default noCFSRatio. If a merge's size is >= 10% of the index, then we disable compound file for it. Declaration public static readonly double DEFAULT_NO_CFS_RATIO Field Value Type Description System.Double See Also NoCFSRatio Properties | Improve this Doc View Source FloorSegmentMB Segments smaller than this are \"rounded up\" to this size, ie treated as equal (floor) size for merge selection. this is to prevent frequent flushing of tiny segments from allowing a long tail in the index. Default is 2 MB. Declaration public virtual double FloorSegmentMB { get; set; } Property Value Type Description System.Double | Improve this Doc View Source ForceMergeDeletesPctAllowed When forceMergeDeletes is called, we only merge away a segment if its delete percentage is over this threshold. Default is 10%. Declaration public virtual double ForceMergeDeletesPctAllowed { get; set; } Property Value Type Description System.Double | Improve this Doc View Source MaxMergeAtOnce Gets or sets maximum number of segments to be merged at a time during \"normal\" merging. For explicit merging (eg, ForceMerge(Int32) or ForceMergeDeletes() was called), see MaxMergeAtOnceExplicit . Default is 10. Declaration public virtual int MaxMergeAtOnce { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxMergeAtOnceExplicit Gets or sets maximum number of segments to be merged at a time, during ForceMerge(Int32) or ForceMergeDeletes() . Default is 30. Declaration public virtual int MaxMergeAtOnceExplicit { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxMergedSegmentMB Gets or sets maximum sized segment to produce during normal merging. This setting is approximate: the estimate of the merged segment size is made by summing sizes of to-be-merged segments (compensating for percent deleted docs). Default is 5 GB. Declaration public virtual double MaxMergedSegmentMB { get; set; } Property Value Type Description System.Double | Improve this Doc View Source ReclaimDeletesWeight Controls how aggressively merges that reclaim more deletions are favored. Higher values will more aggressively target merges that reclaim deletions, but be careful not to go so high that way too much merging takes place; a value of 3.0 is probably nearly too high. A value of 0.0 means deletions don't impact merge selection. Declaration public virtual double ReclaimDeletesWeight { get; set; } Property Value Type Description System.Double | Improve this Doc View Source SegmentsPerTier Gets or sets the allowed number of segments per tier. Smaller values mean more merging but fewer segments. NOTE : this value should be >= the MaxMergeAtOnce otherwise you'll force too much merging to occur. Default is 10.0. Declaration public virtual double SegmentsPerTier { get; set; } Property Value Type Description System.Double Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos infos) Parameters Type Name Description SegmentInfos infos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos infos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos infos System.Int32 maxSegmentCount IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos infos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos infos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source Score(IList<SegmentCommitInfo>, Boolean, Int64) Expert: scores one merge; subclasses can override. Declaration protected virtual TieredMergePolicy.MergeScore Score(IList<SegmentCommitInfo> candidate, bool hitTooLarge, long mergingBytes) Parameters Type Name Description IList < SegmentCommitInfo > candidate System.Boolean hitTooLarge System.Int64 mergingBytes Returns Type Description TieredMergePolicy.MergeScore | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.TieredMergePolicy.MergeScore.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TieredMergePolicy.MergeScore.html",
    "title": "Class TieredMergePolicy.MergeScore | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TieredMergePolicy.MergeScore Holds score and explanation for a single candidate merge. Inheritance System.Object TieredMergePolicy.MergeScore Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax protected abstract class MergeScore : object Constructors | Improve this Doc View Source MergeScore() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected MergeScore() Properties | Improve this Doc View Source Explanation Human readable explanation of how the merge got this score. Declaration public abstract string Explanation { get; } Property Value Type Description System.String | Improve this Doc View Source Score Returns the score for this merge candidate; lower scores are better. Declaration public abstract double Score { get; } Property Value Type Description System.Double"
  },
  "api/Lucene.Net/Lucene.Net.Index.TrackingIndexWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TrackingIndexWriter.html",
    "title": "Class TrackingIndexWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrackingIndexWriter Class that tracks changes to a delegated IndexWriter , used by ControlledRealTimeReopenThread<T> to ensure specific changes are visible. Create this class (passing your IndexWriter ), and then pass this class to ControlledRealTimeReopenThread<T> . Be sure to make all changes via the TrackingIndexWriter , otherwise ControlledRealTimeReopenThread<T> won't know about the changes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TrackingIndexWriter Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class TrackingIndexWriter : object Constructors | Improve this Doc View Source TrackingIndexWriter(IndexWriter) Create a TrackingIndexWriter wrapping the provided IndexWriter . Declaration public TrackingIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer Properties | Improve this Doc View Source Generation Return the current generation being indexed. Declaration public virtual long Generation { get; } Property Value Type Description System.Int64 | Improve this Doc View Source IndexWriter Return the wrapped IndexWriter . Declaration public virtual IndexWriter IndexWriter { get; } Property Value Type Description IndexWriter Methods | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>) Calls AddDocument(IEnumerable<IIndexableField>) and returns the generation that reflects this change. Declaration public virtual long AddDocument(IEnumerable<IIndexableField> d) Parameters Type Name Description IEnumerable < IIndexableField > d Returns Type Description System.Int64 | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>, Analyzer) Calls AddDocument(IEnumerable<IIndexableField>, Analyzer) and returns the generation that reflects this change. Declaration public virtual long AddDocument(IEnumerable<IIndexableField> d, Analyzer a) Parameters Type Name Description IEnumerable < IIndexableField > d Analyzer a Returns Type Description System.Int64 | Improve this Doc View Source AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) Calls AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) and returns the generation that reflects this change. Declaration public virtual long AddDocuments(IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description IEnumerable < IEnumerable < IIndexableField >> docs Returns Type Description System.Int64 | Improve this Doc View Source AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) Calls AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) and returns the generation that reflects this change. Declaration public virtual long AddDocuments(IEnumerable<IEnumerable<IIndexableField>> docs, Analyzer a) Parameters Type Name Description IEnumerable < IEnumerable < IIndexableField >> docs Analyzer a Returns Type Description System.Int64 | Improve this Doc View Source AddIndexes(IndexReader[]) Calls AddIndexes(IndexReader[]) and returns the generation that reflects this change. Declaration public virtual long AddIndexes(params IndexReader[] readers) Parameters Type Name Description IndexReader [] readers Returns Type Description System.Int64 | Improve this Doc View Source AddIndexes(Directory[]) Calls AddIndexes(Directory[]) and returns the generation that reflects this change. Declaration public virtual long AddIndexes(params Directory[] dirs) Parameters Type Name Description Directory [] dirs Returns Type Description System.Int64 | Improve this Doc View Source DeleteAll() Calls DeleteAll() and returns the generation that reflects this change. Declaration public virtual long DeleteAll() Returns Type Description System.Int64 | Improve this Doc View Source DeleteDocuments(Term) Calls DeleteDocuments(Term) and returns the generation that reflects this change. Declaration public virtual long DeleteDocuments(Term t) Parameters Type Name Description Term t Returns Type Description System.Int64 | Improve this Doc View Source DeleteDocuments(Term[]) Calls DeleteDocuments(Term[]) and returns the generation that reflects this change. Declaration public virtual long DeleteDocuments(params Term[] terms) Parameters Type Name Description Term [] terms Returns Type Description System.Int64 | Improve this Doc View Source DeleteDocuments(Query) Calls DeleteDocuments(Query) and returns the generation that reflects this change. Declaration public virtual long DeleteDocuments(Query q) Parameters Type Name Description Query q Returns Type Description System.Int64 | Improve this Doc View Source DeleteDocuments(Query[]) Calls DeleteDocuments(Query[]) and returns the generation that reflects this change. Declaration public virtual long DeleteDocuments(params Query[] queries) Parameters Type Name Description Query [] queries Returns Type Description System.Int64 | Improve this Doc View Source GetAndIncrementGeneration() Return and increment current gen. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual long GetAndIncrementGeneration() Returns Type Description System.Int64 | Improve this Doc View Source TryDeleteDocument(IndexReader, Int32) Cals TryDeleteDocument(IndexReader, Int32) and returns the generation that reflects this change. Declaration public virtual long TryDeleteDocument(IndexReader reader, int docID) Parameters Type Name Description IndexReader reader System.Int32 docID Returns Type Description System.Int64 | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>) Calls UpdateDocument(Term, IEnumerable<IIndexableField>) and returns the generation that reflects this change. Declaration public virtual long UpdateDocument(Term t, IEnumerable<IIndexableField> d) Parameters Type Name Description Term t IEnumerable < IIndexableField > d Returns Type Description System.Int64 | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>, Analyzer) Calls UpdateDocument(Term, IEnumerable<IIndexableField>, Analyzer) and returns the generation that reflects this change. Declaration public virtual long UpdateDocument(Term t, IEnumerable<IIndexableField> d, Analyzer a) Parameters Type Name Description Term t IEnumerable < IIndexableField > d Analyzer a Returns Type Description System.Int64 | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) Calls UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) and returns the generation that reflects this change. Declaration public virtual long UpdateDocuments(Term t, IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description Term t IEnumerable < IEnumerable < IIndexableField >> docs Returns Type Description System.Int64 | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) Calls UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) and returns the generation that reflects this change. Declaration public virtual long UpdateDocuments(Term t, IEnumerable<IEnumerable<IIndexableField>> docs, Analyzer a) Parameters Type Name Description Term t IEnumerable < IEnumerable < IIndexableField >> docs Analyzer a Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.CommitFailException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.CommitFailException.html",
    "title": "Class TwoPhaseCommitTool.CommitFailException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TwoPhaseCommitTool.CommitFailException Thrown by Execute(ITwoPhaseCommit[]) when an object fails to Commit() . Inheritance System.Object TwoPhaseCommitTool.CommitFailException Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class CommitFailException : System.IO.IOException Constructors | Improve this Doc View Source CommitFailException(Exception, ITwoPhaseCommit) Sole constructor. Declaration public CommitFailException(Exception cause, ITwoPhaseCommit obj) Parameters Type Name Description Exception cause ITwoPhaseCommit obj"
  },
  "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.html",
    "title": "Class TwoPhaseCommitTool | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TwoPhaseCommitTool A utility for executing 2-phase commit on several objects. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TwoPhaseCommitTool Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class TwoPhaseCommitTool : object Methods | Improve this Doc View Source Execute(ITwoPhaseCommit[]) Executes a 2-phase commit algorithm by first PrepareCommit() all objects and only if all succeed, it proceeds with Commit() . If any of the objects fail on either the preparation or actual commit, it terminates and Rollback() all of them. NOTE: It may happen that an object fails to commit, after few have already successfully committed. This tool will still issue a rollback instruction on them as well, but depending on the implementation, it may not have any effect. NOTE: if any of the objects are null , this method simply skips over them. Declaration public static void Execute(params ITwoPhaseCommit[] objects) Parameters Type Name Description ITwoPhaseCommit [] objects Exceptions Type Condition TwoPhaseCommitTool.PrepareCommitFailException if any of the objects fail to PrepareCommit() TwoPhaseCommitTool.CommitFailException if any of the objects fail to Commit() See Also ITwoPhaseCommit"
  },
  "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.PrepareCommitFailException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.PrepareCommitFailException.html",
    "title": "Class TwoPhaseCommitTool.PrepareCommitFailException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TwoPhaseCommitTool.PrepareCommitFailException Thrown by Execute(ITwoPhaseCommit[]) when an object fails to PrepareCommit() . Inheritance System.Object TwoPhaseCommitTool.PrepareCommitFailException Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class PrepareCommitFailException : System.IO.IOException Constructors | Improve this Doc View Source PrepareCommitFailException(Exception, ITwoPhaseCommit) Sole constructor. Declaration public PrepareCommitFailException(Exception cause, ITwoPhaseCommit obj) Parameters Type Name Description Exception cause ITwoPhaseCommit obj"
  },
  "api/Lucene.Net/Lucene.Net.Index.UpgradeIndexMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.UpgradeIndexMergePolicy.html",
    "title": "Class UpgradeIndexMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UpgradeIndexMergePolicy This MergePolicy is used for upgrading all existing segments of an index when calling ForceMerge(Int32) . All other methods delegate to the base MergePolicy given to the constructor. This allows for an as-cheap-as possible upgrade of an older index by only upgrading segments that are created by previous Lucene versions. ForceMerge does no longer really merge; it is just used to \"ForceMerge\" older segment versions away. In general one would use IndexUpgrader , but for a fully customizeable upgrade, you can use this like any other MergePolicy and call ForceMerge(Int32) : IndexWriterConfig iwc = new IndexWriterConfig(LuceneVersion.LUCENE_XX, new KeywordAnalyzer()); iwc.MergePolicy = new UpgradeIndexMergePolicy(iwc.MergePolicy); using (IndexWriter w = new IndexWriter(dir, iwc)) { w.ForceMerge(1); } Warning: this merge policy may reorder documents if the index was partially upgraded before calling ForceMerge(Int32) (e.g., documents were added). If your application relies on \"monotonicity\" of doc IDs (which means that the order in which the documents were added to the index is preserved), do a ForceMerge(1) instead. Please note, the delegate MergePolicy may also reorder documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergePolicy UpgradeIndexMergePolicy Inherited Members MergePolicy.DEFAULT_NO_CFS_RATIO MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.Dispose() MergePolicy.Size(SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class UpgradeIndexMergePolicy : MergePolicy Constructors | Improve this Doc View Source UpgradeIndexMergePolicy(MergePolicy) Wrap the given MergePolicy and intercept ForceMerge(Int32) requests to only upgrade segments written with previous Lucene versions. Declaration public UpgradeIndexMergePolicy(MergePolicy base) Parameters Type Name Description MergePolicy base Fields | Improve this Doc View Source m_base Wrapped MergePolicy . Declaration protected readonly MergePolicy m_base Field Value Type Description MergePolicy Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos segmentInfos System.Int32 maxSegmentCount IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source SetIndexWriter(IndexWriter) Declaration public override void SetIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer Overrides MergePolicy.SetIndexWriter(IndexWriter) | Improve this Doc View Source ShouldUpgradeSegment(SegmentCommitInfo) Returns true if the given segment should be upgraded. The default implementation will return !Constants.LUCENE_MAIN_VERSION.Equals(si.Info.Version, StringComparison.Ordinal) , so all segments created with a different version number than this Lucene version will get upgraded. Declaration protected virtual bool ShouldUpgradeSegment(SegmentCommitInfo si) Parameters Type Name Description SegmentCommitInfo si Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source UseCompoundFile(SegmentInfos, SegmentCommitInfo) Declaration public override bool UseCompoundFile(SegmentInfos segments, SegmentCommitInfo newSegment) Parameters Type Name Description SegmentInfos segments SegmentCommitInfo newSegment Returns Type Description System.Boolean Overrides MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) See Also IndexUpgrader"
  },
  "api/Lucene.Net/Lucene.Net.Search.AutomatonQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.AutomatonQuery.html",
    "title": "Class AutomatonQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AutomatonQuery A Query that will match terms against a finite-state machine. This query will match documents that contain terms accepted by a given finite-state machine. The automaton can be constructed with the Lucene.Net.Util.Automaton API. Alternatively, it can be created from a regular expression with RegexpQuery or from the standard Lucene wildcard syntax with WildcardQuery . When the query is executed, it will create an equivalent DFA of the finite-state machine, and will enumerate the term dictionary in an intelligent way to reduce the number of comparisons. For example: the regular expression of [dl]og? will make approximately four comparisons: do, dog, lo, and log. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Query MultiTermQuery AutomatonQuery RegexpQuery WildcardQuery Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class AutomatonQuery : MultiTermQuery Constructors | Improve this Doc View Source AutomatonQuery(Term, Automaton) Create a new AutomatonQuery from an Automaton . Declaration public AutomatonQuery(Term term, Automaton automaton) Parameters Type Name Description Term term Term containing field and possibly some pattern structure. The term text is ignored. Automaton automaton Automaton to run, terms that are accepted are considered a match. Fields | Improve this Doc View Source m_automaton The automaton to match index terms against Declaration protected readonly Automaton m_automaton Field Value Type Description Automaton | Improve this Doc View Source m_compiled Declaration protected readonly CompiledAutomaton m_compiled Field Value Type Description CompiledAutomaton | Improve this Doc View Source m_term Term containing the field, and possibly some pattern structure Declaration protected readonly Term m_term Field Value Type Description Term Properties | Improve this Doc View Source Automaton Returns the automaton used to create this query Declaration public virtual Automaton Automaton { get; } Property Value Type Description Automaton Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.BitsFilteredDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BitsFilteredDocIdSet.html",
    "title": "Class BitsFilteredDocIdSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BitsFilteredDocIdSet This implementation supplies a filtered DocIdSet , that excludes all docids which are not in a IBits instance. This is especially useful in Filter to apply the Lucene.Net.Search.BitsFilteredDocIdSet.acceptDocs passed to GetDocIdSet(AtomicReaderContext, IBits) before returning the final DocIdSet . Inheritance System.Object DocIdSet FilteredDocIdSet BitsFilteredDocIdSet Inherited Members FilteredDocIdSet.IsCacheable FilteredDocIdSet.Bits FilteredDocIdSet.GetIterator() DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class BitsFilteredDocIdSet : FilteredDocIdSet Constructors | Improve this Doc View Source BitsFilteredDocIdSet(DocIdSet, IBits) Constructor. Declaration public BitsFilteredDocIdSet(DocIdSet innerSet, IBits acceptDocs) Parameters Type Name Description DocIdSet innerSet Underlying DocIdSet IBits acceptDocs Allowed docs, all docids not in this set will not be returned by this DocIdSet Methods | Improve this Doc View Source Match(Int32) Declaration protected override bool Match(int docid) Parameters Type Name Description System.Int32 docid Returns Type Description System.Boolean Overrides FilteredDocIdSet.Match(Int32) | Improve this Doc View Source Wrap(DocIdSet, IBits) Convenience wrapper method: If acceptDocs == null it returns the original set without wrapping. Declaration public static DocIdSet Wrap(DocIdSet set, IBits acceptDocs) Parameters Type Name Description DocIdSet set Underlying DocIdSet. If null , this method returns null IBits acceptDocs Allowed docs, all docids not in this set will not be returned by this DocIdSet . If null , this method returns the original set without wrapping. Returns Type Description DocIdSet See Also DocIdSet Filter"
  },
  "api/Lucene.Net/Lucene.Net.Search.BooleanClause.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BooleanClause.html",
    "title": "Class BooleanClause | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanClause A clause in a BooleanQuery . Inheritance System.Object BooleanClause Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class BooleanClause : IEquatable<BooleanClause> Constructors | Improve this Doc View Source BooleanClause(Query, Occur) Constructs a BooleanClause . Declaration public BooleanClause(Query query, Occur occur) Parameters Type Name Description Query query Occur occur Properties | Improve this Doc View Source IsProhibited Declaration public virtual bool IsProhibited { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsRequired Declaration public virtual bool IsRequired { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Occur Declaration public virtual Occur Occur { get; set; } Property Value Type Description Occur | Improve this Doc View Source Query Declaration public virtual Query Query { get; set; } Property Value Type Description Query Methods | Improve this Doc View Source Equals(BooleanClause) Declaration public bool Equals(BooleanClause other) Parameters Type Name Description BooleanClause other Returns Type Description System.Boolean | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source ToString(Occur) Declaration public static string ToString(Occur occur) Parameters Type Name Description Occur occur Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.BooleanWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.BooleanWeight.html",
    "title": "Class BooleanQuery.BooleanWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanQuery.BooleanWeight Expert: the Weight for BooleanQuery , used to normalize, score and explain these queries. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Weight BooleanQuery.BooleanWeight Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class BooleanWeight : Weight Constructors | Improve this Doc View Source BooleanWeight(BooleanQuery, IndexSearcher, Boolean) Declaration public BooleanWeight(BooleanQuery outerInstance, IndexSearcher searcher, bool disableCoord) Parameters Type Name Description BooleanQuery outerInstance IndexSearcher searcher System.Boolean disableCoord Fields | Improve this Doc View Source m_maxCoord Declaration protected int m_maxCoord Field Value Type Description System.Int32 | Improve this Doc View Source m_similarity The Similarity implementation. Declaration protected Similarity m_similarity Field Value Type Description Similarity | Improve this Doc View Source m_weights Declaration protected List<Weight> m_weights Field Value Type Description List < Weight > Properties | Improve this Doc View Source MaxCoord Declaration public int MaxCoord { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Query Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query | Improve this Doc View Source ScoresDocsOutOfOrder Declaration public override bool ScoresDocsOutOfOrder { get; } Property Value Type Description System.Boolean Overrides Weight.ScoresDocsOutOfOrder | Improve this Doc View Source Similarity Declaration public Similarity Similarity { get; } Property Value Type Description Similarity Methods | Improve this Doc View Source Coord(Int32, Int32) Declaration public virtual float Coord(int overlap, int maxOverlap) Parameters Type Name Description System.Int32 overlap System.Int32 maxOverlap Returns Type Description System.Single | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides Weight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetBulkScorer(AtomicReaderContext, Boolean, IBits) Declaration public override BulkScorer GetBulkScorer(AtomicReaderContext context, bool scoreDocsInOrder, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context System.Boolean scoreDocsInOrder IBits acceptDocs Returns Type Description BulkScorer Overrides Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Declaration public override void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost Overrides Weight.Normalize(Single, Single)"
  },
  "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.html",
    "title": "Class BooleanQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanQuery A Query that matches documents matching boolean combinations of other queries, e.g. TermQuery s, PhraseQuery s or other BooleanQuery s. Collection initializer note: To create and populate a BooleanQuery in a single statement, you can use the following example as a guide: var booleanQuery = new BooleanQuery() { { new WildcardQuery(new Term(\"field2\", \"foobar\")), Occur.SHOULD }, { new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }, Occur.SHOULD } }; // or var booleanQuery = new BooleanQuery() { new BooleanClause(new WildcardQuery(new Term(\"field2\", \"foobar\")), Occur.SHOULD), new BooleanClause(new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }, Occur.SHOULD) }; Inheritance System.Object Query BooleanQuery Implements IEnumerable < BooleanClause > Inherited Members Query.Boost Query.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class BooleanQuery : Query, IEnumerable<BooleanClause> Constructors | Improve this Doc View Source BooleanQuery() Constructs an empty boolean query. Declaration public BooleanQuery() | Improve this Doc View Source BooleanQuery(Boolean) Constructs an empty boolean query. Coord(Int32, Int32) may be disabled in scoring, as appropriate. For example, this score factor does not make sense for most automatically generated queries, like WildcardQuery and FuzzyQuery . Declaration public BooleanQuery(bool disableCoord) Parameters Type Name Description System.Boolean disableCoord Disables Coord(Int32, Int32) in scoring. Fields | Improve this Doc View Source m_minNrShouldMatch Declaration protected int m_minNrShouldMatch Field Value Type Description System.Int32 Properties | Improve this Doc View Source Clauses Returns the list of clauses in this query. Declaration public virtual IList<BooleanClause> Clauses { get; } Property Value Type Description IList < BooleanClause > | Improve this Doc View Source CoordDisabled Returns true if Coord(Int32, Int32) is disabled in scoring for this query instance. Declaration public virtual bool CoordDisabled { get; } Property Value Type Description System.Boolean See Also BooleanQuery(Boolean) | Improve this Doc View Source MaxClauseCount Return the maximum number of clauses permitted, 1024 by default. Attempts to add more than the permitted number of clauses cause BooleanQuery.TooManyClausesException to be thrown. Declaration public static int MaxClauseCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinimumNumberShouldMatch Specifies a minimum number of the optional BooleanClause s which must be satisfied. By default no optional clauses are necessary for a match (unless there are no required clauses). If this method is used, then the specified number of clauses is required. Use of this method is totally independent of specifying that any specific clauses are required (or prohibited). This number will only be compared against the number of matching optional clauses. Declaration public virtual int MinimumNumberShouldMatch { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(BooleanClause) Adds a clause to a boolean query. Declaration public virtual void Add(BooleanClause clause) Parameters Type Name Description BooleanClause clause Exceptions Type Condition BooleanQuery.TooManyClausesException If the new number of clauses exceeds the maximum clause number See Also MaxClauseCount | Improve this Doc View Source Add(Query, Occur) Adds a clause to a boolean query. Declaration public virtual void Add(Query query, Occur occur) Parameters Type Name Description Query query Occur occur Exceptions Type Condition BooleanQuery.TooManyClausesException If the new number of clauses exceeds the maximum clause number See Also MaxClauseCount | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetClauses() Returns the set of clauses in this query. Declaration public virtual BooleanClause[] GetClauses() Returns Type Description BooleanClause [] | Improve this Doc View Source GetEnumerator() Returns an iterator on the clauses in this query. It implements the IEnumerable{BooleanClause} interface to make it possible to do: foreach (BooleanClause clause in booleanQuery) {} Declaration public IEnumerator<BooleanClause> GetEnumerator() Returns Type Description IEnumerator < BooleanClause > | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Implements IEnumerable<>"
  },
  "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.TooManyClausesException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.TooManyClausesException.html",
    "title": "Class BooleanQuery.TooManyClausesException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanQuery.TooManyClausesException Thrown when an attempt is made to add more than MaxClauseCount clauses. This typically happens if a PrefixQuery , FuzzyQuery , WildcardQuery , or TermRangeQuery is expanded to many terms during search. Inheritance System.Object BooleanQuery.TooManyClausesException Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TooManyClausesException : Exception Constructors | Improve this Doc View Source TooManyClausesException() Declaration public TooManyClausesException()"
  },
  "api/Lucene.Net/Lucene.Net.Search.BoostAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BoostAttribute.html",
    "title": "Class BoostAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostAttribute Implementation class for IBoostAttribute . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Attribute BoostAttribute Implements IBoostAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class BoostAttribute : Attribute, IBoostAttribute, IAttribute Properties | Improve this Doc View Source Boost Gets or Sets the boost in this attribute. Default is 1.0f . Declaration public float Boost { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) Implements IBoostAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Search.BulkScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BulkScorer.html",
    "title": "Class BulkScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BulkScorer This class is used to score a range of documents at once, and is returned by GetBulkScorer(AtomicReaderContext, Boolean, IBits) . Only queries that have a more optimized means of scoring across a range of documents need to override this. Otherwise, a default implementation is wrapped around the Scorer returned by GetScorer(AtomicReaderContext, IBits) . Inheritance System.Object BulkScorer ConstantScoreQuery.ConstantBulkScorer Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class BulkScorer : object Methods | Improve this Doc View Source Score(ICollector) Scores and collects all matching documents. Declaration public virtual void Score(ICollector collector) Parameters Type Name Description ICollector collector The collector to which all matching documents are passed. | Improve this Doc View Source Score(ICollector, Int32) Collects matching documents in a range. Declaration public abstract bool Score(ICollector collector, int max) Parameters Type Name Description ICollector collector The collector to which all matching documents are passed. System.Int32 max Score up to, but not including, this doc Returns Type Description System.Boolean true if more matching documents may remain."
  },
  "api/Lucene.Net/Lucene.Net.Search.CachingCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.CachingCollector.html",
    "title": "Class CachingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CachingCollector Caches all docs, and optionally also scores, coming from a search, and is then able to replay them to another collector. You specify the max RAM this class may use. Once the collection is done, call IsCached . If this returns true , you can use Replay(ICollector) against a new collector. If it returns false , this means too much RAM was required and you must instead re-run the original search. NOTE : this class consumes 4 (or 8 bytes, if scoring is cached) per collected document. If the result set is large this can easily be a very substantial amount of RAM! NOTE : this class caches at least 128 documents before checking RAM limits. See the Lucene modules/grouping module for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CachingCollector Implements ICollector Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class CachingCollector : object, ICollector Fields | Improve this Doc View Source m_base Declaration protected int m_base Field Value Type Description System.Int32 | Improve this Doc View Source m_cachedDocs Declaration protected readonly IList<int[]> m_cachedDocs Field Value Type Description IList < System.Int32 []> | Improve this Doc View Source m_curDocs Declaration protected int[] m_curDocs Field Value Type Description System.Int32 [] | Improve this Doc View Source m_lastDocBase Declaration protected int m_lastDocBase Field Value Type Description System.Int32 | Improve this Doc View Source m_maxDocsToCache Declaration protected readonly int m_maxDocsToCache Field Value Type Description System.Int32 | Improve this Doc View Source m_other Declaration protected readonly ICollector m_other Field Value Type Description ICollector | Improve this Doc View Source m_upto Declaration protected int m_upto Field Value Type Description System.Int32 Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsCached Declaration public virtual bool IsCached { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source Create(ICollector, Boolean, Double) Create a new CachingCollector that wraps the given collector and caches documents and scores up to the specified RAM threshold. Declaration public static CachingCollector Create(ICollector other, bool cacheScores, double maxRAMMB) Parameters Type Name Description ICollector other The ICollector to wrap and delegate calls to. System.Boolean cacheScores Whether to cache scores in addition to document IDs. Note that this increases the RAM consumed per doc. System.Double maxRAMMB The maximum RAM in MB to consume for caching the documents and scores. If the collector exceeds the threshold, no documents and scores are cached. Returns Type Description CachingCollector | Improve this Doc View Source Create(ICollector, Boolean, Int32) Create a new CachingCollector that wraps the given collector and caches documents and scores up to the specified max docs threshold. Declaration public static CachingCollector Create(ICollector other, bool cacheScores, int maxDocsToCache) Parameters Type Name Description ICollector other The ICollector to wrap and delegate calls to. System.Boolean cacheScores Whether to cache scores in addition to document IDs. Note that this increases the RAM consumed per doc. System.Int32 maxDocsToCache The maximum number of documents for caching the documents and possible the scores. If the collector exceeds the threshold, no documents and scores are cached. Returns Type Description CachingCollector | Improve this Doc View Source Create(Boolean, Boolean, Double) Creates a CachingCollector which does not wrap another collector. The cached documents and scores can later be replayed ( Replay(ICollector) ). Declaration public static CachingCollector Create(bool acceptDocsOutOfOrder, bool cacheScores, double maxRAMMB) Parameters Type Name Description System.Boolean acceptDocsOutOfOrder whether documents are allowed to be collected out-of-order System.Boolean cacheScores System.Double maxRAMMB Returns Type Description CachingCollector | Improve this Doc View Source Replay(ICollector) Replays the cached doc IDs (and scores) to the given ICollector . If this instance does not cache scores, then Scorer is not set on other.SetScorer(Scorer) as well as scores are not replayed. Declaration public abstract void Replay(ICollector other) Parameters Type Name Description ICollector other | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Called before successive calls to Collect(Int32) . Implementations that need the score of the current document (passed-in to ), should save the passed-in Scorer and call GetScore() when needed. Declaration public abstract void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.CachingWrapperFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.CachingWrapperFilter.html",
    "title": "Class CachingWrapperFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CachingWrapperFilter Wraps another Filter 's result and caches it. The purpose is to allow filters to simply filter, and then wrap with this class to add caching. Inheritance System.Object Filter CachingWrapperFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class CachingWrapperFilter : Filter Constructors | Improve this Doc View Source CachingWrapperFilter(Filter) Wraps another filter's result and caches it. Declaration public CachingWrapperFilter(Filter filter) Parameters Type Name Description Filter filter Filter to cache results of Fields | Improve this Doc View Source EMPTY_DOCIDSET An empty DocIdSet instance Declaration protected static readonly DocIdSet EMPTY_DOCIDSET Field Value Type Description DocIdSet Properties | Improve this Doc View Source Filter Gets the contained filter. Declaration public virtual Filter Filter { get; } Property Value Type Description Filter the contained filter. Methods | Improve this Doc View Source CacheImpl(DocIdSetIterator, AtomicReader) Default cache implementation: uses WAH8DocIdSet . Declaration protected virtual DocIdSet CacheImpl(DocIdSetIterator iterator, AtomicReader reader) Parameters Type Name Description DocIdSetIterator iterator AtomicReader reader Returns Type Description DocIdSet | Improve this Doc View Source DocIdSetToCache(DocIdSet, AtomicReader) Provide the DocIdSet to be cached, using the DocIdSet provided by the wrapped Filter. This implementation returns the given DocIdSet , if IsCacheable returns true , else it calls CacheImpl(DocIdSetIterator, AtomicReader) Note: this method returns EMPTY_DOCIDSET if the given docIdSet is null or if GetIterator() return null . The empty instance is use as a placeholder in the cache instead of the null value. Declaration protected virtual DocIdSet DocIdSetToCache(DocIdSet docIdSet, AtomicReader reader) Parameters Type Name Description DocIdSet docIdSet AtomicReader reader Returns Type Description DocIdSet | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source GetSizeInBytes() Returns total byte size used by cached filters. Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.CollectionStatistics.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.CollectionStatistics.html",
    "title": "Class CollectionStatistics | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectionStatistics Contains statistics for a collection (field) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CollectionStatistics Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class CollectionStatistics : object Constructors | Improve this Doc View Source CollectionStatistics(String, Int64, Int64, Int64, Int64) Sole constructor. Declaration public CollectionStatistics(string field, long maxDoc, long docCount, long sumTotalTermFreq, long sumDocFreq) Parameters Type Name Description System.String field System.Int64 maxDoc System.Int64 docCount System.Int64 sumTotalTermFreq System.Int64 sumDocFreq Properties | Improve this Doc View Source DocCount Returns the total number of documents that have at least one term for this field. Declaration public long DocCount { get; } Property Value Type Description System.Int64 See Also DocCount | Improve this Doc View Source Field Returns the field name Declaration public string Field { get; } Property Value Type Description System.String | Improve this Doc View Source MaxDoc Returns the total number of documents, regardless of whether they all contain values for this field. Declaration public long MaxDoc { get; } Property Value Type Description System.Int64 See Also MaxDoc | Improve this Doc View Source SumDocFreq Returns the total number of postings for this field Declaration public long SumDocFreq { get; } Property Value Type Description System.Int64 See Also SumDocFreq | Improve this Doc View Source SumTotalTermFreq Returns the total number of tokens for this field Declaration public long SumTotalTermFreq { get; } Property Value Type Description System.Int64 See Also SumTotalTermFreq"
  },
  "api/Lucene.Net/Lucene.Net.Search.CollectionTerminatedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.CollectionTerminatedException.html",
    "title": "Class CollectionTerminatedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectionTerminatedException Throw this exception in Collect(Int32) to prematurely terminate collection of the current leaf. Note: IndexSearcher swallows this exception and never re-throws it. As a consequence, you should not catch it when calling any overload of Search(Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) as it is unnecessary and might hide misuse of this exception. Inheritance System.Object CollectionTerminatedException Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class CollectionTerminatedException : Exception Constructors | Improve this Doc View Source CollectionTerminatedException() Sole constructor. Declaration public CollectionTerminatedException()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Collector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Collector.html",
    "title": "Class Collector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Collector LUCENENET specific class used to hold the NewAnonymous(Action<Scorer>, Action<Int32>, Action<AtomicReaderContext>, Func<Boolean>) static method. Inheritance System.Object Collector Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class Collector : object Methods | Improve this Doc View Source NewAnonymous(Action<Scorer>, Action<Int32>, Action<AtomicReaderContext>, Func<Boolean>) Creates a new instance with the ability to specify the body of the SetScorer(Scorer) method through the setScorer parameter, the body of the Collect(Int32) method through the collect parameter, the body of the SetNextReader(AtomicReaderContext) method through the setNextReader parameter, and the body of the AcceptsDocsOutOfOrder property through the acceptsDocsOutOfOrder parameter. Simple example: IndexSearcher searcher = new IndexSearcher(indexReader); OpenBitSet bits = new OpenBitSet(indexReader.MaxDoc); int docBase; searcher.Search(query, Collector.NewAnonymous(setScorer: (scorer) => { // ignore scorer }, collect: (doc) => { bits.Set(doc + docBase); }, setNextReader: (context) => { docBase = context.DocBase; }, acceptsDocsOutOfOrder: () => { return true; }) ); Declaration public static ICollector NewAnonymous(Action<Scorer> setScorer, Action<int> collect, Action<AtomicReaderContext> setNextReader, Func<bool> acceptsDocsOutOfOrder) Parameters Type Name Description Action < Scorer > setScorer A delegate method that represents (is called by) the SetScorer(Scorer) method. It accepts a Scorer scorer and has no return value. Action < System.Int32 > collect A delegate method that represents (is called by) the Collect(Int32) method. It accepts an doc and has no return value. Action < AtomicReaderContext > setNextReader A delegate method that represents (is called by) the SetNextReader(AtomicReaderContext) method. It accepts a AtomicReaderContext context and has no return value. Func < System.Boolean > acceptsDocsOutOfOrder A delegate method that represents (is called by) the AcceptsDocsOutOfOrder property. It returns a value. Returns Type Description ICollector A new Lucene.Net.Search.Collector.AnonymousCollector instance."
  },
  "api/Lucene.Net/Lucene.Net.Search.ComplexExplanation.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ComplexExplanation.html",
    "title": "Class ComplexExplanation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ComplexExplanation Expert: Describes the score computation for document and query, and can distinguish a match independent of a positive value. Inheritance System.Object Explanation ComplexExplanation Inherited Members Explanation.Value Explanation.Description Explanation.GetDetails() Explanation.AddDetail(Explanation) Explanation.ToString() Explanation.ToString(Int32) Explanation.ToHtml() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ComplexExplanation : Explanation Constructors | Improve this Doc View Source ComplexExplanation() Declaration public ComplexExplanation() | Improve this Doc View Source ComplexExplanation(Boolean, Single, String) Declaration public ComplexExplanation(bool match, float value, string description) Parameters Type Name Description System.Boolean match System.Single value System.String description Properties | Improve this Doc View Source IsMatch Indicates whether or not this Explanation models a good match. If the match status is explicitly set (i.e.: not null) this method uses it; otherwise it defers to the superclass. Declaration public override bool IsMatch { get; } Property Value Type Description System.Boolean Overrides Explanation.IsMatch See Also Match | Improve this Doc View Source Match Gets or Sets the match status assigned to this explanation node. May be null if match status is unknown. Declaration public virtual bool? Match { get; set; } Property Value Type Description System.Nullable < System.Boolean > Methods | Improve this Doc View Source GetSummary() Declaration protected override string GetSummary() Returns Type Description System.String Overrides Explanation.GetSummary()"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreAutoRewrite.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreAutoRewrite.html",
    "title": "Class ConstantScoreAutoRewrite | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstantScoreAutoRewrite A rewrite method that tries to pick the best constant-score rewrite method based on term and document counts from the query. If both the number of terms and documents is small enough, then CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE is used. Otherwise, CONSTANT_SCORE_FILTER_REWRITE is used. Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite < BooleanQuery > ConstantScoreAutoRewrite Inherited Members TermCollectingRewrite<BooleanQuery>.AddClause(BooleanQuery, Term, Int32, Single) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ConstantScoreAutoRewrite : TermCollectingRewrite<BooleanQuery> Fields | Improve this Doc View Source DEFAULT_DOC_COUNT_PERCENT If the query will hit more than 1 in 1000 of the docs in the index (0.1%), the filter method is fastest: Declaration public static double DEFAULT_DOC_COUNT_PERCENT Field Value Type Description System.Double | Improve this Doc View Source DEFAULT_TERM_COUNT_CUTOFF Defaults derived from rough tests with a 20.0 million doc Wikipedia index. With more than 350 terms in the query, the filter method is fastest: Declaration public static int DEFAULT_TERM_COUNT_CUTOFF Field Value Type Description System.Int32 Properties | Improve this Doc View Source DocCountPercent If the number of documents to be visited in the postings exceeds this specified percentage of the MaxDoc for the index, then CONSTANT_SCORE_FILTER_REWRITE is used. Value may be 0.0 to 100.0. Declaration public virtual double DocCountPercent { get; set; } Property Value Type Description System.Double | Improve this Doc View Source TermCountCutoff If the number of terms in this query is equal to or larger than this setting then CONSTANT_SCORE_FILTER_REWRITE is used. Declaration public virtual int TermCountCutoff { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddClause(BooleanQuery, Term, Int32, Single, TermContext) Declaration protected override void AddClause(BooleanQuery topLevel, Term term, int docFreq, float boost, TermContext states) Parameters Type Name Description BooleanQuery topLevel Term term System.Int32 docFreq System.Single boost TermContext states Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.AddClause(Lucene.Net.Search.BooleanQuery, Lucene.Net.Index.Term, System.Int32, System.Single, Lucene.Net.Index.TermContext) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source GetTopLevelQuery() Declaration protected override BooleanQuery GetTopLevelQuery() Returns Type Description BooleanQuery Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.GetTopLevelQuery() | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantBulkScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantBulkScorer.html",
    "title": "Class ConstantScoreQuery.ConstantBulkScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstantScoreQuery.ConstantBulkScorer We return this as our BulkScorer so that if the CSQ wraps a query with its own optimized top-level scorer (e.g. Lucene.Net.Search.BooleanScorer ) we can use that top-level scorer. Inheritance System.Object BulkScorer ConstantScoreQuery.ConstantBulkScorer Inherited Members BulkScorer.Score(ICollector) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax protected class ConstantBulkScorer : BulkScorer Constructors | Improve this Doc View Source ConstantBulkScorer(ConstantScoreQuery, BulkScorer, Weight, Single) Declaration public ConstantBulkScorer(ConstantScoreQuery outerInstance, BulkScorer bulkScorer, Weight weight, float theScore) Parameters Type Name Description ConstantScoreQuery outerInstance BulkScorer bulkScorer Weight weight System.Single theScore Methods | Improve this Doc View Source Score(ICollector, Int32) Declaration public override bool Score(ICollector collector, int max) Parameters Type Name Description ICollector collector System.Int32 max Returns Type Description System.Boolean Overrides BulkScorer.Score(ICollector, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantScorer.html",
    "title": "Class ConstantScoreQuery.ConstantScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstantScoreQuery.ConstantScorer Inheritance System.Object DocIdSetIterator DocsEnum Scorer ConstantScoreQuery.ConstantScorer Inherited Members Scorer.m_weight Scorer.Weight DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax protected class ConstantScorer : Scorer Constructors | Improve this Doc View Source ConstantScorer(ConstantScoreQuery, DocIdSetIterator, Weight, Single) Declaration public ConstantScorer(ConstantScoreQuery outerInstance, DocIdSetIterator docIdSetIterator, Weight w, float theScore) Parameters Type Name Description ConstantScoreQuery outerInstance DocIdSetIterator docIdSetIterator Weight w System.Single theScore Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetChildren() Declaration public override ICollection<Scorer.ChildScorer> GetChildren() Returns Type Description ICollection < Scorer.ChildScorer > Overrides Scorer.GetChildren() | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantWeight.html",
    "title": "Class ConstantScoreQuery.ConstantWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstantScoreQuery.ConstantWeight Inheritance System.Object Weight ConstantScoreQuery.ConstantWeight Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax protected class ConstantWeight : Weight Constructors | Improve this Doc View Source ConstantWeight(ConstantScoreQuery, IndexSearcher) Declaration public ConstantWeight(ConstantScoreQuery outerInstance, IndexSearcher searcher) Parameters Type Name Description ConstantScoreQuery outerInstance IndexSearcher searcher Properties | Improve this Doc View Source Query Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query | Improve this Doc View Source ScoresDocsOutOfOrder Declaration public override bool ScoresDocsOutOfOrder { get; } Property Value Type Description System.Boolean Overrides Weight.ScoresDocsOutOfOrder Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides Weight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetBulkScorer(AtomicReaderContext, Boolean, IBits) Declaration public override BulkScorer GetBulkScorer(AtomicReaderContext context, bool scoreDocsInOrder, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context System.Boolean scoreDocsInOrder IBits acceptDocs Returns Type Description BulkScorer Overrides Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Declaration public override void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost Overrides Weight.Normalize(Single, Single)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.html",
    "title": "Class ConstantScoreQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstantScoreQuery A query that wraps another query or a filter and simply returns a constant score equal to the query boost for every document that matches the filter or query. For queries it therefore simply strips of all scores and returns a constant one. Inheritance System.Object Query ConstantScoreQuery Inherited Members Query.Boost Query.ToString() Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ConstantScoreQuery : Query Constructors | Improve this Doc View Source ConstantScoreQuery(Filter) Wraps a Filter as a Query . The hits will get a constant score dependent on the boost factor of this query. If you simply want to strip off scores from a Query , no longer use new ConstantScoreQuery(new QueryWrapperFilter(query)) , instead use ConstantScoreQuery(Query) ! Declaration public ConstantScoreQuery(Filter filter) Parameters Type Name Description Filter filter | Improve this Doc View Source ConstantScoreQuery(Query) Strips off scores from the passed in Query . The hits will get a constant score dependent on the boost factor of this query. Declaration public ConstantScoreQuery(Query query) Parameters Type Name Description Query query Fields | Improve this Doc View Source m_filter Declaration protected readonly Filter m_filter Field Value Type Description Filter | Improve this Doc View Source m_query Declaration protected readonly Query m_query Field Value Type Description Query Properties | Improve this Doc View Source Filter Returns the encapsulated filter, returns null if a query is wrapped. Declaration public virtual Filter Filter { get; } Property Value Type Description Filter | Improve this Doc View Source Query Returns the encapsulated query, returns null if a filter is wrapped. Declaration public virtual Query Query { get; } Property Value Type Description Query Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ControlledRealTimeReopenThread-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ControlledRealTimeReopenThread-1.html",
    "title": "Class ControlledRealTimeReopenThread<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ControlledRealTimeReopenThread<T> Utility class that runs a thread to manage periodic reopens of a ReferenceManager<G> , with methods to wait for a specific index changes to become visible. To use this class you must first wrap your IndexWriter with a TrackingIndexWriter and always use it to make changes to the index, saving the returned generation. Then, when a given search request needs to see a specific index change, call the WaitForGeneration(Int64) to wait for that change to be visible. Note that this will only scale well if most searches do not need to wait for a specific index generation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ControlledRealTimeReopenThread<T> Implements IDisposable Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ControlledRealTimeReopenThread<T> : ThreadJob, IDisposable where T : class Type Parameters Name Description T Constructors | Improve this Doc View Source ControlledRealTimeReopenThread(TrackingIndexWriter, ReferenceManager<T>, Double, Double) Create ControlledRealTimeReopenThread<T> , to periodically reopen the a ReferenceManager<G> . Declaration public ControlledRealTimeReopenThread(TrackingIndexWriter writer, ReferenceManager<T> manager, double targetMaxStaleSec, double targetMinStaleSec) Parameters Type Name Description TrackingIndexWriter writer ReferenceManager <T> manager System.Double targetMaxStaleSec Maximum time until a new reader must be opened; this sets the upper bound on how slowly reopens may occur, when no caller is waiting for a specific generation to become visible. System.Double targetMinStaleSec Mininum time until a new reader can be opened; this sets the lower bound on how quickly reopens may occur, when a caller is waiting for a specific generation to become visible. Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Run() Declaration public override void Run() | Improve this Doc View Source WaitForGeneration(Int64) Waits for the target generation to become visible in the searcher. If the current searcher is older than the target generation, this method will block until the searcher is reopened, by another via MaybeRefresh() or until the ReferenceManager<G> is closed. Declaration public virtual void WaitForGeneration(long targetGen) Parameters Type Name Description System.Int64 targetGen The generation to wait for | Improve this Doc View Source WaitForGeneration(Int64, Int32) Waits for the target generation to become visible in the searcher, up to a maximum specified milli-seconds. If the current searcher is older than the target generation, this method will block until the searcher has been reopened by another thread via MaybeRefresh() , the given waiting time has elapsed, or until the ReferenceManager<G> is closed. NOTE: if the waiting time elapses before the requested target generation is available the current SearcherManager is returned instead. Declaration public virtual bool WaitForGeneration(long targetGen, int maxMS) Parameters Type Name Description System.Int64 targetGen The generation to wait for System.Int32 maxMS Maximum milliseconds to wait, or -1 to wait indefinitely Returns Type Description System.Boolean true if the targetGen is now available, or false if maxMS wait time was exceeded Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Search.DisjunctionMaxQuery.DisjunctionMaxWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DisjunctionMaxQuery.DisjunctionMaxWeight.html",
    "title": "Class DisjunctionMaxQuery.DisjunctionMaxWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DisjunctionMaxQuery.DisjunctionMaxWeight Expert: the Weight for DisjunctionMaxQuery, used to normalize, score and explain these queries. NOTE: this API and implementation is subject to change suddenly in the next release. Inheritance System.Object Weight DisjunctionMaxQuery.DisjunctionMaxWeight Inherited Members Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax protected class DisjunctionMaxWeight : Weight Constructors | Improve this Doc View Source DisjunctionMaxWeight(DisjunctionMaxQuery, IndexSearcher) Construct the Weight for this Query searched by searcher . Recursively construct subquery weights. Declaration public DisjunctionMaxWeight(DisjunctionMaxQuery outerInstance, IndexSearcher searcher) Parameters Type Name Description DisjunctionMaxQuery outerInstance IndexSearcher searcher Fields | Improve this Doc View Source m_weights The Weight s for our subqueries, in 1-1 correspondence with disjuncts Declaration protected List<Weight> m_weights Field Value Type Description List < Weight > Properties | Improve this Doc View Source Query Return our associated DisjunctionMaxQuery Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Explain the score we computed for doc Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides Weight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Create the scorer used to score our associated DisjunctionMaxQuery Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Compute the sub of squared weights of us applied to our subqueries. Used for normalization. Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Apply the computed normalization factor to our subqueries Declaration public override void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost Overrides Weight.Normalize(Single, Single)"
  },
  "api/Lucene.Net/Lucene.Net.Search.DisjunctionMaxQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DisjunctionMaxQuery.html",
    "title": "Class DisjunctionMaxQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DisjunctionMaxQuery A query that generates the union of documents produced by its subqueries, and that scores each document with the maximum score for that document as produced by any subquery, plus a tie breaking increment for any additional matching subqueries. This is useful when searching for a word in multiple fields with different boost factors (so that the fields cannot be combined equivalently into a single search field). We want the primary score to be the one associated with the highest boost, not the sum of the field scores (as BooleanQuery would give). If the query is \"albino elephant\" this ensures that \"albino\" matching one field and \"elephant\" matching another gets a higher score than \"albino\" matching both fields. To get this result, use both BooleanQuery and DisjunctionMaxQuery : for each term a DisjunctionMaxQuery searches for it in each field, while the set of these DisjunctionMaxQuery 's is combined into a BooleanQuery . The tie breaker capability allows results that include the same term in multiple fields to be judged better than results that include this term in only the best of those multiple fields, without confusing this with the better case of two different terms in the multiple fields. Collection initializer note: To create and populate a DisjunctionMaxQuery in a single statement, you can use the following example as a guide: var disjunctionMaxQuery = new DisjunctionMaxQuery(0.1f) { new TermQuery(new Term(\"field1\", \"albino\")), new TermQuery(new Term(\"field2\", \"elephant\")) }; Inheritance System.Object Query DisjunctionMaxQuery Implements IEnumerable < Query > Inherited Members Query.Boost Query.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class DisjunctionMaxQuery : Query, IEnumerable<Query> Constructors | Improve this Doc View Source DisjunctionMaxQuery(ICollection<Query>, Single) Creates a new DisjunctionMaxQuery Declaration public DisjunctionMaxQuery(ICollection<Query> disjuncts, float tieBreakerMultiplier) Parameters Type Name Description ICollection < Query > disjuncts A ICollection{Query} of all the disjuncts to add System.Single tieBreakerMultiplier The weight to give to each matching non-maximum disjunct | Improve this Doc View Source DisjunctionMaxQuery(Single) Creates a new empty DisjunctionMaxQuery . Use Add(Query) to add the subqueries. Declaration public DisjunctionMaxQuery(float tieBreakerMultiplier) Parameters Type Name Description System.Single tieBreakerMultiplier The score of each non-maximum disjunct for a document is multiplied by this weight and added into the final score. If non-zero, the value should be small, on the order of 0.1, which says that 10 occurrences of word in a lower-scored field that is also in a higher scored field is just as good as a unique word in the lower scored field (i.e., one that is not in any higher scored field). Properties | Improve this Doc View Source Disjuncts Declaration public virtual IList<Query> Disjuncts { get; } Property Value Type Description IList < Query > The disjuncts. | Improve this Doc View Source TieBreakerMultiplier Declaration public virtual float TieBreakerMultiplier { get; } Property Value Type Description System.Single Tie breaker value for multiple matches. Methods | Improve this Doc View Source Add(ICollection<Query>) Add a collection of disjuncts to this disjunction via IEnumerable{Query} Declaration public virtual void Add(ICollection<Query> disjuncts) Parameters Type Name Description ICollection < Query > disjuncts A collection of queries to add as disjuncts. | Improve this Doc View Source Add(Query) Add a subquery to this disjunction Declaration public virtual void Add(Query query) Parameters Type Name Description Query query The disjunct added | Improve this Doc View Source Clone() Create a shallow copy of us -- used in rewriting if necessary Declaration public override object Clone() Returns Type Description System.Object A copy of us (but reuse, don't copy, our subqueries) Overrides Query.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Create the Weight used to score us Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Return true if we represent the same query as o Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Another object Returns Type Description System.Boolean true if o is a DisjunctionMaxQuery with the same boost and the same subqueries, in the same order, as us Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Expert: adds all terms occurring in this query to the terms set. Only works if this query is in its rewritten ( Rewrite(IndexReader) ) form. Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetEnumerator() Declaration public virtual IEnumerator<Query> GetEnumerator() Returns Type Description IEnumerator < Query > An IEnumerator{Query} over the disjuncts | Improve this Doc View Source GetHashCode() Compute a hash code for hashing us Declaration public override int GetHashCode() Returns Type Description System.Int32 the hash code Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Optimize our representation and our subqueries representations Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader The IndexReader we query Returns Type Description Query An optimized copy of us (which may not be a copy if there is nothing to optimize) Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prettyprint us. Declaration public override string ToString(string field) Parameters Type Name Description System.String field The field to which we are applied Returns Type Description System.String A string that shows what we do, of the form \"(disjunct1 | disjunct2 | ... | disjunctn)^boost\" Overrides Query.ToString(String) Implements IEnumerable<>"
  },
  "api/Lucene.Net/Lucene.Net.Search.DocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DocIdSet.html",
    "title": "Class DocIdSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocIdSet A DocIdSet contains a set of doc ids. Implementing classes must only implement GetIterator() to provide access to the set. Inheritance System.Object DocIdSet FieldCacheDocIdSet FilteredDocIdSet DocIdBitSet FixedBitSet OpenBitSet EliasFanoDocIdSet PForDeltaDocIdSet WAH8DocIdSet Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class DocIdSet : object Properties | Improve this Doc View Source Bits Optionally provides a IBits interface for random access to matching documents. Declaration public virtual IBits Bits { get; } Property Value Type Description IBits null , if this DocIdSet does not support random access. In contrast to GetIterator() , a return value of null does not imply that no documents match the filter! The default implementation does not provide random access, so you only need to implement this method if your DocIdSet can guarantee random access to every docid in O(1) time without external disk access (as IBits interface cannot throw ). This is generally true for bit sets like FixedBitSet , which return itself if they are used as DocIdSet . | Improve this Doc View Source IsCacheable This method is a hint for CachingWrapperFilter , if this DocIdSet should be cached without copying it. The default is to return false . If you have an own DocIdSet implementation that does its iteration very effective and fast without doing disk I/O, override this property and return true . Declaration public virtual bool IsCacheable { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source GetIterator() Provides a DocIdSetIterator to access the set. This implementation can return null if there are no docs that match. Declaration public abstract DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator | Improve this Doc View Source NewAnonymous(Func<DocIdSetIterator>) Creates a new instance with the ability to specify the body of the GetIterator() method through the getIterator parameter. Simple example: var docIdSet = DocIdSet.NewAnonymous(getIterator: () => { OpenBitSet bitset = new OpenBitSet(5); bitset.Set(0, 5); return new DocIdBitSet(bitset); }); LUCENENET specific Declaration public static DocIdSet NewAnonymous(Func<DocIdSetIterator> getIterator) Parameters Type Name Description Func < DocIdSetIterator > getIterator A delegate method that represents (is called by) the GetIterator() method. It returns the DocIdSetIterator for this DocIdSet . Returns Type Description DocIdSet A new Lucene.Net.Search.DocIdSet.AnonymousDocIdSet instance. | Improve this Doc View Source NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) Creates a new instance with the ability to specify the body of the GetIterator() method through the getIterator parameter and the body of the Bits property through the bits parameter. Simple example: var docIdSet = DocIdSet.NewAnonymous(getIterator: () => { OpenBitSet bitset = new OpenBitSet(5); bitset.Set(0, 5); return new DocIdBitSet(bitset); }, bits: () => { return bits; }); LUCENENET specific Declaration public static DocIdSet NewAnonymous(Func<DocIdSetIterator> getIterator, Func<IBits> bits) Parameters Type Name Description Func < DocIdSetIterator > getIterator A delegate method that represents (is called by) the GetIterator() method. It returns the DocIdSetIterator for this DocIdSet . Func < IBits > bits A delegate method that represents (is called by) the Bits property. It returns the IBits instance for this DocIdSet . Returns Type Description DocIdSet A new Lucene.Net.Search.DocIdSet.AnonymousDocIdSet instance. | Improve this Doc View Source NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) Creates a new instance with the ability to specify the body of the GetIterator() method through the getIterator parameter and the body of the Bits property through the bits parameter. Simple example: var docIdSet = DocIdSet.NewAnonymous(getIterator: () => { OpenBitSet bitset = new OpenBitSet(5); bitset.Set(0, 5); return new DocIdBitSet(bitset); }, bits: () => { return bits; }, isCacheable: () => { return true; }); LUCENENET specific Declaration public static DocIdSet NewAnonymous(Func<DocIdSetIterator> getIterator, Func<IBits> bits, Func<bool> isCacheable) Parameters Type Name Description Func < DocIdSetIterator > getIterator A delegate method that represents (is called by) the GetIterator() method. It returns the DocIdSetIterator for this DocIdSet . Func < IBits > bits A delegate method that represents (is called by) the Bits property. It returns the IBits instance for this DocIdSet . Func < System.Boolean > isCacheable A delegate method that represents (is called by) the IsCacheable property. It returns a value. Returns Type Description DocIdSet A new Lucene.Net.Search.DocIdSet.AnonymousDocIdSet instance. | Improve this Doc View Source NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) Creates a new instance with the ability to specify the body of the GetIterator() method through the getIterator parameter and the body of the IsCacheable property through the isCacheable parameter. Simple example: var docIdSet = DocIdSet.NewAnonymous(getIterator: () => { OpenBitSet bitset = new OpenBitSet(5); bitset.Set(0, 5); return new DocIdBitSet(bitset); }, isCacheable: () => { return true; }); LUCENENET specific Declaration public static DocIdSet NewAnonymous(Func<DocIdSetIterator> getIterator, Func<bool> isCacheable) Parameters Type Name Description Func < DocIdSetIterator > getIterator A delegate method that represents (is called by) the GetIterator() method. It returns the DocIdSetIterator for this DocIdSet . Func < System.Boolean > isCacheable A delegate method that represents (is called by) the IsCacheable property. It returns a value. Returns Type Description DocIdSet A new Lucene.Net.Search.DocIdSet.AnonymousDocIdSet instance."
  },
  "api/Lucene.Net/Lucene.Net.Search.DocIdSetIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DocIdSetIterator.html",
    "title": "Class DocIdSetIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocIdSetIterator This abstract class defines methods to iterate over a set of non-decreasing doc ids. Note that this class assumes it iterates on doc Ids, and therefore NO_MORE_DOCS is set to in order to be used as a sentinel object. Implementations of this class are expected to consider as an invalid value. Inheritance System.Object DocIdSetIterator DocsEnum FilteredDocIdSetIterator FixedBitSet.FixedBitSetIterator OpenBitSetIterator Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class DocIdSetIterator : object Fields | Improve this Doc View Source NO_MORE_DOCS When returned by NextDoc() , Advance(Int32) and DocID it means there are no more docs in the iterator. Declaration public const int NO_MORE_DOCS = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source DocID Returns the following: -1 or NO_MORE_DOCS if NextDoc() or Advance(Int32) were not called yet. NO_MORE_DOCS if the iterator has exhausted. Otherwise it should return the doc ID it is currently on. @since 2.9 Declaration public abstract int DocID { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Advance(Int32) Advances to the first beyond the current whose document number is greater than or equal to target , and returns the document number itself. Exhausts the iterator and returns NO_MORE_DOCS if target is greater than the highest document number in the set. The behavior of this method is undefined when called with target <= current , or after the iterator has exhausted. Both cases may result in unpredicted behavior. When target > current it behaves as if written: int Advance(int target) { int doc; while ((doc = NextDoc()) < target) { } return doc; } Some implementations are considerably more efficient than that. NOTE: this method may be called with NO_MORE_DOCS for efficiency by some Scorer s. If your implementation cannot efficiently determine that it should exhaust, it is recommended that you check for that value in each call to this method. @since 2.9 Declaration public abstract int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 | Improve this Doc View Source GetCost() Returns the estimated cost of this DocIdSetIterator . This is generally an upper bound of the number of documents this iterator might match, but may be a rough heuristic, hardcoded value, or otherwise completely inaccurate. Declaration public abstract long GetCost() Returns Type Description System.Int64 | Improve this Doc View Source GetEmpty() An empty DocIdSetIterator instance Declaration public static DocIdSetIterator GetEmpty() Returns Type Description DocIdSetIterator | Improve this Doc View Source NextDoc() Advances to the next document in the set and returns the doc it is currently on, or NO_MORE_DOCS if there are no more docs in the set. NOTE: after the iterator has exhausted you should not call this method, as it may result in unpredicted behavior. @since 2.9 Declaration public abstract int NextDoc() Returns Type Description System.Int32 | Improve this Doc View Source SlowAdvance(Int32) Slow (linear) implementation of Advance(Int32) relying on NextDoc() to advance beyond the target position. Declaration protected int SlowAdvance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Search.DocTermOrdsRangeFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DocTermOrdsRangeFilter.html",
    "title": "Class DocTermOrdsRangeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocTermOrdsRangeFilter A range filter built on top of a cached multi-valued term field (in IFieldCache ). Like FieldCacheRangeFilter , this is just a specialized range query versus using a TermRangeQuery with DocTermOrdsRewriteMethod : it will only do two ordinal to term lookups. Inheritance System.Object Filter DocTermOrdsRangeFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class DocTermOrdsRangeFilter : Filter Properties | Improve this Doc View Source Field Returns the field name for this filter Declaration public virtual string Field { get; } Property Value Type Description System.String | Improve this Doc View Source IncludesLower Returns true if the lower endpoint is inclusive Declaration public virtual bool IncludesLower { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesUpper Returns true if the upper endpoint is inclusive Declaration public virtual bool IncludesUpper { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerVal Returns the lower value of this range filter Declaration public virtual BytesRef LowerVal { get; } Property Value Type Description BytesRef | Improve this Doc View Source UpperVal Returns the upper value of this range filter Declaration public virtual BytesRef UpperVal { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Equals(Object) Declaration public override sealed bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) This method is implemented for each data type Declaration public abstract override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override sealed int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source NewBytesRefRange(String, BytesRef, BytesRef, Boolean, Boolean) Creates a BytesRef range filter using GetTermsIndex(AtomicReader, String, Single) . This works with all fields containing zero or one term in the field. The range can be half-open by setting one of the values to null . Declaration public static DocTermOrdsRangeFilter NewBytesRefRange(string field, BytesRef lowerVal, BytesRef upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field BytesRef lowerVal BytesRef upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description DocTermOrdsRangeFilter | Improve this Doc View Source ToString() Declaration public override sealed string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.DocTermOrdsRewriteMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DocTermOrdsRewriteMethod.html",
    "title": "Class DocTermOrdsRewriteMethod | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocTermOrdsRewriteMethod Rewrites MultiTermQuery s into a filter, using DocTermOrds for term enumeration. This can be used to perform these queries against an unindexed docvalues field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MultiTermQuery.RewriteMethod DocTermOrdsRewriteMethod Inherited Members MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class DocTermOrdsRewriteMethod : MultiTermQuery.RewriteMethod Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Explanation.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Explanation.html",
    "title": "Class Explanation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Explanation Expert: Describes the score computation for document and query. Inheritance System.Object Explanation ComplexExplanation Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class Explanation : object Constructors | Improve this Doc View Source Explanation() Declaration public Explanation() | Improve this Doc View Source Explanation(Single, String) Declaration public Explanation(float value, string description) Parameters Type Name Description System.Single value System.String description Properties | Improve this Doc View Source Description Gets or Sets the description of this explanation node. Declaration public virtual string Description { get; set; } Property Value Type Description System.String | Improve this Doc View Source IsMatch Indicates whether or not this Explanation models a good match. By default, an Explanation represents a \"match\" if the value is positive. Declaration public virtual bool IsMatch { get; } Property Value Type Description System.Boolean See Also Value | Improve this Doc View Source Value Gets or Sets the value assigned to this explanation node. Declaration public virtual float Value { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source AddDetail(Explanation) Adds a sub-node to this explanation node. Declaration public virtual void AddDetail(Explanation detail) Parameters Type Name Description Explanation detail | Improve this Doc View Source GetDetails() The sub-nodes of this explanation node. Declaration public virtual Explanation[] GetDetails() Returns Type Description Explanation [] | Improve this Doc View Source GetSummary() A short one line summary which should contain all high level information about this Explanation , without the \"Details\" Declaration protected virtual string GetSummary() Returns Type Description System.String | Improve this Doc View Source ToHtml() Render an explanation as HTML. Declaration public virtual string ToHtml() Returns Type Description System.String | Improve this Doc View Source ToString() Render an explanation as text. Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source ToString(Int32) Declaration protected virtual string ToString(int depth) Parameters Type Name Description System.Int32 depth Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Bytes.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Bytes.html",
    "title": "Class FieldCache.Bytes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.Bytes Field values as 8-bit signed bytes Inheritance System.Object FieldCache.Bytes Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Bytes : object Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Bytes EMPTY Field Value Type Description FieldCache.Bytes Methods | Improve this Doc View Source Get(Int32) Return a single Byte representation of this field's value. Declaration public abstract byte Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Byte"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.CacheEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.CacheEntry.html",
    "title": "Class FieldCache.CacheEntry | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.CacheEntry EXPERT: A unique Identifier/Description for each item in the IFieldCache . Can be useful for logging/debugging. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldCache.CacheEntry Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class CacheEntry : object Constructors | Improve this Doc View Source CacheEntry(Object, String, Type, Object, Object) Declaration public CacheEntry(object readerKey, string fieldName, Type cacheType, object custom, object value) Parameters Type Name Description System.Object readerKey System.String fieldName Type cacheType System.Object custom System.Object value Properties | Improve this Doc View Source CacheType Declaration public Type CacheType { get; } Property Value Type Description Type | Improve this Doc View Source Custom Declaration public object Custom { get; } Property Value Type Description System.Object | Improve this Doc View Source EstimatedSize The most recently estimated size of the value, null unless EstimateSize() has been called. Declaration public string EstimatedSize { get; } Property Value Type Description System.String | Improve this Doc View Source FieldName Declaration public string FieldName { get; } Property Value Type Description System.String | Improve this Doc View Source ReaderKey Declaration public object ReaderKey { get; } Property Value Type Description System.Object | Improve this Doc View Source Value Declaration public object Value { get; } Property Value Type Description System.Object Methods | Improve this Doc View Source EstimateSize() Computes (and stores) the estimated size of the cache Value Declaration public void EstimateSize() See Also EstimatedSize | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.CreationPlaceholder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.CreationPlaceholder.html",
    "title": "Class FieldCache.CreationPlaceholder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.CreationPlaceholder Placeholder indicating creation of this cache is currently in-progress. Inheritance System.Object FieldCache.CreationPlaceholder Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class CreationPlaceholder : object"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Doubles.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Doubles.html",
    "title": "Class FieldCache.Doubles | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.Doubles Field values as 64-bit doubles Inheritance System.Object FieldCache.Doubles Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Doubles : object Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Doubles EMPTY Field Value Type Description FieldCache.Doubles Methods | Improve this Doc View Source Get(Int32) Return a representation of this field's value. Declaration public abstract double Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Double"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.html",
    "title": "Class FieldCache | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache Inheritance System.Object FieldCache Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class FieldCache : object Fields | Improve this Doc View Source DEFAULT Expert: The cache used internally by sorting and range query classes. Declaration public static IFieldCache DEFAULT Field Value Type Description IFieldCache | Improve this Doc View Source DEFAULT_BYTE_PARSER The default parser for byte values, which are encoded by using . Declaration public static readonly FieldCache.IByteParser DEFAULT_BYTE_PARSER Field Value Type Description FieldCache.IByteParser | Improve this Doc View Source DEFAULT_DOUBLE_PARSER The default parser for values, which are encoded by using . Declaration public static readonly FieldCache.IDoubleParser DEFAULT_DOUBLE_PARSER Field Value Type Description FieldCache.IDoubleParser | Improve this Doc View Source DEFAULT_INT16_PARSER The default parser for values, which are encoded by using . NOTE: This was DEFAULT_SHORT_PARSER in Lucene Declaration public static readonly FieldCache.IInt16Parser DEFAULT_INT16_PARSER Field Value Type Description FieldCache.IInt16Parser | Improve this Doc View Source DEFAULT_INT32_PARSER The default parser for values, which are encoded by using . NOTE: This was DEFAULT_INT_PARSER in Lucene Declaration public static readonly FieldCache.IInt32Parser DEFAULT_INT32_PARSER Field Value Type Description FieldCache.IInt32Parser | Improve this Doc View Source DEFAULT_INT64_PARSER The default parser for values, which are encoded by using . NOTE: This was DEFAULT_LONG_PARSER in Lucene Declaration public static readonly FieldCache.IInt64Parser DEFAULT_INT64_PARSER Field Value Type Description FieldCache.IInt64Parser | Improve this Doc View Source DEFAULT_SINGLE_PARSER The default parser for values, which are encoded by using . NOTE: This was DEFAULT_FLOAT_PARSER in Lucene Declaration public static readonly FieldCache.ISingleParser DEFAULT_SINGLE_PARSER Field Value Type Description FieldCache.ISingleParser | Improve this Doc View Source NUMERIC_UTILS_DOUBLE_PARSER A parser instance for values encoded with NumericUtils , e.g. when indexed via DoubleField / NumericTokenStream . Declaration public static readonly FieldCache.IDoubleParser NUMERIC_UTILS_DOUBLE_PARSER Field Value Type Description FieldCache.IDoubleParser | Improve this Doc View Source NUMERIC_UTILS_INT32_PARSER A parser instance for values encoded by NumericUtils , e.g. when indexed via Int32Field / NumericTokenStream . NOTE: This was NUMERIC_UTILS_INT_PARSER in Lucene Declaration public static readonly FieldCache.IInt32Parser NUMERIC_UTILS_INT32_PARSER Field Value Type Description FieldCache.IInt32Parser | Improve this Doc View Source NUMERIC_UTILS_INT64_PARSER A parser instance for values encoded by NumericUtils , e.g. when indexed via Int64Field / NumericTokenStream . NOTE: This was NUMERIC_UTILS_LONG_PARSER in Lucene Declaration public static readonly FieldCache.IInt64Parser NUMERIC_UTILS_INT64_PARSER Field Value Type Description FieldCache.IInt64Parser | Improve this Doc View Source NUMERIC_UTILS_SINGLE_PARSER A parser instance for values encoded with NumericUtils , e.g. when indexed via SingleField / NumericTokenStream . NOTE: This was NUMERIC_UTILS_FLOAT_PARSER in Lucene Declaration public static readonly FieldCache.ISingleParser NUMERIC_UTILS_SINGLE_PARSER Field Value Type Description FieldCache.ISingleParser"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IByteParser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IByteParser.html",
    "title": "Interface FieldCache.IByteParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FieldCache.IByteParser Interface to parse bytes from document fields. Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IByteParser : FieldCache.IParser Methods | Improve this Doc View Source ParseByte(BytesRef) Return a single Byte representation of this field's value. Declaration byte ParseByte(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Byte See Also GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IDoubleParser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IDoubleParser.html",
    "title": "Interface FieldCache.IDoubleParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FieldCache.IDoubleParser Interface to parse s from document fields. Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IDoubleParser : FieldCache.IParser Methods | Improve this Doc View Source ParseDouble(BytesRef) Return an representation of this field's value. Declaration double ParseDouble(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Double See Also GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt16Parser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt16Parser.html",
    "title": "Interface FieldCache.IInt16Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FieldCache.IInt16Parser Interface to parse s from document fields. NOTE: This was ShortParser in Lucene Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IInt16Parser : FieldCache.IParser Methods | Improve this Doc View Source ParseInt16(BytesRef) Return a representation of this field's value. NOTE: This was parseShort() in Lucene Declaration short ParseInt16(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Int16 See Also GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt32Parser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt32Parser.html",
    "title": "Interface FieldCache.IInt32Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FieldCache.IInt32Parser Interface to parse s from document fields. NOTE: This was IntParser in Lucene Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IInt32Parser : FieldCache.IParser Methods | Improve this Doc View Source ParseInt32(BytesRef) Return an representation of this field's value. NOTE: This was parseInt() in Lucene Declaration int ParseInt32(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Int32 See Also GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt64Parser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt64Parser.html",
    "title": "Interface FieldCache.IInt64Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FieldCache.IInt64Parser Interface to parse from document fields. NOTE: This was LongParser in Lucene Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IInt64Parser : FieldCache.IParser Methods | Improve this Doc View Source ParseInt64(BytesRef) Return a representation of this field's value. NOTE: This was parseLong() in Lucene Declaration long ParseInt64(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Int64 See Also GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int16s.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int16s.html",
    "title": "Class FieldCache.Int16s | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.Int16s Field values as 16-bit signed shorts NOTE: This was Shorts in Lucene Inheritance System.Object FieldCache.Int16s Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Int16s : object Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Int16s EMPTY Field Value Type Description FieldCache.Int16s Methods | Improve this Doc View Source Get(Int32) Return a representation of this field's value. Declaration public abstract short Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int16"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int32s.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int32s.html",
    "title": "Class FieldCache.Int32s | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.Int32s Field values as 32-bit signed integers NOTE: This was Ints in Lucene Inheritance System.Object FieldCache.Int32s Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Int32s : object Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Int32s EMPTY Field Value Type Description FieldCache.Int32s Methods | Improve this Doc View Source Get(Int32) Return an representation of this field's value. Declaration public abstract int Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int64s.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int64s.html",
    "title": "Class FieldCache.Int64s | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.Int64s Field values as 64-bit signed long integers NOTE: This was Longs in Lucene Inheritance System.Object FieldCache.Int64s Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Int64s : object Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Int64s EMPTY Field Value Type Description FieldCache.Int64s Methods | Improve this Doc View Source Get(Int32) Return an representation of this field's value. Declaration public abstract long Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IParser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IParser.html",
    "title": "Interface FieldCache.IParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FieldCache.IParser Marker interface as super-interface to all parsers. It is used to specify a custom parser to SortField(String, FieldCache.IParser) . Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IParser Methods | Improve this Doc View Source TermsEnum(Terms) Pulls a TermsEnum from the given Terms . This method allows certain parsers to filter the actual TermsEnum before the field cache is filled. Declaration TermsEnum TermsEnum(Terms terms) Parameters Type Name Description Terms terms The Terms instance to create the TermsEnum from. Returns Type Description TermsEnum A possibly filtered TermsEnum instance, this method must not return null ."
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.ISingleParser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.ISingleParser.html",
    "title": "Interface FieldCache.ISingleParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FieldCache.ISingleParser Interface to parse s from document fields. NOTE: This was FloatParser in Lucene Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface ISingleParser : FieldCache.IParser Methods | Improve this Doc View Source ParseSingle(BytesRef) Return an representation of this field's value. NOTE: This was parseFloat() in Lucene Declaration float ParseSingle(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Singles.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Singles.html",
    "title": "Class FieldCache.Singles | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.Singles Field values as 32-bit floats NOTE: This was Floats in Lucene Inheritance System.Object FieldCache.Singles Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Singles : object Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Singles EMPTY Field Value Type Description FieldCache.Singles Methods | Improve this Doc View Source Get(Int32) Return an representation of this field's value. Declaration public abstract float Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheDocIdSet.html",
    "title": "Class FieldCacheDocIdSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheDocIdSet Base class for DocIdSet to be used with IFieldCache . The implementation of its iterator is very stupid and slow if the implementation of the MatchDoc(Int32) method is not optimized, as iterators simply increment the document id until MatchDoc(Int32) returns true . Because of this MatchDoc(Int32) must be as fast as possible and in no case do any I/O. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DocIdSet FieldCacheDocIdSet Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldCacheDocIdSet : DocIdSet Constructors | Improve this Doc View Source FieldCacheDocIdSet(Int32, IBits) Declaration public FieldCacheDocIdSet(int maxDoc, IBits acceptDocs) Parameters Type Name Description System.Int32 maxDoc IBits acceptDocs Fields | Improve this Doc View Source m_acceptDocs Declaration protected readonly IBits m_acceptDocs Field Value Type Description IBits | Improve this Doc View Source m_maxDoc Declaration protected readonly int m_maxDoc Field Value Type Description System.Int32 Properties | Improve this Doc View Source Bits Declaration public override sealed IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source IsCacheable This DocIdSet is always cacheable (does not go back to the reader for iteration) Declaration public override sealed bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source GetIterator() Declaration public override sealed DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source MatchDoc(Int32) This method checks, if a doc is a hit Declaration protected abstract bool MatchDoc(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheRangeFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheRangeFilter.html",
    "title": "Class FieldCacheRangeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheRangeFilter A range filter built on top of a cached single term field (in IFieldCache ). FieldCacheRangeFilter builds a single cache for the field the first time it is used. Each subsequent FieldCacheRangeFilter on the same field then reuses this cache, even if the range itself changes. this means that FieldCacheRangeFilter is much faster (sometimes more than 100x as fast) as building a TermRangeFilter , if using a NewStringRange(String, String, String, Boolean, Boolean) . However, if the range never changes it is slower (around 2x as slow) than building a CachingWrapperFilter on top of a single TermRangeFilter . For numeric data types, this filter may be significantly faster than NumericRangeFilter . Furthermore, it does not need the numeric values encoded by Int32Field , SingleField , Int64Field or DoubleField . But it has the problem that it only works with exact one value/document (see below). As with all IFieldCache based functionality, FieldCacheRangeFilter is only valid for fields which exact one term for each document (except for NewStringRange(String, String, String, Boolean, Boolean) where 0 terms are also allowed). Due to a restriction of IFieldCache , for numeric ranges all terms that do not have a numeric value, 0 is assumed. Thus it works on dates, prices and other single value fields but will not work on regular text fields. It is preferable to use a NOT_ANALYZED field to ensure that there is only a single term. This class does not have an constructor, use one of the static factory methods available, that create a correct instance for different data types supported by IFieldCache . Inheritance System.Object FieldCacheRangeFilter Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class FieldCacheRangeFilter : object Methods | Improve this Doc View Source NewByteRange(String, FieldCache.IByteParser, Nullable<SByte>, Nullable<SByte>, Boolean, Boolean) Creates a numeric range filter using GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean) . This works with all fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<sbyte?> NewByteRange(string field, FieldCache.IByteParser parser, sbyte? lowerVal, sbyte? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IByteParser parser System.Nullable < System.SByte > lowerVal System.Nullable < System.SByte > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.SByte >> | Improve this Doc View Source NewByteRange(String, Nullable<SByte>, Nullable<SByte>, Boolean, Boolean) Creates a numeric range filter using GetBytes(AtomicReader, String, Boolean) . This works with all fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<sbyte?> NewByteRange(string field, sbyte? lowerVal, sbyte? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.SByte > lowerVal System.Nullable < System.SByte > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.SByte >> | Improve this Doc View Source NewBytesRefRange(String, BytesRef, BytesRef, Boolean, Boolean) Creates a BytesRef range filter using GetTermsIndex(AtomicReader, String, Single) . This works with all fields containing zero or one term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<BytesRef> NewBytesRefRange(string field, BytesRef lowerVal, BytesRef upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field BytesRef lowerVal BytesRef upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < BytesRef > | Improve this Doc View Source NewDoubleRange(String, FieldCache.IDoubleParser, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Creates a numeric range filter using GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) . This works with all fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<double?> NewDoubleRange(string field, FieldCache.IDoubleParser parser, double? lowerVal, double? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IDoubleParser parser System.Nullable < System.Double > lowerVal System.Nullable < System.Double > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Double >> | Improve this Doc View Source NewDoubleRange(String, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Creates a numeric range filter using GetDoubles(AtomicReader, String, Boolean) . This works with all fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<double?> NewDoubleRange(string field, double? lowerVal, double? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Double > lowerVal System.Nullable < System.Double > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Double >> | Improve this Doc View Source NewInt16Range(String, FieldCache.IInt16Parser, Nullable<Int16>, Nullable<Int16>, Boolean, Boolean) Creates a numeric range filter using GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) . This works with all fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newShortRange() in Lucene Declaration public static FieldCacheRangeFilter<short?> NewInt16Range(string field, FieldCache.IInt16Parser parser, short? lowerVal, short? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IInt16Parser parser System.Nullable < System.Int16 > lowerVal System.Nullable < System.Int16 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int16 >> | Improve this Doc View Source NewInt16Range(String, Nullable<Int16>, Nullable<Int16>, Boolean, Boolean) Creates a numeric range filter using GetInt16s(AtomicReader, String, Boolean) . This works with all fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newShortRange() in Lucene Declaration public static FieldCacheRangeFilter<short?> NewInt16Range(string field, short? lowerVal, short? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Int16 > lowerVal System.Nullable < System.Int16 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int16 >> | Improve this Doc View Source NewInt32Range(String, FieldCache.IInt32Parser, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Creates a numeric range filter using GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) . This works with all fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newIntRange() in Lucene Declaration public static FieldCacheRangeFilter<int?> NewInt32Range(string field, FieldCache.IInt32Parser parser, int? lowerVal, int? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IInt32Parser parser System.Nullable < System.Int32 > lowerVal System.Nullable < System.Int32 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int32 >> | Improve this Doc View Source NewInt32Range(String, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Creates a numeric range filter using GetInt32s(AtomicReader, String, Boolean) . This works with all fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newIntRange() in Lucene Declaration public static FieldCacheRangeFilter<int?> NewInt32Range(string field, int? lowerVal, int? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Int32 > lowerVal System.Nullable < System.Int32 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int32 >> | Improve this Doc View Source NewInt64Range(String, FieldCache.IInt64Parser, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Creates a numeric range filter using GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) . This works with all fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newLongRange() in Lucene Declaration public static FieldCacheRangeFilter<long?> NewInt64Range(string field, FieldCache.IInt64Parser parser, long? lowerVal, long? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IInt64Parser parser System.Nullable < System.Int64 > lowerVal System.Nullable < System.Int64 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int64 >> | Improve this Doc View Source NewInt64Range(String, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Creates a numeric range filter using GetInt64s(AtomicReader, String, Boolean) . This works with all fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<long?> NewInt64Range(string field, long? lowerVal, long? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Int64 > lowerVal System.Nullable < System.Int64 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int64 >> | Improve this Doc View Source NewSingleRange(String, FieldCache.ISingleParser, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Creates a numeric range filter using GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) . This works with all fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newFloatRange() in Lucene Declaration public static FieldCacheRangeFilter<float?> NewSingleRange(string field, FieldCache.ISingleParser parser, float? lowerVal, float? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.ISingleParser parser System.Nullable < System.Single > lowerVal System.Nullable < System.Single > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Single >> | Improve this Doc View Source NewSingleRange(String, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Creates a numeric range filter using GetSingles(AtomicReader, String, Boolean) . This works with all fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newFloatRange() in Lucene Declaration public static FieldCacheRangeFilter<float?> NewSingleRange(string field, float? lowerVal, float? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Single > lowerVal System.Nullable < System.Single > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Single >> | Improve this Doc View Source NewStringRange(String, String, String, Boolean, Boolean) Creates a string range filter using GetTermsIndex(AtomicReader, String, Single) . This works with all fields containing zero or one term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<string> NewStringRange(string field, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.String >"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheRangeFilter-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheRangeFilter-1.html",
    "title": "Class FieldCacheRangeFilter<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheRangeFilter<T> Inheritance System.Object Filter FieldCacheRangeFilter<T> Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldCacheRangeFilter<T> : Filter Type Parameters Name Description T Constructors | Improve this Doc View Source FieldCacheRangeFilter(String, FieldCache.IParser, T, T, Boolean, Boolean) Declaration protected FieldCacheRangeFilter(string field, FieldCache.IParser parser, T lowerVal, T upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IParser parser T lowerVal T upperVal System.Boolean includeLower System.Boolean includeUpper Properties | Improve this Doc View Source Field Returns the field name for this filter Declaration public virtual string Field { get; } Property Value Type Description System.String | Improve this Doc View Source IncludesLower Returns true if the lower endpoint is inclusive Declaration public virtual bool IncludesLower { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesUpper Returns true if the upper endpoint is inclusive Declaration public virtual bool IncludesUpper { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerVal Returns the lower value of this range filter Declaration public virtual T LowerVal { get; } Property Value Type Description T | Improve this Doc View Source Parser Returns the current numeric parser ( null for T is ) Declaration public virtual FieldCache.IParser Parser { get; } Property Value Type Description FieldCache.IParser | Improve this Doc View Source UpperVal Returns the upper value of this range filter Declaration public virtual T UpperVal { get; } Property Value Type Description T Methods | Improve this Doc View Source Equals(Object) Declaration public override sealed bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) This method is implemented for each data type Declaration public abstract override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override sealed int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override sealed string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheRewriteMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheRewriteMethod.html",
    "title": "Class FieldCacheRewriteMethod | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheRewriteMethod Rewrites MultiTermQuery s into a filter, using the IFieldCache for term enumeration. This can be used to perform these queries against an unindexed docvalues field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MultiTermQuery.RewriteMethod FieldCacheRewriteMethod Inherited Members MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class FieldCacheRewriteMethod : MultiTermQuery.RewriteMethod Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheTermsFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheTermsFilter.html",
    "title": "Class FieldCacheTermsFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheTermsFilter A Filter that only accepts documents whose single term value in the specified field is contained in the provided set of allowed terms. This is the same functionality as TermsFilter (from queries/), except this filter requires that the field contains only a single term for all documents. Because of drastically different implementations, they also have different performance characteristics, as described below. The first invocation of this filter on a given field will be slower, since a SortedDocValues must be created. Subsequent invocations using the same field will re-use this cache. However, as with all functionality based on IFieldCache , persistent RAM is consumed to hold the cache, and is not freed until the IndexReader is disposed. In contrast, TermsFilter has no persistent RAM consumption. With each search, this filter translates the specified set of Terms into a private FixedBitSet keyed by term number per unique IndexReader (normally one reader per segment). Then, during matching, the term number for each docID is retrieved from the cache and then checked for inclusion using the FixedBitSet . Since all testing is done using RAM resident data structures, performance should be very fast, most likely fast enough to not require further caching of the DocIdSet for each possible combination of terms. However, because docIDs are simply scanned linearly, an index with a great many small documents may find this linear scan too costly. In contrast, TermsFilter builds up a FixedBitSet , keyed by docID, every time it's created, by enumerating through all matching docs using DocsEnum to seek and scan through each term's docID list. While there is no linear scan of all docIDs, besides the allocation of the underlying array in the FixedBitSet , this approach requires a number of \"disk seeks\" in proportion to the number of terms, which can be exceptionally costly when there are cache misses in the OS's IO cache. Generally, this filter will be slower on the first invocation for a given field, but subsequent invocations, even if you change the allowed set of Terms , should be faster than TermsFilter, especially as the number of Terms being matched increases. If you are matching only a very small number of terms, and those terms in turn match a very small number of documents, TermsFilter may perform faster. Which filter is best is very application dependent. Inheritance System.Object Filter FieldCacheTermsFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FieldCacheTermsFilter : Filter Constructors | Improve this Doc View Source FieldCacheTermsFilter(String, BytesRef[]) Declaration public FieldCacheTermsFilter(string field, params BytesRef[] terms) Parameters Type Name Description System.String field BytesRef [] terms | Improve this Doc View Source FieldCacheTermsFilter(String, String[]) Declaration public FieldCacheTermsFilter(string field, params string[] terms) Parameters Type Name Description System.String field System.String [] terms Properties | Improve this Doc View Source FieldCache Declaration public virtual IFieldCache FieldCache { get; } Property Value Type Description IFieldCache Methods | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.ByteComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.ByteComparer.html",
    "title": "Class FieldComparer.ByteComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.ByteComparer Parses field's values as (using GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean) and sorts by ascending value Inheritance System.Object FieldComparer FieldComparer < System.SByte > FieldComparer.NumericComparer < System.SByte > FieldComparer.ByteComparer Inherited Members FieldComparer.NumericComparer<SByte>.m_missingValue FieldComparer.NumericComparer<SByte>.m_field FieldComparer.NumericComparer<SByte>.m_docsWithField FieldComparer<SByte>.CompareValues(SByte, SByte) FieldComparer<SByte>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class ByteComparer : FieldComparer.NumericComparer<sbyte> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.SByte>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.SByte>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.SByte>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.SByte>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.SByte>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.SByte>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.SByte>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.DocComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.DocComparer.html",
    "title": "Class FieldComparer.DocComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.DocComparer Sorts by ascending docID Inheritance System.Object FieldComparer FieldComparer < System.Nullable < System.Int32 >> FieldComparer.DocComparer Inherited Members FieldComparer<Nullable<Int32>>.CompareValues(Nullable<Int32>, Nullable<Int32>) FieldComparer<Nullable<Int32>>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class DocComparer : FieldComparer<int?> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.DoubleComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.DoubleComparer.html",
    "title": "Class FieldComparer.DoubleComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.DoubleComparer Parses field's values as (using GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) and sorts by ascending value Inheritance System.Object FieldComparer FieldComparer < System.Double > FieldComparer.NumericComparer < System.Double > FieldComparer.DoubleComparer Inherited Members FieldComparer.NumericComparer<Double>.m_missingValue FieldComparer.NumericComparer<Double>.m_field FieldComparer.NumericComparer<Double>.m_docsWithField FieldComparer<Double>.CompareValues(Double, Double) FieldComparer<Double>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class DoubleComparer : FieldComparer.NumericComparer<double> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Double>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Double>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Double>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Double>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Double>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Double>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Double>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.html",
    "title": "Class FieldComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer Inheritance System.Object FieldComparer FieldComparer<T> Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldComparer : object Properties | Improve this Doc View Source Item[Int32] Return the actual value in the slot. LUCENENET NOTE: This was value(int) in Lucene. Declaration public abstract IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot The value Property Value Type Description IComparable Value in this slot Methods | Improve this Doc View Source Compare(Int32, Int32) Compare hit at slot1 with hit at slot2 . Declaration public abstract int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 first slot to compare System.Int32 slot2 second slot to compare Returns Type Description System.Int32 any N < 0 if slot2 's value is sorted after slot1 , any N > 0 if the slot2 's value is sorted before slot1 and 0 if they are equal | Improve this Doc View Source CompareBottom(Int32) Compare the bottom of the queue with this doc. This will only invoked after setBottom has been called. This should return the same result as Compare(Int32, Int32) as if bottom were slot1 and the new document were slot 2. For a search that hits many results, this method will be the hotspot (invoked by far the most frequently). Declaration public abstract int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Doc that was hit Returns Type Description System.Int32 Any N < 0 if the doc's value is sorted after the bottom entry (not competitive), any N > 0 if the doc's value is sorted before the bottom entry and 0 if they are equal. | Improve this Doc View Source CompareTop(Int32) Compare the top value with this doc. This will only invoked after SetTopValue(Object) has been called. This should return the same result as Compare(Int32, Int32) as if topValue were slot1 and the new document were slot 2. This is only called for searches that use SearchAfter (deep paging). Declaration public abstract int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Doc that was hit Returns Type Description System.Int32 Any N < 0 if the doc's value is sorted after the bottom entry (not competitive), any N > 0 if the doc's value is sorted before the bottom entry and 0 if they are equal. | Improve this Doc View Source CompareValues(Object, Object) Declaration public abstract int CompareValues(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Int32 | Improve this Doc View Source Copy(Int32, Int32) This method is called when a new hit is competitive. You should copy any state associated with this document that will be required for future comparisons, into the specified slot. Declaration public abstract void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot Which slot to copy the hit to System.Int32 doc DocID relative to current reader | Improve this Doc View Source SetBottom(Int32) Set the bottom slot, ie the \"weakest\" (sorted last) entry in the queue. When CompareBottom(Int32) is called, you should compare against this slot. This will always be called before CompareBottom(Int32) . Declaration public abstract void SetBottom(int slot) Parameters Type Name Description System.Int32 slot The currently weakest (sorted last) slot in the queue | Improve this Doc View Source SetNextReader(AtomicReaderContext) Set a new AtomicReaderContext . All subsequent docIDs are relative to the current reader (you must add docBase if you need to map it to a top-level docID). Declaration public abstract FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Current reader context Returns Type Description FieldComparer The comparer to use for this segment; most comparers can just return \"this\" to reuse the same comparer across segments | Improve this Doc View Source SetScorer(Scorer) Sets the Scorer to use in case a document's score is needed. Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Scorer instance that you should use to obtain the current hit's score, if necessary. | Improve this Doc View Source SetTopValue(Object) Record the top value, for future calls to CompareTop(Int32) . This is only called for searches that use SearchAfter (deep paging), and is called before any calls to SetNextReader(AtomicReaderContext) . Declaration public abstract void SetTopValue(object value) Parameters Type Name Description System.Object value"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int16Comparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int16Comparer.html",
    "title": "Class FieldComparer.Int16Comparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.Int16Comparer Parses field's values as (using GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) and sorts by ascending value NOTE: This was ShortComparator in Lucene Inheritance System.Object FieldComparer FieldComparer < System.Int16 > FieldComparer.NumericComparer < System.Int16 > FieldComparer.Int16Comparer Inherited Members FieldComparer.NumericComparer<Int16>.m_missingValue FieldComparer.NumericComparer<Int16>.m_field FieldComparer.NumericComparer<Int16>.m_docsWithField FieldComparer<Int16>.CompareValues(Int16, Int16) FieldComparer<Int16>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class Int16Comparer : FieldComparer.NumericComparer<short> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int16>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int16>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int16>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Int16>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Int16>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Int16>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Int16>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int32Comparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int32Comparer.html",
    "title": "Class FieldComparer.Int32Comparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.Int32Comparer Parses field's values as (using GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and sorts by ascending value NOTE: This was IntComparator in Lucene Inheritance System.Object FieldComparer FieldComparer < System.Int32 > FieldComparer.NumericComparer < System.Int32 > FieldComparer.Int32Comparer Inherited Members FieldComparer.NumericComparer<Int32>.m_missingValue FieldComparer.NumericComparer<Int32>.m_field FieldComparer.NumericComparer<Int32>.m_docsWithField FieldComparer<Int32>.CompareValues(Int32, Int32) FieldComparer<Int32>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class Int32Comparer : FieldComparer.NumericComparer<int> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int32>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int32>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int32>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Int32>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Int32>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Int32>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Int32>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int64Comparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int64Comparer.html",
    "title": "Class FieldComparer.Int64Comparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.Int64Comparer Parses field's values as (using GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) and sorts by ascending value NOTE: This was LongComparator in Lucene Inheritance System.Object FieldComparer FieldComparer < System.Int64 > FieldComparer.NumericComparer < System.Int64 > FieldComparer.Int64Comparer Inherited Members FieldComparer.NumericComparer<Int64>.m_missingValue FieldComparer.NumericComparer<Int64>.m_field FieldComparer.NumericComparer<Int64>.m_docsWithField FieldComparer<Int64>.CompareValues(Int64, Int64) FieldComparer<Int64>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class Int64Comparer : FieldComparer.NumericComparer<long> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int64>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int64>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int64>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Int64>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Int64>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Int64>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Int64>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.NumericComparer-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.NumericComparer-1.html",
    "title": "Class FieldComparer.NumericComparer<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.NumericComparer<T> Base FieldComparer class for numeric types Inheritance System.Object FieldComparer FieldComparer <T> FieldComparer.NumericComparer<T> FieldComparer.ByteComparer FieldComparer.DoubleComparer FieldComparer.Int16Comparer FieldComparer.Int32Comparer FieldComparer.Int64Comparer FieldComparer.SingleComparer Inherited Members FieldComparer<T>.Compare(Int32, Int32) FieldComparer<T>.SetBottom(Int32) FieldComparer<T>.SetTopValue(Object) FieldComparer<T>.CompareBottom(Int32) FieldComparer<T>.CompareTop(Int32) FieldComparer<T>.Copy(Int32, Int32) FieldComparer<T>.CompareValues(T, T) FieldComparer<T>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) FieldComparer.Item[Int32] Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class NumericComparer<T> : FieldComparer<T> where T : struct Type Parameters Name Description T Constructors | Improve this Doc View Source NumericComparer(String, Nullable<T>) Declaration public NumericComparer(string field, T? missingValue) Parameters Type Name Description System.String field System.Nullable <T> missingValue Fields | Improve this Doc View Source m_docsWithField Declaration protected IBits m_docsWithField Field Value Type Description IBits | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_missingValue Declaration protected readonly T? m_missingValue Field Value Type Description System.Nullable <T> Methods | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<T>.SetNextReader(Lucene.Net.Index.AtomicReaderContext)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.RelevanceComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.RelevanceComparer.html",
    "title": "Class FieldComparer.RelevanceComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.RelevanceComparer Sorts by descending relevance. NOTE: if you are sorting only by descending relevance and then secondarily by ascending docID, performance is faster using TopScoreDocCollector directly (which all overloads of Search(Query, Int32) use when no Sort is specified). Inheritance System.Object FieldComparer FieldComparer < System.Single > FieldComparer.RelevanceComparer Inherited Members FieldComparer<Single>.CompareValues(Object, Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class RelevanceComparer : FieldComparer<float> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareTop(System.Int32) | Improve this Doc View Source CompareValues(Single, Single) Declaration public override int CompareValues(float first, float second) Parameters Type Name Description System.Single first System.Single second Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareValues(System.Single, System.Single) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Single>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetScorer(Scorer) Declaration public override void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Overrides FieldComparer.SetScorer(Scorer) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.SingleComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.SingleComparer.html",
    "title": "Class FieldComparer.SingleComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.SingleComparer Parses field's values as (using GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) and sorts by ascending value NOTE: This was FloatComparator in Lucene Inheritance System.Object FieldComparer FieldComparer < System.Single > FieldComparer.NumericComparer < System.Single > FieldComparer.SingleComparer Inherited Members FieldComparer.NumericComparer<Single>.m_missingValue FieldComparer.NumericComparer<Single>.m_field FieldComparer.NumericComparer<Single>.m_docsWithField FieldComparer<Single>.CompareValues(Single, Single) FieldComparer<Single>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class SingleComparer : FieldComparer.NumericComparer<float> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Single>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Single>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.TermOrdValComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.TermOrdValComparer.html",
    "title": "Class FieldComparer.TermOrdValComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.TermOrdValComparer Sorts by field's natural Term sort order, using ordinals. This is functionally equivalent to FieldComparer.TermValComparer , but it first resolves the string to their relative ordinal positions (using the index returned by GetTermsIndex(AtomicReader, String, Single) ), and does most comparisons using the ordinals. For medium to large results, this comparer will be much faster than FieldComparer.TermValComparer . For very small result sets it may be slower. Inheritance System.Object FieldComparer FieldComparer < BytesRef > FieldComparer.TermOrdValComparer Inherited Members FieldComparer<BytesRef>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermOrdValComparer : FieldComparer<BytesRef> Constructors | Improve this Doc View Source TermOrdValComparer(Int32, String) Creates this, sorting missing values first. Declaration public TermOrdValComparer(int numHits, string field) Parameters Type Name Description System.Int32 numHits System.String field | Improve this Doc View Source TermOrdValComparer(Int32, String, Boolean) Creates this, with control over how missing values are sorted. Pass true for sortMissingLast to put missing values at the end. Declaration public TermOrdValComparer(int numHits, string field, bool sortMissingLast) Parameters Type Name Description System.Int32 numHits System.String field System.Boolean sortMissingLast Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareTop(System.Int32) | Improve this Doc View Source CompareValues(BytesRef, BytesRef) Declaration public override int CompareValues(BytesRef val1, BytesRef val2) Parameters Type Name Description BytesRef val1 BytesRef val2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareValues(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.Copy(System.Int32, System.Int32) | Improve this Doc View Source GetSortedDocValues(AtomicReaderContext, String) Retrieves the SortedDocValues for the field in this segment Declaration protected virtual SortedDocValues GetSortedDocValues(AtomicReaderContext context, string field) Parameters Type Name Description AtomicReaderContext context System.String field Returns Type Description SortedDocValues | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.TermValComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.TermValComparer.html",
    "title": "Class FieldComparer.TermValComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.TermValComparer Sorts by field's natural Term sort order. All comparisons are done using CompareTo(BytesRef) , which is slow for medium to large result sets but possibly very fast for very small results sets. Inheritance System.Object FieldComparer FieldComparer < BytesRef > FieldComparer.TermValComparer Inherited Members FieldComparer<BytesRef>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class TermValComparer : FieldComparer<BytesRef> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareTop(System.Int32) | Improve this Doc View Source CompareValues(BytesRef, BytesRef) Declaration public override int CompareValues(BytesRef val1, BytesRef val2) Parameters Type Name Description BytesRef val1 BytesRef val2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareValues(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer-1.html",
    "title": "Class FieldComparer<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer<T> Expert: a FieldComparer compares hits so as to determine their sort order when collecting the top results with TopFieldCollector . The concrete public FieldComparer classes here correspond to the SortField types. This API is designed to achieve high performance sorting, by exposing a tight interaction with FieldValueHitQueue as it visits hits. Whenever a hit is competitive, it's enrolled into a virtual slot, which is an ranging from 0 to numHits-1. The FieldComparer is made aware of segment transitions during searching in case any internal state it's tracking needs to be recomputed during these transitions. A comparer must define these functions: Compare(Int32, Int32) Compare a hit at 'slot a' with hit 'slot b'. SetBottom(Int32) This method is called by FieldValueHitQueue to notify the FieldComparer of the current weakest (\"bottom\") slot. Note that this slot may not hold the weakest value according to your comparer, in cases where your comparer is not the primary one (ie, is only used to break ties from the comparers before it). CompareBottom(Int32) Compare a new hit (docID) against the \"weakest\" (bottom) entry in the queue. SetTopValue(Object) This method is called by TopFieldCollector to notify the FieldComparer of the top most value, which is used by future calls to CompareTop(Int32) . CompareTop(Int32) Compare a new hit (docID) against the top value previously set by a call to SetTopValue(Object) . Copy(Int32, Int32) Installs a new hit into the priority queue. The FieldValueHitQueue calls this method when a new hit is competitive. SetNextReader(AtomicReaderContext) Invoked when the search is switching to the next segment. You may need to update internal state of the comparer, for example retrieving new values from the IFieldCache . Item[Int32] Return the sort value stored in the specified slot. This is only called at the end of the search, in order to populate Fields when returning the top results. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldComparer FieldComparer<T> FieldComparer.DocComparer FieldComparer.NumericComparer<T> FieldComparer.RelevanceComparer FieldComparer.TermOrdValComparer FieldComparer.TermValComparer Inherited Members FieldComparer.SetScorer(Scorer) FieldComparer.Item[Int32] Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldComparer<T> : FieldComparer Type Parameters Name Description T Methods | Improve this Doc View Source Compare(Int32, Int32) Compare hit at slot1 with hit at slot2 . Declaration public abstract override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 first slot to compare System.Int32 slot2 second slot to compare Returns Type Description System.Int32 any N < 0 if slot2 's value is sorted after slot1 , any N > 0 if the slot2 's value is sorted before slot1 and 0 if they are equal Overrides FieldComparer.Compare(Int32, Int32) | Improve this Doc View Source CompareBottom(Int32) Compare the bottom of the queue with this doc. This will only invoked after SetBottom(Int32) has been called. This should return the same result as Compare(Int32, Int32) as if bottom were slot1 and the new document were slot 2. For a search that hits many results, this method will be the hotspot (invoked by far the most frequently). Declaration public abstract override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Doc that was hit Returns Type Description System.Int32 Any N < 0 if the doc's value is sorted after the bottom entry (not competitive), any N > 0 if the doc's value is sorted before the bottom entry and 0 if they are equal. Overrides FieldComparer.CompareBottom(Int32) | Improve this Doc View Source CompareTop(Int32) Compare the top value with this doc. This will only invoked after SetTopValue(Object) has been called. This should return the same result as Compare(Int32, Int32) as if topValue were slot1 and the new document were slot 2. This is only called for searches that use SearchAfter (deep paging). Declaration public abstract override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Doc that was hit Returns Type Description System.Int32 Any N < 0 if the doc's value is sorted after the bottom entry (not competitive), any N > 0 if the doc's value is sorted before the bottom entry and 0 if they are equal. Overrides FieldComparer.CompareTop(Int32) | Improve this Doc View Source CompareValues(T, T) Returns -1 if first is less than second. Default impl to assume the type implements and invoke ; be sure to override this method if your FieldComparer's type isn't a or if your values may sometimes be null Declaration public virtual int CompareValues(T first, T second) Parameters Type Name Description T first T second Returns Type Description System.Int32 | Improve this Doc View Source CompareValues(Object, Object) Returns -1 if first is less than second. Default impl to assume the type implements and invoke ; be sure to override this method if your FieldComparer's type isn't a or if your values may sometimes be null Declaration public override int CompareValues(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Int32 Overrides FieldComparer.CompareValues(Object, Object) | Improve this Doc View Source Copy(Int32, Int32) This method is called when a new hit is competitive. You should copy any state associated with this document that will be required for future comparisons, into the specified slot. Declaration public abstract override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot Which slot to copy the hit to System.Int32 doc DocID relative to current reader Overrides FieldComparer.Copy(Int32, Int32) | Improve this Doc View Source SetBottom(Int32) Set the bottom slot, ie the \"weakest\" (sorted last) entry in the queue. When CompareBottom(Int32) is called, you should compare against this slot. This will always be called before CompareBottom(Int32) . Declaration public abstract override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot the currently weakest (sorted last) slot in the queue Overrides FieldComparer.SetBottom(Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Set a new AtomicReaderContext . All subsequent docIDs are relative to the current reader (you must add docBase if you need to map it to a top-level docID). Declaration public abstract override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Current reader context Returns Type Description FieldComparer The comparer to use for this segment; most comparers can just return \"this\" to reuse the same comparer across segments Overrides FieldComparer.SetNextReader(AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Record the top value, for future calls to CompareTop(Int32) . This is only called for searches that use SearchAfter (deep paging), and is called before any calls to SetNextReader(AtomicReaderContext) . Declaration public abstract override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides FieldComparer.SetTopValue(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparerSource.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparerSource.html",
    "title": "Class FieldComparerSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparerSource Provides a FieldComparer for custom field sorting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldComparerSource Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldComparerSource : object Methods | Improve this Doc View Source NewComparer(String, Int32, Int32, Boolean) Creates a comparer for the field in the given index. Declaration public abstract FieldComparer NewComparer(string fieldname, int numHits, int sortPos, bool reversed) Parameters Type Name Description System.String fieldname Name of the field to create comparer for. System.Int32 numHits System.Int32 sortPos System.Boolean reversed Returns Type Description FieldComparer FieldComparer ."
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldDoc.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldDoc.html",
    "title": "Class FieldDoc | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldDoc Expert: A ScoreDoc which also contains information about how to sort the referenced document. In addition to the document number and score, this object contains an array of values for the document from the field(s) used to sort. For example, if the sort criteria was to sort by fields \"a\", \"b\" then \"c\", the fields object array will have three elements, corresponding respectively to the term values for the document in fields \"a\", \"b\" and \"c\". The class of each element in the array will be either , or depending on the type of values in the terms of each field. Created: Feb 11, 2004 1:23:38 PM @since lucene 1.4 Inheritance System.Object ScoreDoc FieldDoc Inherited Members ScoreDoc.Score ScoreDoc.Doc ScoreDoc.ShardIndex Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FieldDoc : ScoreDoc Constructors | Improve this Doc View Source FieldDoc(Int32, Single) Expert: Creates one of these objects with empty sort information. Declaration public FieldDoc(int doc, float score) Parameters Type Name Description System.Int32 doc System.Single score | Improve this Doc View Source FieldDoc(Int32, Single, Object[]) Expert: Creates one of these objects with the given sort information. Declaration public FieldDoc(int doc, float score, object[] fields) Parameters Type Name Description System.Int32 doc System.Single score System.Object [] fields | Improve this Doc View Source FieldDoc(Int32, Single, Object[], Int32) Expert: Creates one of these objects with the given sort information. Declaration public FieldDoc(int doc, float score, object[] fields, int shardIndex) Parameters Type Name Description System.Int32 doc System.Single score System.Object [] fields System.Int32 shardIndex Properties | Improve this Doc View Source Fields Expert: The values which are used to sort the referenced document. The order of these will match the original sort criteria given by a Sort object. Each Object will have been returned from the Item[Int32] method corresponding FieldComparer used to sort this field. Declaration public object[] Fields { get; set; } Property Value Type Description System.Object [] See Also Sort Search(Query, Filter, Int32, Sort) Methods | Improve this Doc View Source ToString() A convenience method for debugging. Declaration public override string ToString() Returns Type Description System.String Overrides ScoreDoc.ToString() See Also ScoreDoc TopFieldDocs"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldValueFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldValueFilter.html",
    "title": "Class FieldValueFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldValueFilter A Filter that accepts all documents that have one or more values in a given field. this Filter request IBits from the IFieldCache and build the bits if not present. Inheritance System.Object Filter FieldValueFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FieldValueFilter : Filter Constructors | Improve this Doc View Source FieldValueFilter(String) Creates a new FieldValueFilter Declaration public FieldValueFilter(string field) Parameters Type Name Description System.String field The field to filter | Improve this Doc View Source FieldValueFilter(String, Boolean) Creates a new FieldValueFilter Declaration public FieldValueFilter(string field, bool negate) Parameters Type Name Description System.String field The field to filter System.Boolean negate If true all documents with no value in the given field are accepted. Properties | Improve this Doc View Source Field Returns the field this filter is applied on. Declaration public virtual string Field { get; } Property Value Type Description System.String The field this filter is applied on. | Improve this Doc View Source Negate Returns true if this filter is negated, otherwise false Declaration public virtual bool Negate { get; } Property Value Type Description System.Boolean true if this filter is negated, otherwise false Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue.Entry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue.Entry.html",
    "title": "Class FieldValueHitQueue.Entry | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldValueHitQueue.Entry Inheritance System.Object ScoreDoc FieldValueHitQueue.Entry Inherited Members ScoreDoc.Score ScoreDoc.Doc ScoreDoc.ShardIndex Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class Entry : ScoreDoc Constructors | Improve this Doc View Source Entry(Int32, Int32, Single) Declaration public Entry(int slot, int doc, float score) Parameters Type Name Description System.Int32 slot System.Int32 doc System.Single score Properties | Improve this Doc View Source Slot Declaration public int Slot { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides ScoreDoc.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue.html",
    "title": "Class FieldValueHitQueue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldValueHitQueue Inheritance System.Object FieldValueHitQueue Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class FieldValueHitQueue : object Methods | Improve this Doc View Source Create<T>(SortField[], Int32) Creates a hit queue sorted by the given list of fields. NOTE : The instances returned by this method pre-allocate a full array of length numHits . Declaration public static FieldValueHitQueue<T> Create<T>(SortField[] fields, int size) where T : FieldValueHitQueue.Entry Parameters Type Name Description SortField [] fields SortField array we are sorting by in priority order (highest priority first); cannot be null or empty System.Int32 size The number of hits to retain. Must be greater than zero. Returns Type Description FieldValueHitQueue <T> Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue-1.html",
    "title": "Class FieldValueHitQueue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldValueHitQueue<T> Expert: A hit queue for sorting by hits by terms in more than one field. Uses FieldCache.DEFAULT for maintaining internal term lookup tables. @lucene.experimental @since 2.9 Inheritance System.Object PriorityQueue <T> FieldValueHitQueue<T> Inherited Members PriorityQueue<T>.LessThan(T, T) PriorityQueue<T>.GetSentinelObject() PriorityQueue<T>.Add(T) PriorityQueue<T>.InsertWithOverflow(T) PriorityQueue<T>.Top PriorityQueue<T>.Pop() PriorityQueue<T>.UpdateTop() PriorityQueue<T>.Count PriorityQueue<T>.Clear() PriorityQueue<T>.HeapArray Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldValueHitQueue<T> : PriorityQueue<T> where T : FieldValueHitQueue.Entry Type Parameters Name Description T Fields | Improve this Doc View Source m_comparers Declaration protected readonly FieldComparer[] m_comparers Field Value Type Description FieldComparer [] | Improve this Doc View Source m_fields Stores the sort criteria being used. Declaration protected readonly SortField[] m_fields Field Value Type Description SortField [] | Improve this Doc View Source m_firstComparer Declaration protected FieldComparer m_firstComparer Field Value Type Description FieldComparer | Improve this Doc View Source m_reverseMul Declaration protected readonly int[] m_reverseMul Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Comparers Declaration public virtual FieldComparer[] Comparers { get; } Property Value Type Description FieldComparer [] | Improve this Doc View Source ReverseMul Declaration public virtual int[] ReverseMul { get; } Property Value Type Description System.Int32 [] Methods | Improve this Doc View Source SetComparer(Int32, FieldComparer) Declaration public virtual void SetComparer(int pos, FieldComparer comparer) Parameters Type Name Description System.Int32 pos FieldComparer comparer See Also Search(Query, Filter, Int32, Sort) FieldCache"
  },
  "api/Lucene.Net/Lucene.Net.Search.Filter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Filter.html",
    "title": "Class Filter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Filter Abstract base class for restricting which documents may be returned during searching. Inheritance System.Object Filter CachingWrapperFilter DocTermOrdsRangeFilter FieldCacheRangeFilter<T> FieldCacheTermsFilter FieldValueFilter MultiTermQueryWrapperFilter<Q> QueryWrapperFilter Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Filter : object Methods | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Creates a DocIdSet enumerating the documents that should be permitted in search results. NOTE: null can be returned if no documents are accepted by this Filter . Note: this method will be called once per segment in the index during searching. The returned DocIdSet must refer to document IDs for that segment, not for the top-level reader. Declaration public abstract DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context a AtomicReaderContext instance opened on the index currently searched on. Note, it is likely that the provided reader info does not represent the whole underlying index i.e. if the index has more than one segment the given reader only represents a single segment. The provided context is always an atomic context, so you can call Fields on the context's reader, for example. IBits acceptDocs IBits that represent the allowable docs to match (typically deleted docs but possibly filtering other documents) Returns Type Description DocIdSet A DocIdSet that provides the documents which should be permitted or prohibited in search results. NOTE: null should be returned if the filter doesn't accept any documents otherwise internal optimization might not apply in the case an empty DocIdSet is returned. | Improve this Doc View Source NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) Creates a new instance with the ability to specify the body of the GetDocIdSet(AtomicReaderContext, IBits) method through the getDocIdSet parameter. Simple example: var filter = Filter.NewAnonymous(getDocIdSet: (context, acceptDocs) => { if (acceptDocs == null) acceptDocs = new Bits.MatchAllBits(5); OpenBitSet bitset = new OpenBitSet(5); if (acceptDocs.Get(1)) bitset.Set(1); if (acceptDocs.Get(3)) bitset.Set(3); return new DocIdBitSet(bitset); }); LUCENENET specific Declaration public static Filter NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet> getDocIdSet) Parameters Type Name Description Func < AtomicReaderContext , IBits , DocIdSet > getDocIdSet A delegate method that represents (is called by) the GetDocIdSet(AtomicReaderContext, IBits) method. It accepts a AtomicReaderContext context and a IBits acceptDocs and returns the DocIdSet for this filter. Returns Type Description Filter"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredDocIdSet.html",
    "title": "Class FilteredDocIdSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteredDocIdSet Abstract decorator class for a DocIdSet implementation that provides on-demand filtering/validation mechanism on a given DocIdSet . Technically, this same functionality could be achieved with ChainedFilter (under queries/), however the benefit of this class is it never materializes the full bitset for the filter. Instead, the Match(Int32) method is invoked on-demand, per docID visited during searching. If you know few docIDs will be visited, and the logic behind Match(Int32) is relatively costly, this may be a better way to filter than ChainedFilter. Inheritance System.Object DocIdSet FilteredDocIdSet BitsFilteredDocIdSet Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FilteredDocIdSet : DocIdSet Constructors | Improve this Doc View Source FilteredDocIdSet(DocIdSet) Constructor. Declaration public FilteredDocIdSet(DocIdSet innerSet) Parameters Type Name Description DocIdSet innerSet Underlying DocIdSet Properties | Improve this Doc View Source Bits Declaration public override IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable if the inner set is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source GetIterator() Implementation of the contract to build a DocIdSetIterator . Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() See Also DocIdSetIterator FilteredDocIdSetIterator | Improve this Doc View Source Match(Int32) Validation method to determine whether a docid should be in the result set. Declaration protected abstract bool Match(int docid) Parameters Type Name Description System.Int32 docid docid to be tested Returns Type Description System.Boolean true if input docid should be in the result set, false otherwise. See Also DocIdSet"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredDocIdSetIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredDocIdSetIterator.html",
    "title": "Class FilteredDocIdSetIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteredDocIdSetIterator Abstract decorator class of a DocIdSetIterator implementation that provides on-demand filter/validation mechanism on an underlying DocIdSetIterator . See DocIdSetIterator . Inheritance System.Object DocIdSetIterator FilteredDocIdSetIterator Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FilteredDocIdSetIterator : DocIdSetIterator Constructors | Improve this Doc View Source FilteredDocIdSetIterator(DocIdSetIterator) Constructor. Declaration public FilteredDocIdSetIterator(DocIdSetIterator innerIter) Parameters Type Name Description DocIdSetIterator innerIter Underlying DocIdSetIterator . Fields | Improve this Doc View Source m_innerIter Declaration protected DocIdSetIterator m_innerIter Field Value Type Description DocIdSetIterator Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source Match(Int32) Validation method to determine whether a docid should be in the result set. Declaration protected abstract bool Match(int doc) Parameters Type Name Description System.Int32 doc docid to be tested Returns Type Description System.Boolean true if input docid should be in the result set, false otherwise. See Also FilteredDocIdSetIterator(DocIdSetIterator) | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.FilterStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.FilterStrategy.html",
    "title": "Class FilteredQuery.FilterStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteredQuery.FilterStrategy Abstract class that defines how the filter ( DocIdSet ) applied during document collection. Inheritance System.Object FilteredQuery.FilterStrategy FilteredQuery.RandomAccessFilterStrategy Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FilterStrategy : object Methods | Improve this Doc View Source FilteredBulkScorer(AtomicReaderContext, Weight, Boolean, DocIdSet) Returns a filtered BulkScorer based on this strategy. this is an optional method: the default implementation just calls FilteredScorer(AtomicReaderContext, Weight, DocIdSet) and wraps that into a BulkScorer . Declaration public virtual BulkScorer FilteredBulkScorer(AtomicReaderContext context, Weight weight, bool scoreDocsInOrder, DocIdSet docIdSet) Parameters Type Name Description AtomicReaderContext context the AtomicReaderContext for which to return the Scorer . Weight weight the FilteredQuery Weight to create the filtered scorer. System.Boolean scoreDocsInOrder true to score docs in order DocIdSet docIdSet the filter DocIdSet to apply Returns Type Description BulkScorer a filtered top scorer | Improve this Doc View Source FilteredScorer(AtomicReaderContext, Weight, DocIdSet) Returns a filtered Scorer based on this strategy. Declaration public abstract Scorer FilteredScorer(AtomicReaderContext context, Weight weight, DocIdSet docIdSet) Parameters Type Name Description AtomicReaderContext context the AtomicReaderContext for which to return the Scorer . Weight weight the FilteredQuery Weight to create the filtered scorer. DocIdSet docIdSet the filter DocIdSet to apply Returns Type Description Scorer a filtered scorer"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.html",
    "title": "Class FilteredQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteredQuery A query that applies a filter to the results of another query. Note: the bits are retrieved from the filter each time this query is used in a search - use a CachingWrapperFilter to avoid regenerating the bits every time. @since 1.4 Inheritance System.Object Query FilteredQuery Inherited Members Query.Boost Query.ToString() Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FilteredQuery : Query Constructors | Improve this Doc View Source FilteredQuery(Query, Filter) Constructs a new query which applies a filter to the results of the original query. GetDocIdSet(AtomicReaderContext, IBits) will be called every time this query is used in a search. Declaration public FilteredQuery(Query query, Filter filter) Parameters Type Name Description Query query Query to be filtered, cannot be null . Filter filter Filter to apply to query results, cannot be null . | Improve this Doc View Source FilteredQuery(Query, Filter, FilteredQuery.FilterStrategy) Expert: Constructs a new query which applies a filter to the results of the original query. GetDocIdSet(AtomicReaderContext, IBits) will be called every time this query is used in a search. Declaration public FilteredQuery(Query query, Filter filter, FilteredQuery.FilterStrategy strategy) Parameters Type Name Description Query query Query to be filtered, cannot be null . Filter filter Filter to apply to query results, cannot be null . FilteredQuery.FilterStrategy strategy A filter strategy used to create a filtered scorer. See Also FilteredQuery.FilterStrategy Fields | Improve this Doc View Source LEAP_FROG_FILTER_FIRST_STRATEGY A filter strategy that uses a \"leap-frog\" approach (also called \"zig-zag join\"). The scorer and the filter take turns trying to advance to each other's next matching document, often jumping past the target document. When both land on the same document, it's collected. Note: this strategy uses the filter to lead the iteration. Declaration public static readonly FilteredQuery.FilterStrategy LEAP_FROG_FILTER_FIRST_STRATEGY Field Value Type Description FilteredQuery.FilterStrategy | Improve this Doc View Source LEAP_FROG_QUERY_FIRST_STRATEGY A filter strategy that uses a \"leap-frog\" approach (also called \"zig-zag join\"). The scorer and the filter take turns trying to advance to each other's next matching document, often jumping past the target document. When both land on the same document, it's collected. Note: this strategy uses the query to lead the iteration. Declaration public static readonly FilteredQuery.FilterStrategy LEAP_FROG_QUERY_FIRST_STRATEGY Field Value Type Description FilteredQuery.FilterStrategy | Improve this Doc View Source QUERY_FIRST_FILTER_STRATEGY A filter strategy that advances the Query or rather its Scorer first and consults the filter DocIdSet for each matched document. Note: this strategy requires a Bits to return a non-null value. Otherwise this strategy falls back to LEAP_FROG_QUERY_FIRST_STRATEGY Use this strategy if the filter computation is more expensive than document scoring or if the filter has a linear running time to compute the next matching doc like exact geo distances. Declaration public static readonly FilteredQuery.FilterStrategy QUERY_FIRST_FILTER_STRATEGY Field Value Type Description FilteredQuery.FilterStrategy | Improve this Doc View Source RANDOM_ACCESS_FILTER_STRATEGY A FilteredQuery.FilterStrategy that conditionally uses a random access filter if the given DocIdSet supports random access (returns a non-null value from Bits ) and UseRandomAccess(IBits, Int32) returns true . Otherwise this strategy falls back to a \"zig-zag join\" ( LEAP_FROG_FILTER_FIRST_STRATEGY ) strategy. Note: this strategy is the default strategy in FilteredQuery Declaration public static readonly FilteredQuery.FilterStrategy RANDOM_ACCESS_FILTER_STRATEGY Field Value Type Description FilteredQuery.FilterStrategy Properties | Improve this Doc View Source Filter Returns this FilteredQuery 's filter Declaration public Filter Filter { get; } Property Value Type Description Filter | Improve this Doc View Source Query Returns this FilteredQuery 's (unfiltered) Query Declaration public Query Query { get; } Property Value Type Description Query | Improve this Doc View Source Strategy Returns this FilteredQuery 's FilteredQuery.FilterStrategy Declaration public virtual FilteredQuery.FilterStrategy Strategy { get; } Property Value Type Description FilteredQuery.FilterStrategy Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Returns a Weight that applies the filter to the enclosed query's Weight . this is accomplished by overriding the Scorer returned by the Weight . Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Expert: adds all terms occurring in this query to the terms set. Only works if this query is in its rewritten ( Rewrite(IndexReader) ) form. Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Rewrites the query. If the wrapped is an instance of MatchAllDocsQuery it returns a ConstantScoreQuery . Otherwise it returns a new FilteredQuery wrapping the rewritten query. Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string s) Parameters Type Name Description System.String s Returns Type Description System.String Overrides Query.ToString(String) See Also CachingWrapperFilter"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.RandomAccessFilterStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.RandomAccessFilterStrategy.html",
    "title": "Class FilteredQuery.RandomAccessFilterStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteredQuery.RandomAccessFilterStrategy A FilteredQuery.FilterStrategy that conditionally uses a random access filter if the given DocIdSet supports random access (returns a non-null value from Bits ) and UseRandomAccess(IBits, Int32) returns true . Otherwise this strategy falls back to a \"zig-zag join\" ( LEAP_FROG_FILTER_FIRST_STRATEGY ) strategy . Inheritance System.Object FilteredQuery.FilterStrategy FilteredQuery.RandomAccessFilterStrategy Inherited Members FilteredQuery.FilterStrategy.FilteredBulkScorer(AtomicReaderContext, Weight, Boolean, DocIdSet) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class RandomAccessFilterStrategy : FilteredQuery.FilterStrategy Methods | Improve this Doc View Source FilteredScorer(AtomicReaderContext, Weight, DocIdSet) Declaration public override Scorer FilteredScorer(AtomicReaderContext context, Weight weight, DocIdSet docIdSet) Parameters Type Name Description AtomicReaderContext context Weight weight DocIdSet docIdSet Returns Type Description Scorer Overrides FilteredQuery.FilterStrategy.FilteredScorer(AtomicReaderContext, Weight, DocIdSet) | Improve this Doc View Source UseRandomAccess(IBits, Int32) Expert: decides if a filter should be executed as \"random-access\" or not. Random-access means the filter \"filters\" in a similar way as deleted docs are filtered in Lucene. This is faster when the filter accepts many documents. However, when the filter is very sparse, it can be faster to execute the query+filter as a conjunction in some cases. The default implementation returns true if the first document accepted by the filter is < 100. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected virtual bool UseRandomAccess(IBits bits, int firstFilterDoc) Parameters Type Name Description IBits bits System.Int32 firstFilterDoc Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Search.FuzzyQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FuzzyQuery.html",
    "title": "Class FuzzyQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyQuery Implements the fuzzy search query. The similarity measurement is based on the Damerau-Levenshtein (optimal string alignment) algorithm, though you can explicitly choose classic Levenshtein by passing false to the transpositions parameter. this query uses MultiTermQuery.TopTermsScoringBooleanQueryRewrite as default. So terms will be collected and scored according to their edit distance. Only the top terms are used for building the BooleanQuery . It is not recommended to change the rewrite mode for fuzzy queries. At most, this query will match terms up to MAXIMUM_SUPPORTED_DISTANCE edits. Higher distances (especially with transpositions enabled), are generally not useful and will match a significant amount of the term dictionary. If you really want this, consider using an n-gram indexing technique (such as the SpellChecker in the suggest module ) instead. NOTE: terms of length 1 or 2 will sometimes not match because of how the scaled distance between two terms is computed. For a term to match, the edit distance between the terms must be less than the minimum length term (either the input term, or the candidate term). For example, FuzzyQuery on term \"abcd\" with maxEdits=2 will not match an indexed term \"ab\", and FuzzyQuery on term \"a\" with maxEdits=2 will not match an indexed term \"abc\". Inheritance System.Object Query MultiTermQuery FuzzyQuery Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FuzzyQuery : MultiTermQuery Constructors | Improve this Doc View Source FuzzyQuery(Term) Calls FuzzyQuery(Term, Int32) . Declaration public FuzzyQuery(Term term) Parameters Type Name Description Term term | Improve this Doc View Source FuzzyQuery(Term, Int32) Calls FuzzyQuery(Term, Int32, Int32) . Declaration public FuzzyQuery(Term term, int maxEdits) Parameters Type Name Description Term term System.Int32 maxEdits | Improve this Doc View Source FuzzyQuery(Term, Int32, Int32) Calls FuzzyQuery(Term, Int32, Int32, Int32, Boolean) . Declaration public FuzzyQuery(Term term, int maxEdits, int prefixLength) Parameters Type Name Description Term term System.Int32 maxEdits System.Int32 prefixLength | Improve this Doc View Source FuzzyQuery(Term, Int32, Int32, Int32, Boolean) Create a new FuzzyQuery that will match terms with an edit distance of at most maxEdits to term . If a prefixLength > 0 is specified, a common prefix of that length is also required. Declaration public FuzzyQuery(Term term, int maxEdits, int prefixLength, int maxExpansions, bool transpositions) Parameters Type Name Description Term term The term to search for System.Int32 maxEdits Must be >= 0 and <= MAXIMUM_SUPPORTED_DISTANCE . System.Int32 prefixLength Length of common (non-fuzzy) prefix System.Int32 maxExpansions The maximum number of terms to match. If this number is greater than MaxClauseCount when the query is rewritten, then the maxClauseCount will be used instead. System.Boolean transpositions true if transpositions should be treated as a primitive edit operation. If this is false , comparisons will implement the classic Levenshtein algorithm. Fields | Improve this Doc View Source DefaultMaxEdits Declaration public const int DefaultMaxEdits = null Field Value Type Description System.Int32 | Improve this Doc View Source DefaultMaxExpansions Declaration public const int DefaultMaxExpansions = null Field Value Type Description System.Int32 | Improve this Doc View Source DefaultMinSimilarity Declaration public const float DefaultMinSimilarity = null Field Value Type Description System.Single | Improve this Doc View Source DefaultPrefixLength Declaration public const int DefaultPrefixLength = null Field Value Type Description System.Int32 | Improve this Doc View Source DefaultTranspositions Declaration public const bool DefaultTranspositions = null Field Value Type Description System.Boolean Properties | Improve this Doc View Source MaxEdits Declaration public virtual int MaxEdits { get; } Property Value Type Description System.Int32 The maximum number of edit distances allowed for this query to match. | Improve this Doc View Source PrefixLength Returns the non-fuzzy prefix length. This is the number of characters at the start of a term that must be identical (not fuzzy) to the query term if the query is to match that term. Declaration public virtual int PrefixLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Term Returns the pattern term. Declaration public virtual Term Term { get; } Property Value Type Description Term | Improve this Doc View Source Transpositions Returns true if transpositions should be treated as a primitive edit operation. If this is false , comparisons will implement the classic Levenshtein algorithm. Declaration public virtual bool Transpositions { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | Improve this Doc View Source SingleToEdits(Single, Int32) Helper function to convert from deprecated \"minimumSimilarity\" fractions to raw edit distances. NOTE: this was floatToEdits() in Lucene Declaration public static int SingleToEdits(float minimumSimilarity, int termLen) Parameters Type Name Description System.Single minimumSimilarity Scaled similarity System.Int32 termLen Length (in unicode codepoints) of the term. Returns Type Description System.Int32 Equivalent number of maxEdits | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.html",
    "title": "Class FuzzyTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyTermsEnum Subclass of TermsEnum for enumerating all terms that are similar to the specified filter term. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Inheritance System.Object TermsEnum FuzzyTermsEnum Implements IBytesRefIterator Inherited Members TermsEnum.Attributes TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FuzzyTermsEnum : TermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source FuzzyTermsEnum(Terms, AttributeSource, Term, Single, Int32, Boolean) Constructor for enumeration of all terms from specified reader which share a prefix of length prefixLength with term and which have a fuzzy similarity > minSimilarity . After calling the constructor the enumeration is already pointing to the first valid term if such a term exists. Declaration public FuzzyTermsEnum(Terms terms, AttributeSource atts, Term term, float minSimilarity, int prefixLength, bool transpositions) Parameters Type Name Description Terms terms Delivers terms. AttributeSource atts AttributeSource created by the rewrite method of MultiTermQuery thats contains information about competitive boosts during rewrite. It is also used to cache DFAs between segment transitions. Term term Pattern term. System.Single minSimilarity Minimum required similarity for terms from the reader. Pass an integer value representing edit distance. Passing a fraction is deprecated. System.Int32 prefixLength Length of required common prefix. Default value is 0. System.Boolean transpositions Transpositions Fields | Improve this Doc View Source m_maxEdits Declaration protected int m_maxEdits Field Value Type Description System.Int32 | Improve this Doc View Source m_minSimilarity Declaration protected readonly float m_minSimilarity Field Value Type Description System.Single | Improve this Doc View Source m_raw Declaration protected readonly bool m_raw Field Value Type Description System.Boolean | Improve this Doc View Source m_realPrefixLength Declaration protected readonly int m_realPrefixLength Field Value Type Description System.Int32 | Improve this Doc View Source m_scaleFactor Declaration protected readonly float m_scaleFactor Field Value Type Description System.Single | Improve this Doc View Source m_termLength Declaration protected readonly int m_termLength Field Value Type Description System.Int32 | Improve this Doc View Source m_terms Declaration protected readonly Terms m_terms Field Value Type Description Terms | Improve this Doc View Source m_termText Declaration protected readonly int[] m_termText Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Overrides TermsEnum.Comparer | Improve this Doc View Source DocFreq Declaration public override int DocFreq { get; } Property Value Type Description System.Int32 Overrides TermsEnum.DocFreq | Improve this Doc View Source MinSimilarity @lucene.internal Declaration public virtual float MinSimilarity { get; } Property Value Type Description System.Single | Improve this Doc View Source Ord Declaration public override long Ord { get; } Property Value Type Description System.Int64 Overrides TermsEnum.Ord | Improve this Doc View Source ScaleFactor @lucene.internal Declaration public virtual float ScaleFactor { get; } Property Value Type Description System.Single | Improve this Doc View Source Term Declaration public override BytesRef Term { get; } Property Value Type Description BytesRef Overrides TermsEnum.Term | Improve this Doc View Source TotalTermFreq Declaration public override long TotalTermFreq { get; } Property Value Type Description System.Int64 Overrides TermsEnum.TotalTermFreq Methods | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides TermsEnum.Docs(IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source GetAutomatonEnum(Int32, BytesRef) Return an automata-based enum for matching up to editDistance from lastTerm , if possible Declaration protected virtual TermsEnum GetAutomatonEnum(int editDistance, BytesRef lastTerm) Parameters Type Name Description System.Int32 editDistance BytesRef lastTerm Returns Type Description TermsEnum | Improve this Doc View Source GetTermState() Declaration public override TermState GetTermState() Returns Type Description TermState Overrides TermsEnum.GetTermState() | Improve this Doc View Source MaxEditDistanceChanged(BytesRef, Int32, Boolean) Declaration protected virtual void MaxEditDistanceChanged(BytesRef lastTerm, int maxEdits, bool init) Parameters Type Name Description BytesRef lastTerm System.Int32 maxEdits System.Boolean init | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides TermsEnum.Next() | Improve this Doc View Source SeekCeil(BytesRef) Declaration public override TermsEnum.SeekStatus SeekCeil(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description TermsEnum.SeekStatus Overrides TermsEnum.SeekCeil(BytesRef) | Improve this Doc View Source SeekExact(BytesRef) Declaration public override bool SeekExact(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description System.Boolean Overrides TermsEnum.SeekExact(BytesRef) | Improve this Doc View Source SeekExact(BytesRef, TermState) Declaration public override void SeekExact(BytesRef term, TermState state) Parameters Type Name Description BytesRef term TermState state Overrides TermsEnum.SeekExact(BytesRef, TermState) | Improve this Doc View Source SeekExact(Int64) Declaration public override void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Overrides TermsEnum.SeekExact(Int64) | Improve this Doc View Source SetEnum(TermsEnum) Swap in a new actual enum to proxy to Declaration protected virtual void SetEnum(TermsEnum actualEnum) Parameters Type Name Description TermsEnum actualEnum Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.ILevenshteinAutomataAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.ILevenshteinAutomataAttribute.html",
    "title": "Interface FuzzyTermsEnum.ILevenshteinAutomataAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FuzzyTermsEnum.ILevenshteinAutomataAttribute Reuses compiled automata across different segments, because they are independent of the index This is a Lucene.NET INTERNAL API, use at your own risk Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface ILevenshteinAutomataAttribute : IAttribute Properties | Improve this Doc View Source Automata Declaration IList<CompiledAutomaton> Automata { get; } Property Value Type Description IList < CompiledAutomaton >"
  },
  "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.LevenshteinAutomataAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.LevenshteinAutomataAttribute.html",
    "title": "Class FuzzyTermsEnum.LevenshteinAutomataAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyTermsEnum.LevenshteinAutomataAttribute Stores compiled automata as a list (indexed by edit distance) This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Attribute FuzzyTermsEnum.LevenshteinAutomataAttribute Implements FuzzyTermsEnum.ILevenshteinAutomataAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class LevenshteinAutomataAttribute : Attribute, FuzzyTermsEnum.ILevenshteinAutomataAttribute, IAttribute Properties | Improve this Doc View Source Automata Declaration public IList<CompiledAutomaton> Automata { get; } Property Value Type Description IList < CompiledAutomaton > Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Implements FuzzyTermsEnum.ILevenshteinAutomataAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Search.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.html",
    "title": "Namespace Lucene.Net.Search | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Code to search indices. Table Of Contents Search Basics 2. The Query Classes 3. Scoring: Introduction 4. Scoring: Basics 5. Changing the Scoring 6. Appendix: Search Algorithm Search Basics Lucene offers a wide variety of Query implementations, most of which are in this package, its subpackages ( spans , payloads ), or the queries module . These implementations can be combined in a wide variety of ways to provide complex querying capabilities along with information about where matches took place in the document collection. The Query Classes section below highlights some of the more important Query classes. For details on implementing your own Query class, see Custom Queries -- Expert Level below. To perform a search, applications usually call #search(Query,int) or #search(Query,Filter,int) . Once a Query has been created and submitted to the IndexSearcher , the scoring process begins. After some infrastructure setup, control finally passes to the Weight implementation and its Scorer or BulkScore instances. See the Algorithm section for more notes on the process. <!-- TODO: this page over-links the same things too many times --> Query Classes [TermQuery](xref:Lucene.Net.Search.TermQuery) Of the various implementations of Query , the TermQuery is the easiest to understand and the most often used in applications. A TermQuery matches all the documents that contain the specified Term , which is a word that occurs in a certain Field . Thus, a TermQuery identifies and scores all Document s that have a Field with the specified string in it. Constructing a TermQuery is as simple as: TermQuery tq = new TermQuery(new Term(\"fieldName\", \"term\")); In this example, the Query identifies all Document s that have the Field named \"fieldName\" containing the word \"term\" . [BooleanQuery](xref:Lucene.Net.Search.BooleanQuery) Things start to get interesting when one combines multiple TermQuery instances into a BooleanQuery . A BooleanQuery contains multiple BooleanClause s, where each clause contains a sub-query ( Query instance) and an operator (from BooleanClause.Occur ) describing how that sub-query is combined with the other clauses: 1. SHOULD — Use this operator when a clause can occur in the result set, but is not required. If a query is made up of all SHOULD clauses, then every document in the result set matches at least one of these clauses. 2. MUST — Use this operator when a clause is required to occur in the result set. Every document in the result set will match all such clauses. 3. NOT — Use this operator when a clause must not occur in the result set. No document in the result set will match any such clauses. Boolean queries are constructed by adding two or more BooleanClause instances. If too many clauses are added, a TooManyClauses exception will be thrown during searching. This most often occurs when a Query is rewritten into a BooleanQuery with many TermQuery clauses, for example by WildcardQuery . The default setting for the maximum number of clauses 1024, but this can be changed via the static method #setMaxClauseCount(int) . Phrases Another common search is to find documents containing certain phrases. This is handled three different ways: PhraseQuery — Matches a sequence of Term s. PhraseQuery uses a slop factor to determine how many positions may occur between any two terms in the phrase and still be considered a match. The slop is 0 by default, meaning the phrase must match exactly. MultiPhraseQuery — A more general form of PhraseQuery that accepts multiple Terms for a position in the phrase. For example, this can be used to perform phrase queries that also incorporate synonyms. 3. SpanNearQuery — Matches a sequence of other SpanQuery instances. SpanNearQuery allows for much more complicated phrase queries since it is constructed from other SpanQuery instances, instead of only TermQuery instances. [TermRangeQuery](xref:Lucene.Net.Search.TermRangeQuery) The TermRangeQuery matches all documents that occur in the exclusive range of a lower Term and an upper Term according to TermsEnum.getComparator . It is not intended for numerical ranges; use NumericRangeQuery instead. For example, one could find all documents that have terms beginning with the letters a through c . [NumericRangeQuery](xref:Lucene.Net.Search.NumericRangeQuery) The NumericRangeQuery matches all documents that occur in a numeric range. For NumericRangeQuery to work, you must index the values using a one of the numeric fields ( IntField , LongField , FloatField , or DoubleField ). [PrefixQuery](xref:Lucene.Net.Search.PrefixQuery), [WildcardQuery](xref:Lucene.Net.Search.WildcardQuery), [RegexpQuery](xref:Lucene.Net.Search.RegexpQuery) While the PrefixQuery has a different implementation, it is essentially a special case of the WildcardQuery . The PrefixQuery allows an application to identify all documents with terms that begin with a certain string. The WildcardQuery generalizes this by allowing for the use of (matches 0 or more characters) and ? (matches exactly one character) wildcards. Note that the WildcardQuery can be quite slow. Also note that WildcardQuery should not start with and ? , as these are extremely slow. Some QueryParsers may not allow this by default, but provide a setAllowLeadingWildcard method to remove that protection. The RegexpQuery is even more general than WildcardQuery, allowing an application to identify all documents with terms that match a regular expression pattern. [FuzzyQuery](xref:Lucene.Net.Search.FuzzyQuery) A FuzzyQuery matches documents that contain terms similar to the specified term. Similarity is determined using Levenshtein (edit) distance . This type of query can be useful when accounting for spelling variations in the collection. Scoring — Introduction Lucene scoring is the heart of why we all love Lucene. It is blazingly fast and it hides almost all of the complexity from the user. In a nutshell, it works. At least, that is, until it doesn't work, or doesn't work as one would expect it to work. Then we are left digging into Lucene internals or asking for help on java-user@lucene.apache.org to figure out why a document with five of our query terms scores lower than a different document with only one of the query terms. While this document won't answer your specific scoring issues, it will, hopefully, point you to the places that can help you figure out the what and why of Lucene scoring. Lucene scoring supports a number of pluggable information retrieval models , including: * Vector Space Model (VSM) * Probablistic Models such as Okapi BM25 and DFR * Language models These models can be plugged in via the Similarity API , and offer extension hooks and parameters for tuning. In general, Lucene first finds the documents that need to be scored based on boolean logic in the Query specification, and then ranks this subset of matching documents via the retrieval model. For some valuable references on VSM and IR in general refer to Lucene Wiki IR references . The rest of this document will cover Scoring basics and explain how to change your Similarity . Next, it will cover ways you can customize the lucene internals in Custom Queries -- Expert Level , which gives details on implementing your own Query class and related functionality. Finally, we will finish up with some reference material in the Appendix . Scoring — Basics Scoring is very much dependent on the way documents are indexed, so it is important to understand indexing. (see Lucene overview before continuing on with this section) Be sure to use the useful Doc) to understand how the score for a certain matching document was computed. Generally, the Query determines which documents match (a binary decision), while the Similarity determines how to assign scores to the matching documents. Fields and Documents In Lucene, the objects we are scoring are Document s. A Document is a collection of Field s. Each Field has semantics about how it is created and stored ( Tokenized , Stored , etc). It is important to note that Lucene scoring works on Fields and then combines the results to return Documents. This is important because two Documents with the exact same content, but one having the content in two Fields and the other in one Field may return different scores for the same query due to length normalization. Score Boosting Lucene allows influencing search results by \"boosting\" at different times: * Index-time boost by calling Field.setBoost before a document is added to the index. * Query-time boost by setting a boost on a query clause, calling Query.setBoost . Indexing time boosts are pre-processed for storage efficiency and written to storage for a field as follows: * All boosts of that field (i.e. all boosts under the same field name in that doc) are multiplied. * The boost is then encoded into a normalization value by the Similarity object at index-time: ComputeNorm . The actual encoding depends upon the Similarity implementation, but note that most use a lossy encoding (such as multiplying the boost with document length or similar, packed into a single byte!). * Decoding of any index-time normalization values and integration into the document's score is also performed at search time by the Similarity. Changing Scoring — Similarity Changing Similarity is an easy way to influence scoring, this is done at index-time with IndexWriterConfig.setSimilarity and at query-time with IndexSearcher.setSimilarity . Be sure to use the same Similarity at query-time as at index-time (so that norms are encoded/decoded correctly); Lucene makes no effort to verify this. You can influence scoring by configuring a different built-in Similarity implementation, or by tweaking its parameters, subclassing it to override behavior. Some implementations also offer a modular API which you can extend by plugging in a different component (e.g. term frequency normalizer). Finally, you can extend the low level Similarity directly to implement a new retrieval model, or to use external scoring factors particular to your application. For example, a custom Similarity can access per-document values via FieldCache or NumericDocValues and integrate them into the score. See the Lucene.Net.Search.Similarities package documentation for information on the built-in available scoring models and extending or changing Similarity. Custom Queries — Expert Level Custom queries are an expert level task, so tread carefully and be prepared to share your code if you want help. With the warning out of the way, it is possible to change a lot more than just the Similarity when it comes to matching and scoring in Lucene. Lucene's search is a complex mechanism that is grounded by three main classes : 1. Query — The abstract object representation of the user's information need. 2. Weight — The internal interface representation of the user's Query, so that Query objects may be reused. This is global (across all segments of the index) and generally will require global statistics (such as docFreq for a given term across all segments). 3. Scorer — An abstract class containing common functionality for scoring. Provides both scoring and explanation capabilities. This is created per-segment. 4. BulkScorer — An abstract class that scores a range of documents. A default implementation simply iterates through the hits from Scorer , but some queries such as BooleanQuery have more efficient implementations. Details on each of these classes, and their children, can be found in the subsections below. The Query Class In some sense, the Query class is where it all begins. Without a Query, there would be nothing to score. Furthermore, the Query class is the catalyst for the other scoring classes as it is often responsible for creating them or coordinating the functionality between them. The Query class has several methods that are important for derived classes: 1. Searcher) — A Weight is the internal representation of the Query, so each Query implementation must provide an implementation of Weight. See the subsection on The Weight Interface below for details on implementing the Weight interface. 2. Reader) — Rewrites queries into primitive queries. Primitive queries are: TermQuery , BooleanQuery , and other queries that implement Searcher) The Weight Interface The Weight interface provides an internal representation of the Query so that it can be reused. Any IndexSearcher dependent state should be stored in the Weight implementation, not in the Query class. The interface defines five methods that must be implemented: 1. GetQuery — Pointer to the Query that this Weight represents. 2. GetValueForNormalization — A weight can return a floating point value to indicate its magnitude for query normalization. Typically a weight such as TermWeight that scores via a Similarity will just defer to the Similarity's implementation: SimWeight#getValueForNormalization . For example, with Lucene's classic vector-space formula , this is implemented as the sum of squared weights: ` 3. [TopLevelBoost)](xref:Lucene.Net.Search.Weight#methods) — Performs query normalization: * topLevelBoost : A query-boost factor from any wrapping queries that should be multiplied into every document's score. For example, a TermQuery that is wrapped within a BooleanQuery with a boost of 5 would receive this value at this time. This allows the TermQuery (the leaf node in this case) to compute this up-front a single time (e.g. by multiplying into the IDF), rather than for every document. * norm`: Passes in a a normalization factor which may allow for comparing scores between queries. Typically a weight such as TermWeight that scores via a Similarity will just defer to the Similarity's implementation: SimWeight#normalize . 4. AcceptDocs) — Construct a new Scorer for this Weight. See The Scorer Class below for help defining a Scorer. As the name implies, the Scorer is responsible for doing the actual scoring of documents given the Query. 5. AcceptDocs) — Construct a new BulkScorer for this Weight. See The BulkScorer Class below for help defining a BulkScorer. This is an optional method, and most queries do not implement it. 6. Doc) — Provide a means for explaining why a given document was scored the way it was. Typically a weight such as TermWeight that scores via a Similarity will make use of the Similarity's implementation: Freq) . The Scorer Class The Scorer abstract class provides common scoring functionality for all Scorer implementations and is the heart of the Lucene scoring process. The Scorer defines the following abstract (some of them are not yet abstract, but will be in future versions and should be considered as such now) methods which must be implemented (some of them inherited from DocIdSetIterator ): 1. NextDoc — Advances to the next document that matches this Query, returning true if and only if there is another document that matches. 2. DocID — Returns the id of the Document that contains the match. 3. Score — Return the score of the current document. This value can be determined in any appropriate way for an application. For instance, the TermScorer simply defers to the configured Similarity: Freq) . 4. Freq — Returns the number of matches for the current document. This value can be determined in any appropriate way for an application. For instance, the TermScorer simply defers to the term frequency from the inverted index: DocsEnum.freq . 5. Advance — Skip ahead in the document matches to the document whose id is greater than or equal to the passed in value. In many instances, advance can be implemented more efficiently than simply looping through all the matching documents until the target document is identified. 6. GetChildren — Returns any child subscorers underneath this scorer. This allows for users to navigate the scorer hierarchy and receive more fine-grained details on the scoring process. The BulkScorer Class The BulkScorer scores a range of documents. There is only one abstract method: 1. Score — Score all documents up to but not including the specified max document. Why would I want to add my own Query? In a nutshell, you want to add your own custom Query implementation when you think that Lucene's aren't appropriate for the task that you want to do. You might be doing some cutting edge research or you need more information back out of Lucene (similar to Doug adding SpanQuery functionality). Appendix: Search Algorithm This section is mostly notes on stepping through the Scoring process and serves as fertilizer for the earlier sections. In the typical search application, a Query is passed to the IndexSearcher , beginning the scoring process. Once inside the IndexSearcher, a Collector is used for the scoring and sorting of the search results. These important objects are involved in a search: 1. The Weight object of the Query. The Weight object is an internal representation of the Query that allows the Query to be reused by the IndexSearcher. 2. The IndexSearcher that initiated the call. 3. A Filter for limiting the result set. Note, the Filter may be null. 4. A Sort object for specifying how to sort the results if the standard score-based sort method is not desired. Assuming we are not sorting (since sorting doesn't affect the raw Lucene score), we call one of the search methods of the IndexSearcher, passing in the Weight object created by IndexSearcher.createNormalizedWeight , Filter and the number of results we want. This method returns a TopDocs object, which is an internal collection of search results. The IndexSearcher creates a TopScoreDocCollector and passes it along with the Weight, Filter to another expert search method (for more on the Collector mechanism, see IndexSearcher ). The TopScoreDocCollector uses a PriorityQueue to collect the top results for the search. If a Filter is being used, some initial setup is done to determine which docs to include. Otherwise, we ask the Weight for a Scorer for each IndexReader segment and proceed by calling BulkScorer.score . At last, we are actually going to score some documents. The score method takes in the Collector (most likely the TopScoreDocCollector or TopFieldCollector) and does its business.Of course, here is where things get involved. The Scorer that is returned by the Weight object depends on what type of Query was submitted. In most real world applications with multiple query terms, the Scorer is going to be a BooleanScorer2 created from BooleanWeight (see the section on custom queries for info on changing this). Assuming a BooleanScorer2, we first initialize the Coordinator, which is used to apply the coord() factor. We then get a internal Scorer based on the required, optional and prohibited parts of the query. Using this internal Scorer, the BooleanScorer2 then proceeds into a while loop based on the Scorer.nextDoc method. The nextDoc() method advances to the next document matching the query. This is an abstract method in the Scorer class and is thus overridden by all derived implementations. If you have a simple OR query your internal Scorer is most likely a DisjunctionSumScorer, which essentially combines the scorers from the sub scorers of the OR'd terms. Classes AutomatonQuery A Query that will match terms against a finite-state machine. This query will match documents that contain terms accepted by a given finite-state machine. The automaton can be constructed with the Lucene.Net.Util.Automaton API. Alternatively, it can be created from a regular expression with RegexpQuery or from the standard Lucene wildcard syntax with WildcardQuery . When the query is executed, it will create an equivalent DFA of the finite-state machine, and will enumerate the term dictionary in an intelligent way to reduce the number of comparisons. For example: the regular expression of [dl]og? will make approximately four comparisons: do, dog, lo, and log. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BitsFilteredDocIdSet This implementation supplies a filtered DocIdSet , that excludes all docids which are not in a IBits instance. This is especially useful in Filter to apply the Lucene.Net.Search.BitsFilteredDocIdSet.acceptDocs passed to GetDocIdSet(AtomicReaderContext, IBits) before returning the final DocIdSet . BooleanClause A clause in a BooleanQuery . BooleanQuery A Query that matches documents matching boolean combinations of other queries, e.g. TermQuery s, PhraseQuery s or other BooleanQuery s. Collection initializer note: To create and populate a BooleanQuery in a single statement, you can use the following example as a guide: var booleanQuery = new BooleanQuery() { { new WildcardQuery(new Term(\"field2\", \"foobar\")), Occur.SHOULD }, { new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }, Occur.SHOULD } }; // or var booleanQuery = new BooleanQuery() { new BooleanClause(new WildcardQuery(new Term(\"field2\", \"foobar\")), Occur.SHOULD), new BooleanClause(new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }, Occur.SHOULD) }; BooleanQuery.BooleanWeight Expert: the Weight for BooleanQuery , used to normalize, score and explain these queries. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BooleanQuery.TooManyClausesException Thrown when an attempt is made to add more than MaxClauseCount clauses. This typically happens if a PrefixQuery , FuzzyQuery , WildcardQuery , or TermRangeQuery is expanded to many terms during search. BoostAttribute Implementation class for IBoostAttribute . This is a Lucene.NET INTERNAL API, use at your own risk BulkScorer This class is used to score a range of documents at once, and is returned by GetBulkScorer(AtomicReaderContext, Boolean, IBits) . Only queries that have a more optimized means of scoring across a range of documents need to override this. Otherwise, a default implementation is wrapped around the Scorer returned by GetScorer(AtomicReaderContext, IBits) . CachingCollector Caches all docs, and optionally also scores, coming from a search, and is then able to replay them to another collector. You specify the max RAM this class may use. Once the collection is done, call IsCached . If this returns true , you can use Replay(ICollector) against a new collector. If it returns false , this means too much RAM was required and you must instead re-run the original search. NOTE : this class consumes 4 (or 8 bytes, if scoring is cached) per collected document. If the result set is large this can easily be a very substantial amount of RAM! NOTE : this class caches at least 128 documents before checking RAM limits. See the Lucene modules/grouping module for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CachingWrapperFilter Wraps another Filter 's result and caches it. The purpose is to allow filters to simply filter, and then wrap with this class to add caching. CollectionStatistics Contains statistics for a collection (field) This is a Lucene.NET EXPERIMENTAL API, use at your own risk CollectionTerminatedException Throw this exception in Collect(Int32) to prematurely terminate collection of the current leaf. Note: IndexSearcher swallows this exception and never re-throws it. As a consequence, you should not catch it when calling any overload of Search(Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) as it is unnecessary and might hide misuse of this exception. Collector LUCENENET specific class used to hold the NewAnonymous(Action<Scorer>, Action<Int32>, Action<AtomicReaderContext>, Func<Boolean>) static method. ComplexExplanation Expert: Describes the score computation for document and query, and can distinguish a match independent of a positive value. ConstantScoreAutoRewrite A rewrite method that tries to pick the best constant-score rewrite method based on term and document counts from the query. If both the number of terms and documents is small enough, then CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE is used. Otherwise, CONSTANT_SCORE_FILTER_REWRITE is used. ConstantScoreQuery A query that wraps another query or a filter and simply returns a constant score equal to the query boost for every document that matches the filter or query. For queries it therefore simply strips of all scores and returns a constant one. ConstantScoreQuery.ConstantBulkScorer We return this as our BulkScorer so that if the CSQ wraps a query with its own optimized top-level scorer (e.g. Lucene.Net.Search.BooleanScorer ) we can use that top-level scorer. ConstantScoreQuery.ConstantScorer ConstantScoreQuery.ConstantWeight ControlledRealTimeReopenThread<T> Utility class that runs a thread to manage periodic reopens of a ReferenceManager<G> , with methods to wait for a specific index changes to become visible. To use this class you must first wrap your IndexWriter with a TrackingIndexWriter and always use it to make changes to the index, saving the returned generation. Then, when a given search request needs to see a specific index change, call the WaitForGeneration(Int64) to wait for that change to be visible. Note that this will only scale well if most searches do not need to wait for a specific index generation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DisjunctionMaxQuery A query that generates the union of documents produced by its subqueries, and that scores each document with the maximum score for that document as produced by any subquery, plus a tie breaking increment for any additional matching subqueries. This is useful when searching for a word in multiple fields with different boost factors (so that the fields cannot be combined equivalently into a single search field). We want the primary score to be the one associated with the highest boost, not the sum of the field scores (as BooleanQuery would give). If the query is \"albino elephant\" this ensures that \"albino\" matching one field and \"elephant\" matching another gets a higher score than \"albino\" matching both fields. To get this result, use both BooleanQuery and DisjunctionMaxQuery : for each term a DisjunctionMaxQuery searches for it in each field, while the set of these DisjunctionMaxQuery 's is combined into a BooleanQuery . The tie breaker capability allows results that include the same term in multiple fields to be judged better than results that include this term in only the best of those multiple fields, without confusing this with the better case of two different terms in the multiple fields. Collection initializer note: To create and populate a DisjunctionMaxQuery in a single statement, you can use the following example as a guide: var disjunctionMaxQuery = new DisjunctionMaxQuery(0.1f) { new TermQuery(new Term(\"field1\", \"albino\")), new TermQuery(new Term(\"field2\", \"elephant\")) }; DisjunctionMaxQuery.DisjunctionMaxWeight Expert: the Weight for DisjunctionMaxQuery, used to normalize, score and explain these queries. NOTE: this API and implementation is subject to change suddenly in the next release. DocIdSet A DocIdSet contains a set of doc ids. Implementing classes must only implement GetIterator() to provide access to the set. DocIdSetIterator This abstract class defines methods to iterate over a set of non-decreasing doc ids. Note that this class assumes it iterates on doc Ids, and therefore NO_MORE_DOCS is set to in order to be used as a sentinel object. Implementations of this class are expected to consider as an invalid value. DocTermOrdsRangeFilter A range filter built on top of a cached multi-valued term field (in IFieldCache ). Like FieldCacheRangeFilter , this is just a specialized range query versus using a TermRangeQuery with DocTermOrdsRewriteMethod : it will only do two ordinal to term lookups. DocTermOrdsRewriteMethod Rewrites MultiTermQuery s into a filter, using DocTermOrds for term enumeration. This can be used to perform these queries against an unindexed docvalues field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Explanation Expert: Describes the score computation for document and query. FieldCache FieldCache.Bytes Field values as 8-bit signed bytes FieldCache.CacheEntry EXPERT: A unique Identifier/Description for each item in the IFieldCache . Can be useful for logging/debugging. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldCache.CreationPlaceholder Placeholder indicating creation of this cache is currently in-progress. FieldCache.Doubles Field values as 64-bit doubles FieldCache.Int16s Field values as 16-bit signed shorts NOTE: This was Shorts in Lucene FieldCache.Int32s Field values as 32-bit signed integers NOTE: This was Ints in Lucene FieldCache.Int64s Field values as 64-bit signed long integers NOTE: This was Longs in Lucene FieldCache.Singles Field values as 32-bit floats NOTE: This was Floats in Lucene FieldCacheDocIdSet Base class for DocIdSet to be used with IFieldCache . The implementation of its iterator is very stupid and slow if the implementation of the MatchDoc(Int32) method is not optimized, as iterators simply increment the document id until MatchDoc(Int32) returns true . Because of this MatchDoc(Int32) must be as fast as possible and in no case do any I/O. This is a Lucene.NET INTERNAL API, use at your own risk FieldCacheRangeFilter A range filter built on top of a cached single term field (in IFieldCache ). FieldCacheRangeFilter builds a single cache for the field the first time it is used. Each subsequent FieldCacheRangeFilter on the same field then reuses this cache, even if the range itself changes. this means that FieldCacheRangeFilter is much faster (sometimes more than 100x as fast) as building a TermRangeFilter , if using a NewStringRange(String, String, String, Boolean, Boolean) . However, if the range never changes it is slower (around 2x as slow) than building a CachingWrapperFilter on top of a single TermRangeFilter . For numeric data types, this filter may be significantly faster than NumericRangeFilter . Furthermore, it does not need the numeric values encoded by Int32Field , SingleField , Int64Field or DoubleField . But it has the problem that it only works with exact one value/document (see below). As with all IFieldCache based functionality, FieldCacheRangeFilter is only valid for fields which exact one term for each document (except for NewStringRange(String, String, String, Boolean, Boolean) where 0 terms are also allowed). Due to a restriction of IFieldCache , for numeric ranges all terms that do not have a numeric value, 0 is assumed. Thus it works on dates, prices and other single value fields but will not work on regular text fields. It is preferable to use a NOT_ANALYZED field to ensure that there is only a single term. This class does not have an constructor, use one of the static factory methods available, that create a correct instance for different data types supported by IFieldCache . FieldCacheRangeFilter<T> FieldCacheRewriteMethod Rewrites MultiTermQuery s into a filter, using the IFieldCache for term enumeration. This can be used to perform these queries against an unindexed docvalues field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldCacheTermsFilter A Filter that only accepts documents whose single term value in the specified field is contained in the provided set of allowed terms. This is the same functionality as TermsFilter (from queries/), except this filter requires that the field contains only a single term for all documents. Because of drastically different implementations, they also have different performance characteristics, as described below. The first invocation of this filter on a given field will be slower, since a SortedDocValues must be created. Subsequent invocations using the same field will re-use this cache. However, as with all functionality based on IFieldCache , persistent RAM is consumed to hold the cache, and is not freed until the IndexReader is disposed. In contrast, TermsFilter has no persistent RAM consumption. With each search, this filter translates the specified set of Terms into a private FixedBitSet keyed by term number per unique IndexReader (normally one reader per segment). Then, during matching, the term number for each docID is retrieved from the cache and then checked for inclusion using the FixedBitSet . Since all testing is done using RAM resident data structures, performance should be very fast, most likely fast enough to not require further caching of the DocIdSet for each possible combination of terms. However, because docIDs are simply scanned linearly, an index with a great many small documents may find this linear scan too costly. In contrast, TermsFilter builds up a FixedBitSet , keyed by docID, every time it's created, by enumerating through all matching docs using DocsEnum to seek and scan through each term's docID list. While there is no linear scan of all docIDs, besides the allocation of the underlying array in the FixedBitSet , this approach requires a number of \"disk seeks\" in proportion to the number of terms, which can be exceptionally costly when there are cache misses in the OS's IO cache. Generally, this filter will be slower on the first invocation for a given field, but subsequent invocations, even if you change the allowed set of Terms , should be faster than TermsFilter, especially as the number of Terms being matched increases. If you are matching only a very small number of terms, and those terms in turn match a very small number of documents, TermsFilter may perform faster. Which filter is best is very application dependent. FieldComparer FieldComparer.ByteComparer Parses field's values as (using GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean) and sorts by ascending value FieldComparer.DocComparer Sorts by ascending docID FieldComparer.DoubleComparer Parses field's values as (using GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) and sorts by ascending value FieldComparer.Int16Comparer Parses field's values as (using GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) and sorts by ascending value NOTE: This was ShortComparator in Lucene FieldComparer.Int32Comparer Parses field's values as (using GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and sorts by ascending value NOTE: This was IntComparator in Lucene FieldComparer.Int64Comparer Parses field's values as (using GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) and sorts by ascending value NOTE: This was LongComparator in Lucene FieldComparer.NumericComparer<T> Base FieldComparer class for numeric types FieldComparer.RelevanceComparer Sorts by descending relevance. NOTE: if you are sorting only by descending relevance and then secondarily by ascending docID, performance is faster using TopScoreDocCollector directly (which all overloads of Search(Query, Int32) use when no Sort is specified). FieldComparer.SingleComparer Parses field's values as (using GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) and sorts by ascending value NOTE: This was FloatComparator in Lucene FieldComparer.TermOrdValComparer Sorts by field's natural Term sort order, using ordinals. This is functionally equivalent to FieldComparer.TermValComparer , but it first resolves the string to their relative ordinal positions (using the index returned by GetTermsIndex(AtomicReader, String, Single) ), and does most comparisons using the ordinals. For medium to large results, this comparer will be much faster than FieldComparer.TermValComparer . For very small result sets it may be slower. FieldComparer.TermValComparer Sorts by field's natural Term sort order. All comparisons are done using CompareTo(BytesRef) , which is slow for medium to large result sets but possibly very fast for very small results sets. FieldComparer<T> Expert: a FieldComparer compares hits so as to determine their sort order when collecting the top results with TopFieldCollector . The concrete public FieldComparer classes here correspond to the SortField types. This API is designed to achieve high performance sorting, by exposing a tight interaction with FieldValueHitQueue as it visits hits. Whenever a hit is competitive, it's enrolled into a virtual slot, which is an ranging from 0 to numHits-1. The FieldComparer is made aware of segment transitions during searching in case any internal state it's tracking needs to be recomputed during these transitions. A comparer must define these functions: Compare(Int32, Int32) Compare a hit at 'slot a' with hit 'slot b'. SetBottom(Int32) This method is called by FieldValueHitQueue to notify the FieldComparer of the current weakest (\"bottom\") slot. Note that this slot may not hold the weakest value according to your comparer, in cases where your comparer is not the primary one (ie, is only used to break ties from the comparers before it). CompareBottom(Int32) Compare a new hit (docID) against the \"weakest\" (bottom) entry in the queue. SetTopValue(Object) This method is called by TopFieldCollector to notify the FieldComparer of the top most value, which is used by future calls to CompareTop(Int32) . CompareTop(Int32) Compare a new hit (docID) against the top value previously set by a call to SetTopValue(Object) . Copy(Int32, Int32) Installs a new hit into the priority queue. The FieldValueHitQueue calls this method when a new hit is competitive. SetNextReader(AtomicReaderContext) Invoked when the search is switching to the next segment. You may need to update internal state of the comparer, for example retrieving new values from the IFieldCache . Item[Int32] Return the sort value stored in the specified slot. This is only called at the end of the search, in order to populate Fields when returning the top results. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldComparerSource Provides a FieldComparer for custom field sorting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldDoc Expert: A ScoreDoc which also contains information about how to sort the referenced document. In addition to the document number and score, this object contains an array of values for the document from the field(s) used to sort. For example, if the sort criteria was to sort by fields \"a\", \"b\" then \"c\", the fields object array will have three elements, corresponding respectively to the term values for the document in fields \"a\", \"b\" and \"c\". The class of each element in the array will be either , or depending on the type of values in the terms of each field. Created: Feb 11, 2004 1:23:38 PM @since lucene 1.4 FieldValueFilter A Filter that accepts all documents that have one or more values in a given field. this Filter request IBits from the IFieldCache and build the bits if not present. FieldValueHitQueue FieldValueHitQueue.Entry FieldValueHitQueue<T> Expert: A hit queue for sorting by hits by terms in more than one field. Uses FieldCache.DEFAULT for maintaining internal term lookup tables. @lucene.experimental @since 2.9 Filter Abstract base class for restricting which documents may be returned during searching. FilteredDocIdSet Abstract decorator class for a DocIdSet implementation that provides on-demand filtering/validation mechanism on a given DocIdSet . Technically, this same functionality could be achieved with ChainedFilter (under queries/), however the benefit of this class is it never materializes the full bitset for the filter. Instead, the Match(Int32) method is invoked on-demand, per docID visited during searching. If you know few docIDs will be visited, and the logic behind Match(Int32) is relatively costly, this may be a better way to filter than ChainedFilter. FilteredDocIdSetIterator Abstract decorator class of a DocIdSetIterator implementation that provides on-demand filter/validation mechanism on an underlying DocIdSetIterator . See DocIdSetIterator . FilteredQuery A query that applies a filter to the results of another query. Note: the bits are retrieved from the filter each time this query is used in a search - use a CachingWrapperFilter to avoid regenerating the bits every time. @since 1.4 FilteredQuery.FilterStrategy Abstract class that defines how the filter ( DocIdSet ) applied during document collection. FilteredQuery.RandomAccessFilterStrategy A FilteredQuery.FilterStrategy that conditionally uses a random access filter if the given DocIdSet supports random access (returns a non-null value from Bits ) and UseRandomAccess(IBits, Int32) returns true . Otherwise this strategy falls back to a \"zig-zag join\" ( LEAP_FROG_FILTER_FIRST_STRATEGY ) strategy . FuzzyQuery Implements the fuzzy search query. The similarity measurement is based on the Damerau-Levenshtein (optimal string alignment) algorithm, though you can explicitly choose classic Levenshtein by passing false to the transpositions parameter. this query uses MultiTermQuery.TopTermsScoringBooleanQueryRewrite as default. So terms will be collected and scored according to their edit distance. Only the top terms are used for building the BooleanQuery . It is not recommended to change the rewrite mode for fuzzy queries. At most, this query will match terms up to MAXIMUM_SUPPORTED_DISTANCE edits. Higher distances (especially with transpositions enabled), are generally not useful and will match a significant amount of the term dictionary. If you really want this, consider using an n-gram indexing technique (such as the SpellChecker in the suggest module ) instead. NOTE: terms of length 1 or 2 will sometimes not match because of how the scaled distance between two terms is computed. For a term to match, the edit distance between the terms must be less than the minimum length term (either the input term, or the candidate term). For example, FuzzyQuery on term \"abcd\" with maxEdits=2 will not match an indexed term \"ab\", and FuzzyQuery on term \"a\" with maxEdits=2 will not match an indexed term \"abc\". FuzzyTermsEnum Subclass of TermsEnum for enumerating all terms that are similar to the specified filter term. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. FuzzyTermsEnum.LevenshteinAutomataAttribute Stores compiled automata as a list (indexed by edit distance) This is a Lucene.NET INTERNAL API, use at your own risk IndexSearcher Implements search over a single IndexReader . Applications usually need only call the inherited Search(Query, Int32) or Search(Query, Filter, Int32) methods. For performance reasons, if your index is unchanging, you should share a single IndexSearcher instance across multiple searches instead of creating a new one per-search. If your index has changed and you wish to see the changes reflected in searching, you should use OpenIfChanged(DirectoryReader) to obtain a new reader and then create a new IndexSearcher from that. Also, for low-latency turnaround it's best to use a near-real-time reader ( Open(IndexWriter, Boolean) ). Once you have a new IndexReader , it's relatively cheap to create a new IndexSearcher from it. NOTE : IndexSearcher instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexSearcher instance; use your own (non-Lucene) objects instead. IndexSearcher.LeafSlice A class holding a subset of the IndexSearcher s leaf contexts to be executed within a single thread. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LiveFieldValues<S, T> Tracks live field values across NRT reader reopens. This holds a map for all updated ids since the last reader reopen. Once the NRT reader is reopened, it prunes the map. This means you must reopen your NRT reader periodically otherwise the RAM consumption of this class will grow unbounded! NOTE: you must ensure the same id is never updated at the same time by two threads, because in this case you cannot in general know which thread \"won\". MatchAllDocsQuery A query that matches all documents. MaxNonCompetitiveBoostAttribute Implementation class for IMaxNonCompetitiveBoostAttribute . This is a Lucene.NET INTERNAL API, use at your own risk MultiCollector A ICollector which allows running a search with several ICollector s. It offers a static Wrap(ICollector[]) method which accepts a list of collectors and wraps them with MultiCollector , while filtering out the null ones. MultiPhraseQuery MultiPhraseQuery is a generalized version of PhraseQuery , with an added method Add(Term[]) . To use this class, to search for the phrase \"Microsoft app*\" first use Add(Term) on the term \"Microsoft\", then find all terms that have \"app\" as prefix using MultiFields.GetFields(IndexReader).GetTerms(string) , and use Add(Term[]) to add them to the query. Collection initializer note: To create and populate a MultiPhraseQuery in a single statement, you can use the following example as a guide: var multiPhraseQuery = new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) , Add(Term[]) , or Add(Term[], Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. MultiTermQuery An abstract Query that matches documents containing a subset of terms provided by a FilteredTermsEnum enumeration. This query cannot be used directly; you must subclass it and define GetTermsEnum(Terms, AttributeSource) to provide a FilteredTermsEnum that iterates through the terms to be matched. NOTE : if MultiTermRewriteMethod is either CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE or SCORING_BOOLEAN_QUERY_REWRITE , you may encounter a BooleanQuery.TooManyClausesException exception during searching, which happens when the number of terms to be searched exceeds MaxClauseCount . Setting MultiTermRewriteMethod to CONSTANT_SCORE_FILTER_REWRITE prevents this. The recommended rewrite method is CONSTANT_SCORE_AUTO_REWRITE_DEFAULT : it doesn't spend CPU computing unhelpful scores, and it tries to pick the most performant rewrite method given the query. If you need scoring (like , use MultiTermQuery.TopTermsScoringBooleanQueryRewrite which uses a priority queue to only collect competitive terms and not hit this limitation. Note that QueryParsers.Classic.QueryParser produces MultiTermQuery s using CONSTANT_SCORE_AUTO_REWRITE_DEFAULT by default. MultiTermQuery.RewriteMethod Abstract class that defines how the query is rewritten. MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , but the scores are only computed as the boost. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. MultiTermQuery.TopTermsScoringBooleanQueryRewrite A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. It is the default rewrite method for FuzzyQuery . MultiTermQueryWrapperFilter<Q> A wrapper for MultiTermQuery , that exposes its functionality as a Filter . MultiTermQueryWrapperFilter<Q> is not designed to be used by itself. Normally you subclass it to provide a Filter counterpart for a MultiTermQuery subclass. For example, TermRangeFilter and PrefixFilter extend MultiTermQueryWrapperFilter<Q> . This class also provides the functionality behind CONSTANT_SCORE_FILTER_REWRITE ; this is why it is not abstract. NGramPhraseQuery This is a PhraseQuery which is optimized for n-gram phrase query. For example, when you query \"ABCD\" on a 2-gram field, you may want to use NGramPhraseQuery rather than PhraseQuery , because NGramPhraseQuery will Rewrite(IndexReader) the query to \"AB/0 CD/2\", while PhraseQuery will query \"AB/0 BC/1 CD/2\" (where term/position). Collection initializer note: To create and populate a PhraseQuery in a single statement, you can use the following example as a guide: var phraseQuery = new NGramPhraseQuery(2) { new Term(\"field\", \"ABCD\"), new Term(\"field\", \"EFGH\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) or Add(Term, Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. NumericRangeFilter LUCENENET specific static class to provide access to static methods without referring to the NumericRangeFilter<T> 's generic closing type. NumericRangeFilter<T> A Filter that only accepts numeric values within a specified range. To use this, you must first index the numeric values using Int32Field , SingleField , Int64Field or DoubleField (expert: NumericTokenStream ). You create a new NumericRangeFilter with the static factory methods, eg: Filter f = NumericRangeFilter.NewFloatRange(\"weight\", 0.03f, 0.10f, true, true); Accepts all documents whose float valued \"weight\" field ranges from 0.03 to 0.10, inclusive. See NumericRangeQuery for details on how Lucene indexes and searches numeric valued fields. @since 2.9 NumericRangeQuery LUCENENET specific class to provide access to static factory metods of NumericRangeQuery<T> without referring to its genereic closing type. NumericRangeQuery<T> A Query that matches numeric values within a specified range. To use this, you must first index the numeric values using Int32Field , SingleField , Int64Field or DoubleField (expert: NumericTokenStream ). If your terms are instead textual, you should use TermRangeQuery . NumericRangeFilter is the filter equivalent of this query. You create a new NumericRangeQuery<T> with the static factory methods, eg: Query q = NumericRangeQuery.NewFloatRange(\"weight\", 0.03f, 0.10f, true, true); matches all documents whose valued \"weight\" field ranges from 0.03 to 0.10, inclusive. The performance of NumericRangeQuery<T> is much better than the corresponding TermRangeQuery because the number of terms that must be searched is usually far fewer, thanks to trie indexing, described below. You can optionally specify a Lucene.Net.Search.NumericRangeQuery`1.precisionStep when creating this query. This is necessary if you've changed this configuration from its default (4) during indexing. Lower values consume more disk space but speed up searching. Suitable values are between 1 and 8 . A good starting point to test is 4 , which is the default value for all Numeric* classes. See below for details. This query defaults to CONSTANT_SCORE_AUTO_REWRITE_DEFAULT . With precision steps of <=4, this query can be run with one of the BooleanQuery rewrite methods without changing BooleanQuery 's default max clause count. How it works See the publication about panFMP , where this algorithm was described (referred to as TrieRangeQuery ): Schindler, U, Diepenbroek, M , 2008. Generic XML-based Framework for Metadata Portals. Computers & Geosciences 34 (12), 1947-1955. doi:10.1016/j.cageo.2008.02.023 A quote from this paper: Because Apache Lucene is a full-text search engine and not a conventional database, it cannot handle numerical ranges (e.g., field value is inside user defined bounds, even dates are numerical values). We have developed an extension to Apache Lucene that stores the numerical values in a special string-encoded format with variable precision (all numerical values like s, s, s, and s are converted to lexicographic sortable string representations and stored with different precisions (for a more detailed description of how the values are stored, see NumericUtils ). A range is then divided recursively into multiple intervals for searching: The center of the range is searched only with the lowest possible precision in the trie , while the boundaries are matched more exactly. This reduces the number of terms dramatically. For the variant that stores long values in 8 different precisions (each reduced by 8 bits) that uses a lowest precision of 1 byte, the index contains only a maximum of 256 distinct values in the lowest precision. Overall, a range could consist of a theoretical maximum of 7*255*2 + 255 = 3825 distinct terms (when there is a term for every distinct value of an 8-byte-number in the index and the range covers almost all of them; a maximum of 255 distinct values is used because it would always be possible to reduce the full 256 values to one term with degraded precision). In practice, we have seen up to 300 terms in most cases (index with 500,000 metadata records and a uniform value distribution). Precision Step You can choose any Lucene.Net.Search.NumericRangeQuery`1.precisionStep when encoding values. Lower step values mean more precisions and so more terms in index (and index gets larger). The number of indexed terms per value is (those are generated by NumericTokenStream ): indexedTermsPerValue = ceil ( bitsPerValue / precisionStep ) As the lower precision terms are shared by many values, the additional terms only slightly grow the term dictionary (approx. 7% for precisionStep=4 ), but have a larger impact on the postings (the postings file will have more entries, as every document is linked to indexedTermsPerValue terms instead of one). The formula to estimate the growth of the term dictionary in comparison to one term per value: <!-- the formula in the alt attribute was transformed from latex to PNG with http://1.618034.com/latex.php (with 110 dpi): --> On the other hand, if the Lucene.Net.Search.NumericRangeQuery`1.precisionStep is smaller, the maximum number of terms to match reduces, which optimizes query speed. The formula to calculate the maximum number of terms that will be visited while executing the query is: <!-- the formula in the alt attribute was transformed from latex to PNG with http://1.618034.com/latex.php (with 110 dpi): --> For longs stored using a precision step of 4, maxQueryTerms = 15 15 2 + 15 = 465 , and for a precision step of 2, maxQueryTerms = 31 3 2 + 3 = 189 . But the faster search speed is reduced by more seeking in the term enum of the index. Because of this, the ideal Lucene.Net.Search.NumericRangeQuery`1.precisionStep value can only be found out by testing. Important: You can index with a lower precision step value and test search speed using a multiple of the original step value. Good values for Lucene.Net.Search.NumericRangeQuery`1.precisionStep are depending on usage and data type: The default for all data types is 4 , which is used, when no precisionStep is given. Ideal value in most cases for 64 bit data types (long, double) is 6 or 8 . Ideal value in most cases for 32 bit data types (int, float) is 4 . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use (see below). Steps >=64 for long/double and >=32 for int/float produces one token per value in the index and querying is as slow as a conventional TermRangeQuery . But it can be used to produce fields, that are solely used for sorting (in this case simply use as Lucene.Net.Search.NumericRangeQuery`1.precisionStep ). Using Int32Field , Int64Field , SingleField or DoubleField for sorting is ideal, because building the field cache is much faster than with text-only numbers. These fields have one term per value and therefore also work with term enumeration for building distinct lists (e.g. facets / preselected values to search for). Sorting is also possible with range query optimized fields using one of the above Lucene.Net.Search.NumericRangeQuery`1.precisionStep s. Comparisons of the different types of RangeQueries on an index with about 500,000 docs showed that TermRangeQuery in boolean rewrite mode (with raised BooleanQuery clause count) took about 30-40 secs to complete, TermRangeQuery in constant score filter rewrite mode took 5 secs and executing this class took <100ms to complete (on an Opteron64 machine, Java 1.5, 8 bit precision step). This query type was developed for a geographic portal, where the performance for e.g. bounding boxes or exact date/time stamps is important. @since 2.9 PhraseQuery A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by QueryParser for input like \"new york\" . This query may be combined with other terms or queries with a BooleanQuery . Collection initializer note: To create and populate a PhraseQuery in a single statement, you can use the following example as a guide: var phraseQuery = new PhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) or Add(Term, Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. PositiveScoresOnlyCollector A ICollector implementation which wraps another ICollector and makes sure only documents with scores > 0 are collected. PrefixFilter A Filter that restricts search results to values that have a matching prefix in a given field. PrefixQuery A Query that matches documents containing terms with a specified prefix. A PrefixQuery is built by QueryParser for input like app* . This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. PrefixTermsEnum Subclass of FilteredTermsEnum for enumerating all terms that match the specified prefix filter term. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Query The abstract base class for queries. Instantiable subclasses are: TermQuery BooleanQuery WildcardQuery PhraseQuery PrefixQuery MultiPhraseQuery FuzzyQuery RegexpQuery TermRangeQuery NumericRangeQuery ConstantScoreQuery DisjunctionMaxQuery MatchAllDocsQuery See also the family of Span Queries ( Lucene.Net.Search.Spans ) and additional queries available in the Queries module QueryRescorer A Rescorer that uses a provided Query to assign scores to the first-pass hits. This is a Lucene.NET EXPERIMENTAL API, use at your own risk QueryWrapperFilter Constrains search results to only match those which also match a provided query. This could be used, for example, with a NumericRangeQuery on a suitably formatted date field to implement date filtering. One could re-use a single CachingWrapperFilter(QueryWrapperFilter) that matches, e.g., only documents modified within the last week. This would only need to be reconstructed once per day. ReferenceContext<T> ReferenceContext<T> holds a reference instance and ensures it is properly de-referenced from its corresponding ReferenceManager<G> when Dispose() is called. This class is primarily intended to be used with a using block. LUCENENET specific ReferenceManager LUCENENET specific class used to provide static access to ReferenceManager.IRefreshListener without having to specifiy the generic closing type of ReferenceManager<G> . ReferenceManager<G> Utility class to safely share instances of a certain type across multiple threads, while periodically refreshing them. This class ensures each reference is closed only once all threads have finished using it. It is recommended to consult the documentation of ReferenceManager<G> implementations for their MaybeRefresh() semantics. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ReferenceManagerExtensions RegexpQuery A fast regular expression query based on the Lucene.Net.Util.Automaton package. Comparisons are fast The term dictionary is enumerated in an intelligent way, to avoid comparisons. See AutomatonQuery for more details. The supported syntax is documented in the RegExp class. Note this might be different than other regular expression implementations. For some alternatives with different syntax, look under the sandbox. Note this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow RegexpQuery s, a RegExp term should not start with the expression .* This is a Lucene.NET EXPERIMENTAL API, use at your own risk Rescorer Re-scores the topN results ( TopDocs ) from an original query. See QueryRescorer for an actual implementation. Typically, you run a low-cost first-pass query across the entire index, collecting the top few hundred hits perhaps, and then use this class to mix in a more costly second pass scoring. See Rescore(IndexSearcher, TopDocs, Query, Double, Int32) for a simple static method to call to rescore using a 2nd pass Query . This is a Lucene.NET EXPERIMENTAL API, use at your own risk ScoreCachingWrappingScorer A Scorer which wraps another scorer and caches the score of the current document. Successive calls to GetScore() will return the same result and will not invoke the wrapped Scorer's GetScore() method, unless the current document has changed. This class might be useful due to the changes done to the ICollector interface, in which the score is not computed for a document by default, only if the collector requests it. Some collectors may need to use the score in several places, however all they have in hand is a Scorer object, and might end up computing the score of a document more than once. ScoreDoc Holds one hit in TopDocs . Scorer Expert: Common scoring functionality for different types of queries. A Scorer iterates over documents matching a query in increasing order of doc Id. Document scores are computed using a given Similarity implementation. NOTE : The values , and are not valid scores. Certain collectors (eg TopScoreDocCollector ) will not properly collect hits with these scores. Scorer.ChildScorer A child Scorer and its relationship to its parent. The meaning of the relationship depends upon the parent query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ScoringRewrite<Q> Base rewrite method that translates each term into a query, and keeps the scores as computed by the query. @lucene.internal - Only public to be accessible by spans package. SearcherFactory Factory class used by SearcherManager to create new IndexSearcher s. The default implementation just creates an IndexSearcher with no custom behavior: public IndexSearcher NewSearcher(IndexReader r) { return new IndexSearcher(r); } You can pass your own factory instead if you want custom behavior, such as: Setting a custom scoring model: Similarity Parallel per-segment search: Return custom subclasses of IndexSearcher (for example that implement distributed scoring) Run queries to warm your IndexSearcher before it is used. Note: when using near-realtime search you may want to also set MergedSegmentWarmer to warm newly merged segments in the background, outside of the reopen path. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SearcherLifetimeManager Keeps track of current plus old IndexSearcher s, disposing the old ones once they have timed out. Use it like this: SearcherLifetimeManager mgr = new SearcherLifetimeManager(); Per search-request, if it's a \"new\" search request, then obtain the latest searcher you have (for example, by using SearcherManager ), and then record this searcher: // Record the current searcher, and save the returend // token into user's search results (eg as a hidden // HTML form field): long token = mgr.Record(searcher); When a follow-up search arrives, for example the user clicks next page, drills down/up, etc., take the token that you saved from the previous search and: // If possible, obtain the same searcher as the last // search: IndexSearcher searcher = mgr.Acquire(token); if (searcher != null) { // Searcher is still here try { // do searching... } finally { mgr.Release(searcher); // Do not use searcher after this! searcher = null; } } else { // Searcher was pruned -- notify user session timed // out, or, pull fresh searcher again } Finally, in a separate thread, ideally the same thread that's periodically reopening your searchers, you should periodically prune old searchers: mgr.Prune(new PruneByAge(600.0)); NOTE : keeping many searchers around means you'll use more resources (open files, RAM) than a single searcher. However, as long as you are using OpenIfChanged(DirectoryReader) , the searchers will usually share almost all segments and the added resource usage is contained. When a large merge has completed, and you reopen, because that is a large change, the new searcher will use higher additional RAM than other searchers; but large merges don't complete very often and it's unlikely you'll hit two of them in your expiration window. Still you should budget plenty of heap in the runtime to have a good safety margin. SearcherLifetimeManager.PruneByAge Simple pruner that drops any searcher older by more than the specified seconds, than the newest searcher. SearcherManager Utility class to safely share IndexSearcher instances across multiple threads, while periodically reopening. This class ensures each searcher is disposed only once all threads have finished using it. Use Acquire() to obtain the current searcher, and Release(G) to release it, like this: IndexSearcher s = manager.Acquire(); try { // Do searching, doc retrieval, etc. with s } finally { manager.Release(s); // Do not use s after this! s = null; } In addition you should periodically call MaybeRefresh() . While it's possible to call this just before running each query, this is discouraged since it penalizes the unlucky queries that do the reopen. It's better to use a separate background thread, that periodically calls MaybeRefresh() . Finally, be sure to call Dispose() once you are done. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Sort Encapsulates sort criteria for returned hits. The fields used to determine sort order must be carefully chosen. Document s must contain a single term in such a field, and the value of the term should indicate the document's relative position in a given sort order. The field must be indexed, but should not be tokenized, and does not need to be stored (unless you happen to want it back with the rest of your document data). In other words: document.Add(new Field(\"byNumber\", x.ToString(CultureInfo.InvariantCulture), Field.Store.NO, Field.Index.NOT_ANALYZED)); Valid Types of Values There are four possible kinds of term values which may be put into sorting fields: s, s, s, or s. Unless SortField objects are specified, the type of value in the field is determined by parsing the first term in the field. term values should contain only digits and an optional preceding negative sign. Values must be base 10 and in the range and inclusive. Documents which should appear first in the sort should have low value integers, later documents high values (i.e. the documents should be numbered 1..n where 1 is the first and n the last). term values should contain only digits and an optional preceding negative sign. Values must be base 10 and in the range and inclusive. Documents which should appear first in the sort should have low value integers, later documents high values. term values should conform to values accepted by (except that NaN and Infinity are not supported). Document s which should appear first in the sort should have low values, later documents high values. term values can contain any valid , but should not be tokenized. The values are sorted according to their comparable natural order ( ). Note that using this type of term value has higher memory requirements than the other two types. Object Reuse One of these objects can be used multiple times and the sort order changed between usages. This class is thread safe. Memory Usage Sorting uses of caches of term values maintained by the internal HitQueue(s). The cache is static and contains an or array of length IndexReader.MaxDoc for each field name for which a sort is performed. In other words, the size of the cache in bytes is: 4 * IndexReader.MaxDoc * (# of different fields actually used to sort) For fields, the cache is larger: in addition to the above array, the value of every term in the field is kept in memory. If there are many unique terms in the field, this could be quite large. Note that the size of the cache is not affected by how many fields are in the index and might be used to sort - only by the ones actually used to sort a result set. Created: Feb 12, 2004 10:53:57 AM @since lucene 1.4 SortField Stores information about how to sort documents by terms in an individual field. Fields must be indexed in order to sort by them. Created: Feb 11, 2004 1:25:29 PM @since lucene 1.4 SortRescorer A Rescorer that re-sorts according to a provided Sort. TermCollectingRewrite<Q> TermQuery A Query that matches documents containing a term. this may be combined with other terms with a BooleanQuery . TermRangeFilter A Filter that restricts search results to a range of term values in a given field. This filter matches the documents looking for terms that fall into the supplied range according to , It is not intended for numerical ranges; use NumericRangeFilter instead. If you construct a large number of range filters with different ranges but on the same field, FieldCacheRangeFilter may have significantly better performance. @since 2.9 TermRangeQuery A Query that matches documents within an range of terms. This query matches the documents looking for terms that fall into the supplied range according to . It is not intended for numerical ranges; use NumericRangeQuery instead. This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. @since 2.9 TermRangeTermsEnum Subclass of FilteredTermsEnum for enumerating all terms that match the specified range parameters. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. TermStatistics Contains statistics for a specific term This is a Lucene.NET EXPERIMENTAL API, use at your own risk TimeLimitingCollector The TimeLimitingCollector is used to timeout search requests that take longer than the maximum allowed search time limit. After this time is exceeded, the search thread is stopped by throwing a TimeLimitingCollector.TimeExceededException . TimeLimitingCollector.TimeExceededException Thrown when elapsed search time exceeds allowed search time. TimeLimitingCollector.TimerThread Thread used to timeout search requests. Can be stopped completely with StopTimer() This is a Lucene.NET EXPERIMENTAL API, use at your own risk TopDocs Represents hits returned by Search(Query, Filter, Int32) and Search(Query, Int32) . TopDocsCollector<T> A base class for all collectors that return a TopDocs output. This collector allows easy extension by providing a single constructor which accepts a PriorityQueue<T> as well as protected members for that priority queue and a counter of the number of total hits. Extending classes can override any of the methods to provide their own implementation, as well as avoid the use of the priority queue entirely by passing null to TopDocsCollector(PriorityQueue<T>) . In that case however, you might want to consider overriding all methods, in order to avoid a . TopFieldCollector A ICollector that sorts by SortField using FieldComparer s. See the Create(Sort, Int32, Boolean, Boolean, Boolean, Boolean) method for instantiating a TopFieldCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TopFieldDocs Represents hits returned by Search(Query, Filter, Int32, Sort) . TopScoreDocCollector A ICollector implementation that collects the top-scoring hits, returning them as a TopDocs . this is used by IndexSearcher to implement TopDocs -based search. Hits are sorted by score descending and then (when the scores are tied) docID ascending. When you create an instance of this collector you should know in advance whether documents are going to be collected in doc Id order or not. NOTE : The values and are not valid scores. This collector will not properly collect hits with such scores. TopTermsRewrite<Q> Base rewrite method for collecting only the top terms via a priority queue. @lucene.internal - Only public to be accessible by spans package. TotalHitCountCollector Just counts the total number of hits. Weight Expert: Calculate query weights and build query scorers. The purpose of Weight is to ensure searching does not modify a Query , so that a Query instance can be reused. IndexSearcher dependent state of the query should reside in the Weight . AtomicReader dependent state should reside in the Scorer . Since Weight creates Scorer instances for a given AtomicReaderContext ( GetScorer(AtomicReaderContext, IBits) ) callers must maintain the relationship between the searcher's top-level IndexReaderContext and the context used to create a Scorer . A Weight is used in the following way: A Weight is constructed by a top-level query, given a IndexSearcher ( CreateWeight(IndexSearcher) ). The GetValueForNormalization() method is called on the Weight to compute the query normalization factor QueryNorm(Single) of the query clauses contained in the query. The query normalization factor is passed to Normalize(Single, Single) . At this point the weighting is complete. A Scorer is constructed by GetScorer(AtomicReaderContext, IBits) . @since 2.9 WildcardQuery Implements the wildcard search query. Supported wildcards are , which matches any character sequence (including the empty one), and ? , which matches any single character. '&apos; is the escape character. Note this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow WildcardQueries, a Wildcard term should not start with the wildcard This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. Interfaces FieldCache.IByteParser Interface to parse bytes from document fields. FieldCache.IDoubleParser Interface to parse s from document fields. FieldCache.IInt16Parser Interface to parse s from document fields. NOTE: This was ShortParser in Lucene FieldCache.IInt32Parser Interface to parse s from document fields. NOTE: This was IntParser in Lucene FieldCache.IInt64Parser Interface to parse from document fields. NOTE: This was LongParser in Lucene FieldCache.IParser Marker interface as super-interface to all parsers. It is used to specify a custom parser to SortField(String, FieldCache.IParser) . FieldCache.ISingleParser Interface to parse s from document fields. NOTE: This was FloatParser in Lucene FuzzyTermsEnum.ILevenshteinAutomataAttribute Reuses compiled automata across different segments, because they are independent of the index This is a Lucene.NET INTERNAL API, use at your own risk IBoostAttribute Add this IAttribute to a TermsEnum returned by GetTermsEnum(Terms, AttributeSource) and update the boost on each returned term. This enables to control the boost factor for each matching term in SCORING_BOOLEAN_QUERY_REWRITE or TopTermsRewrite<Q> mode. FuzzyQuery is using this to take the edit distance into account. Please note: this attribute is intended to be added only by the TermsEnum to itself in its constructor and consumed by the MultiTermQuery.RewriteMethod . This is a Lucene.NET INTERNAL API, use at your own risk ICollector Expert: Collectors are primarily meant to be used to gather raw results from a search, and implement sorting or custom result filtering, collation, etc. Lucene's core collectors are derived from Collector. Likely your application can use one of these classes, or subclass TopDocsCollector<T> , instead of implementing ICollector directly: TopDocsCollector<T> is an abstract base class that assumes you will retrieve the top N docs, according to some criteria, after collection is done. TopScoreDocCollector is a concrete subclass TopDocsCollector<T> and sorts according to score + docID. This is used internally by the IndexSearcher search methods that do not take an explicit Sort . It is likely the most frequently used collector. TopFieldCollector subclasses TopDocsCollector<T> and sorts according to a specified Sort object (sort by field). This is used internally by the IndexSearcher search methods that take an explicit Sort . TimeLimitingCollector , which wraps any other Collector and aborts the search if it's taken too much time. PositiveScoresOnlyCollector wraps any other ICollector and prevents collection of hits whose score is <= 0.0 ICollector decouples the score from the collected doc: the score computation is skipped entirely if it's not needed. Collectors that do need the score should implement the SetScorer(Scorer) method, to hold onto the passed Scorer instance, and call GetScore() within the collect method to compute the current hit's score. If your collector may request the score for a single hit multiple times, you should use ScoreCachingWrappingScorer . NOTE: The doc that is passed to the collect method is relative to the current reader. If your collector needs to resolve this to the docID space of the Multi*Reader, you must re-base it by recording the docBase from the most recent SetNextReader(AtomicReaderContext) call. Here's a simple example showing how to collect docIDs into an OpenBitSet : private class MySearchCollector : ICollector { private readonly OpenBitSet bits; private int docBase; public MySearchCollector(OpenBitSet bits) { if (bits == null) throw new ArgumentNullException(\"bits\"); this.bits = bits; } // ignore scorer public void SetScorer(Scorer scorer) { } // accept docs out of order (for a BitSet it doesn't matter) public bool AcceptDocsOutOfOrder { get { return true; } } public void Collect(int doc) { bits.Set(doc + docBase); } public void SetNextReader(AtomicReaderContext context) { this.docBase = context.DocBase; } } IndexSearcher searcher = new IndexSearcher(indexReader); OpenBitSet bits = new OpenBitSet(indexReader.MaxDoc); searcher.Search(query, new MySearchCollector(bits)); Not all collectors will need to rebase the docID. For example, a collector that simply counts the total number of hits would skip it. NOTE: Prior to 2.9, Lucene silently filtered out hits with score <= 0. As of 2.9, the core ICollector s no longer do that. It's very unusual to have such hits (a negative query boost, or function query returning negative custom scores, could cause it to happen). If you need that behavior, use PositiveScoresOnlyCollector . @lucene.experimental @since 2.9 IFieldCache Expert: Maintains caches of term values. Created: May 19, 2004 11:13:14 AM @lucene.internal @since lucene 1.4 IMaxNonCompetitiveBoostAttribute Add this IAttribute to a fresh AttributeSource before calling GetTermsEnum(Terms, AttributeSource) . FuzzyQuery is using this to control its internal behaviour to only return competitive terms. Please note: this attribute is intended to be added by the MultiTermQuery.RewriteMethod to an empty AttributeSource that is shared for all segments during query rewrite. This attribute source is passed to all segment enums on GetTermsEnum(Terms, AttributeSource) . TopTermsRewrite<Q> uses this attribute to inform all enums about the current boost, that is not competitive. This is a Lucene.NET INTERNAL API, use at your own risk ITopDocsCollector LUCENENET specific interface used to reference TopDocsCollector<T> without referencing its generic type. ReferenceManager.IRefreshListener Use to receive notification when a refresh has finished. See AddListener(ReferenceManager.IRefreshListener) . SearcherLifetimeManager.IPruner See Prune(SearcherLifetimeManager.IPruner) . Enums Occur Specifies how clauses are to occur in matching documents. SortFieldType Specifies the type of the terms to be sorted, or special types such as CUSTOM"
  },
  "api/Lucene.Net/Lucene.Net.Search.IBoostAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IBoostAttribute.html",
    "title": "Interface IBoostAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IBoostAttribute Add this IAttribute to a TermsEnum returned by GetTermsEnum(Terms, AttributeSource) and update the boost on each returned term. This enables to control the boost factor for each matching term in SCORING_BOOLEAN_QUERY_REWRITE or TopTermsRewrite<Q> mode. FuzzyQuery is using this to take the edit distance into account. Please note: this attribute is intended to be added only by the TermsEnum to itself in its constructor and consumed by the MultiTermQuery.RewriteMethod . This is a Lucene.NET INTERNAL API, use at your own risk Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IBoostAttribute : IAttribute Properties | Improve this Doc View Source Boost Gets or Sets the boost in this attribute. Default is 1.0f . Declaration float Boost { get; set; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Search.ICollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ICollector.html",
    "title": "Interface ICollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICollector Expert: Collectors are primarily meant to be used to gather raw results from a search, and implement sorting or custom result filtering, collation, etc. Lucene's core collectors are derived from Collector. Likely your application can use one of these classes, or subclass TopDocsCollector<T> , instead of implementing ICollector directly: TopDocsCollector<T> is an abstract base class that assumes you will retrieve the top N docs, according to some criteria, after collection is done. TopScoreDocCollector is a concrete subclass TopDocsCollector<T> and sorts according to score + docID. This is used internally by the IndexSearcher search methods that do not take an explicit Sort . It is likely the most frequently used collector. TopFieldCollector subclasses TopDocsCollector<T> and sorts according to a specified Sort object (sort by field). This is used internally by the IndexSearcher search methods that take an explicit Sort . TimeLimitingCollector , which wraps any other Collector and aborts the search if it's taken too much time. PositiveScoresOnlyCollector wraps any other ICollector and prevents collection of hits whose score is <= 0.0 ICollector decouples the score from the collected doc: the score computation is skipped entirely if it's not needed. Collectors that do need the score should implement the SetScorer(Scorer) method, to hold onto the passed Scorer instance, and call GetScore() within the collect method to compute the current hit's score. If your collector may request the score for a single hit multiple times, you should use ScoreCachingWrappingScorer . NOTE: The doc that is passed to the collect method is relative to the current reader. If your collector needs to resolve this to the docID space of the Multi*Reader, you must re-base it by recording the docBase from the most recent SetNextReader(AtomicReaderContext) call. Here's a simple example showing how to collect docIDs into an OpenBitSet : private class MySearchCollector : ICollector { private readonly OpenBitSet bits; private int docBase; public MySearchCollector(OpenBitSet bits) { if (bits == null) throw new ArgumentNullException(\"bits\"); this.bits = bits; } // ignore scorer public void SetScorer(Scorer scorer) { } // accept docs out of order (for a BitSet it doesn't matter) public bool AcceptDocsOutOfOrder { get { return true; } } public void Collect(int doc) { bits.Set(doc + docBase); } public void SetNextReader(AtomicReaderContext context) { this.docBase = context.DocBase; } } IndexSearcher searcher = new IndexSearcher(indexReader); OpenBitSet bits = new OpenBitSet(indexReader.MaxDoc); searcher.Search(query, new MySearchCollector(bits)); Not all collectors will need to rebase the docID. For example, a collector that simply counts the total number of hits would skip it. NOTE: Prior to 2.9, Lucene silently filtered out hits with score <= 0. As of 2.9, the core ICollector s no longer do that. It's very unusual to have such hits (a negative query boost, or function query returning negative custom scores, could cause it to happen). If you need that behavior, use PositiveScoresOnlyCollector . @lucene.experimental @since 2.9 Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Return true if this collector does not require the matching docIDs to be delivered in int sort order (smallest to largest) to Collect(Int32) . Most Lucene Query implementations will visit matching docIDs in order. However, some queries (currently limited to certain cases of BooleanQuery ) can achieve faster searching if the ICollector allows them to deliver the docIDs out of order. Many collectors don't mind getting docIDs out of order, so it's important to return true here. Declaration bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Called before successive calls to Collect(Int32) . Implementations that need the score of the current document (passed-in to Collect(Int32) ), should save the passed-in Scorer and call scorer.GetScore() when needed. Declaration void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer"
  },
  "api/Lucene.Net/Lucene.Net.Search.IFieldCache.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IFieldCache.html",
    "title": "Interface IFieldCache | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFieldCache Expert: Maintains caches of term values. Created: May 19, 2004 11:13:14 AM @lucene.internal @since lucene 1.4 Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IFieldCache Properties | Improve this Doc View Source InfoStream If non-null, Lucene.Net.Search.FieldCacheImpl will warn whenever entries are created that are not sane according to FieldCacheSanityChecker . Declaration TextWriter InfoStream { get; set; } Property Value Type Description TextWriter Methods | Improve this Doc View Source GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as bytes and returns an array of size reader.MaxDoc of the value each document has in the given field. Declaration FieldCache.Bytes GetBytes(AtomicReader reader, string field, FieldCache.IByteParser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the s. FieldCache.IByteParser parser Computes for string values. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Bytes The values in the given field for each document. | Improve this Doc View Source GetBytes(AtomicReader, String, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as a single and returns an array of size reader.MaxDoc of the value each document has in the given field. Declaration FieldCache.Bytes GetBytes(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the single values. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Bytes The values in the given field for each document. | Improve this Doc View Source GetCacheEntries() EXPERT: Generates an array of FieldCache.CacheEntry objects representing all items currently in the IFieldCache . NOTE: These FieldCache.CacheEntry objects maintain a strong reference to the Cached Values. Maintaining references to a FieldCache.CacheEntry the AtomicReader associated with it has garbage collected will prevent the Value itself from being garbage collected when the Cache drops the . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration FieldCache.CacheEntry[] GetCacheEntries() Returns Type Description FieldCache.CacheEntry [] | Improve this Doc View Source GetDocsWithField(AtomicReader, String) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field and returns a bit set at the size of reader.MaxDoc , with turned on bits for each docid that does have a value for this field. Declaration IBits GetDocsWithField(AtomicReader reader, string field) Parameters Type Name Description AtomicReader reader System.String field Returns Type Description IBits | Improve this Doc View Source GetDocTermOrds(AtomicReader, String) Checks the internal cache for an appropriate entry, and if none is found, reads the term values in field and returns a SortedSetDocValues instance, providing a method to retrieve the terms (as ords) per document. Declaration SortedSetDocValues GetDocTermOrds(AtomicReader reader, string field) Parameters Type Name Description AtomicReader reader Used to build a SortedSetDocValues instance System.String field Which field contains the strings. Returns Type Description SortedSetDocValues a SortedSetDocValues instance | Improve this Doc View Source GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) Returns a FieldCache.Doubles over the values found in documents in the given field. If the field was indexed as NumericDocValuesField , it simply uses GetNumericDocValues(String) to read the values. Otherwise, it checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as s and returns an array of size reader.MaxDoc of the value each document has in the given field. Declaration FieldCache.Doubles GetDoubles(AtomicReader reader, string field, FieldCache.IDoubleParser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the s. FieldCache.IDoubleParser parser Computes for string values. May be null if the requested field was indexed as NumericDocValuesField or DoubleField . System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Doubles The values in the given field for each document. | Improve this Doc View Source GetDoubles(AtomicReader, String, Boolean) Returns a FieldCache.Doubles over the values found in documents in the given field. Declaration FieldCache.Doubles GetDoubles(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField Returns Type Description FieldCache.Doubles See Also GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) | Improve this Doc View Source GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as shorts and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getShorts() in Lucene Declaration FieldCache.Int16s GetInt16s(AtomicReader reader, string field, FieldCache.IInt16Parser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the s. FieldCache.IInt16Parser parser Computes for string values. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Int16s The values in the given field for each document. | Improve this Doc View Source GetInt16s(AtomicReader, String, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as s and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getShorts() in Lucene Declaration FieldCache.Int16s GetInt16s(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the s. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Int16s The values in the given field for each document. | Improve this Doc View Source GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) Returns an FieldCache.Int32s over the values found in documents in the given field. If the field was indexed as NumericDocValuesField , it simply uses GetNumericDocValues(String) to read the values. Otherwise, it checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as s and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getInts() in Lucene Declaration FieldCache.Int32s GetInt32s(AtomicReader reader, string field, FieldCache.IInt32Parser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the s. FieldCache.IInt32Parser parser Computes for string values. May be null if the requested field was indexed as NumericDocValuesField or Int32Field . System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Int32s The values in the given field for each document. | Improve this Doc View Source GetInt32s(AtomicReader, String, Boolean) Returns an FieldCache.Int32s over the values found in documents in the given field. NOTE: this was getInts() in Lucene Declaration FieldCache.Int32s GetInt32s(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField Returns Type Description FieldCache.Int32s See Also GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) | Improve this Doc View Source GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) Returns a FieldCache.Int64s over the values found in documents in the given field. If the field was indexed as NumericDocValuesField , it simply uses GetNumericDocValues(String) to read the values. Otherwise, it checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as s and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getLongs() in Lucene Declaration FieldCache.Int64s GetInt64s(AtomicReader reader, string field, FieldCache.IInt64Parser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the s. FieldCache.IInt64Parser parser Computes for string values. May be null if the requested field was indexed as NumericDocValuesField or Int64Field . System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Int64s The values in the given field for each document. | Improve this Doc View Source GetInt64s(AtomicReader, String, Boolean) Returns a FieldCache.Int64s over the values found in documents in the given field. NOTE: this was getLongs() in Lucene Declaration FieldCache.Int64s GetInt64s(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField Returns Type Description FieldCache.Int64s See Also GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) | Improve this Doc View Source GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) Returns a FieldCache.Singles over the values found in documents in the given field. If the field was indexed as NumericDocValuesField , it simply uses GetNumericDocValues(String) to read the values. Otherwise, it checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as s and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getFloats() in Lucene Declaration FieldCache.Singles GetSingles(AtomicReader reader, string field, FieldCache.ISingleParser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the s. FieldCache.ISingleParser parser Computes for string values. May be null if the requested field was indexed as NumericDocValuesField or SingleField . System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Singles The values in the given field for each document. | Improve this Doc View Source GetSingles(AtomicReader, String, Boolean) Returns a FieldCache.Singles over the values found in documents in the given field. NOTE: this was getFloats() in Lucene Declaration FieldCache.Singles GetSingles(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField Returns Type Description FieldCache.Singles See Also GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) | Improve this Doc View Source GetTerms(AtomicReader, String, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the term values in field and returns a BinaryDocValues instance, providing a method to retrieve the term (as a BytesRef ) per document. Declaration BinaryDocValues GetTerms(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the strings. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description BinaryDocValues The values in the given field for each document. | Improve this Doc View Source GetTerms(AtomicReader, String, Boolean, Single) Expert: just like GetTerms(AtomicReader, String, Boolean) , but you can specify whether more RAM should be consumed in exchange for faster lookups (default is \"true\"). Note that the first call for a given reader and field \"wins\", subsequent calls will share the same cache entry. Declaration BinaryDocValues GetTerms(AtomicReader reader, string field, bool setDocsWithField, float acceptableOverheadRatio) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField System.Single acceptableOverheadRatio Returns Type Description BinaryDocValues | Improve this Doc View Source GetTermsIndex(AtomicReader, String) Checks the internal cache for an appropriate entry, and if none is found, reads the term values in field and returns a SortedDocValues instance, providing methods to retrieve sort ordinals and terms (as a BytesRef ) per document. Declaration SortedDocValues GetTermsIndex(AtomicReader reader, string field) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the strings. Returns Type Description SortedDocValues The values in the given field for each document. | Improve this Doc View Source GetTermsIndex(AtomicReader, String, Single) Expert: just like GetTermsIndex(AtomicReader, String) , but you can specify whether more RAM should be consumed in exchange for faster lookups (default is \"true\"). Note that the first call for a given reader and field \"wins\", subsequent calls will share the same cache entry. Declaration SortedDocValues GetTermsIndex(AtomicReader reader, string field, float acceptableOverheadRatio) Parameters Type Name Description AtomicReader reader System.String field System.Single acceptableOverheadRatio Returns Type Description SortedDocValues | Improve this Doc View Source PurgeAllCaches() EXPERT: Instructs the FieldCache to forcibly expunge all entries from the underlying caches. This is intended only to be used for test methods as a way to ensure a known base state of the Cache (with out needing to rely on GC to free s). It should not be relied on for \"Cache maintenance\" in general application code. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration void PurgeAllCaches() | Improve this Doc View Source PurgeByCacheKey(Object) Expert: drops all cache entries associated with this reader CoreCacheKey . NOTE: this cache key must precisely match the reader that the cache entry is keyed on. If you pass a top-level reader, it usually will have no effect as Lucene now caches at the segment reader level. Declaration void PurgeByCacheKey(object coreCacheKey) Parameters Type Name Description System.Object coreCacheKey See Also FieldCacheSanityChecker"
  },
  "api/Lucene.Net/Lucene.Net.Search.IMaxNonCompetitiveBoostAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IMaxNonCompetitiveBoostAttribute.html",
    "title": "Interface IMaxNonCompetitiveBoostAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IMaxNonCompetitiveBoostAttribute Add this IAttribute to a fresh AttributeSource before calling GetTermsEnum(Terms, AttributeSource) . FuzzyQuery is using this to control its internal behaviour to only return competitive terms. Please note: this attribute is intended to be added by the MultiTermQuery.RewriteMethod to an empty AttributeSource that is shared for all segments during query rewrite. This attribute source is passed to all segment enums on GetTermsEnum(Terms, AttributeSource) . TopTermsRewrite<Q> uses this attribute to inform all enums about the current boost, that is not competitive. This is a Lucene.NET INTERNAL API, use at your own risk Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IMaxNonCompetitiveBoostAttribute : IAttribute Properties | Improve this Doc View Source CompetitiveTerm This is the term or null of the term that triggered the boost change. Declaration BytesRef CompetitiveTerm { get; set; } Property Value Type Description BytesRef | Improve this Doc View Source MaxNonCompetitiveBoost This is the maximum boost that would not be competitive. Declaration float MaxNonCompetitiveBoost { get; set; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Search.IndexSearcher.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IndexSearcher.html",
    "title": "Class IndexSearcher | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexSearcher Implements search over a single IndexReader . Applications usually need only call the inherited Search(Query, Int32) or Search(Query, Filter, Int32) methods. For performance reasons, if your index is unchanging, you should share a single IndexSearcher instance across multiple searches instead of creating a new one per-search. If your index has changed and you wish to see the changes reflected in searching, you should use OpenIfChanged(DirectoryReader) to obtain a new reader and then create a new IndexSearcher from that. Also, for low-latency turnaround it's best to use a near-real-time reader ( Open(IndexWriter, Boolean) ). Once you have a new IndexReader , it's relatively cheap to create a new IndexSearcher from it. NOTE : IndexSearcher instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexSearcher instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexSearcher Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class IndexSearcher : object Constructors | Improve this Doc View Source IndexSearcher(IndexReader) Creates a searcher searching the provided index. Declaration public IndexSearcher(IndexReader r) Parameters Type Name Description IndexReader r | Improve this Doc View Source IndexSearcher(IndexReader, TaskScheduler) Runs searches for each segment separately, using the provided . IndexSearcher will not shutdown/awaitTermination this on dispose; you must do so, eventually, on your own. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public IndexSearcher(IndexReader r, TaskScheduler executor) Parameters Type Name Description IndexReader r TaskScheduler executor | Improve this Doc View Source IndexSearcher(IndexReaderContext) Creates a searcher searching the provided top-level IndexReaderContext . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public IndexSearcher(IndexReaderContext context) Parameters Type Name Description IndexReaderContext context See Also IndexReaderContext Context | Improve this Doc View Source IndexSearcher(IndexReaderContext, TaskScheduler) Creates a searcher searching the provided top-level IndexReaderContext . Given a non- null this method runs searches for each segment separately, using the provided . IndexSearcher will not shutdown/awaitTermination this on close; you must do so, eventually, on your own. @lucene.experimental Declaration public IndexSearcher(IndexReaderContext context, TaskScheduler executor) Parameters Type Name Description IndexReaderContext context TaskScheduler executor See Also IndexReaderContext Context Fields | Improve this Doc View Source m_leafContexts Declaration protected readonly IList<AtomicReaderContext> m_leafContexts Field Value Type Description IList < AtomicReaderContext > | Improve this Doc View Source m_leafSlices Used with executor - each slice holds a set of leafs executed within one thread Declaration protected readonly IndexSearcher.LeafSlice[] m_leafSlices Field Value Type Description IndexSearcher.LeafSlice [] | Improve this Doc View Source m_readerContext Declaration protected readonly IndexReaderContext m_readerContext Field Value Type Description IndexReaderContext Properties | Improve this Doc View Source DefaultSimilarity Expert: returns a default Similarity instance. In general, this method is only called to initialize searchers and writers. User code and query implementations should respect Similarity . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static Similarity DefaultSimilarity { get; } Property Value Type Description Similarity | Improve this Doc View Source IndexReader Return the IndexReader this searches. Declaration public virtual IndexReader IndexReader { get; } Property Value Type Description IndexReader | Improve this Doc View Source Similarity Expert: Set the Similarity implementation used by this IndexSearcher. Declaration public virtual Similarity Similarity { get; set; } Property Value Type Description Similarity | Improve this Doc View Source TopReaderContext Returns this searchers the top-level IndexReaderContext . Declaration public virtual IndexReaderContext TopReaderContext { get; } Property Value Type Description IndexReaderContext See Also Context Methods | Improve this Doc View Source CollectionStatistics(String) Returns CollectionStatistics for a field. This can be overridden for example, to return a field's statistics across a distributed collection. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual CollectionStatistics CollectionStatistics(string field) Parameters Type Name Description System.String field Returns Type Description CollectionStatistics | Improve this Doc View Source CreateNormalizedWeight(Query) Creates a normalized weight for a top-level Query . The query is rewritten by this method and CreateWeight(IndexSearcher) called, afterwards the Weight is normalized. The returned Weight can then directly be used to get a Scorer . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual Weight CreateNormalizedWeight(Query query) Parameters Type Name Description Query query Returns Type Description Weight | Improve this Doc View Source Doc(Int32) Sugar for .IndexReader.Document(docID) Declaration public virtual Document Doc(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Document See Also Document ( System.Int32 ) | Improve this Doc View Source Doc(Int32, ISet<String>) Sugar for .IndexReader.Document(docID, fieldsToLoad) Declaration public virtual Document Doc(int docID, ISet<string> fieldsToLoad) Parameters Type Name Description System.Int32 docID ISet < System.String > fieldsToLoad Returns Type Description Document See Also Document ( System.Int32 , ISet < System.String >) | Improve this Doc View Source Doc(Int32, StoredFieldVisitor) Sugar for .IndexReader.Document(docID, fieldVisitor) Declaration public virtual void Doc(int docID, StoredFieldVisitor fieldVisitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor fieldVisitor See Also Document ( System.Int32 , StoredFieldVisitor ) | Improve this Doc View Source Document(Int32, ISet<String>) Declaration public Document Document(int docID, ISet<string> fieldsToLoad) Parameters Type Name Description System.Int32 docID ISet < System.String > fieldsToLoad Returns Type Description Document | Improve this Doc View Source Explain(Query, Int32) Returns an Explanation that describes how doc scored against query . This is intended to be used in developing Similarity implementations, and, for good performance, should not be displayed with every hit. Computing an explanation is as expensive as executing the query over the entire index. Declaration public virtual Explanation Explain(Query query, int doc) Parameters Type Name Description Query query System.Int32 doc Returns Type Description Explanation | Improve this Doc View Source Explain(Weight, Int32) Expert: low-level implementation method Returns an Explanation that describes how doc scored against weight . This is intended to be used in developing Similarity implementations, and, for good performance, should not be displayed with every hit. Computing an explanation is as expensive as executing the query over the entire index. Applications should call Explain(Query, Int32) . Declaration protected virtual Explanation Explain(Weight weight, int doc) Parameters Type Name Description Weight weight System.Int32 doc Returns Type Description Explanation Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Rewrite(Query) Expert: called to re-write queries into primitive queries. Declaration public virtual Query Rewrite(Query original) Parameters Type Name Description Query original Returns Type Description Query Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(IList<AtomicReaderContext>, Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) Just like Search(Weight, Int32, Sort, Boolean, Boolean) , but you choose whether or not the fields in the returned FieldDoc instances should be set by specifying fillFields . Declaration protected virtual TopFieldDocs Search(IList<AtomicReaderContext> leaves, Weight weight, FieldDoc after, int nDocs, Sort sort, bool fillFields, bool doDocScores, bool doMaxScore) Parameters Type Name Description IList < AtomicReaderContext > leaves Weight weight FieldDoc after System.Int32 nDocs Sort sort System.Boolean fillFields System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopFieldDocs | Improve this Doc View Source Search(IList<AtomicReaderContext>, Weight, ICollector) Lower-level search API. Collect(Int32) is called for every document. NOTE: this method executes the searches on all given leaves exclusively. To search across all the searchers leaves use m_leafContexts . Declaration protected virtual void Search(IList<AtomicReaderContext> leaves, Weight weight, ICollector collector) Parameters Type Name Description IList < AtomicReaderContext > leaves The searchers leaves to execute the searches on Weight weight To match documents ICollector collector To receive hits Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(IList<AtomicReaderContext>, Weight, ScoreDoc, Int32) Expert: Low-level search implementation. Finds the top n hits for query . Applications should usually call Search(Query, Int32) or Search(Query, Filter, Int32) instead. Declaration protected virtual TopDocs Search(IList<AtomicReaderContext> leaves, Weight weight, ScoreDoc after, int nDocs) Parameters Type Name Description IList < AtomicReaderContext > leaves Weight weight ScoreDoc after System.Int32 nDocs Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Filter, ICollector) Lower-level search API. Collect(Int32) is called for every matching document. Declaration public virtual void Search(Query query, Filter filter, ICollector results) Parameters Type Name Description Query query To match documents Filter filter Ef non-null, used to permit documents to be collected. ICollector results To receive hits Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Filter, Int32) Finds the top n hits for query , applying filter if non-null. Declaration public virtual TopDocs Search(Query query, Filter filter, int n) Parameters Type Name Description Query query Filter filter System.Int32 n Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Filter, Int32, Sort) Search implementation with arbitrary sorting. Finds the top n hits for query , applying filter if non-null, and sorting the hits by the criteria in sort . NOTE: this does not compute scores by default; use Search(Query, Filter, Int32, Sort, Boolean, Boolean) to control scoring. Declaration public virtual TopFieldDocs Search(Query query, Filter filter, int n, Sort sort) Parameters Type Name Description Query query Filter filter System.Int32 n Sort sort Returns Type Description TopFieldDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Filter, Int32, Sort, Boolean, Boolean) Search implementation with arbitrary sorting, plus control over whether hit scores and max score should be computed. Finds the top n hits for query , applying filter if non-null, and sorting the hits by the criteria in sort . If doDocScores is true then the score of each hit will be computed and returned. If doMaxScore is true then the maximum score over all collected hits will be computed. Declaration public virtual TopFieldDocs Search(Query query, Filter filter, int n, Sort sort, bool doDocScores, bool doMaxScore) Parameters Type Name Description Query query Filter filter System.Int32 n Sort sort System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopFieldDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, ICollector) Lower-level search API. Collect(Int32) is called for every matching document. Declaration public virtual void Search(Query query, ICollector results) Parameters Type Name Description Query query ICollector results Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Int32) Finds the top n hits for query . Declaration public virtual TopDocs Search(Query query, int n) Parameters Type Name Description Query query System.Int32 n Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Int32, Sort) Search implementation with arbitrary sorting and no filter. Declaration public virtual TopFieldDocs Search(Query query, int n, Sort sort) Parameters Type Name Description Query query The query to search for System.Int32 n Return only the top n results Sort sort The Sort object Returns Type Description TopFieldDocs The top docs, sorted according to the supplied Sort instance | Improve this Doc View Source Search(Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) Just like Search(Weight, Int32, Sort, Boolean, Boolean) , but you choose whether or not the fields in the returned FieldDoc instances should be set by specifying fillFields . Declaration protected virtual TopFieldDocs Search(Weight weight, FieldDoc after, int nDocs, Sort sort, bool fillFields, bool doDocScores, bool doMaxScore) Parameters Type Name Description Weight weight FieldDoc after System.Int32 nDocs Sort sort System.Boolean fillFields System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopFieldDocs | Improve this Doc View Source Search(Weight, ScoreDoc, Int32) Expert: Low-level search implementation. Finds the top nDocs hits for query , applying filter if non-null. Applications should usually call Search(Query, Int32) or Search(Query, Filter, Int32) instead. Declaration protected virtual TopDocs Search(Weight weight, ScoreDoc after, int nDocs) Parameters Type Name Description Weight weight ScoreDoc after System.Int32 nDocs Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Weight, Int32, Sort, Boolean, Boolean) Expert: Low-level search implementation with arbitrary sorting and control over whether hit scores and max score should be computed. Finds the top nDocs hits for query and sorting the hits by the criteria in sort . Applications should usually call Search(Query, Filter, Int32, Sort) instead. Declaration protected virtual TopFieldDocs Search(Weight weight, int nDocs, Sort sort, bool doDocScores, bool doMaxScore) Parameters Type Name Description Weight weight System.Int32 nDocs Sort sort System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopFieldDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Filter, Int32) Finds the top n hits for query , applying filter if non-null, where all results are after a previous result ( after ). By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, Filter filter, int n) Parameters Type Name Description ScoreDoc after Query query Filter filter System.Int32 n Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Filter, Int32, Sort) Finds the top n hits for query , applying filter if non-null, where all results are after a previous result ( after ). By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, Filter filter, int n, Sort sort) Parameters Type Name Description ScoreDoc after Query query Filter filter System.Int32 n Sort sort Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Filter, Int32, Sort, Boolean, Boolean) Finds the top n hits for query where all results are after a previous result ( after ), allowing control over whether hit scores and max score should be computed. By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. If doDocScores is true then the score of each hit will be computed and returned. If doMaxScore is true then the maximum score over all collected hits will be computed. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, Filter filter, int n, Sort sort, bool doDocScores, bool doMaxScore) Parameters Type Name Description ScoreDoc after Query query Filter filter System.Int32 n Sort sort System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Int32) Finds the top n hits for top query where all results are after a previous result (top after ). By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, int n) Parameters Type Name Description ScoreDoc after Query query System.Int32 n Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Int32, Sort) Finds the top n hits for query where all results are after a previous result ( after ). By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, int n, Sort sort) Parameters Type Name Description ScoreDoc after Query query System.Int32 n Sort sort Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Slices(IList<AtomicReaderContext>) Expert: Creates an array of leaf slices each holding a subset of the given leaves. Each IndexSearcher.LeafSlice is executed in a single thread. By default there will be one IndexSearcher.LeafSlice per leaf ( AtomicReaderContext ). Declaration protected virtual IndexSearcher.LeafSlice[] Slices(IList<AtomicReaderContext> leaves) Parameters Type Name Description IList < AtomicReaderContext > leaves Returns Type Description IndexSearcher.LeafSlice [] | Improve this Doc View Source TermStatistics(Term, TermContext) Returns TermStatistics for a term. This can be overridden for example, to return a term's statistics across a distributed collection. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual TermStatistics TermStatistics(Term term, TermContext context) Parameters Type Name Description Term term TermContext context Returns Type Description TermStatistics | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source WrapFilter(Query, Filter) @lucene.internal Declaration protected virtual Query WrapFilter(Query query, Filter filter) Parameters Type Name Description Query query Filter filter Returns Type Description Query"
  },
  "api/Lucene.Net/Lucene.Net.Search.IndexSearcher.LeafSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IndexSearcher.LeafSlice.html",
    "title": "Class IndexSearcher.LeafSlice | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexSearcher.LeafSlice A class holding a subset of the IndexSearcher s leaf contexts to be executed within a single thread. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexSearcher.LeafSlice Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class LeafSlice : object Constructors | Improve this Doc View Source LeafSlice(AtomicReaderContext[]) Declaration public LeafSlice(params AtomicReaderContext[] leaves) Parameters Type Name Description AtomicReaderContext [] leaves"
  },
  "api/Lucene.Net/Lucene.Net.Search.ITopDocsCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ITopDocsCollector.html",
    "title": "Interface ITopDocsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITopDocsCollector LUCENENET specific interface used to reference TopDocsCollector<T> without referencing its generic type. Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface ITopDocsCollector : ICollector Properties | Improve this Doc View Source TotalHits The total number of documents that matched this query. Declaration int TotalHits { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetTopDocs() Returns the top docs that were collected by this collector. Declaration TopDocs GetTopDocs() Returns Type Description TopDocs | Improve this Doc View Source GetTopDocs(Int32) Returns the documents in the rage [ start .. pq.Count) that were collected by this collector. Note that if start >= pq.Count, an empty TopDocs is returned. This method is convenient to call if the application always asks for the last results, starting from the last 'page'. NOTE: you cannot call this method more than once for each search execution. If you need to call it more than once, passing each time a different start , you should call GetTopDocs() and work with the returned TopDocs object, which will contain all the results this search execution collected. Declaration TopDocs GetTopDocs(int start) Parameters Type Name Description System.Int32 start Returns Type Description TopDocs | Improve this Doc View Source GetTopDocs(Int32, Int32) Returns the documents in the rage [ start .. start + howMany ) that were collected by this collector. Note that if start >= pq.Count, an empty TopDocs is returned, and if pq.Count - start < howMany , then only the available documents in [ start .. pq.Count) are returned. This method is useful to call in case pagination of search results is allowed by the search application, as well as it attempts to optimize the memory used by allocating only as much as requested by howMany . NOTE: you cannot call this method more than once for each search execution. If you need to call it more than once, passing each time a different range, you should call GetTopDocs() and work with the returned TopDocs object, which will contain all the results this search execution collected. Declaration TopDocs GetTopDocs(int start, int howMany) Parameters Type Name Description System.Int32 start System.Int32 howMany Returns Type Description TopDocs"
  },
  "api/Lucene.Net/Lucene.Net.Search.LiveFieldValues-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.LiveFieldValues-2.html",
    "title": "Class LiveFieldValues<S, T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LiveFieldValues<S, T> Tracks live field values across NRT reader reopens. This holds a map for all updated ids since the last reader reopen. Once the NRT reader is reopened, it prunes the map. This means you must reopen your NRT reader periodically otherwise the RAM consumption of this class will grow unbounded! NOTE: you must ensure the same id is never updated at the same time by two threads, because in this case you cannot in general know which thread \"won\". Inheritance System.Object LiveFieldValues<S, T> Implements ReferenceManager.IRefreshListener IDisposable Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class LiveFieldValues<S, T> : object, ReferenceManager.IRefreshListener, IDisposable where S : class Type Parameters Name Description S T Constructors | Improve this Doc View Source LiveFieldValues(ReferenceManager<S>, T) Declaration public LiveFieldValues(ReferenceManager<S> mgr, T missingValue) Parameters Type Name Description ReferenceManager <S> mgr T missingValue Properties | Improve this Doc View Source Count Returns the [approximate] number of id/value pairs buffered in RAM. NOTE: This was size() in Lucene. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(String, T) Call this after you've successfully added a document to the index, to record what value you just set the field to. Declaration public virtual void Add(string id, T value) Parameters Type Name Description System.String id T value | Improve this Doc View Source AfterRefresh(Boolean) Declaration public virtual void AfterRefresh(bool didRefresh) Parameters Type Name Description System.Boolean didRefresh | Improve this Doc View Source BeforeRefresh() Declaration public virtual void BeforeRefresh() | Improve this Doc View Source Delete(String) Call this after you've successfully deleted a document from the index. Declaration public virtual void Delete(string id) Parameters Type Name Description System.String id | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Get(String) Returns the current value for this id, or null if the id isn't in the index or was deleted. Declaration public virtual T Get(string id) Parameters Type Name Description System.String id Returns Type Description T | Improve this Doc View Source LookupFromSearcher(S, String) This is called when the id/value was already flushed & opened in an NRT IndexSearcher. You must implement this to go look up the value (eg, via doc values, field cache, stored fields, etc.). Declaration protected abstract T LookupFromSearcher(S s, string id) Parameters Type Name Description S s System.String id Returns Type Description T Implements ReferenceManager.IRefreshListener IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Search.MatchAllDocsQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MatchAllDocsQuery.html",
    "title": "Class MatchAllDocsQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchAllDocsQuery A query that matches all documents. Inheritance System.Object Query MatchAllDocsQuery Inherited Members Query.Boost Query.ToString() Query.Rewrite(IndexReader) Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class MatchAllDocsQuery : Query Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.MaxNonCompetitiveBoostAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MaxNonCompetitiveBoostAttribute.html",
    "title": "Class MaxNonCompetitiveBoostAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MaxNonCompetitiveBoostAttribute Implementation class for IMaxNonCompetitiveBoostAttribute . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Attribute MaxNonCompetitiveBoostAttribute Implements IMaxNonCompetitiveBoostAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class MaxNonCompetitiveBoostAttribute : Attribute, IMaxNonCompetitiveBoostAttribute, IAttribute Properties | Improve this Doc View Source CompetitiveTerm Declaration public BytesRef CompetitiveTerm { get; set; } Property Value Type Description BytesRef | Improve this Doc View Source MaxNonCompetitiveBoost Declaration public float MaxNonCompetitiveBoost { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) Implements IMaxNonCompetitiveBoostAttribute IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiCollector.html",
    "title": "Class MultiCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiCollector A ICollector which allows running a search with several ICollector s. It offers a static Wrap(ICollector[]) method which accepts a list of collectors and wraps them with MultiCollector , while filtering out the null ones. Inheritance System.Object MultiCollector Implements ICollector Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class MultiCollector : object, ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer | Improve this Doc View Source Wrap(ICollector[]) Wraps a list of ICollector s with a MultiCollector . This method works as follows: Filters out the null collectors, so they are not used during search time. If the input contains 1 real collector (i.e. non- null ), it is returned. Otherwise the method returns a MultiCollector which wraps the non- null ones. Declaration public static ICollector Wrap(params ICollector[] collectors) Parameters Type Name Description ICollector [] collectors Returns Type Description ICollector Implements ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiPhraseQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiPhraseQuery.html",
    "title": "Class MultiPhraseQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiPhraseQuery MultiPhraseQuery is a generalized version of PhraseQuery , with an added method Add(Term[]) . To use this class, to search for the phrase \"Microsoft app*\" first use Add(Term) on the term \"Microsoft\", then find all terms that have \"app\" as prefix using MultiFields.GetFields(IndexReader).GetTerms(string) , and use Add(Term[]) to add them to the query. Collection initializer note: To create and populate a MultiPhraseQuery in a single statement, you can use the following example as a guide: var multiPhraseQuery = new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) , Add(Term[]) , or Add(Term[], Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. Inheritance System.Object Query MultiPhraseQuery Implements IEnumerable < Term []> Inherited Members Query.Boost Query.ToString() Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class MultiPhraseQuery : Query, IEnumerable<Term[]> Properties | Improve this Doc View Source Slop Sets the phrase slop for this query. Declaration public virtual int Slop { get; set; } Property Value Type Description System.Int32 See Also Slop Methods | Improve this Doc View Source Add(Term) Add a single term at the next position in the phrase. Declaration public virtual void Add(Term term) Parameters Type Name Description Term term See Also Add ( Term ) | Improve this Doc View Source Add(Term[]) Add multiple terms at the next position in the phrase. Any of the terms may match. Declaration public virtual void Add(Term[] terms) Parameters Type Name Description Term [] terms See Also Add ( Term ) | Improve this Doc View Source Add(Term[], Int32) Allows to specify the relative position of terms within the phrase. Declaration public virtual void Add(Term[] terms, int position) Parameters Type Name Description Term [] terms System.Int32 position See Also Add ( Term , System.Int32 ) | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Expert: adds all terms occurring in this query to the terms set. Only works if this query is in its rewritten ( Rewrite(IndexReader) ) form. Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the Lucene.Net.Search.MultiPhraseQuery.termArrays collection. Declaration public IEnumerator<Term[]> GetEnumerator() Returns Type Description IEnumerator < Term []> An enumerator that can be used to iterate through the Lucene.Net.Search.MultiPhraseQuery.termArrays collection. | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetPositions() Returns the relative positions of terms in this phrase. Declaration public virtual int[] GetPositions() Returns Type Description System.Int32 [] | Improve this Doc View Source GetTermArrays() Returns a List of the terms in the multiphrase. Do not modify the List or its contents. Declaration public virtual IList<Term[]> GetTermArrays() Returns Type Description IList < Term []> | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override sealed string ToString(string f) Parameters Type Name Description System.String f Returns Type Description System.String Overrides Query.ToString(String) Implements IEnumerable<>"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.html",
    "title": "Class MultiTermQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermQuery An abstract Query that matches documents containing a subset of terms provided by a FilteredTermsEnum enumeration. This query cannot be used directly; you must subclass it and define GetTermsEnum(Terms, AttributeSource) to provide a FilteredTermsEnum that iterates through the terms to be matched. NOTE : if MultiTermRewriteMethod is either CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE or SCORING_BOOLEAN_QUERY_REWRITE , you may encounter a BooleanQuery.TooManyClausesException exception during searching, which happens when the number of terms to be searched exceeds MaxClauseCount . Setting MultiTermRewriteMethod to CONSTANT_SCORE_FILTER_REWRITE prevents this. The recommended rewrite method is CONSTANT_SCORE_AUTO_REWRITE_DEFAULT : it doesn't spend CPU computing unhelpful scores, and it tries to pick the most performant rewrite method given the query. If you need scoring (like , use MultiTermQuery.TopTermsScoringBooleanQueryRewrite which uses a priority queue to only collect competitive terms and not hit this limitation. Note that QueryParsers.Classic.QueryParser produces MultiTermQuery s using CONSTANT_SCORE_AUTO_REWRITE_DEFAULT by default. Inheritance System.Object Query MultiTermQuery AutomatonQuery FuzzyQuery NumericRangeQuery<T> PrefixQuery TermRangeQuery Inherited Members Query.Boost Query.ToString(String) Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class MultiTermQuery : Query Constructors | Improve this Doc View Source MultiTermQuery(String) Constructs a query matching terms that cannot be represented with a single Term . Declaration public MultiTermQuery(string field) Parameters Type Name Description System.String field Fields | Improve this Doc View Source CONSTANT_SCORE_AUTO_REWRITE_DEFAULT Read-only default instance of ConstantScoreAutoRewrite , with TermCountCutoff set to DEFAULT_TERM_COUNT_CUTOFF and DocCountPercent set to DEFAULT_DOC_COUNT_PERCENT . Note that you cannot alter the configuration of this instance; you'll need to create a private instance instead. Declaration public static readonly MultiTermQuery.RewriteMethod CONSTANT_SCORE_AUTO_REWRITE_DEFAULT Field Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE Like SCORING_BOOLEAN_QUERY_REWRITE except scores are not computed. Instead, each matching document receives a constant score equal to the query's boost. NOTE : this rewrite method will hit BooleanQuery.TooManyClausesException if the number of terms exceeds MaxClauseCount . Declaration public static readonly MultiTermQuery.RewriteMethod CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE Field Value Type Description MultiTermQuery.RewriteMethod See Also MultiTermRewriteMethod | Improve this Doc View Source CONSTANT_SCORE_FILTER_REWRITE A rewrite method that first creates a private Filter , by visiting each term in sequence and marking all docs for that term. Matching documents are assigned a constant score equal to the query's boost. This method is faster than the BooleanQuery rewrite methods when the number of matched terms or matched documents is non-trivial. Also, it will never hit an errant BooleanQuery.TooManyClausesException exception. Declaration public static readonly MultiTermQuery.RewriteMethod CONSTANT_SCORE_FILTER_REWRITE Field Value Type Description MultiTermQuery.RewriteMethod See Also MultiTermRewriteMethod | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_rewriteMethod Declaration protected MultiTermQuery.RewriteMethod m_rewriteMethod Field Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source SCORING_BOOLEAN_QUERY_REWRITE A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. Note that typically such scores are meaningless to the user, and require non-trivial CPU to compute, so it's almost always better to use CONSTANT_SCORE_AUTO_REWRITE_DEFAULT instead. NOTE : this rewrite method will hit BooleanQuery.TooManyClausesException if the number of terms exceeds MaxClauseCount . Declaration public static readonly MultiTermQuery.RewriteMethod SCORING_BOOLEAN_QUERY_REWRITE Field Value Type Description MultiTermQuery.RewriteMethod See Also MultiTermRewriteMethod Properties | Improve this Doc View Source Field Returns the field name for this query Declaration public string Field { get; } Property Value Type Description System.String | Improve this Doc View Source MultiTermRewriteMethod Gets or Sets the rewrite method to be used when executing the query. You can use one of the four core methods, or implement your own subclass of MultiTermQuery.RewriteMethod . Declaration public virtual MultiTermQuery.RewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description MultiTermQuery.RewriteMethod Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms) Convenience method, if no attributes are needed: this simply passes empty attributes and is equal to: GetTermsEnum(terms, new AttributeSource()) Declaration public TermsEnum GetTermsEnum(Terms terms) Parameters Type Name Description Terms terms Returns Type Description TermsEnum | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Construct the enumeration to be used, expanding the pattern term. this method should only be called if the field exists (ie, implementations can assume the field does exist). this method should not return null (should instead return EMPTY if no terms match). The TermsEnum must already be positioned to the first matching term. The given AttributeSource is passed by the MultiTermQuery.RewriteMethod to provide attributes, the rewrite method uses to inform about e.g. maximum competitive boosts. this is currently only used by TopTermsRewrite<Q> . Declaration protected abstract TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum | Improve this Doc View Source Rewrite(IndexReader) To rewrite to a simpler form, instead return a simpler enum from GetTermsEnum(Terms, AttributeSource) . For example, to rewrite to a single term, return a SingleTermsEnum . Declaration public override sealed Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader)"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.RewriteMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.RewriteMethod.html",
    "title": "Class MultiTermQuery.RewriteMethod | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermQuery.RewriteMethod Abstract class that defines how the query is rewritten. Inheritance System.Object MultiTermQuery.RewriteMethod DocTermOrdsRewriteMethod FieldCacheRewriteMethod SpanRewriteMethod TermCollectingRewrite<Q> Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class RewriteMethod : object Methods | Improve this Doc View Source GetTermsEnum(MultiTermQuery, Terms, AttributeSource) Returns the MultiTermQuery s TermsEnum Declaration protected virtual TermsEnum GetTermsEnum(MultiTermQuery query, Terms terms, AttributeSource atts) Parameters Type Name Description MultiTermQuery query Terms terms AttributeSource atts Returns Type Description TermsEnum See Also GetTermsEnum ( Terms , AttributeSource ) | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public abstract Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite.html",
    "title": "Class MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , but the scores are only computed as the boost. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite < BooleanQuery > TopTermsRewrite < BooleanQuery > MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite Inherited Members TopTermsRewrite<BooleanQuery>.Count TopTermsRewrite<BooleanQuery>.Rewrite(IndexReader, MultiTermQuery) TopTermsRewrite<BooleanQuery>.GetHashCode() TopTermsRewrite<BooleanQuery>.Equals(Object) TermCollectingRewrite<BooleanQuery>.AddClause(BooleanQuery, Term, Int32, Single) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class TopTermsBoostOnlyBooleanQueryRewrite : TopTermsRewrite<BooleanQuery>, ITopTermsRewrite Constructors | Improve this Doc View Source TopTermsBoostOnlyBooleanQueryRewrite(Int32) Create a MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite for at most size terms. NOTE: if MaxClauseCount is smaller than size , then it will be used instead. Declaration public TopTermsBoostOnlyBooleanQueryRewrite(int size) Parameters Type Name Description System.Int32 size Properties | Improve this Doc View Source MaxSize Declaration protected override int MaxSize { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Search.TopTermsRewrite<Lucene.Net.Search.BooleanQuery>.MaxSize Methods | Improve this Doc View Source AddClause(BooleanQuery, Term, Int32, Single, TermContext) Declaration protected override void AddClause(BooleanQuery topLevel, Term term, int docFreq, float boost, TermContext states) Parameters Type Name Description BooleanQuery topLevel Term term System.Int32 docFreq System.Single boost TermContext states Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.AddClause(Lucene.Net.Search.BooleanQuery, Lucene.Net.Index.Term, System.Int32, System.Single, Lucene.Net.Index.TermContext) | Improve this Doc View Source GetTopLevelQuery() Declaration protected override BooleanQuery GetTopLevelQuery() Returns Type Description BooleanQuery Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.GetTopLevelQuery() See Also MultiTermRewriteMethod"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.TopTermsScoringBooleanQueryRewrite.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.TopTermsScoringBooleanQueryRewrite.html",
    "title": "Class MultiTermQuery.TopTermsScoringBooleanQueryRewrite | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermQuery.TopTermsScoringBooleanQueryRewrite A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. It is the default rewrite method for FuzzyQuery . Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite < BooleanQuery > TopTermsRewrite < BooleanQuery > MultiTermQuery.TopTermsScoringBooleanQueryRewrite Inherited Members TopTermsRewrite<BooleanQuery>.Count TopTermsRewrite<BooleanQuery>.Rewrite(IndexReader, MultiTermQuery) TopTermsRewrite<BooleanQuery>.GetHashCode() TopTermsRewrite<BooleanQuery>.Equals(Object) TermCollectingRewrite<BooleanQuery>.AddClause(BooleanQuery, Term, Int32, Single) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class TopTermsScoringBooleanQueryRewrite : TopTermsRewrite<BooleanQuery>, ITopTermsRewrite Constructors | Improve this Doc View Source TopTermsScoringBooleanQueryRewrite(Int32) Create a MultiTermQuery.TopTermsScoringBooleanQueryRewrite for at most size terms. NOTE: if MaxClauseCount is smaller than size , then it will be used instead. Declaration public TopTermsScoringBooleanQueryRewrite(int size) Parameters Type Name Description System.Int32 size Properties | Improve this Doc View Source MaxSize Declaration protected override int MaxSize { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Search.TopTermsRewrite<Lucene.Net.Search.BooleanQuery>.MaxSize Methods | Improve this Doc View Source AddClause(BooleanQuery, Term, Int32, Single, TermContext) Declaration protected override void AddClause(BooleanQuery topLevel, Term term, int docCount, float boost, TermContext states) Parameters Type Name Description BooleanQuery topLevel Term term System.Int32 docCount System.Single boost TermContext states Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.AddClause(Lucene.Net.Search.BooleanQuery, Lucene.Net.Index.Term, System.Int32, System.Single, Lucene.Net.Index.TermContext) | Improve this Doc View Source GetTopLevelQuery() Declaration protected override BooleanQuery GetTopLevelQuery() Returns Type Description BooleanQuery Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.GetTopLevelQuery() See Also MultiTermRewriteMethod"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQueryWrapperFilter-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQueryWrapperFilter-1.html",
    "title": "Class MultiTermQueryWrapperFilter<Q> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermQueryWrapperFilter<Q> A wrapper for MultiTermQuery , that exposes its functionality as a Filter . MultiTermQueryWrapperFilter<Q> is not designed to be used by itself. Normally you subclass it to provide a Filter counterpart for a MultiTermQuery subclass. For example, TermRangeFilter and PrefixFilter extend MultiTermQueryWrapperFilter<Q> . This class also provides the functionality behind CONSTANT_SCORE_FILTER_REWRITE ; this is why it is not abstract. Inheritance System.Object Filter MultiTermQueryWrapperFilter<Q> NumericRangeFilter<T> PrefixFilter TermRangeFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class MultiTermQueryWrapperFilter<Q> : Filter where Q : MultiTermQuery Type Parameters Name Description Q Constructors | Improve this Doc View Source MultiTermQueryWrapperFilter(Q) Wrap a MultiTermQuery as a Filter . Declaration protected MultiTermQueryWrapperFilter(Q query) Parameters Type Name Description Q query Fields | Improve this Doc View Source m_query Declaration protected readonly Q m_query Field Value Type Description Q Properties | Improve this Doc View Source Field Returns the field name for this query Declaration public string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override sealed bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Returns a DocIdSet with documents that should be permitted in search results. Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override sealed int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.NGramPhraseQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NGramPhraseQuery.html",
    "title": "Class NGramPhraseQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NGramPhraseQuery This is a PhraseQuery which is optimized for n-gram phrase query. For example, when you query \"ABCD\" on a 2-gram field, you may want to use NGramPhraseQuery rather than PhraseQuery , because NGramPhraseQuery will Rewrite(IndexReader) the query to \"AB/0 CD/2\", while PhraseQuery will query \"AB/0 BC/1 CD/2\" (where term/position). Collection initializer note: To create and populate a PhraseQuery in a single statement, you can use the following example as a guide: var phraseQuery = new NGramPhraseQuery(2) { new Term(\"field\", \"ABCD\"), new Term(\"field\", \"EFGH\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) or Add(Term, Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. Inheritance System.Object Query PhraseQuery NGramPhraseQuery Implements IEnumerable < Term > Inherited Members PhraseQuery.Slop PhraseQuery.Add(Term) PhraseQuery.Add(Term, Int32) PhraseQuery.GetTerms() PhraseQuery.GetPositions() PhraseQuery.CreateWeight(IndexSearcher) PhraseQuery.ExtractTerms(ISet<Term>) PhraseQuery.ToString(String) PhraseQuery.GetEnumerator() Query.Boost Query.ToString() Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class NGramPhraseQuery : PhraseQuery, IEnumerable<Term> Constructors | Improve this Doc View Source NGramPhraseQuery(Int32) Constructor that takes gram size. Declaration public NGramPhraseQuery(int n) Parameters Type Name Description System.Int32 n n-gram size Methods | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides PhraseQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides PhraseQuery.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides PhraseQuery.Rewrite(IndexReader) Implements IEnumerable<>"
  },
  "api/Lucene.Net/Lucene.Net.Search.NumericRangeFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NumericRangeFilter.html",
    "title": "Class NumericRangeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeFilter LUCENENET specific static class to provide access to static methods without referring to the NumericRangeFilter<T> 's generic closing type. Inheritance System.Object NumericRangeFilter Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class NumericRangeFilter : object Methods | Improve this Doc View Source NewDoubleRange(String, Int32, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that filters a range using the given PrecisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . will never match a half-open range, to hit NaN use a query with min == max == System.Double.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. Declaration public static NumericRangeFilter<double> NewDoubleRange(string field, int precisionStep, double? min, double? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Double > min System.Nullable < System.Double > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Double > | Improve this Doc View Source NewDoubleRange(String, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that queries a range using the default PrecisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . will never match a half-open range, to hit NaN use a query with min == max == System.Double.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. Declaration public static NumericRangeFilter<double> NewDoubleRange(string field, double? min, double? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Double > min System.Nullable < System.Double > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Double > | Improve this Doc View Source NewInt32Range(String, Int32, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that filters a range using the given PrecisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newIntRange() in Lucene Declaration public static NumericRangeFilter<int> NewInt32Range(string field, int precisionStep, int? min, int? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Int32 > min System.Nullable < System.Int32 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Int32 > | Improve this Doc View Source NewInt32Range(String, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that queries a range using the default PrecisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newIntRange() in Lucene Declaration public static NumericRangeFilter<int> NewInt32Range(string field, int? min, int? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Int32 > min System.Nullable < System.Int32 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Int32 > | Improve this Doc View Source NewInt64Range(String, Int32, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that filters a range using the given PrecisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newLongRange() in Lucene Declaration public static NumericRangeFilter<long> NewInt64Range(string field, int precisionStep, long? min, long? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Int64 > min System.Nullable < System.Int64 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Int64 > | Improve this Doc View Source NewInt64Range(String, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that queries a range using the default PrecisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newLongRange() in Lucene Declaration public static NumericRangeFilter<long> NewInt64Range(string field, long? min, long? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Int64 > min System.Nullable < System.Int64 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Int64 > | Improve this Doc View Source NewSingleRange(String, Int32, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that filters a range using the given PrecisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . will never match a half-open range, to hit NaN use a query with min == max == System.Single.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newFloatRange() in Lucene Declaration public static NumericRangeFilter<float> NewSingleRange(string field, int precisionStep, float? min, float? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Single > min System.Nullable < System.Single > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Single > | Improve this Doc View Source NewSingleRange(String, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that queries a range using the default PrecisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . will never match a half-open range, to hit NaN use a query with min == max == System.Single.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newFloatRange() in Lucene Declaration public static NumericRangeFilter<float> NewSingleRange(string field, float? min, float? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Single > min System.Nullable < System.Single > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Single >"
  },
  "api/Lucene.Net/Lucene.Net.Search.NumericRangeFilter-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NumericRangeFilter-1.html",
    "title": "Class NumericRangeFilter<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeFilter<T> A Filter that only accepts numeric values within a specified range. To use this, you must first index the numeric values using Int32Field , SingleField , Int64Field or DoubleField (expert: NumericTokenStream ). You create a new NumericRangeFilter with the static factory methods, eg: Filter f = NumericRangeFilter.NewFloatRange(\"weight\", 0.03f, 0.10f, true, true); Accepts all documents whose float valued \"weight\" field ranges from 0.03 to 0.10, inclusive. See NumericRangeQuery for details on how Lucene indexes and searches numeric valued fields. @since 2.9 Inheritance System.Object Filter MultiTermQueryWrapperFilter < NumericRangeQuery <T>> NumericRangeFilter<T> Inherited Members MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.m_query MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.ToString() MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.Equals(Object) MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.GetHashCode() MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.Field MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.GetDocIdSet(AtomicReaderContext, IBits) Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class NumericRangeFilter<T> : MultiTermQueryWrapperFilter<NumericRangeQuery<T>> where T : struct, IComparable<T> Type Parameters Name Description T Properties | Improve this Doc View Source IncludesMax Returns true if the upper endpoint is inclusive Declaration public bool IncludesMax { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesMin Returns true if the lower endpoint is inclusive Declaration public bool IncludesMin { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Max Returns the upper value of this range filter Declaration public T? Max { get; } Property Value Type Description System.Nullable <T> | Improve this Doc View Source Min Returns the lower value of this range filter Declaration public T? Min { get; } Property Value Type Description System.Nullable <T> | Improve this Doc View Source PrecisionStep Returns the precision step. Declaration public int PrecisionStep { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Search.NumericRangeQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NumericRangeQuery.html",
    "title": "Class NumericRangeQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeQuery LUCENENET specific class to provide access to static factory metods of NumericRangeQuery<T> without referring to its genereic closing type. Inheritance System.Object NumericRangeQuery Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class NumericRangeQuery : object Methods | Improve this Doc View Source NewDoubleRange(String, Int32, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a range using the given Lucene.Net.Search.NumericRangeQuery`1.precisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . will never match a half-open range, to hit NaN use a query with min == max == System.Double.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. Declaration public static NumericRangeQuery<double> NewDoubleRange(string field, int precisionStep, double? min, double? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Double > min System.Nullable < System.Double > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Double > | Improve this Doc View Source NewDoubleRange(String, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a range using the default Lucene.Net.Search.NumericRangeQuery`1.precisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . will never match a half-open range, to hit NaN use a query with min == max == System.Double.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. Declaration public static NumericRangeQuery<double> NewDoubleRange(string field, double? min, double? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Double > min System.Nullable < System.Double > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Double > | Improve this Doc View Source NewInt32Range(String, Int32, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a range using the given Lucene.Net.Search.NumericRangeQuery`1.precisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newIntRange() in Lucene Declaration public static NumericRangeQuery<int> NewInt32Range(string field, int precisionStep, int? min, int? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Int32 > min System.Nullable < System.Int32 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Int32 > | Improve this Doc View Source NewInt32Range(String, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a range using the default Lucene.Net.Search.NumericRangeQuery`1.precisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newIntRange() in Lucene Declaration public static NumericRangeQuery<int> NewInt32Range(string field, int? min, int? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Int32 > min System.Nullable < System.Int32 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Int32 > | Improve this Doc View Source NewInt64Range(String, Int32, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a range using the given Lucene.Net.Search.NumericRangeQuery`1.precisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newLongRange() in Lucene Declaration public static NumericRangeQuery<long> NewInt64Range(string field, int precisionStep, long? min, long? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Int64 > min System.Nullable < System.Int64 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Int64 > | Improve this Doc View Source NewInt64Range(String, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a range using the default Lucene.Net.Search.NumericRangeQuery`1.precisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newLongRange() in Lucene Declaration public static NumericRangeQuery<long> NewInt64Range(string field, long? min, long? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Int64 > min System.Nullable < System.Int64 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Int64 > | Improve this Doc View Source NewSingleRange(String, Int32, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a range using the given Lucene.Net.Search.NumericRangeQuery`1.precisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . will never match a half-open range, to hit NaN use a query with min == max == System.Single.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newFloatRange() in Lucene Declaration public static NumericRangeQuery<float> NewSingleRange(string field, int precisionStep, float? min, float? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Single > min System.Nullable < System.Single > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Single > | Improve this Doc View Source NewSingleRange(String, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a range using the default Lucene.Net.Search.NumericRangeQuery`1.precisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . will never match a half-open range, to hit NaN use a query with min == max == System.Single.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newFloatRange() in Lucene Declaration public static NumericRangeQuery<float> NewSingleRange(string field, float? min, float? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Single > min System.Nullable < System.Single > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Single >"
  },
  "api/Lucene.Net/Lucene.Net.Search.NumericRangeQuery-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NumericRangeQuery-1.html",
    "title": "Class NumericRangeQuery<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeQuery<T> A Query that matches numeric values within a specified range. To use this, you must first index the numeric values using Int32Field , SingleField , Int64Field or DoubleField (expert: NumericTokenStream ). If your terms are instead textual, you should use TermRangeQuery . NumericRangeFilter is the filter equivalent of this query. You create a new NumericRangeQuery<T> with the static factory methods, eg: Query q = NumericRangeQuery.NewFloatRange(\"weight\", 0.03f, 0.10f, true, true); matches all documents whose valued \"weight\" field ranges from 0.03 to 0.10, inclusive. The performance of NumericRangeQuery<T> is much better than the corresponding TermRangeQuery because the number of terms that must be searched is usually far fewer, thanks to trie indexing, described below. You can optionally specify a Lucene.Net.Search.NumericRangeQuery`1.precisionStep when creating this query. This is necessary if you've changed this configuration from its default (4) during indexing. Lower values consume more disk space but speed up searching. Suitable values are between 1 and 8 . A good starting point to test is 4 , which is the default value for all Numeric* classes. See below for details. This query defaults to CONSTANT_SCORE_AUTO_REWRITE_DEFAULT . With precision steps of <=4, this query can be run with one of the BooleanQuery rewrite methods without changing BooleanQuery 's default max clause count. How it works See the publication about panFMP , where this algorithm was described (referred to as TrieRangeQuery ): Schindler, U, Diepenbroek, M , 2008. Generic XML-based Framework for Metadata Portals. Computers & Geosciences 34 (12), 1947-1955. doi:10.1016/j.cageo.2008.02.023 A quote from this paper: Because Apache Lucene is a full-text search engine and not a conventional database, it cannot handle numerical ranges (e.g., field value is inside user defined bounds, even dates are numerical values). We have developed an extension to Apache Lucene that stores the numerical values in a special string-encoded format with variable precision (all numerical values like s, s, s, and s are converted to lexicographic sortable string representations and stored with different precisions (for a more detailed description of how the values are stored, see NumericUtils ). A range is then divided recursively into multiple intervals for searching: The center of the range is searched only with the lowest possible precision in the trie , while the boundaries are matched more exactly. This reduces the number of terms dramatically. For the variant that stores long values in 8 different precisions (each reduced by 8 bits) that uses a lowest precision of 1 byte, the index contains only a maximum of 256 distinct values in the lowest precision. Overall, a range could consist of a theoretical maximum of 7*255*2 + 255 = 3825 distinct terms (when there is a term for every distinct value of an 8-byte-number in the index and the range covers almost all of them; a maximum of 255 distinct values is used because it would always be possible to reduce the full 256 values to one term with degraded precision). In practice, we have seen up to 300 terms in most cases (index with 500,000 metadata records and a uniform value distribution). Precision Step You can choose any Lucene.Net.Search.NumericRangeQuery`1.precisionStep when encoding values. Lower step values mean more precisions and so more terms in index (and index gets larger). The number of indexed terms per value is (those are generated by NumericTokenStream ): indexedTermsPerValue = ceil ( bitsPerValue / precisionStep ) As the lower precision terms are shared by many values, the additional terms only slightly grow the term dictionary (approx. 7% for precisionStep=4 ), but have a larger impact on the postings (the postings file will have more entries, as every document is linked to indexedTermsPerValue terms instead of one). The formula to estimate the growth of the term dictionary in comparison to one term per value: <!-- the formula in the alt attribute was transformed from latex to PNG with http://1.618034.com/latex.php (with 110 dpi): --> On the other hand, if the Lucene.Net.Search.NumericRangeQuery`1.precisionStep is smaller, the maximum number of terms to match reduces, which optimizes query speed. The formula to calculate the maximum number of terms that will be visited while executing the query is: <!-- the formula in the alt attribute was transformed from latex to PNG with http://1.618034.com/latex.php (with 110 dpi): --> For longs stored using a precision step of 4, maxQueryTerms = 15 15 2 + 15 = 465 , and for a precision step of 2, maxQueryTerms = 31 3 2 + 3 = 189 . But the faster search speed is reduced by more seeking in the term enum of the index. Because of this, the ideal Lucene.Net.Search.NumericRangeQuery`1.precisionStep value can only be found out by testing. Important: You can index with a lower precision step value and test search speed using a multiple of the original step value. Good values for Lucene.Net.Search.NumericRangeQuery`1.precisionStep are depending on usage and data type: The default for all data types is 4 , which is used, when no precisionStep is given. Ideal value in most cases for 64 bit data types (long, double) is 6 or 8 . Ideal value in most cases for 32 bit data types (int, float) is 4 . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use (see below). Steps >=64 for long/double and >=32 for int/float produces one token per value in the index and querying is as slow as a conventional TermRangeQuery . But it can be used to produce fields, that are solely used for sorting (in this case simply use as Lucene.Net.Search.NumericRangeQuery`1.precisionStep ). Using Int32Field , Int64Field , SingleField or DoubleField for sorting is ideal, because building the field cache is much faster than with text-only numbers. These fields have one term per value and therefore also work with term enumeration for building distinct lists (e.g. facets / preselected values to search for). Sorting is also possible with range query optimized fields using one of the above Lucene.Net.Search.NumericRangeQuery`1.precisionStep s. Comparisons of the different types of RangeQueries on an index with about 500,000 docs showed that TermRangeQuery in boolean rewrite mode (with raised BooleanQuery clause count) took about 30-40 secs to complete, TermRangeQuery in constant score filter rewrite mode took 5 secs and executing this class took <100ms to complete (on an Opteron64 machine, Java 1.5, 8 bit precision step). This query type was developed for a geographic portal, where the performance for e.g. bounding boxes or exact date/time stamps is important. @since 2.9 Inheritance System.Object Query MultiTermQuery NumericRangeQuery<T> Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class NumericRangeQuery<T> : MultiTermQuery where T : struct, IComparable<T> Type Parameters Name Description T Properties | Improve this Doc View Source IncludesMax Returns true if the upper endpoint is inclusive Declaration public bool IncludesMax { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesMin Returns true if the lower endpoint is inclusive Declaration public bool IncludesMin { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Max Returns the upper value of this range query Declaration public T? Max { get; } Property Value Type Description System.Nullable <T> | Improve this Doc View Source Min Returns the lower value of this range query Declaration public T? Min { get; } Property Value Type Description System.Nullable <T> | Improve this Doc View Source PrecisionStep Returns the precision step. Declaration public int PrecisionStep { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Occur.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Occur.html",
    "title": "Enum Occur | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Occur Specifies how clauses are to occur in matching documents. Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public enum Occur : int Fields Name Description MUST Use this operator for clauses that must appear in the matching documents. MUST_NOT Use this operator for clauses that must not appear in the matching documents. Note that it is not possible to search for queries that only consist of a MUST_NOT clause. SHOULD Use this operator for clauses that should appear in the matching documents. For a BooleanQuery with no MUST clauses one or more SHOULD clauses must match a document for the BooleanQuery to match."
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.AveragePayloadFunction.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.AveragePayloadFunction.html",
    "title": "Class AveragePayloadFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AveragePayloadFunction Calculate the final score as the average score of all payloads seen. Is thread safe and completely reusable. Inheritance System.Object PayloadFunction AveragePayloadFunction Inherited Members PayloadFunction.Explain(Int32, String, Int32, Single) Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class AveragePayloadFunction : PayloadFunction Methods | Improve this Doc View Source CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) Declaration public override float CurrentScore(int docId, string field, int start, int end, int numPayloadsSeen, float currentScore, float currentPayloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 start System.Int32 end System.Int32 numPayloadsSeen System.Single currentScore System.Single currentPayloadScore Returns Type Description System.Single Overrides PayloadFunction.CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) | Improve this Doc View Source DocScore(Int32, String, Int32, Single) Declaration public override float DocScore(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 numPayloadsSeen System.Single payloadScore Returns Type Description System.Single Overrides PayloadFunction.DocScore(Int32, String, Int32, Single) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides PayloadFunction.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides PayloadFunction.GetHashCode()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.html",
    "title": "Namespace Lucene.Net.Search.Payloads | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Payloads <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The payloads package provides Query mechanisms for finding and using payloads. The following Query implementations are provided: 1. PayloadTermQuery -- Boost a term's score based on the value of the payload located at that term. 2. PayloadNearQuery -- A SpanNearQuery that factors in the value of the payloads located at each of the positions where the spans occur. Classes AveragePayloadFunction Calculate the final score as the average score of all payloads seen. Is thread safe and completely reusable. MaxPayloadFunction Returns the maximum payload score seen, else 1 if there are no payloads on the doc. Is thread safe and completely reusable. MinPayloadFunction Calculates the minimum payload seen PayloadFunction An abstract class that defines a way for Payload*Query instances to transform the cumulative effects of payload scores for a document. @lucene.experimental this class and its derivations are experimental and subject to change PayloadNearQuery This class is very similar to SpanNearQuery except that it factors in the value of the payloads located at each of the positions where the TermSpans occurs. NOTE: In order to take advantage of this with the default scoring implementation ( DefaultSimilarity ), you must override ScorePayload(Int32, Int32, Int32, BytesRef) , which returns 1 by default. Payload scores are aggregated using a pluggable PayloadFunction . PayloadNearQuery.PayloadNearSpanScorer PayloadNearQuery.PayloadNearSpanWeight PayloadSpanUtil Experimental class to get set of payloads for most standard Lucene queries. Operates like Highlighter - IndexReader should only contain doc of interest, best to use MemoryIndex. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PayloadTermQuery This class is very similar to SpanTermQuery except that it factors in the value of the payload located at each of the positions where the Term occurs. NOTE: In order to take advantage of this with the default scoring implementation ( DefaultSimilarity ), you must override ScorePayload(Int32, Int32, Int32, BytesRef) , which returns 1 by default. Payload scores are aggregated using a pluggable PayloadFunction . PayloadTermQuery.PayloadTermWeight PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.MaxPayloadFunction.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.MaxPayloadFunction.html",
    "title": "Class MaxPayloadFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MaxPayloadFunction Returns the maximum payload score seen, else 1 if there are no payloads on the doc. Is thread safe and completely reusable. Inheritance System.Object PayloadFunction MaxPayloadFunction Inherited Members PayloadFunction.Explain(Int32, String, Int32, Single) Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class MaxPayloadFunction : PayloadFunction Methods | Improve this Doc View Source CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) Declaration public override float CurrentScore(int docId, string field, int start, int end, int numPayloadsSeen, float currentScore, float currentPayloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 start System.Int32 end System.Int32 numPayloadsSeen System.Single currentScore System.Single currentPayloadScore Returns Type Description System.Single Overrides PayloadFunction.CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) | Improve this Doc View Source DocScore(Int32, String, Int32, Single) Declaration public override float DocScore(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 numPayloadsSeen System.Single payloadScore Returns Type Description System.Single Overrides PayloadFunction.DocScore(Int32, String, Int32, Single) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides PayloadFunction.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides PayloadFunction.GetHashCode()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.MinPayloadFunction.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.MinPayloadFunction.html",
    "title": "Class MinPayloadFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MinPayloadFunction Calculates the minimum payload seen Inheritance System.Object PayloadFunction MinPayloadFunction Inherited Members PayloadFunction.Explain(Int32, String, Int32, Single) Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class MinPayloadFunction : PayloadFunction Methods | Improve this Doc View Source CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) Declaration public override float CurrentScore(int docId, string field, int start, int end, int numPayloadsSeen, float currentScore, float currentPayloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 start System.Int32 end System.Int32 numPayloadsSeen System.Single currentScore System.Single currentPayloadScore Returns Type Description System.Single Overrides PayloadFunction.CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) | Improve this Doc View Source DocScore(Int32, String, Int32, Single) Declaration public override float DocScore(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 numPayloadsSeen System.Single payloadScore Returns Type Description System.Single Overrides PayloadFunction.DocScore(Int32, String, Int32, Single) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides PayloadFunction.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides PayloadFunction.GetHashCode()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadFunction.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadFunction.html",
    "title": "Class PayloadFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadFunction An abstract class that defines a way for Payload*Query instances to transform the cumulative effects of payload scores for a document. @lucene.experimental this class and its derivations are experimental and subject to change Inheritance System.Object PayloadFunction AveragePayloadFunction MaxPayloadFunction MinPayloadFunction Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public abstract class PayloadFunction : object Methods | Improve this Doc View Source CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) Calculate the score up to this point for this doc and field Declaration public abstract float CurrentScore(int docId, string field, int start, int end, int numPayloadsSeen, float currentScore, float currentPayloadScore) Parameters Type Name Description System.Int32 docId The current doc System.String field The field System.Int32 start The start position of the matching Span System.Int32 end The end position of the matching Span System.Int32 numPayloadsSeen The number of payloads seen so far System.Single currentScore The current score so far System.Single currentPayloadScore The score for the current payload Returns Type Description System.Single The new current Score See Also Spans | Improve this Doc View Source DocScore(Int32, String, Int32, Single) Calculate the final score for all the payloads seen so far for this doc/field Declaration public abstract float DocScore(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId The current doc System.String field The current field System.Int32 numPayloadsSeen The total number of payloads seen on this document System.Single payloadScore The raw score for those payloads Returns Type Description System.Single The final score for the payloads | Improve this Doc View Source Equals(Object) Declaration public abstract override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source Explain(Int32, String, Int32, Single) Declaration public virtual Explanation Explain(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 numPayloadsSeen System.Single payloadScore Returns Type Description Explanation | Improve this Doc View Source GetHashCode() Declaration public abstract override int GetHashCode() Returns Type Description System.Int32 See Also PayloadTermQuery"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.html",
    "title": "Class PayloadNearQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadNearQuery This class is very similar to SpanNearQuery except that it factors in the value of the payloads located at each of the positions where the TermSpans occurs. NOTE: In order to take advantage of this with the default scoring implementation ( DefaultSimilarity ), you must override ScorePayload(Int32, Int32, Int32, BytesRef) , which returns 1 by default. Payload scores are aggregated using a pluggable PayloadFunction . Inheritance System.Object Query SpanQuery SpanNearQuery PayloadNearQuery Inherited Members SpanNearQuery.m_clauses SpanNearQuery.m_slop SpanNearQuery.m_inOrder SpanNearQuery.m_field SpanNearQuery.GetClauses() SpanNearQuery.Slop SpanNearQuery.IsInOrder SpanNearQuery.Field SpanNearQuery.ExtractTerms(ISet<Term>) SpanNearQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanNearQuery.Rewrite(IndexReader) Query.Boost Query.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadNearQuery : SpanNearQuery Constructors | Improve this Doc View Source PayloadNearQuery(SpanQuery[], Int32, Boolean) Declaration public PayloadNearQuery(SpanQuery[] clauses, int slop, bool inOrder) Parameters Type Name Description SpanQuery [] clauses System.Int32 slop System.Boolean inOrder | Improve this Doc View Source PayloadNearQuery(SpanQuery[], Int32, Boolean, PayloadFunction) Declaration public PayloadNearQuery(SpanQuery[] clauses, int slop, bool inOrder, PayloadFunction function) Parameters Type Name Description SpanQuery [] clauses System.Int32 slop System.Boolean inOrder PayloadFunction function Fields | Improve this Doc View Source m_fieldName Declaration protected string m_fieldName Field Value Type Description System.String | Improve this Doc View Source m_function Declaration protected PayloadFunction m_function Field Value Type Description PayloadFunction Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides SpanNearQuery.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides SpanQuery.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides SpanNearQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides SpanNearQuery.GetHashCode() | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides SpanNearQuery.ToString(String) See Also ComputePayloadFactor(Int32, Int32, Int32, BytesRef)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.PayloadNearSpanScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.PayloadNearSpanScorer.html",
    "title": "Class PayloadNearQuery.PayloadNearSpanScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadNearQuery.PayloadNearSpanScorer Inheritance System.Object DocIdSetIterator DocsEnum Scorer SpanScorer PayloadNearQuery.PayloadNearSpanScorer Inherited Members SpanScorer.m_spans SpanScorer.m_more SpanScorer.m_doc SpanScorer.m_freq SpanScorer.m_numMatches SpanScorer.m_docScorer SpanScorer.NextDoc() SpanScorer.Advance(Int32) SpanScorer.DocID SpanScorer.Freq SpanScorer.SloppyFreq SpanScorer.GetCost() Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadNearSpanScorer : SpanScorer Constructors | Improve this Doc View Source PayloadNearSpanScorer(PayloadNearQuery, Spans, Weight, Similarity, Similarity.SimScorer) Declaration protected PayloadNearSpanScorer(PayloadNearQuery outerInstance, Spans spans, Weight weight, Similarity similarity, Similarity.SimScorer docScorer) Parameters Type Name Description PayloadNearQuery outerInstance Spans spans Weight weight Similarity similarity Similarity.SimScorer docScorer Fields | Improve this Doc View Source m_payloadScore Declaration protected float m_payloadScore Field Value Type Description System.Single Methods | Improve this Doc View Source GetPayloads(Spans[]) Declaration public virtual void GetPayloads(Spans[] subSpans) Parameters Type Name Description Spans [] subSpans | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides SpanScorer.GetScore() | Improve this Doc View Source ProcessPayloads(ICollection<Byte[]>, Int32, Int32) By default, uses the PayloadFunction to score the payloads, but can be overridden to do other things. Declaration protected virtual void ProcessPayloads(ICollection<byte[]> payLoads, int start, int end) Parameters Type Name Description ICollection < System.Byte []> payLoads The payloads System.Int32 start The start position of the span being scored System.Int32 end The end position of the span being scored See Also Lucene.Net.Search.Spans.Spans.#ctor | Improve this Doc View Source SetFreqCurrentDoc() Declaration protected override bool SetFreqCurrentDoc() Returns Type Description System.Boolean Overrides SpanScorer.SetFreqCurrentDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.PayloadNearSpanWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.PayloadNearSpanWeight.html",
    "title": "Class PayloadNearQuery.PayloadNearSpanWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadNearQuery.PayloadNearSpanWeight Inheritance System.Object Weight SpanWeight PayloadNearQuery.PayloadNearSpanWeight Inherited Members SpanWeight.m_similarity SpanWeight.m_termContexts SpanWeight.m_query SpanWeight.m_stats SpanWeight.Query SpanWeight.GetValueForNormalization() SpanWeight.Normalize(Single, Single) Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadNearSpanWeight : SpanWeight Constructors | Improve this Doc View Source PayloadNearSpanWeight(PayloadNearQuery, SpanQuery, IndexSearcher) Declaration public PayloadNearSpanWeight(PayloadNearQuery outerInstance, SpanQuery query, IndexSearcher searcher) Parameters Type Name Description PayloadNearQuery outerInstance SpanQuery query IndexSearcher searcher Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides SpanWeight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides SpanWeight.GetScorer(AtomicReaderContext, IBits)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadSpanUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadSpanUtil.html",
    "title": "Class PayloadSpanUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadSpanUtil Experimental class to get set of payloads for most standard Lucene queries. Operates like Highlighter - IndexReader should only contain doc of interest, best to use MemoryIndex. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PayloadSpanUtil Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadSpanUtil : object Constructors | Improve this Doc View Source PayloadSpanUtil(IndexReaderContext) Declaration public PayloadSpanUtil(IndexReaderContext context) Parameters Type Name Description IndexReaderContext context that contains doc with payloads to extract See Also Context Methods | Improve this Doc View Source GetPayloadsForQuery(Query) Query should be rewritten for wild/fuzzy support. Declaration public virtual ICollection<byte[]> GetPayloadsForQuery(Query query) Parameters Type Name Description Query query rewritten query Returns Type Description ICollection < System.Byte []> payloads Collection"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.html",
    "title": "Class PayloadTermQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadTermQuery This class is very similar to SpanTermQuery except that it factors in the value of the payload located at each of the positions where the Term occurs. NOTE: In order to take advantage of this with the default scoring implementation ( DefaultSimilarity ), you must override ScorePayload(Int32, Int32, Int32, BytesRef) , which returns 1 by default. Payload scores are aggregated using a pluggable PayloadFunction . Inheritance System.Object Query SpanQuery SpanTermQuery PayloadTermQuery Inherited Members SpanTermQuery.m_term SpanTermQuery.Term SpanTermQuery.Field SpanTermQuery.ExtractTerms(ISet<Term>) SpanTermQuery.ToString(String) SpanTermQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Query.Boost Query.ToString() Query.Rewrite(IndexReader) Query.Clone() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadTermQuery : SpanTermQuery Constructors | Improve this Doc View Source PayloadTermQuery(Term, PayloadFunction) Declaration public PayloadTermQuery(Term term, PayloadFunction function) Parameters Type Name Description Term term PayloadFunction function | Improve this Doc View Source PayloadTermQuery(Term, PayloadFunction, Boolean) Declaration public PayloadTermQuery(Term term, PayloadFunction function, bool includeSpanScore) Parameters Type Name Description Term term PayloadFunction function System.Boolean includeSpanScore Fields | Improve this Doc View Source m_function Declaration protected PayloadFunction m_function Field Value Type Description PayloadFunction Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides SpanQuery.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides SpanTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides SpanTermQuery.GetHashCode() See Also ComputePayloadFactor(Int32, Int32, Int32, BytesRef)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.PayloadTermWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.PayloadTermWeight.html",
    "title": "Class PayloadTermQuery.PayloadTermWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadTermQuery.PayloadTermWeight Inheritance System.Object Weight SpanWeight PayloadTermQuery.PayloadTermWeight Inherited Members SpanWeight.m_similarity SpanWeight.m_termContexts SpanWeight.m_query SpanWeight.m_stats SpanWeight.Query SpanWeight.GetValueForNormalization() SpanWeight.Normalize(Single, Single) Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax protected class PayloadTermWeight : SpanWeight Constructors | Improve this Doc View Source PayloadTermWeight(PayloadTermQuery, PayloadTermQuery, IndexSearcher) Declaration public PayloadTermWeight(PayloadTermQuery outerInstance, PayloadTermQuery query, IndexSearcher searcher) Parameters Type Name Description PayloadTermQuery outerInstance PayloadTermQuery query IndexSearcher searcher Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides SpanWeight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides SpanWeight.GetScorer(AtomicReaderContext, IBits)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer.html",
    "title": "Class PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer Inheritance System.Object DocIdSetIterator DocsEnum Scorer SpanScorer PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer Inherited Members SpanScorer.m_spans SpanScorer.m_more SpanScorer.m_doc SpanScorer.m_freq SpanScorer.m_numMatches SpanScorer.m_docScorer SpanScorer.NextDoc() SpanScorer.Advance(Int32) SpanScorer.DocID SpanScorer.Freq SpanScorer.SloppyFreq SpanScorer.GetCost() Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax protected class PayloadTermSpanScorer : SpanScorer Constructors | Improve this Doc View Source PayloadTermSpanScorer(PayloadTermQuery.PayloadTermWeight, TermSpans, Weight, Similarity.SimScorer) Declaration public PayloadTermSpanScorer(PayloadTermQuery.PayloadTermWeight outerInstance, TermSpans spans, Weight weight, Similarity.SimScorer docScorer) Parameters Type Name Description PayloadTermQuery.PayloadTermWeight outerInstance TermSpans spans Weight weight Similarity.SimScorer docScorer Fields | Improve this Doc View Source m_payload Declaration protected BytesRef m_payload Field Value Type Description BytesRef | Improve this Doc View Source m_payloadScore Declaration protected float m_payloadScore Field Value Type Description System.Single | Improve this Doc View Source m_payloadsSeen Declaration protected int m_payloadsSeen Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetPayloadScore() The score for the payload Declaration protected virtual float GetPayloadScore() Returns Type Description System.Single The score, as calculated by DocScore(Int32, String, Int32, Single) | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single GetSpanScore() * GetPayloadScore() Overrides SpanScorer.GetScore() | Improve this Doc View Source GetSpanScore() Returns the SpanScorer score only. Should not be overridden without good cause! Declaration protected virtual float GetSpanScore() Returns Type Description System.Single the score for just the Span part w/o the payload See Also GetScore() | Improve this Doc View Source ProcessPayload(Similarity) Declaration protected virtual void ProcessPayload(Similarity similarity) Parameters Type Name Description Similarity similarity | Improve this Doc View Source SetFreqCurrentDoc() Declaration protected override bool SetFreqCurrentDoc() Returns Type Description System.Boolean Overrides SpanScorer.SetFreqCurrentDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Search.PhraseQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PhraseQuery.html",
    "title": "Class PhraseQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhraseQuery A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by QueryParser for input like \"new york\" . This query may be combined with other terms or queries with a BooleanQuery . Collection initializer note: To create and populate a PhraseQuery in a single statement, you can use the following example as a guide: var phraseQuery = new PhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) or Add(Term, Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. Inheritance System.Object Query PhraseQuery NGramPhraseQuery Implements IEnumerable < Term > Inherited Members Query.Boost Query.ToString() Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PhraseQuery : Query, IEnumerable<Term> Constructors | Improve this Doc View Source PhraseQuery() Constructs an empty phrase query. Declaration public PhraseQuery() Properties | Improve this Doc View Source Slop Sets the number of other words permitted between words in query phrase. If zero, then this is an exact phrase search. For larger values this works like a WITHIN or NEAR operator. The slop is in fact an edit-distance, where the units correspond to moves of terms in the query phrase out of position. For example, to switch the order of two words requires two moves (the first move places the words atop one another), so to permit re-orderings of phrases, the slop must be at least two. More exact matches are scored higher than sloppier matches, thus search results are sorted by exactness. The slop is zero by default, requiring exact matches. Declaration public virtual int Slop { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(Term) Adds a term to the end of the query phrase. The relative position of the term is the one immediately after the last term added. Declaration public virtual void Add(Term term) Parameters Type Name Description Term term | Improve this Doc View Source Add(Term, Int32) Adds a term to the end of the query phrase. The relative position of the term within the phrase is specified explicitly. this allows e.g. phrases with more than one term at the same position or phrases with gaps (e.g. in connection with stopwords). Declaration public virtual void Add(Term term, int position) Parameters Type Name Description Term term System.Int32 position | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> queryTerms) Parameters Type Name Description ISet < Term > queryTerms Overrides Query.ExtractTerms(ISet<Term>) See Also ExtractTerms ( ISet < Term >) | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the Lucene.Net.Search.PhraseQuery.terms collection. Declaration public IEnumerator<Term> GetEnumerator() Returns Type Description IEnumerator < Term > An enumerator that can be used to iterate through the Lucene.Net.Search.PhraseQuery.terms collection. | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetPositions() Returns the relative positions of terms in this phrase. Declaration public virtual int[] GetPositions() Returns Type Description System.Int32 [] | Improve this Doc View Source GetTerms() Returns the set of terms in this phrase. Declaration public virtual Term[] GetTerms() Returns Type Description Term [] | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string f) Parameters Type Name Description System.String f Returns Type Description System.String Overrides Query.ToString(String) Implements IEnumerable<>"
  },
  "api/Lucene.Net/Lucene.Net.Search.PositiveScoresOnlyCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PositiveScoresOnlyCollector.html",
    "title": "Class PositiveScoresOnlyCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PositiveScoresOnlyCollector A ICollector implementation which wraps another ICollector and makes sure only documents with scores > 0 are collected. Inheritance System.Object PositiveScoresOnlyCollector Implements ICollector Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PositiveScoresOnlyCollector : object, ICollector Constructors | Improve this Doc View Source PositiveScoresOnlyCollector(ICollector) Declaration public PositiveScoresOnlyCollector(ICollector c) Parameters Type Name Description ICollector c Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.PrefixFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PrefixFilter.html",
    "title": "Class PrefixFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixFilter A Filter that restricts search results to values that have a matching prefix in a given field. Inheritance System.Object Filter MultiTermQueryWrapperFilter < PrefixQuery > PrefixFilter Inherited Members MultiTermQueryWrapperFilter<PrefixQuery>.m_query MultiTermQueryWrapperFilter<PrefixQuery>.Equals(Object) MultiTermQueryWrapperFilter<PrefixQuery>.GetHashCode() MultiTermQueryWrapperFilter<PrefixQuery>.Field MultiTermQueryWrapperFilter<PrefixQuery>.GetDocIdSet(AtomicReaderContext, IBits) Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PrefixFilter : MultiTermQueryWrapperFilter<PrefixQuery> Constructors | Improve this Doc View Source PrefixFilter(Term) Declaration public PrefixFilter(Term prefix) Parameters Type Name Description Term prefix Properties | Improve this Doc View Source Prefix Declaration public virtual Term Prefix { get; } Property Value Type Description Term Methods | Improve this Doc View Source ToString() Prints a user-readable version of this query. Declaration public override string ToString() Returns Type Description System.String Overrides Lucene.Net.Search.MultiTermQueryWrapperFilter<Lucene.Net.Search.PrefixQuery>.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.PrefixQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PrefixQuery.html",
    "title": "Class PrefixQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixQuery A Query that matches documents containing terms with a specified prefix. A PrefixQuery is built by QueryParser for input like app* . This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. Inheritance System.Object Query MultiTermQuery PrefixQuery Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PrefixQuery : MultiTermQuery Constructors | Improve this Doc View Source PrefixQuery(Term) Constructs a query for terms starting with prefix . Declaration public PrefixQuery(Term prefix) Parameters Type Name Description Term prefix Properties | Improve this Doc View Source Prefix Returns the prefix of this query. Declaration public virtual Term Prefix { get; } Property Value Type Description Term Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.PrefixTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PrefixTermsEnum.html",
    "title": "Class PrefixTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixTermsEnum Subclass of FilteredTermsEnum for enumerating all terms that match the specified prefix filter term. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Inheritance System.Object TermsEnum FilteredTermsEnum PrefixTermsEnum Implements IBytesRefIterator Inherited Members FilteredTermsEnum.SetInitialSeekTerm(BytesRef) FilteredTermsEnum.NextSeekTerm(BytesRef) FilteredTermsEnum.Attributes FilteredTermsEnum.Term FilteredTermsEnum.Comparer FilteredTermsEnum.DocFreq FilteredTermsEnum.TotalTermFreq FilteredTermsEnum.SeekExact(BytesRef) FilteredTermsEnum.SeekCeil(BytesRef) FilteredTermsEnum.SeekExact(Int64) FilteredTermsEnum.Ord FilteredTermsEnum.Docs(IBits, DocsEnum, DocsFlags) FilteredTermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) FilteredTermsEnum.SeekExact(BytesRef, TermState) FilteredTermsEnum.GetTermState() FilteredTermsEnum.Next() TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PrefixTermsEnum : FilteredTermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source PrefixTermsEnum(TermsEnum, BytesRef) Declaration public PrefixTermsEnum(TermsEnum tenum, BytesRef prefixText) Parameters Type Name Description TermsEnum tenum BytesRef prefixText Methods | Improve this Doc View Source Accept(BytesRef) Declaration protected override FilteredTermsEnum.AcceptStatus Accept(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description FilteredTermsEnum.AcceptStatus Overrides FilteredTermsEnum.Accept(BytesRef) Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Search.Query.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Query.html",
    "title": "Class Query | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Query The abstract base class for queries. Instantiable subclasses are: TermQuery BooleanQuery WildcardQuery PhraseQuery PrefixQuery MultiPhraseQuery FuzzyQuery RegexpQuery TermRangeQuery NumericRangeQuery ConstantScoreQuery DisjunctionMaxQuery MatchAllDocsQuery See also the family of Span Queries ( Lucene.Net.Search.Spans ) and additional queries available in the Queries module Inheritance System.Object Query BooleanQuery ConstantScoreQuery DisjunctionMaxQuery FilteredQuery MatchAllDocsQuery MultiPhraseQuery MultiTermQuery PhraseQuery SpanQuery TermQuery Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Query : object Properties | Improve this Doc View Source Boost Gets or Sets the boost for this query clause. Documents matching this clause will (in addition to the normal weightings) have their score multiplied by Boost . The boost is 1.0 by default. Declaration public virtual float Boost { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Clone() Returns a clone of this query. Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source CreateWeight(IndexSearcher) Expert: Constructs an appropriate Weight implementation for this query. Only implemented by primitive queries, which re-write to themselves. Declaration public virtual Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source ExtractTerms(ISet<Term>) Expert: adds all terms occurring in this query to the terms set. Only works if this query is in its rewritten ( Rewrite(IndexReader) ) form. Declaration public virtual void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Rewrite(IndexReader) Expert: called to re-write queries into primitive queries. For example, a PrefixQuery will be rewritten into a BooleanQuery that consists of TermQuery s. Declaration public virtual Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query | Improve this Doc View Source ToString() Prints a query to a string. Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source ToString(String) Prints a query to a string, with field assumed to be the default field and omitted. Declaration public abstract string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.QueryRescorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.QueryRescorer.html",
    "title": "Class QueryRescorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryRescorer A Rescorer that uses a provided Query to assign scores to the first-pass hits. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Rescorer QueryRescorer Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class QueryRescorer : Rescorer Constructors | Improve this Doc View Source QueryRescorer(Query) Sole constructor, passing the 2nd pass query to assign scores to the 1st pass hits. Declaration public QueryRescorer(Query query) Parameters Type Name Description Query query Methods | Improve this Doc View Source Combine(Single, Boolean, Single) Implement this in a subclass to combine the first pass and second pass scores. If secondPassMatches is false then the second pass query failed to match a hit from the first pass query, and you should ignore the secondPassScore . Declaration protected abstract float Combine(float firstPassScore, bool secondPassMatches, float secondPassScore) Parameters Type Name Description System.Single firstPassScore System.Boolean secondPassMatches System.Single secondPassScore Returns Type Description System.Single | Improve this Doc View Source Explain(IndexSearcher, Explanation, Int32) Declaration public override Explanation Explain(IndexSearcher searcher, Explanation firstPassExplanation, int docID) Parameters Type Name Description IndexSearcher searcher Explanation firstPassExplanation System.Int32 docID Returns Type Description Explanation Overrides Rescorer.Explain(IndexSearcher, Explanation, Int32) | Improve this Doc View Source Rescore(IndexSearcher, TopDocs, Query, Double, Int32) Sugar API, calling Rescore(IndexSearcher, TopDocs, Int32) using a simple linear combination of firstPassScore + weight * secondPassScore Declaration public static TopDocs Rescore(IndexSearcher searcher, TopDocs topDocs, Query query, double weight, int topN) Parameters Type Name Description IndexSearcher searcher TopDocs topDocs Query query System.Double weight System.Int32 topN Returns Type Description TopDocs | Improve this Doc View Source Rescore(IndexSearcher, TopDocs, Int32) Declaration public override TopDocs Rescore(IndexSearcher searcher, TopDocs firstPassTopDocs, int topN) Parameters Type Name Description IndexSearcher searcher TopDocs firstPassTopDocs System.Int32 topN Returns Type Description TopDocs Overrides Rescorer.Rescore(IndexSearcher, TopDocs, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Search.QueryWrapperFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.QueryWrapperFilter.html",
    "title": "Class QueryWrapperFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryWrapperFilter Constrains search results to only match those which also match a provided query. This could be used, for example, with a NumericRangeQuery on a suitably formatted date field to implement date filtering. One could re-use a single CachingWrapperFilter(QueryWrapperFilter) that matches, e.g., only documents modified within the last week. This would only need to be reconstructed once per day. Inheritance System.Object Filter QueryWrapperFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class QueryWrapperFilter : Filter Constructors | Improve this Doc View Source QueryWrapperFilter(Query) Constructs a filter which only matches documents matching query . Declaration public QueryWrapperFilter(Query query) Parameters Type Name Description Query query Properties | Improve this Doc View Source Query Returns the inner Query Declaration public Query Query { get; } Property Value Type Description Query Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceContext-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceContext-1.html",
    "title": "Class ReferenceContext<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReferenceContext<T> ReferenceContext<T> holds a reference instance and ensures it is properly de-referenced from its corresponding ReferenceManager<G> when Dispose() is called. This class is primarily intended to be used with a using block. LUCENENET specific Inheritance System.Object ReferenceContext<T> Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class ReferenceContext<T> : IDisposable where T : class Type Parameters Name Description T The reference type Properties | Improve this Doc View Source Reference The reference acquired from the ReferenceManager<G> . Declaration public T Reference { get; } Property Value Type Description T Methods | Improve this Doc View Source Dispose() Ensures the reference is properly de-referenced from its ReferenceManager<G> . After this call, Reference will be null . Declaration public void Dispose()"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceManager.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceManager.html",
    "title": "Class ReferenceManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReferenceManager LUCENENET specific class used to provide static access to ReferenceManager.IRefreshListener without having to specifiy the generic closing type of ReferenceManager<G> . Inheritance System.Object ReferenceManager Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class ReferenceManager : object"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceManager.IRefreshListener.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceManager.IRefreshListener.html",
    "title": "Interface ReferenceManager.IRefreshListener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ReferenceManager.IRefreshListener Use to receive notification when a refresh has finished. See AddListener(ReferenceManager.IRefreshListener) . Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IRefreshListener Methods | Improve this Doc View Source AfterRefresh(Boolean) Called after the attempted refresh; if the refresh did open a new reference then didRefresh will be true and Acquire() is guaranteed to return the new reference. Declaration void AfterRefresh(bool didRefresh) Parameters Type Name Description System.Boolean didRefresh | Improve this Doc View Source BeforeRefresh() Called right before a refresh attempt starts. Declaration void BeforeRefresh()"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceManager-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceManager-1.html",
    "title": "Class ReferenceManager<G> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReferenceManager<G> Utility class to safely share instances of a certain type across multiple threads, while periodically refreshing them. This class ensures each reference is closed only once all threads have finished using it. It is recommended to consult the documentation of ReferenceManager<G> implementations for their MaybeRefresh() semantics. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ReferenceManager<G> ReaderManager SearcherManager Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class ReferenceManager<G> : IDisposable where G : class Type Parameters Name Description G The concrete type that will be Acquire() d and Release(G) d. Properties | Improve this Doc View Source Current The current reference Declaration protected G Current { get; set; } Property Value Type Description G Methods | Improve this Doc View Source Acquire() Obtain the current reference. You must match every call to acquire with one call to Release(G) ; it's best to do so in a finally clause, and set the reference to null to prevent accidental usage after it has been released. Declaration public G Acquire() Returns Type Description G | Improve this Doc View Source AddListener(ReferenceManager.IRefreshListener) Adds a listener, to be notified when a reference is refreshed/swapped. Declaration public virtual void AddListener(ReferenceManager.IRefreshListener listener) Parameters Type Name Description ReferenceManager.IRefreshListener listener | Improve this Doc View Source AfterMaybeRefresh() Called after a refresh was attempted, regardless of whether a new reference was in fact created. Declaration protected virtual void AfterMaybeRefresh() | Improve this Doc View Source DecRef(G) Decrement reference counting on the given reference. Declaration protected abstract void DecRef(G reference) Parameters Type Name Description G reference | Improve this Doc View Source Dispose() Closes this ReferenceManager to prevent future Acquire() ing. A reference manager should be disposed if the reference to the managed resource should be disposed or the application using the ReferenceManager<G> is shutting down. The managed resource might not be released immediately, if the ReferenceManager<G> user is holding on to a previously Acquire() d reference. The resource will be released once when the last reference is Release(G) d. Those references can still be used as if the manager was still active. Applications should not Acquire() new references from this manager once this method has been called. Acquire() ing a resource on a disposed ReferenceManager<G> will throw an . Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Called after Dispose() , so subclass can free any resources. Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetRefCount(G) Returns the current reference count of the given reference. Declaration protected abstract int GetRefCount(G reference) Parameters Type Name Description G reference Returns Type Description System.Int32 | Improve this Doc View Source MaybeRefresh() You must call this (or MaybeRefreshBlocking() ), periodically, if you want that Acquire() will return refreshed instances. Threads : it's fine for more than one thread to call this at once. Only the first thread will attempt the refresh; subsequent threads will see that another thread is already handling refresh and will return immediately. Note that this means if another thread is already refreshing then subsequent threads will return right away without waiting for the refresh to complete. If this method returns true it means the calling thread either refreshed or that there were no changes to refresh. If it returns false it means another thread is currently refreshing. Declaration public bool MaybeRefresh() Returns Type Description System.Boolean | Improve this Doc View Source MaybeRefreshBlocking() You must call this (or MaybeRefresh() ), periodically, if you want that Acquire() will return refreshed instances. Threads : unlike MaybeRefresh() , if another thread is currently refreshing, this method blocks until that thread completes. It is useful if you want to guarantee that the next call to Acquire() will return a refreshed instance. Otherwise, consider using the non-blocking MaybeRefresh() . Declaration public void MaybeRefreshBlocking() | Improve this Doc View Source RefreshIfNeeded(G) Refresh the given reference if needed. Returns null if no refresh was needed, otherwise a new refreshed reference. Declaration protected abstract G RefreshIfNeeded(G referenceToRefresh) Parameters Type Name Description G referenceToRefresh Returns Type Description G | Improve this Doc View Source Release(G) Release the reference previously obtained via Acquire() . NOTE: it's safe to call this after Dispose() . Declaration public void Release(G reference) Parameters Type Name Description G reference | Improve this Doc View Source RemoveListener(ReferenceManager.IRefreshListener) Remove a listener added with AddListener(ReferenceManager.IRefreshListener) . Declaration public virtual void RemoveListener(ReferenceManager.IRefreshListener listener) Parameters Type Name Description ReferenceManager.IRefreshListener listener | Improve this Doc View Source TryIncRef(G) Try to increment reference counting on the given reference. Returns true if the operation was successful. Declaration protected abstract bool TryIncRef(G reference) Parameters Type Name Description G reference Returns Type Description System.Boolean Extension Methods ReferenceManagerExtensions.GetContext<T>(ReferenceManager<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceManagerExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceManagerExtensions.html",
    "title": "Class ReferenceManagerExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReferenceManagerExtensions Inheritance System.Object ReferenceManagerExtensions Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class ReferenceManagerExtensions : object Methods | Improve this Doc View Source GetContext<T>(ReferenceManager<T>) Obtain the current reference. Like Acquire() , but intended for use in a using block so calling Release(G) happens implicitly. For example: var searcherManager = new SearcherManager(indexWriter, true, null); using (var context = searcherManager.GetContext()) { IndexSearcher searcher = context.Reference; // use searcher... } Declaration public static ReferenceContext<T> GetContext<T>(this ReferenceManager<T> referenceManager) where T : class Parameters Type Name Description ReferenceManager <T> referenceManager this ReferenceManager<G> Returns Type Description ReferenceContext <T> A ReferenceContext<T> instance that holds the Reference and ensures it is released properly when Dispose() is called. Type Parameters Name Description T The reference type"
  },
  "api/Lucene.Net/Lucene.Net.Search.RegexpQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.RegexpQuery.html",
    "title": "Class RegexpQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RegexpQuery A fast regular expression query based on the Lucene.Net.Util.Automaton package. Comparisons are fast The term dictionary is enumerated in an intelligent way, to avoid comparisons. See AutomatonQuery for more details. The supported syntax is documented in the RegExp class. Note this might be different than other regular expression implementations. For some alternatives with different syntax, look under the sandbox. Note this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow RegexpQuery s, a RegExp term should not start with the expression .* This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Query MultiTermQuery AutomatonQuery RegexpQuery Inherited Members AutomatonQuery.m_automaton AutomatonQuery.m_compiled AutomatonQuery.m_term AutomatonQuery.GetTermsEnum(Terms, AttributeSource) AutomatonQuery.GetHashCode() AutomatonQuery.Equals(Object) AutomatonQuery.Automaton MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class RegexpQuery : AutomatonQuery Constructors | Improve this Doc View Source RegexpQuery(Term) Constructs a query for terms matching term . By default, all regular expression features are enabled. Declaration public RegexpQuery(Term term) Parameters Type Name Description Term term Regular expression. | Improve this Doc View Source RegexpQuery(Term, RegExpSyntax) Constructs a query for terms matching term . Declaration public RegexpQuery(Term term, RegExpSyntax flags) Parameters Type Name Description Term term Regular expression. RegExpSyntax flags Optional RegExp features from RegExpSyntax | Improve this Doc View Source RegexpQuery(Term, RegExpSyntax, IAutomatonProvider) Constructs a query for terms matching term . Declaration public RegexpQuery(Term term, RegExpSyntax flags, IAutomatonProvider provider) Parameters Type Name Description Term term Regular expression. RegExpSyntax flags Optional RegExp features from RegExpSyntax IAutomatonProvider provider Custom IAutomatonProvider for named automata Methods | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides AutomatonQuery.ToString(String) See Also RegExp"
  },
  "api/Lucene.Net/Lucene.Net.Search.Rescorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Rescorer.html",
    "title": "Class Rescorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Rescorer Re-scores the topN results ( TopDocs ) from an original query. See QueryRescorer for an actual implementation. Typically, you run a low-cost first-pass query across the entire index, collecting the top few hundred hits perhaps, and then use this class to mix in a more costly second pass scoring. See Rescore(IndexSearcher, TopDocs, Query, Double, Int32) for a simple static method to call to rescore using a 2nd pass Query . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Rescorer QueryRescorer SortRescorer Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Rescorer : object Methods | Improve this Doc View Source Explain(IndexSearcher, Explanation, Int32) Explains how the score for the specified document was computed. Declaration public abstract Explanation Explain(IndexSearcher searcher, Explanation firstPassExplanation, int docID) Parameters Type Name Description IndexSearcher searcher Explanation firstPassExplanation System.Int32 docID Returns Type Description Explanation | Improve this Doc View Source Rescore(IndexSearcher, TopDocs, Int32) Rescore an initial first-pass TopDocs . Declaration public abstract TopDocs Rescore(IndexSearcher searcher, TopDocs firstPassTopDocs, int topN) Parameters Type Name Description IndexSearcher searcher IndexSearcher used to produce the first pass topDocs TopDocs firstPassTopDocs Hits from the first pass search. It's very important that these hits were produced by the provided searcher; otherwise the doc IDs will not match! System.Int32 topN How many re-scored hits to return Returns Type Description TopDocs"
  },
  "api/Lucene.Net/Lucene.Net.Search.ScoreCachingWrappingScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ScoreCachingWrappingScorer.html",
    "title": "Class ScoreCachingWrappingScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScoreCachingWrappingScorer A Scorer which wraps another scorer and caches the score of the current document. Successive calls to GetScore() will return the same result and will not invoke the wrapped Scorer's GetScore() method, unless the current document has changed. This class might be useful due to the changes done to the ICollector interface, in which the score is not computed for a document by default, only if the collector requests it. Some collectors may need to use the score in several places, however all they have in hand is a Scorer object, and might end up computing the score of a document more than once. Inheritance System.Object DocIdSetIterator DocsEnum Scorer ScoreCachingWrappingScorer Inherited Members Scorer.m_weight Scorer.Weight DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ScoreCachingWrappingScorer : Scorer Constructors | Improve this Doc View Source ScoreCachingWrappingScorer(Scorer) Creates a new instance by wrapping the given scorer. Declaration public ScoreCachingWrappingScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetChildren() Declaration public override ICollection<Scorer.ChildScorer> GetChildren() Returns Type Description ICollection < Scorer.ChildScorer > Overrides Scorer.GetChildren() | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Search.ScoreDoc.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ScoreDoc.html",
    "title": "Class ScoreDoc | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScoreDoc Holds one hit in TopDocs . Inheritance System.Object ScoreDoc FieldDoc FieldValueHitQueue.Entry Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ScoreDoc : object Constructors | Improve this Doc View Source ScoreDoc(Int32, Single) Constructs a ScoreDoc . Declaration public ScoreDoc(int doc, float score) Parameters Type Name Description System.Int32 doc System.Single score | Improve this Doc View Source ScoreDoc(Int32, Single, Int32) Constructs a ScoreDoc . Declaration public ScoreDoc(int doc, float score, int shardIndex) Parameters Type Name Description System.Int32 doc System.Single score System.Int32 shardIndex Properties | Improve this Doc View Source Doc A hit document's number. Declaration public int Doc { get; set; } Property Value Type Description System.Int32 See Also Doc(Int32) | Improve this Doc View Source Score The score of this document for the query. Declaration public float Score { get; set; } Property Value Type Description System.Single | Improve this Doc View Source ShardIndex Only set by Merge(Sort, Int32, Int32, TopDocs[]) Declaration public int ShardIndex { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ToString() A convenience method for debugging. Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.Scorer.ChildScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Scorer.ChildScorer.html",
    "title": "Class Scorer.ChildScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Scorer.ChildScorer A child Scorer and its relationship to its parent. The meaning of the relationship depends upon the parent query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Scorer.ChildScorer Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ChildScorer : object Constructors | Improve this Doc View Source ChildScorer(Scorer, String) Creates a new Scorer.ChildScorer node with the specified relationship. The relationship can be any be any string that makes sense to the parent Scorer . Declaration public ChildScorer(Scorer child, string relationship) Parameters Type Name Description Scorer child System.String relationship Properties | Improve this Doc View Source Child Child Scorer . (note this is typically a direct child, and may itself also have children). Declaration public Scorer Child { get; } Property Value Type Description Scorer | Improve this Doc View Source Relationship An arbitrary string relating this scorer to the parent. Declaration public string Relationship { get; } Property Value Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.Scorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Scorer.html",
    "title": "Class Scorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Scorer Expert: Common scoring functionality for different types of queries. A Scorer iterates over documents matching a query in increasing order of doc Id. Document scores are computed using a given Similarity implementation. NOTE : The values , and are not valid scores. Certain collectors (eg TopScoreDocCollector ) will not properly collect hits with these scores. Inheritance System.Object DocIdSetIterator DocsEnum Scorer ConstantScoreQuery.ConstantScorer ScoreCachingWrappingScorer SpanScorer Inherited Members DocsEnum.Freq DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.DocID DocIdSetIterator.NextDoc() DocIdSetIterator.Advance(Int32) DocIdSetIterator.SlowAdvance(Int32) DocIdSetIterator.GetCost() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Scorer : DocsEnum Constructors | Improve this Doc View Source Scorer(Weight) Constructs a Scorer Declaration protected Scorer(Weight weight) Parameters Type Name Description Weight weight The scorers Weight . Fields | Improve this Doc View Source m_weight The Scorer 's parent Weight . In some cases this may be null . Declaration protected readonly Weight m_weight Field Value Type Description Weight Properties | Improve this Doc View Source Weight returns parent Weight This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual Weight Weight { get; } Property Value Type Description Weight Methods | Improve this Doc View Source GetChildren() Returns child sub-scorers This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual ICollection<Scorer.ChildScorer> GetChildren() Returns Type Description ICollection < Scorer.ChildScorer > | Improve this Doc View Source GetScore() Returns the score of the current document matching the query. Initially invalid, until NextDoc() or Advance(Int32) is called the first time, or when called from within Collect(Int32) . Declaration public abstract float GetScore() Returns Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Search.ScoringRewrite-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ScoringRewrite-1.html",
    "title": "Class ScoringRewrite<Q> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScoringRewrite<Q> Base rewrite method that translates each term into a query, and keeps the scores as computed by the query. @lucene.internal - Only public to be accessible by spans package. Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite <Q> ScoringRewrite<Q> Inherited Members TermCollectingRewrite<Q>.GetTopLevelQuery() TermCollectingRewrite<Q>.AddClause(Q, Term, Int32, Single) TermCollectingRewrite<Q>.AddClause(Q, Term, Int32, Single, TermContext) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class ScoringRewrite<Q> : TermCollectingRewrite<Q> where Q : Query Type Parameters Name Description Q Fields | Improve this Doc View Source CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE Like SCORING_BOOLEAN_QUERY_REWRITE except scores are not computed. Instead, each matching document receives a constant score equal to the query's boost. NOTE : this rewrite method will hit BooleanQuery.TooManyClausesException if the number of terms exceeds MaxClauseCount . Declaration public static readonly MultiTermQuery.RewriteMethod CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE Field Value Type Description MultiTermQuery.RewriteMethod See Also MultiTermRewriteMethod | Improve this Doc View Source SCORING_BOOLEAN_QUERY_REWRITE A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. Note that typically such scores are meaningless to the user, and require non-trivial CPU to compute, so it's almost always better to use CONSTANT_SCORE_AUTO_REWRITE_DEFAULT instead. NOTE : this rewrite method will hit BooleanQuery.TooManyClausesException if the number of terms exceeds MaxClauseCount . Declaration public static readonly ScoringRewrite<BooleanQuery> SCORING_BOOLEAN_QUERY_REWRITE Field Value Type Description ScoringRewrite < BooleanQuery > See Also MultiTermRewriteMethod Methods | Improve this Doc View Source CheckMaxClauseCount(Int32) This method is called after every new term to check if the number of max clauses (e.g. in BooleanQuery ) is not exceeded. Throws the corresponding . Declaration protected abstract void CheckMaxClauseCount(int count) Parameters Type Name Description System.Int32 count | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery)"
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherFactory.html",
    "title": "Class SearcherFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearcherFactory Factory class used by SearcherManager to create new IndexSearcher s. The default implementation just creates an IndexSearcher with no custom behavior: public IndexSearcher NewSearcher(IndexReader r) { return new IndexSearcher(r); } You can pass your own factory instead if you want custom behavior, such as: Setting a custom scoring model: Similarity Parallel per-segment search: Return custom subclasses of IndexSearcher (for example that implement distributed scoring) Run queries to warm your IndexSearcher before it is used. Note: when using near-realtime search you may want to also set MergedSegmentWarmer to warm newly merged segments in the background, outside of the reopen path. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SearcherFactory Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class SearcherFactory : object Methods | Improve this Doc View Source NewSearcher(IndexReader) Returns a new IndexSearcher over the given reader. Declaration public virtual IndexSearcher NewSearcher(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description IndexSearcher"
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.html",
    "title": "Class SearcherLifetimeManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearcherLifetimeManager Keeps track of current plus old IndexSearcher s, disposing the old ones once they have timed out. Use it like this: SearcherLifetimeManager mgr = new SearcherLifetimeManager(); Per search-request, if it's a \"new\" search request, then obtain the latest searcher you have (for example, by using SearcherManager ), and then record this searcher: // Record the current searcher, and save the returend // token into user's search results (eg as a hidden // HTML form field): long token = mgr.Record(searcher); When a follow-up search arrives, for example the user clicks next page, drills down/up, etc., take the token that you saved from the previous search and: // If possible, obtain the same searcher as the last // search: IndexSearcher searcher = mgr.Acquire(token); if (searcher != null) { // Searcher is still here try { // do searching... } finally { mgr.Release(searcher); // Do not use searcher after this! searcher = null; } } else { // Searcher was pruned -- notify user session timed // out, or, pull fresh searcher again } Finally, in a separate thread, ideally the same thread that's periodically reopening your searchers, you should periodically prune old searchers: mgr.Prune(new PruneByAge(600.0)); NOTE : keeping many searchers around means you'll use more resources (open files, RAM) than a single searcher. However, as long as you are using OpenIfChanged(DirectoryReader) , the searchers will usually share almost all segments and the added resource usage is contained. When a large merge has completed, and you reopen, because that is a large change, the new searcher will use higher additional RAM than other searchers; but large merges don't complete very often and it's unlikely you'll hit two of them in your expiration window. Still you should budget plenty of heap in the runtime to have a good safety margin. Inheritance System.Object SearcherLifetimeManager Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class SearcherLifetimeManager : IDisposable Methods | Improve this Doc View Source Acquire(Int64) Retrieve a previously recorded IndexSearcher , if it has not yet been closed. NOTE : this may return null when the requested searcher has already timed out. When this happens you should notify your user that their session timed out and that they'll have to restart their search. If this returns a non-null result, you must match later call Release(IndexSearcher) on this searcher, best from a finally clause. Declaration public virtual IndexSearcher Acquire(long version) Parameters Type Name Description System.Int64 version Returns Type Description IndexSearcher | Improve this Doc View Source Dispose() Close this to future searching; any searches still in process in other threads won't be affected, and they should still call Release(IndexSearcher) after they are done. NOTE : you must ensure no other threads are calling Record(IndexSearcher) while you call Dispose(); otherwise it's possible not all searcher references will be freed. Declaration public virtual void Dispose() | Improve this Doc View Source Prune(SearcherLifetimeManager.IPruner) Calls provided SearcherLifetimeManager.IPruner to prune entries. The entries are passed to the SearcherLifetimeManager.IPruner in sorted (newest to oldest IndexSearcher ) order. NOTE : you must peridiocally call this, ideally from the same background thread that opens new searchers. Declaration public virtual void Prune(SearcherLifetimeManager.IPruner pruner) Parameters Type Name Description SearcherLifetimeManager.IPruner pruner | Improve this Doc View Source Record(IndexSearcher) Records that you are now using this IndexSearcher . Always call this when you've obtained a possibly new IndexSearcher , for example from SearcherManager . It's fine if you already passed the same searcher to this method before. This returns the token that you can later pass to Acquire(Int64) to retrieve the same IndexSearcher . You should record this token in the search results sent to your user, such that if the user performs a follow-on action (clicks next page, drills down, etc.) the token is returned. Declaration public virtual long Record(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description System.Int64 | Improve this Doc View Source Release(IndexSearcher) Release a searcher previously obtained from Acquire(Int64) . NOTE : it's fine to call this after Dispose(). Declaration public virtual void Release(IndexSearcher s) Parameters Type Name Description IndexSearcher s"
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.IPruner.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.IPruner.html",
    "title": "Interface SearcherLifetimeManager.IPruner | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface SearcherLifetimeManager.IPruner See Prune(SearcherLifetimeManager.IPruner) . Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IPruner Methods | Improve this Doc View Source DoPrune(Double, IndexSearcher) Return true if this searcher should be removed. Declaration bool DoPrune(double ageSec, IndexSearcher searcher) Parameters Type Name Description System.Double ageSec How much time has passed since this searcher was the current (live) searcher IndexSearcher searcher Searcher Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.PruneByAge.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.PruneByAge.html",
    "title": "Class SearcherLifetimeManager.PruneByAge | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearcherLifetimeManager.PruneByAge Simple pruner that drops any searcher older by more than the specified seconds, than the newest searcher. Inheritance System.Object SearcherLifetimeManager.PruneByAge Implements SearcherLifetimeManager.IPruner Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class PruneByAge : object, SearcherLifetimeManager.IPruner Constructors | Improve this Doc View Source PruneByAge(Double) Declaration public PruneByAge(double maxAgeSec) Parameters Type Name Description System.Double maxAgeSec Methods | Improve this Doc View Source DoPrune(Double, IndexSearcher) Declaration public bool DoPrune(double ageSec, IndexSearcher searcher) Parameters Type Name Description System.Double ageSec IndexSearcher searcher Returns Type Description System.Boolean Implements SearcherLifetimeManager.IPruner"
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherManager.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherManager.html",
    "title": "Class SearcherManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearcherManager Utility class to safely share IndexSearcher instances across multiple threads, while periodically reopening. This class ensures each searcher is disposed only once all threads have finished using it. Use Acquire() to obtain the current searcher, and Release(G) to release it, like this: IndexSearcher s = manager.Acquire(); try { // Do searching, doc retrieval, etc. with s } finally { manager.Release(s); // Do not use s after this! s = null; } In addition you should periodically call MaybeRefresh() . While it's possible to call this just before running each query, this is discouraged since it penalizes the unlucky queries that do the reopen. It's better to use a separate background thread, that periodically calls MaybeRefresh() . Finally, be sure to call Dispose() once you are done. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ReferenceManager < IndexSearcher > SearcherManager Inherited Members ReferenceManager<IndexSearcher>.Current ReferenceManager<IndexSearcher>.Acquire() ReferenceManager<IndexSearcher>.Dispose() ReferenceManager<IndexSearcher>.Dispose(Boolean) ReferenceManager<IndexSearcher>.MaybeRefresh() ReferenceManager<IndexSearcher>.MaybeRefreshBlocking() ReferenceManager<IndexSearcher>.AfterMaybeRefresh() ReferenceManager<IndexSearcher>.Release(IndexSearcher) ReferenceManager<IndexSearcher>.AddListener(ReferenceManager.IRefreshListener) ReferenceManager<IndexSearcher>.RemoveListener(ReferenceManager.IRefreshListener) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class SearcherManager : ReferenceManager<IndexSearcher> Constructors | Improve this Doc View Source SearcherManager(IndexWriter, Boolean, SearcherFactory) Creates and returns a new SearcherManager from the given IndexWriter . Declaration public SearcherManager(IndexWriter writer, bool applyAllDeletes, SearcherFactory searcherFactory) Parameters Type Name Description IndexWriter writer The IndexWriter to open the IndexReader from. System.Boolean applyAllDeletes If true , all buffered deletes will be applied (made visible) in the IndexSearcher / DirectoryReader . If false , the deletes may or may not be applied, but remain buffered (in IndexWriter ) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false . See OpenIfChanged(DirectoryReader, IndexWriter, Boolean) . SearcherFactory searcherFactory An optional SearcherFactory . Pass null if you don't require the searcher to be warmed before going live or other custom behavior. | Improve this Doc View Source SearcherManager(Directory, SearcherFactory) Creates and returns a new SearcherManager from the given Directory . Declaration public SearcherManager(Directory dir, SearcherFactory searcherFactory) Parameters Type Name Description Directory dir The directory to open the DirectoryReader on. SearcherFactory searcherFactory An optional SearcherFactory . Pass null if you don't require the searcher to be warmed before going live or other custom behavior. Methods | Improve this Doc View Source DecRef(IndexSearcher) Declaration protected override void DecRef(IndexSearcher reference) Parameters Type Name Description IndexSearcher reference Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Search.IndexSearcher>.DecRef(Lucene.Net.Search.IndexSearcher) | Improve this Doc View Source GetRefCount(IndexSearcher) Declaration protected override int GetRefCount(IndexSearcher reference) Parameters Type Name Description IndexSearcher reference Returns Type Description System.Int32 Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Search.IndexSearcher>.GetRefCount(Lucene.Net.Search.IndexSearcher) | Improve this Doc View Source GetSearcher(SearcherFactory, IndexReader) Expert: creates a searcher from the provided IndexReader using the provided SearcherFactory . NOTE: this decRefs incoming reader on throwing an exception. Declaration public static IndexSearcher GetSearcher(SearcherFactory searcherFactory, IndexReader reader) Parameters Type Name Description SearcherFactory searcherFactory IndexReader reader Returns Type Description IndexSearcher | Improve this Doc View Source IsSearcherCurrent() Returns true if no changes have occured since this searcher ie. reader was opened, otherwise false . Declaration public bool IsSearcherCurrent() Returns Type Description System.Boolean See Also IsCurrent () | Improve this Doc View Source RefreshIfNeeded(IndexSearcher) Declaration protected override IndexSearcher RefreshIfNeeded(IndexSearcher referenceToRefresh) Parameters Type Name Description IndexSearcher referenceToRefresh Returns Type Description IndexSearcher Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Search.IndexSearcher>.RefreshIfNeeded(Lucene.Net.Search.IndexSearcher) | Improve this Doc View Source TryIncRef(IndexSearcher) Declaration protected override bool TryIncRef(IndexSearcher reference) Parameters Type Name Description IndexSearcher reference Returns Type Description System.Boolean Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Search.IndexSearcher>.TryIncRef(Lucene.Net.Search.IndexSearcher) Extension Methods ReferenceManagerExtensions.GetContext<T>(ReferenceManager<T>) See Also SearcherFactory"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffect.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffect.html",
    "title": "Class AfterEffect | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AfterEffect This class acts as the base class for the implementations of the first normalization of the informative content in the DFR framework. This component is also called the after effect and is defined by the formula Inf 2 = 1 - Prob 2 , where Prob 2 measures the information gain . @lucene.experimental Inheritance System.Object AfterEffect AfterEffect.NoAfterEffect AfterEffectB AfterEffectL Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class AfterEffect : object Constructors | Improve this Doc View Source AfterEffect() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public AfterEffect() Methods | Improve this Doc View Source Explain(BasicStats, Single) Returns an explanation for the score. Declaration public abstract Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation | Improve this Doc View Source Score(BasicStats, Single) Returns the aftereffect score. Declaration public abstract float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single | Improve this Doc View Source ToString() Subclasses must override this method to return the code of the after effect formula. Refer to the original paper for the list. Declaration public abstract override string ToString() Returns Type Description System.String See Also DFRSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffect.NoAfterEffect.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffect.NoAfterEffect.html",
    "title": "Class AfterEffect.NoAfterEffect | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AfterEffect.NoAfterEffect Implementation used when there is no aftereffect. Inheritance System.Object AfterEffect AfterEffect.NoAfterEffect Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public sealed class NoAfterEffect : AfterEffect Constructors | Improve this Doc View Source NoAfterEffect() Sole constructor: parameter-free Declaration public NoAfterEffect() Methods | Improve this Doc View Source Explain(BasicStats, Single) Declaration public override Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation Overrides AfterEffect.Explain(BasicStats, Single) | Improve this Doc View Source Score(BasicStats, Single) Declaration public override float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides AfterEffect.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AfterEffect.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffectB.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffectB.html",
    "title": "Class AfterEffectB | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AfterEffectB Model of the information gain based on the ratio of two Bernoulli processes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AfterEffect AfterEffectB Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class AfterEffectB : AfterEffect Constructors | Improve this Doc View Source AfterEffectB() Sole constructor: parameter-free Declaration public AfterEffectB() Methods | Improve this Doc View Source Explain(BasicStats, Single) Declaration public override sealed Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation Overrides AfterEffect.Explain(BasicStats, Single) | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides AfterEffect.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AfterEffect.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffectL.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffectL.html",
    "title": "Class AfterEffectL | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AfterEffectL Model of the information gain based on Laplace's law of succession. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AfterEffect AfterEffectL Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class AfterEffectL : AfterEffect Constructors | Improve this Doc View Source AfterEffectL() Sole constructor: parameter-free Declaration public AfterEffectL() Methods | Improve this Doc View Source Explain(BasicStats, Single) Declaration public override sealed Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation Overrides AfterEffect.Explain(BasicStats, Single) | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides AfterEffect.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AfterEffect.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModel.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModel.html",
    "title": "Class BasicModel | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModel This class acts as the base class for the specific basic model implementations in the DFR framework. Basic models compute the informative content Inf 1 = -log 2 Prob 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelBE BasicModelD BasicModelG BasicModelIF BasicModelIn BasicModelIne BasicModelP Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class BasicModel : object Constructors | Improve this Doc View Source BasicModel() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public BasicModel() Methods | Improve this Doc View Source Explain(BasicStats, Single) Returns an explanation for the score. Most basic models use the number of documents and the total term frequency to compute Inf 1 . this method provides a generic explanation for such models. Subclasses that use other statistics must override this method. Declaration public virtual Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation | Improve this Doc View Source Score(BasicStats, Single) Returns the informative content score. Declaration public abstract float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single | Improve this Doc View Source ToString() Subclasses must override this method to return the code of the basic model formula. Refer to the original paper for the list. Declaration public abstract override string ToString() Returns Type Description System.String See Also DFRSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelBE.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelBE.html",
    "title": "Class BasicModelBE | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModelBE Limiting form of the Bose-Einstein model. The formula used in Lucene differs slightly from the one in the original paper: F is increased by tfn+1 and N is increased by F @lucene.experimental NOTE: in some corner cases this model may give poor performance with Normalizations that return large values for tfn such as NormalizationH3 . Consider using the geometric approximation ( BasicModelG ) instead, which provides the same relevance but with less practical problems. Inheritance System.Object BasicModel BasicModelBE Inherited Members BasicModel.Explain(BasicStats, Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelBE : BasicModel Constructors | Improve this Doc View Source BasicModelBE() Sole constructor: parameter-free Declaration public BasicModelBE() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelD.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelD.html",
    "title": "Class BasicModelD | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModelD Implements the approximation of the binomial model with the divergence for DFR. The formula used in Lucene differs slightly from the one in the original paper: to avoid underflow for small values of N and F , N is increased by 1 and F is always increased by tfn+1 . WARNING: for terms that do not meet the expected random distribution (e.g. stopwords), this model may give poor performance, such as abnormally high scores for low tf values. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelD Inherited Members BasicModel.Explain(BasicStats, Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelD : BasicModel Constructors | Improve this Doc View Source BasicModelD() Sole constructor: parameter-free Declaration public BasicModelD() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelG.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelG.html",
    "title": "Class BasicModelG | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModelG Geometric as limiting form of the Bose-Einstein model. The formula used in Lucene differs slightly from the one in the original paper: F is increased by 1 and N is increased by F . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelG Inherited Members BasicModel.Explain(BasicStats, Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelG : BasicModel Constructors | Improve this Doc View Source BasicModelG() Sole constructor: parameter-free Declaration public BasicModelG() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIF.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIF.html",
    "title": "Class BasicModelIF | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModelIF An approximation of the I(n e ) model. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelIF Inherited Members BasicModel.Explain(BasicStats, Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelIF : BasicModel Constructors | Improve this Doc View Source BasicModelIF() Sole constructor: parameter-free Declaration public BasicModelIF() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIn.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIn.html",
    "title": "Class BasicModelIn | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModelIn The basic tf-idf model of randomness. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelIn Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelIn : BasicModel Constructors | Improve this Doc View Source BasicModelIn() Sole constructor: parameter-free Declaration public BasicModelIn() Methods | Improve this Doc View Source Explain(BasicStats, Single) Declaration public override sealed Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation Overrides BasicModel.Explain(BasicStats, Single) | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIne.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIne.html",
    "title": "Class BasicModelIne | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModelIne Tf-idf model of randomness, based on a mixture of Poisson and inverse document frequency. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelIne Inherited Members BasicModel.Explain(BasicStats, Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelIne : BasicModel Constructors | Improve this Doc View Source BasicModelIne() Sole constructor: parameter-free Declaration public BasicModelIne() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelP.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelP.html",
    "title": "Class BasicModelP | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModelP Implements the Poisson approximation for the binomial model for DFR. @lucene.experimental WARNING: for terms that do not meet the expected random distribution (e.g. stopwords), this model may give poor performance, such as abnormally high scores for low tf values. Inheritance System.Object BasicModel BasicModelP Inherited Members BasicModel.Explain(BasicStats, Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelP : BasicModel Constructors | Improve this Doc View Source BasicModelP() Sole constructor: parameter-free Declaration public BasicModelP() Fields | Improve this Doc View Source LOG2_E log2(Math.E) , precomputed. Declaration protected static double LOG2_E Field Value Type Description System.Double Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicStats.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicStats.html",
    "title": "Class BasicStats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicStats Stores all statistics commonly used ranking methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity.SimWeight BasicStats LMSimilarity.LMStats Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicStats : Similarity.SimWeight Constructors | Improve this Doc View Source BasicStats(String, Single) Constructor. Sets the query boost. Declaration public BasicStats(string field, float queryBoost) Parameters Type Name Description System.String field System.Single queryBoost Fields | Improve this Doc View Source m_avgFieldLength The average field length. Declaration protected float m_avgFieldLength Field Value Type Description System.Single | Improve this Doc View Source m_docFreq The document frequency. Declaration protected long m_docFreq Field Value Type Description System.Int64 | Improve this Doc View Source m_numberOfDocuments The number of documents. Declaration protected long m_numberOfDocuments Field Value Type Description System.Int64 | Improve this Doc View Source m_numberOfFieldTokens The total number of tokens in the field. Declaration protected long m_numberOfFieldTokens Field Value Type Description System.Int64 | Improve this Doc View Source m_queryBoost Query's inner boost. Declaration protected readonly float m_queryBoost Field Value Type Description System.Single | Improve this Doc View Source m_topLevelBoost Any outer query's boost. Declaration protected float m_topLevelBoost Field Value Type Description System.Single | Improve this Doc View Source m_totalBoost For most Similarities, the immediate and the top level query boosts are not handled differently. Hence, this field is just the product of the other two. Declaration protected float m_totalBoost Field Value Type Description System.Single | Improve this Doc View Source m_totalTermFreq The total number of occurrences of this term across all documents. Declaration protected long m_totalTermFreq Field Value Type Description System.Int64 Properties | Improve this Doc View Source AvgFieldLength Returns the average field length. Declaration public virtual float AvgFieldLength { get; set; } Property Value Type Description System.Single | Improve this Doc View Source DocFreq Returns the document frequency. Declaration public virtual long DocFreq { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source Field The field. Declaration public string Field { get; } Property Value Type Description System.String | Improve this Doc View Source NumberOfDocuments Gets or Sets the number of documents. Declaration public virtual long NumberOfDocuments { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source NumberOfFieldTokens Returns the total number of tokens in the field. Declaration public virtual long NumberOfFieldTokens { get; set; } Property Value Type Description System.Int64 See Also SumTotalTermFreq | Improve this Doc View Source TotalBoost Returns the total boost. Declaration public virtual float TotalBoost { get; } Property Value Type Description System.Single | Improve this Doc View Source TotalTermFreq Returns the total number of occurrences of this term across all documents. Declaration public virtual long TotalTermFreq { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source GetValueForNormalization() The square of the raw normalization value. Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Similarity.SimWeight.GetValueForNormalization() See Also RawNormalizationValue() | Improve this Doc View Source Normalize(Single, Single) No normalization is done. topLevelBoost is saved in the object, however. Declaration public override void Normalize(float queryNorm, float topLevelBoost) Parameters Type Name Description System.Single queryNorm System.Single topLevelBoost Overrides Similarity.SimWeight.Normalize(Single, Single) | Improve this Doc View Source RawNormalizationValue() Computes the raw normalization value. This basic implementation returns the query boost. Subclasses may override this method to include other factors (such as idf), or to save the value for inclusion in Normalize(Single, Single) , etc. Declaration protected virtual float RawNormalizationValue() Returns Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BM25Similarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BM25Similarity.html",
    "title": "Class BM25Similarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BM25Similarity BM25 Similarity. Introduced in Stephen E. Robertson, Steve Walker, Susan Jones, Micheline Hancock-Beaulieu, and Mike Gatford. Okapi at TREC-3. In Proceedings of the Third T ext RE trieval C onference (TREC 1994). Gaithersburg, USA, November 1994. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity BM25Similarity Inherited Members Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BM25Similarity : Similarity Constructors | Improve this Doc View Source BM25Similarity() BM25 with these default values: k1 = 1.2 , b = 0.75 . Declaration public BM25Similarity() | Improve this Doc View Source BM25Similarity(Single, Single) BM25 with the supplied parameter values. Declaration public BM25Similarity(float k1, float b) Parameters Type Name Description System.Single k1 Controls non-linear term frequency normalization (saturation). System.Single b Controls to what degree document length normalizes tf values. Properties | Improve this Doc View Source B Returns the b parameter Declaration public virtual float B { get; } Property Value Type Description System.Single See Also BM25Similarity(Single, Single) | Improve this Doc View Source DiscountOverlaps Gets or Sets whether overlap tokens (Tokens with 0 position increment) are ignored when computing norm. By default this is true, meaning overlap tokens do not count when computing norms. Declaration public virtual bool DiscountOverlaps { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source K1 Returns the k1 parameter Declaration public virtual float K1 { get; } Property Value Type Description System.Single See Also BM25Similarity(Single, Single) Methods | Improve this Doc View Source AvgFieldLength(CollectionStatistics) The default implementation computes the average as sumTotalTermFreq / maxDoc , or returns 1 if the index does not store sumTotalTermFreq (Lucene 3.x indexes or any field that omits frequency information). Declaration protected virtual float AvgFieldLength(CollectionStatistics collectionStats) Parameters Type Name Description CollectionStatistics collectionStats Returns Type Description System.Single | Improve this Doc View Source ComputeNorm(FieldInvertState) Declaration public override sealed long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override sealed Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source DecodeNormValue(Byte) The default implementation returns 1 / f 2 where f is Byte315ToSingle(Byte) . Declaration protected virtual float DecodeNormValue(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Single | Improve this Doc View Source EncodeNormValue(Single, Int32) The default implementation encodes boost / sqrt(length) with SingleToByte315(Single) . This is compatible with Lucene's default implementation. If you change this, then you should change DecodeNormValue(Byte) to match. Declaration protected virtual byte EncodeNormValue(float boost, int fieldLength) Parameters Type Name Description System.Single boost System.Int32 fieldLength Returns Type Description System.Byte | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override sealed Similarity.SimScorer GetSimScorer(Similarity.SimWeight stats, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight stats AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) | Improve this Doc View Source Idf(Int64, Int64) Implemented as log(1 + (numDocs - docFreq + 0.5)/(docFreq + 0.5)) . Declaration protected virtual float Idf(long docFreq, long numDocs) Parameters Type Name Description System.Int64 docFreq System.Int64 numDocs Returns Type Description System.Single | Improve this Doc View Source IdfExplain(CollectionStatistics, TermStatistics) Computes a score factor for a simple term and returns an explanation for that score factor. The default implementation uses: Idf(docFreq, searcher.MaxDoc); Note that MaxDoc is used instead of NumDocs because also DocFreq is used, and when the latter is inaccurate, so is MaxDoc , and in the same direction. In addition, MaxDoc is more efficient to compute Declaration public virtual Explanation IdfExplain(CollectionStatistics collectionStats, TermStatistics termStats) Parameters Type Name Description CollectionStatistics collectionStats collection-level statistics TermStatistics termStats term-level statistics for the term Returns Type Description Explanation an Explanation object that includes both an idf score factor and an explanation for the term. | Improve this Doc View Source IdfExplain(CollectionStatistics, TermStatistics[]) Computes a score factor for a phrase. The default implementation sums the idf factor for each term in the phrase. Declaration public virtual Explanation IdfExplain(CollectionStatistics collectionStats, TermStatistics[] termStats) Parameters Type Name Description CollectionStatistics collectionStats collection-level statistics TermStatistics [] termStats term-level statistics for the terms in the phrase Returns Type Description Explanation an Explanation object that includes both an idf score factor for the phrase and an explanation for each term. | Improve this Doc View Source ScorePayload(Int32, Int32, Int32, BytesRef) The default implementation returns 1 Declaration protected virtual float ScorePayload(int doc, int start, int end, BytesRef payload) Parameters Type Name Description System.Int32 doc System.Int32 start System.Int32 end BytesRef payload Returns Type Description System.Single | Improve this Doc View Source SloppyFreq(Int32) Implemented as 1 / (distance + 1) . Declaration protected virtual float SloppyFreq(int distance) Parameters Type Name Description System.Int32 distance Returns Type Description System.Single | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.DefaultSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.DefaultSimilarity.html",
    "title": "Class DefaultSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultSimilarity Expert: Default scoring implementation which encodes ( EncodeNormValue(Single) ) norm values as a single byte before being stored. At search time, the norm byte value is read from the index Directory and decoded ( DecodeNormValue(Int64) ) back to a float norm value. this encoding/decoding, while reducing index size, comes with the price of precision loss - it is not guaranteed that Decode(Encode(x)) = x . For instance, Decode(Encode(0.89)) = 0.75 . Compression of norm values to a single byte saves memory at search time, because once a field is referenced at search time, its norms - for all documents - are maintained in memory. The rationale supporting such lossy compression of norm values is that given the difficulty (and inaccuracy) of users to express their true information need by a query, only big differences matter. Last, note that search time is too late to modify this norm part of scoring, e.g. by using a different Similarity for search. Inheritance System.Object Similarity TFIDFSimilarity DefaultSimilarity Inherited Members TFIDFSimilarity.IdfExplain(CollectionStatistics, TermStatistics) TFIDFSimilarity.IdfExplain(CollectionStatistics, TermStatistics[]) TFIDFSimilarity.ComputeNorm(FieldInvertState) TFIDFSimilarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) TFIDFSimilarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DefaultSimilarity : TFIDFSimilarity Constructors | Improve this Doc View Source DefaultSimilarity() Sole constructor: parameter-free Declaration public DefaultSimilarity() Fields | Improve this Doc View Source m_discountOverlaps True if overlap tokens (tokens with a position of increment of zero) are discounted from the document's length. Declaration protected bool m_discountOverlaps Field Value Type Description System.Boolean Properties | Improve this Doc View Source DiscountOverlaps Determines whether overlap tokens (Tokens with 0 position increment) are ignored when computing norm. By default this is true, meaning overlap tokens do not count when computing norms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual bool DiscountOverlaps { get; set; } Property Value Type Description System.Boolean See Also ComputeNorm ( FieldInvertState ) Methods | Improve this Doc View Source Coord(Int32, Int32) Implemented as overlap / maxOverlap . Declaration public override float Coord(int overlap, int maxOverlap) Parameters Type Name Description System.Int32 overlap System.Int32 maxOverlap Returns Type Description System.Single Overrides TFIDFSimilarity.Coord(Int32, Int32) | Improve this Doc View Source DecodeNormValue(Int64) Decodes the norm value, assuming it is a single byte. Declaration public override sealed float DecodeNormValue(long norm) Parameters Type Name Description System.Int64 norm Returns Type Description System.Single Overrides TFIDFSimilarity.DecodeNormValue(Int64) See Also EncodeNormValue(Single) | Improve this Doc View Source EncodeNormValue(Single) Encodes a normalization factor for storage in an index. The encoding uses a three-bit mantissa, a five-bit exponent, and the zero-exponent point at 15, thus representing values from around 7x10^9 to 2x10^-9 with about one significant decimal digit of accuracy. Zero is also represented. Negative numbers are rounded up to zero. Values too large to represent are rounded down to the largest representable value. Positive values too small to represent are rounded up to the smallest positive representable value. Declaration public override sealed long EncodeNormValue(float f) Parameters Type Name Description System.Single f Returns Type Description System.Int64 Overrides TFIDFSimilarity.EncodeNormValue(Single) See Also Boost SmallSingle | Improve this Doc View Source Idf(Int64, Int64) Implemented as log(numDocs/(docFreq+1)) + 1 . Declaration public override float Idf(long docFreq, long numDocs) Parameters Type Name Description System.Int64 docFreq System.Int64 numDocs Returns Type Description System.Single Overrides TFIDFSimilarity.Idf(Int64, Int64) | Improve this Doc View Source LengthNorm(FieldInvertState) Implemented as state.Boost * LengthNorm(numTerms) , where numTerms is Length if DiscountOverlaps is false , else it's Length - NumOverlap . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public override float LengthNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Single Overrides TFIDFSimilarity.LengthNorm(FieldInvertState) | Improve this Doc View Source QueryNorm(Single) Implemented as 1/sqrt(sumOfSquaredWeights) . Declaration public override float QueryNorm(float sumOfSquaredWeights) Parameters Type Name Description System.Single sumOfSquaredWeights Returns Type Description System.Single Overrides TFIDFSimilarity.QueryNorm(Single) | Improve this Doc View Source ScorePayload(Int32, Int32, Int32, BytesRef) The default implementation returns 1 Declaration public override float ScorePayload(int doc, int start, int end, BytesRef payload) Parameters Type Name Description System.Int32 doc System.Int32 start System.Int32 end BytesRef payload Returns Type Description System.Single Overrides TFIDFSimilarity.ScorePayload(Int32, Int32, Int32, BytesRef) | Improve this Doc View Source SloppyFreq(Int32) Implemented as 1 / (distance + 1) . Declaration public override float SloppyFreq(int distance) Parameters Type Name Description System.Int32 distance Returns Type Description System.Single Overrides TFIDFSimilarity.SloppyFreq(Int32) | Improve this Doc View Source Tf(Single) Implemented as Math.Sqrt(freq) . Declaration public override float Tf(float freq) Parameters Type Name Description System.Single freq Returns Type Description System.Single Overrides TFIDFSimilarity.Tf(Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.DFRSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.DFRSimilarity.html",
    "title": "Class DFRSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DFRSimilarity Implements the divergence from randomness (DFR) framework introduced in Gianni Amati and Cornelis Joost Van Rijsbergen. 2002. Probabilistic models of information retrieval based on measuring the divergence from randomness. ACM Trans. Inf. Syst. 20, 4 (October 2002), 357-389. The DFR scoring formula is composed of three separate components: the basic model , the aftereffect and an additional normalization component, represented by the classes BasicModel , AfterEffect and Normalization , respectively. The names of these classes were chosen to match the names of their counterparts in the Terrier IR engine. To construct a DFRSimilarity , you must specify the implementations for all three components of DFR: ComponentImplementations BasicModel : Basic model of information content: BasicModelBE : Limiting form of Bose-Einstein BasicModelG : Geometric approximation of Bose-Einstein BasicModelP : Poisson approximation of the Binomial BasicModelD : Divergence approximation of the Binomial BasicModelIn : Inverse document frequency BasicModelIne : Inverse expected document frequency [mixture of Poisson and IDF] BasicModelIF : Inverse term frequency [approximation of I(ne)] AfterEffect : First normalization of information gain: AfterEffectL : Laplace's law of succession AfterEffectB : Ratio of two Bernoulli processes AfterEffect.NoAfterEffect : no first normalization Normalization : Second (length) normalization: NormalizationH1 : Uniform distribution of term frequency NormalizationH2 : term frequency density inversely related to length NormalizationH3 : term frequency normalization provided by Dirichlet prior NormalizationZ : term frequency normalization provided by a Zipfian relation Normalization.NoNormalization : no second normalization Note that qtf , the multiplicity of term-occurrence in the query, is not handled by this implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase DFRSimilarity Inherited Members SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.NewStats(String, Single) SimilarityBase.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DFRSimilarity : SimilarityBase Constructors | Improve this Doc View Source DFRSimilarity(BasicModel, AfterEffect, Normalization) Creates DFRSimilarity from the three components. Note that null values are not allowed: if you want no normalization or after-effect, instead pass Normalization.NoNormalization or AfterEffect.NoAfterEffect respectively. Declaration public DFRSimilarity(BasicModel basicModel, AfterEffect afterEffect, Normalization normalization) Parameters Type Name Description BasicModel basicModel Basic model of information content AfterEffect afterEffect First normalization of information gain Normalization normalization Second (length) normalization Fields | Improve this Doc View Source m_afterEffect The first normalization of the information content. Declaration protected readonly AfterEffect m_afterEffect Field Value Type Description AfterEffect | Improve this Doc View Source m_basicModel The basic model for information content. Declaration protected readonly BasicModel m_basicModel Field Value Type Description BasicModel | Improve this Doc View Source m_normalization The term frequency normalization. Declaration protected readonly Normalization m_normalization Field Value Type Description Normalization Properties | Improve this Doc View Source AfterEffect Returns the first normalization Declaration public virtual AfterEffect AfterEffect { get; } Property Value Type Description AfterEffect | Improve this Doc View Source BasicModel Returns the basic model of information content Declaration public virtual BasicModel BasicModel { get; } Property Value Type Description BasicModel | Improve this Doc View Source Normalization Returns the second normalization Declaration public virtual Normalization Normalization { get; } Property Value Type Description Normalization Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides SimilarityBase.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats System.Single freq System.Single docLen Returns Type Description System.Single Overrides SimilarityBase.Score(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SimilarityBase.ToString() See Also BasicModel AfterEffect Normalization"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Distribution.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Distribution.html",
    "title": "Class Distribution | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Distribution The probabilistic distribution used to model term occurrence in information-based models. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Distribution DistributionLL DistributionSPL Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class Distribution : object Constructors | Improve this Doc View Source Distribution() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Distribution() Methods | Improve this Doc View Source Explain(BasicStats, Single, Single) Explains the score. Returns the name of the model only, since both tfn and lambda are explained elsewhere. Declaration public virtual Explanation Explain(BasicStats stats, float tfn, float lambda) Parameters Type Name Description BasicStats stats System.Single tfn System.Single lambda Returns Type Description Explanation | Improve this Doc View Source Score(BasicStats, Single, Single) Computes the score. Declaration public abstract float Score(BasicStats stats, float tfn, float lambda) Parameters Type Name Description BasicStats stats System.Single tfn System.Single lambda Returns Type Description System.Single | Improve this Doc View Source ToString() Subclasses must override this method to return the name of the distribution. Declaration public abstract override string ToString() Returns Type Description System.String See Also IBSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.DistributionLL.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.DistributionLL.html",
    "title": "Class DistributionLL | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DistributionLL Log-logistic distribution. Unlike for DFR, the natural logarithm is used, as it is faster to compute and the original paper does not express any preference to a specific base. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Distribution DistributionLL Inherited Members Distribution.Explain(BasicStats, Single, Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DistributionLL : Distribution Constructors | Improve this Doc View Source DistributionLL() Sole constructor: parameter-free Declaration public DistributionLL() Methods | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override sealed float Score(BasicStats stats, float tfn, float lambda) Parameters Type Name Description BasicStats stats System.Single tfn System.Single lambda Returns Type Description System.Single Overrides Distribution.Score(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Distribution.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.DistributionSPL.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.DistributionSPL.html",
    "title": "Class DistributionSPL | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DistributionSPL The smoothed power-law (SPL) distribution for the information-based framework that is described in the original paper. Unlike for DFR, the natural logarithm is used, as it is faster to compute and the original paper does not express any preference to a specific base. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Distribution DistributionSPL Inherited Members Distribution.Explain(BasicStats, Single, Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DistributionSPL : Distribution Constructors | Improve this Doc View Source DistributionSPL() Sole constructor: parameter-free Declaration public DistributionSPL() Methods | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override sealed float Score(BasicStats stats, float tfn, float lambda) Parameters Type Name Description BasicStats stats System.Single tfn System.Single lambda Returns Type Description System.Single Overrides Distribution.Score(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Distribution.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.html",
    "title": "Namespace Lucene.Net.Search.Similarities | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Similarities <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> This package contains the various ranking models that can be used in Lucene. The abstract class Similarity serves as the base for ranking functions. For searching, users can employ the models already implemented or create their own by extending one of the classes in this package. Table Of Contents Summary of the Ranking Methods 2. Changing the Similarity Summary of the Ranking Methods DefaultSimilarity is the original Lucene scoring function. It is based on a highly optimized Vector Space Model . For more information, see TFIDFSimilarity . BM25Similarity is an optimized implementation of the successful Okapi BM25 model. SimilarityBase provides a basic implementation of the Similarity contract and exposes a highly simplified interface, which makes it an ideal starting point for new ranking functions. Lucene ships the following methods built on SimilarityBase : * Amati and Rijsbergen's {@linkplain org.apache.lucene.search.similarities.DFRSimilarity DFR} framework; * Clinchant and Gaussier's {@linkplain org.apache.lucene.search.similarities.IBSimilarity Information-based models} for IR; * The implementation of two {@linkplain org.apache.lucene.search.similarities.LMSimilarity language models} from Zhai and Lafferty's paper. Since SimilarityBase is not optimized to the same extent as DefaultSimilarity and BM25Similarity , a difference in performance is to be expected when using the methods listed above. However, optimizations can always be implemented in subclasses; see below . Changing Similarity Chances are the available Similarities are sufficient for all your searching needs. However, in some applications it may be necessary to customize your Similarity implementation. For instance, some applications do not need to distinguish between shorter and longer documents (see a \"fair\" similarity ). To change Similarity , one must do so for both indexing and searching, and the changes must happen before either of these actions take place. Although in theory there is nothing stopping you from changing mid-stream, it just isn't well-defined what is going to happen. To make this change, implement your own Similarity (likely you'll want to simply subclass an existing method, be it DefaultSimilarity or a descendant of SimilarityBase ), and then register the new class by calling #setSimilarity(Similarity) before indexing and #setSimilarity(Similarity) before searching. Extending {@linkplain org.apache.lucene.search.similarities.SimilarityBase} The easiest way to quickly implement a new ranking method is to extend SimilarityBase , which provides basic implementations for the low level . Subclasses are only required to implement the Float) and #toString() methods. Another option is to extend one of the frameworks based on SimilarityBase . These Similarities are implemented modularly, e.g. DFRSimilarity delegates computation of the three parts of its formula to the classes BasicModel , AfterEffect and Normalization . Instead of subclassing the Similarity, one can simply introduce a new basic model and tell DFRSimilarity to use it. Changing {@linkplain org.apache.lucene.search.similarities.DefaultSimilarity} If you are interested in use cases for changing your similarity, see the Lucene users's mailing list at Overriding Similarity . In summary, here are a few use cases: 1. The SweetSpotSimilarity in org.apache.lucene.misc gives small increases as the frequency increases a small amount and then greater increases when you hit the \"sweet spot\", i.e. where you think the frequency of terms is more significant. 2. Overriding tf — In some applications, it doesn't matter what the score of a document is as long as a matching term occurs. In these cases people have overridden Similarity to return 1 from the tf() method. 3. Changing Length Normalization — By overriding State) , it is possible to discount how the length of a field contributes to a score. In DefaultSimilarity , lengthNorm = 1 / (numTerms in field)^0.5, but if one changes this to be 1 / (numTerms in field), all fields will be treated \"fairly\" . In general, Chris Hostetter sums it up best in saying (from the Lucene users's mailing list ): [One would override the Similarity in] ... any situation where you know more about your data then just that it's \"text\" is a situation where it might make sense to to override your Similarity method. Classes AfterEffect This class acts as the base class for the implementations of the first normalization of the informative content in the DFR framework. This component is also called the after effect and is defined by the formula Inf 2 = 1 - Prob 2 , where Prob 2 measures the information gain . @lucene.experimental AfterEffect.NoAfterEffect Implementation used when there is no aftereffect. AfterEffectB Model of the information gain based on the ratio of two Bernoulli processes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AfterEffectL Model of the information gain based on Laplace's law of succession. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModel This class acts as the base class for the specific basic model implementations in the DFR framework. Basic models compute the informative content Inf 1 = -log 2 Prob 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelBE Limiting form of the Bose-Einstein model. The formula used in Lucene differs slightly from the one in the original paper: F is increased by tfn+1 and N is increased by F @lucene.experimental NOTE: in some corner cases this model may give poor performance with Normalizations that return large values for tfn such as NormalizationH3 . Consider using the geometric approximation ( BasicModelG ) instead, which provides the same relevance but with less practical problems. BasicModelD Implements the approximation of the binomial model with the divergence for DFR. The formula used in Lucene differs slightly from the one in the original paper: to avoid underflow for small values of N and F , N is increased by 1 and F is always increased by tfn+1 . WARNING: for terms that do not meet the expected random distribution (e.g. stopwords), this model may give poor performance, such as abnormally high scores for low tf values. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelG Geometric as limiting form of the Bose-Einstein model. The formula used in Lucene differs slightly from the one in the original paper: F is increased by 1 and N is increased by F . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelIF An approximation of the I(n e ) model. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelIn The basic tf-idf model of randomness. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelIne Tf-idf model of randomness, based on a mixture of Poisson and inverse document frequency. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelP Implements the Poisson approximation for the binomial model for DFR. @lucene.experimental WARNING: for terms that do not meet the expected random distribution (e.g. stopwords), this model may give poor performance, such as abnormally high scores for low tf values. BasicStats Stores all statistics commonly used ranking methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BM25Similarity BM25 Similarity. Introduced in Stephen E. Robertson, Steve Walker, Susan Jones, Micheline Hancock-Beaulieu, and Mike Gatford. Okapi at TREC-3. In Proceedings of the Third T ext RE trieval C onference (TREC 1994). Gaithersburg, USA, November 1994. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DefaultSimilarity Expert: Default scoring implementation which encodes ( EncodeNormValue(Single) ) norm values as a single byte before being stored. At search time, the norm byte value is read from the index Directory and decoded ( DecodeNormValue(Int64) ) back to a float norm value. this encoding/decoding, while reducing index size, comes with the price of precision loss - it is not guaranteed that Decode(Encode(x)) = x . For instance, Decode(Encode(0.89)) = 0.75 . Compression of norm values to a single byte saves memory at search time, because once a field is referenced at search time, its norms - for all documents - are maintained in memory. The rationale supporting such lossy compression of norm values is that given the difficulty (and inaccuracy) of users to express their true information need by a query, only big differences matter. Last, note that search time is too late to modify this norm part of scoring, e.g. by using a different Similarity for search. DFRSimilarity Implements the divergence from randomness (DFR) framework introduced in Gianni Amati and Cornelis Joost Van Rijsbergen. 2002. Probabilistic models of information retrieval based on measuring the divergence from randomness. ACM Trans. Inf. Syst. 20, 4 (October 2002), 357-389. The DFR scoring formula is composed of three separate components: the basic model , the aftereffect and an additional normalization component, represented by the classes BasicModel , AfterEffect and Normalization , respectively. The names of these classes were chosen to match the names of their counterparts in the Terrier IR engine. To construct a DFRSimilarity , you must specify the implementations for all three components of DFR: ComponentImplementations BasicModel : Basic model of information content: BasicModelBE : Limiting form of Bose-Einstein BasicModelG : Geometric approximation of Bose-Einstein BasicModelP : Poisson approximation of the Binomial BasicModelD : Divergence approximation of the Binomial BasicModelIn : Inverse document frequency BasicModelIne : Inverse expected document frequency [mixture of Poisson and IDF] BasicModelIF : Inverse term frequency [approximation of I(ne)] AfterEffect : First normalization of information gain: AfterEffectL : Laplace's law of succession AfterEffectB : Ratio of two Bernoulli processes AfterEffect.NoAfterEffect : no first normalization Normalization : Second (length) normalization: NormalizationH1 : Uniform distribution of term frequency NormalizationH2 : term frequency density inversely related to length NormalizationH3 : term frequency normalization provided by Dirichlet prior NormalizationZ : term frequency normalization provided by a Zipfian relation Normalization.NoNormalization : no second normalization Note that qtf , the multiplicity of term-occurrence in the query, is not handled by this implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Distribution The probabilistic distribution used to model term occurrence in information-based models. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DistributionLL Log-logistic distribution. Unlike for DFR, the natural logarithm is used, as it is faster to compute and the original paper does not express any preference to a specific base. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DistributionSPL The smoothed power-law (SPL) distribution for the information-based framework that is described in the original paper. Unlike for DFR, the natural logarithm is used, as it is faster to compute and the original paper does not express any preference to a specific base. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IBSimilarity Provides a framework for the family of information-based models, as described in StÉphane Clinchant and Eric Gaussier. 2010. Information-based models for ad hoc IR. In Proceeding of the 33rd international ACM SIGIR conference on Research and development in information retrieval (SIGIR '10). ACM, New York, NY, USA, 234-241. The retrieval function is of the form RSV(q, d) = ∑ -x q w log Prob(X w >= t d w | λ w ) , where x q w is the query boost; X w is a random variable that counts the occurrences of word w ; t d w is the normalized term frequency; λ w is a parameter. The framework described in the paper has many similarities to the DFR framework (see DFRSimilarity ). It is possible that the two Similarities will be merged at one point. To construct an IBSimilarity , you must specify the implementations for all three components of the Information-Based model. ComponentImplementations Distribution : Probabilistic distribution used to model term occurrence DistributionLL : Log-logistic DistributionLL : Smoothed power-law Lambda : λ w parameter of the probability distribution LambdaDF : N w /N or average number of documents where w occurs LambdaTTF : F w /N or average number of occurrences of w in the collection Normalization : Term frequency normalizationAny supported DFR normalization (listed in DFRSimilarity ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lambda The lambda (λ w ) parameter in information-based models. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LambdaDF Computes lambda as docFreq+1 / numberOfDocuments+1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk LambdaTTF Computes lambda as totalTermFreq+1 / numberOfDocuments+1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk LMDirichletSimilarity Bayesian smoothing using Dirichlet priors. From Chengxiang Zhai and John Lafferty. 2001. A study of smoothing methods for language models applied to Ad Hoc information retrieval. In Proceedings of the 24th annual international ACM SIGIR conference on Research and development in information retrieval (SIGIR '01). ACM, New York, NY, USA, 334-342. The formula as defined the paper assigns a negative score to documents that contain the term, but with fewer occurrences than predicted by the collection language model. The Lucene implementation returns 0 for such documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LMJelinekMercerSimilarity Language model based on the Jelinek-Mercer smoothing method. From Chengxiang Zhai and John Lafferty. 2001. A study of smoothing methods for language models applied to Ad Hoc information retrieval. In Proceedings of the 24th annual international ACM SIGIR conference on Research and development in information retrieval (SIGIR '01). ACM, New York, NY, USA, 334-342. The model has a single parameter, λ. According to said paper, the optimal value depends on both the collection and the query. The optimal value is around 0.1 for title queries and 0.7 for long queries. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LMSimilarity Abstract superclass for language modeling Similarities. The following inner types are introduced: LMSimilarity.LMStats , which defines a new statistic, the probability that the collection language model generates the current term; LMSimilarity.ICollectionModel , which is a strategy interface for object that compute the collection language model p(w|C) ; LMSimilarity.DefaultCollectionModel , an implementation of the former, that computes the term probability as the number of occurrences of the term in the collection, divided by the total number of tokens. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LMSimilarity.DefaultCollectionModel Models p(w|C) as the number of occurrences of the term in the collection, divided by the total number of tokens + 1 . LMSimilarity.LMStats Stores the collection distribution of the current term. MultiSimilarity Implements the CombSUM method for combining evidence from multiple similarity values described in: Joseph A. Shaw, Edward A. Fox. In Text REtrieval Conference (1993), pp. 243-252 This is a Lucene.NET EXPERIMENTAL API, use at your own risk Normalization This class acts as the base class for the implementations of the term frequency normalization methods in the DFR framework. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Normalization.NoNormalization Implementation used when there is no normalization. NormalizationH1 Normalization model that assumes a uniform distribution of the term frequency. While this model is parameterless in the original article , information-based models (see IBSimilarity ) introduced a multiplying factor. The default value for the c parameter is 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk NormalizationH2 Normalization model in which the term frequency is inversely related to the length. While this model is parameterless in the original article , the thesis introduces the parameterized variant. The default value for the c parameter is 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk NormalizationH3 Dirichlet Priors normalization This is a Lucene.NET EXPERIMENTAL API, use at your own risk NormalizationZ Pareto-Zipf Normalization This is a Lucene.NET EXPERIMENTAL API, use at your own risk PerFieldSimilarityWrapper Provides the ability to use a different Similarity for different fields. Subclasses should implement Get(String) to return an appropriate Similarity (for example, using field-specific parameter values) for the field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Similarity Similarity defines the components of Lucene scoring. Expert: Scoring API. This is a low-level API, you should only extend this API if you want to implement an information retrieval model . If you are instead looking for a convenient way to alter Lucene's scoring, consider extending a higher-level implementation such as TFIDFSimilarity , which implements the vector space model with this API, or just tweaking the default implementation: DefaultSimilarity . Similarity determines how Lucene weights terms, and Lucene interacts with this class at both index-time and query-time . At indexing time, the indexer calls ComputeNorm(FieldInvertState) , allowing the Similarity implementation to set a per-document value for the field that will be later accessible via GetNormValues(String) . Lucene makes no assumption about what is in this norm, but it is most useful for encoding length normalization information. Implementations should carefully consider how the normalization is encoded: while Lucene's classical TFIDFSimilarity encodes a combination of index-time boost and length normalization information with SmallSingle into a single byte, this might not be suitable for all purposes. Many formulas require the use of average document length, which can be computed via a combination of SumTotalTermFreq and MaxDoc or DocCount , depending upon whether the average should reflect field sparsity. Additional scoring factors can be stored in named NumericDocValuesField s and accessed at query-time with GetNumericDocValues(String) . Finally, using index-time boosts (either via folding into the normalization byte or via DocValues ), is an inefficient way to boost the scores of different fields if the boost will be the same for every document, instead the Similarity can simply take a constant boost parameter C , and PerFieldSimilarityWrapper can return different instances with different boosts depending upon field name. At query-time, Queries interact with the Similarity via these steps: The ComputeWeight(Single, CollectionStatistics, TermStatistics[]) method is called a single time, allowing the implementation to compute any statistics (such as IDF, average document length, etc) across the entire collection . The TermStatistics and CollectionStatistics passed in already contain all of the raw statistics involved, so a Similarity can freely use any combination of statistics without causing any additional I/O. Lucene makes no assumption about what is stored in the returned Similarity.SimWeight object. The query normalization process occurs a single time: GetValueForNormalization() is called for each query leaf node, QueryNorm(Single) is called for the top-level query, and finally Normalize(Single, Single) passes down the normalization value and any top-level boosts (e.g. from enclosing BooleanQuery s). For each segment in the index, the Query creates a GetSimScorer(Similarity.SimWeight, AtomicReaderContext) The GetScore() method is called for each matching document. When Explain(Query, Int32) is called, queries consult the Similarity's DocScorer for an explanation of how it computed its score. The query passes in a the document id and an explanation of how the frequency was computed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Similarity.SimScorer API for scoring \"sloppy\" queries such as TermQuery , SpanQuery , and PhraseQuery . Frequencies are floating-point values: an approximate within-document frequency adjusted for \"sloppiness\" by ComputeSlopFactor(Int32) . Similarity.SimWeight Stores the weight for a query across the indexed collection. this abstract implementation is empty; descendants of Similarity should subclass Similarity.SimWeight and define the statistics they require in the subclass. Examples include idf, average field length, etc. SimilarityBase A subclass of Similarity that provides a simplified API for its descendants. Subclasses are only required to implement the Score(BasicStats, Single, Single) and ToString() methods. Implementing Explain(Explanation, BasicStats, Int32, Single, Single) is optional, inasmuch as SimilarityBase already provides a basic explanation of the score and the term frequency. However, implementers of a subclass are encouraged to include as much detail about the scoring method as possible. Note: multi-word queries such as phrase queries are scored in a different way than Lucene's default ranking algorithm: whereas it \"fakes\" an IDF value for the phrase as a whole (since it does not know it), this class instead scores phrases as a summation of the individual term scores. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TFIDFSimilarity Implementation of Similarity with the Vector Space Model. Expert: Scoring API. TFIDFSimilarity defines the components of Lucene scoring. Overriding computation of these components is a convenient way to alter Lucene scoring. Suggested reading: Introduction To Information Retrieval, Chapter 6 . The following describes how Lucene scoring evolves from underlying information retrieval models to (efficient) implementation. We first brief on VSM Score , then derive from it Lucene's Conceptual Scoring Formula , from which, finally, evolves Lucene's Practical Scoring Function (the latter is connected directly with Lucene classes and methods). Lucene combines Boolean model (BM) of Information Retrieval with Vector Space Model (VSM) of Information Retrieval - documents \"approved\" by BM are scored by VSM. In VSM, documents and queries are represented as weighted vectors in a multi-dimensional space, where each distinct index term is a dimension, and weights are Tf-idf values. VSM does not require weights to be Tf-idf values, but Tf-idf values are believed to produce search results of high quality, and so Lucene is using Tf-idf . Tf and Idf are described in more detail below, but for now, for completion, let's just say that for given term t and document (or query) x , Tf(t,x) varies with the number of occurrences of term t in x (when one increases so does the other) and idf(t) similarly varies with the inverse of the number of index documents containing term t . VSM score of document d for query q is the Cosine Similarity of the weighted query vectors V(q) and V(d) : cosine-similarity(q,d) = V(q) · V(d) ––––––––– |V(q)| |V(d)| VSM Score Where V(q) · V(d) is the dot product of the weighted vectors, and |V(q)| and |V(d)| are their Euclidean norms . Note: the above equation can be viewed as the dot product of the normalized weighted vectors, in the sense that dividing V(q) by its euclidean norm is normalizing it to a unit vector. Lucene refines VSM score for both search quality and usability: Normalizing V(d) to the unit vector is known to be problematic in that it removes all document length information. For some documents removing this info is probably ok, e.g. a document made by duplicating a certain paragraph 10 times, especially if that paragraph is made of distinct terms. But for a document which contains no duplicated paragraphs, this might be wrong. To avoid this problem, a different document length normalization factor is used, which normalizes to a vector equal to or larger than the unit vector: doc-len-norm(d) . At indexing, users can specify that certain documents are more important than others, by assigning a document boost. For this, the score of each document is also multiplied by its boost value doc-boost(d) . Lucene is field based, hence each query term applies to a single field, document length normalization is by the length of the certain field, and in addition to document boost there are also document fields boosts. The same field can be added to a document during indexing several times, and so the boost of that field is the multiplication of the boosts of the separate additions (or parts) of that field within the document. At search time users can specify boosts to each query, sub-query, and each query term, hence the contribution of a query term to the score of a document is multiplied by the boost of that query term query-boost(q) . A document may match a multi term query without containing all the terms of that query (this is correct for some of the queries), and users can further reward documents matching more query terms through a coordination factor, which is usually larger when more terms are matched: coord-factor(q,d) . Under the simplifying assumption of a single field in the index, we get Lucene's Conceptual scoring formula : score(q,d) = coord-factor(q,d) · query-boost(q) · V(q) · V(d) ––––––––– |V(q)| · doc-len-norm(d) · doc-boost(d) Lucene Conceptual Scoring Formula The conceptual formula is a simplification in the sense that (1) terms and documents are fielded and (2) boosts are usually per query term rather than per query. We now describe how Lucene implements this conceptual scoring formula, and derive from it Lucene's Practical Scoring Function . For efficient score computation some scoring components are computed and aggregated in advance: Query-boost for the query (actually for each query term) is known when search starts. Query Euclidean norm |V(q)| can be computed when search starts, as it is independent of the document being scored. From search optimization perspective, it is a valid question why bother to normalize the query at all, because all scored documents will be multiplied by the same |V(q)| , and hence documents ranks (their order by score) will not be affected by this normalization. There are two good reasons to keep this normalization: Recall that Cosine Similarity can be used find how similar two documents are. One can use Lucene for e.g. clustering, and use a document as a query to compute its similarity to other documents. In this use case it is important that the score of document d3 for query d1 is comparable to the score of document d3 for query d2 . In other words, scores of a document for two distinct queries should be comparable. There are other applications that may require this. And this is exactly what normalizing the query vector V(q) provides: comparability (to a certain extent) of two or more queries. Applying query normalization on the scores helps to keep the scores around the unit vector, hence preventing loss of score data because of floating point precision limitations. Document length norm doc-len-norm(d) and document boost doc-boost(d) are known at indexing time. They are computed in advance and their multiplication is saved as a single value in the index: norm(d) . (In the equations below, norm(t in d) means norm(field(t) in doc d) where field(t) is the field associated with term t .) Lucene's Practical Scoring Function is derived from the above. The color codes demonstrate how it relates to those of the conceptual formula: score(q,d) = coord(q,d) · queryNorm(q) · ∑ ( tf(t in d) · idf(t) 2 · t.Boost · norm(t,d) ) t in q Lucene Practical Scoring Function where tf(t in d) correlates to the term's frequency , defined as the number of times term t appears in the currently scored document d . Documents that have more occurrences of a given term receive a higher score. Note that tf(t in q) is assumed to be 1 and therefore it does not appear in this equation, However if a query contains twice the same term, there will be two term-queries with that same term and hence the computation would still be correct (although not very efficient). The default computation for tf(t in d) in DefaultSimilarity ( Tf(Single) ) is: tf(t in d) = frequency ½ idf(t) stands for Inverse Document Frequency. this value correlates to the inverse of DocFreq (the number of documents in which the term t appears). this means rarer terms give higher contribution to the total score. idf(t) appears for t in both the query and the document, hence it is squared in the equation. The default computation for idf(t) in DefaultSimilarity ( Idf(Int64, Int64) ) is: idf(t) = 1 + log ( NumDocs ––––––––– DocFreq+1 ) coord(q,d) is a score factor based on how many of the query terms are found in the specified document. Typically, a document that contains more of the query's terms will receive a higher score than another document with fewer query terms. this is a search time factor computed in coord(q,d) ( Coord(Int32, Int32) ) by the Similarity in effect at search time. queryNorm(q) is a normalizing factor used to make scores between queries comparable. this factor does not affect document ranking (since all ranked documents are multiplied by the same factor), but rather just attempts to make scores from different queries (or even different indexes) comparable. this is a search time factor computed by the Similarity in effect at search time. The default computation in DefaultSimilarity ( QueryNorm(Single) ) produces a Euclidean norm : queryNorm(q) = queryNorm(sumOfSquaredWeights) = 1 –––––––––––––– sumOfSquaredWeights ½ The sum of squared weights (of the query terms) is computed by the query Weight object. For example, a BooleanQuery computes this value as: sumOfSquaredWeights = q.Boost 2 · ∑ ( idf(t) · t.Boost ) 2 t in q where sumOfSquaredWeights is GetValueForNormalization() and q.Boost is Boost t.Boost is a search time boost of term t in the query q as specified in the query text (see query syntax ), or as set by application calls to Boost . Notice that there is really no direct API for accessing a boost of one term in a multi term query, but rather multi terms are represented in a query as multi TermQuery objects, and so the boost of a term in the query is accessible by calling the sub-query Boost . norm(t,d) encapsulates a few (indexing time) boost and length factors: Field boost - set Boost before adding the field to a document. lengthNorm - computed when the document is added to the index in accordance with the number of tokens of this field in the document, so that shorter fields contribute more to the score. LengthNorm is computed by the Similarity class in effect at indexing. The ComputeNorm(FieldInvertState) method is responsible for combining all of these factors into a single . When a document is added to the index, all the above factors are multiplied. If the document has multiple fields with the same name, all their boosts are multiplied together: norm(t,d) = lengthNorm · ∏ Boost field f in d named as t Note that search time is too late to modify this norm part of scoring, e.g. by using a different Similarity for search. Interfaces LMSimilarity.ICollectionModel A strategy for computing the collection language model."
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.IBSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.IBSimilarity.html",
    "title": "Class IBSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IBSimilarity Provides a framework for the family of information-based models, as described in StÉphane Clinchant and Eric Gaussier. 2010. Information-based models for ad hoc IR. In Proceeding of the 33rd international ACM SIGIR conference on Research and development in information retrieval (SIGIR '10). ACM, New York, NY, USA, 234-241. The retrieval function is of the form RSV(q, d) = ∑ -x q w log Prob(X w >= t d w | λ w ) , where x q w is the query boost; X w is a random variable that counts the occurrences of word w ; t d w is the normalized term frequency; λ w is a parameter. The framework described in the paper has many similarities to the DFR framework (see DFRSimilarity ). It is possible that the two Similarities will be merged at one point. To construct an IBSimilarity , you must specify the implementations for all three components of the Information-Based model. ComponentImplementations Distribution : Probabilistic distribution used to model term occurrence DistributionLL : Log-logistic DistributionLL : Smoothed power-law Lambda : λ w parameter of the probability distribution LambdaDF : N w /N or average number of documents where w occurs LambdaTTF : F w /N or average number of occurrences of w in the collection Normalization : Term frequency normalizationAny supported DFR normalization (listed in DFRSimilarity ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase IBSimilarity Inherited Members SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.NewStats(String, Single) SimilarityBase.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class IBSimilarity : SimilarityBase Constructors | Improve this Doc View Source IBSimilarity(Distribution, Lambda, Normalization) Creates IBSimilarity from the three components. Note that null values are not allowed: if you want no normalization, instead pass Normalization.NoNormalization . Declaration public IBSimilarity(Distribution distribution, Lambda lambda, Normalization normalization) Parameters Type Name Description Distribution distribution probabilistic distribution modeling term occurrence Lambda lambda distribution's λ w parameter Normalization normalization term frequency normalization Fields | Improve this Doc View Source m_distribution The probabilistic distribution used to model term occurrence. Declaration protected readonly Distribution m_distribution Field Value Type Description Distribution | Improve this Doc View Source m_lambda The lambda (λ w ) parameter. Declaration protected readonly Lambda m_lambda Field Value Type Description Lambda | Improve this Doc View Source m_normalization The term frequency normalization. Declaration protected readonly Normalization m_normalization Field Value Type Description Normalization Properties | Improve this Doc View Source Distribution Returns the distribution Declaration public virtual Distribution Distribution { get; } Property Value Type Description Distribution | Improve this Doc View Source Lambda Returns the distribution's lambda parameter Declaration public virtual Lambda Lambda { get; } Property Value Type Description Lambda | Improve this Doc View Source Normalization Returns the term frequency normalization Declaration public virtual Normalization Normalization { get; } Property Value Type Description Normalization Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides SimilarityBase.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats System.Single freq System.Single docLen Returns Type Description System.Single Overrides SimilarityBase.Score(BasicStats, Single, Single) | Improve this Doc View Source ToString() The name of IB methods follow the pattern IB <distribution> <lambda><normalization> . The name of the distribution is the same as in the original paper; for the names of lambda parameters, refer to the doc of the Lambda classes. Declaration public override string ToString() Returns Type Description System.String Overrides SimilarityBase.ToString() See Also DFRSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Lambda.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Lambda.html",
    "title": "Class Lambda | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lambda The lambda (λ w ) parameter in information-based models. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lambda LambdaDF LambdaTTF Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class Lambda : object Constructors | Improve this Doc View Source Lambda() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Lambda() Methods | Improve this Doc View Source CalculateLambda(BasicStats) Computes the lambda parameter. Declaration public abstract float CalculateLambda(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single | Improve this Doc View Source Explain(BasicStats) Explains the lambda parameter. Declaration public abstract Explanation Explain(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description Explanation | Improve this Doc View Source ToString() Subclasses must override this method to return the code of the lambda formula. Since the original paper is not very clear on this matter, and also uses the DFR naming scheme incorrectly, the codes here were chosen arbitrarily. Declaration public abstract override string ToString() Returns Type Description System.String See Also IBSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LambdaDF.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LambdaDF.html",
    "title": "Class LambdaDF | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LambdaDF Computes lambda as docFreq+1 / numberOfDocuments+1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lambda LambdaDF Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LambdaDF : Lambda Constructors | Improve this Doc View Source LambdaDF() Sole constructor: parameter-free Declaration public LambdaDF() Methods | Improve this Doc View Source CalculateLambda(BasicStats) Declaration public override sealed float CalculateLambda(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single Overrides Lambda.CalculateLambda(BasicStats) | Improve this Doc View Source Explain(BasicStats) Declaration public override sealed Explanation Explain(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description Explanation Overrides Lambda.Explain(BasicStats) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lambda.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LambdaTTF.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LambdaTTF.html",
    "title": "Class LambdaTTF | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LambdaTTF Computes lambda as totalTermFreq+1 / numberOfDocuments+1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lambda LambdaTTF Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LambdaTTF : Lambda Constructors | Improve this Doc View Source LambdaTTF() Sole constructor: parameter-free Declaration public LambdaTTF() Methods | Improve this Doc View Source CalculateLambda(BasicStats) Declaration public override sealed float CalculateLambda(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single Overrides Lambda.CalculateLambda(BasicStats) | Improve this Doc View Source Explain(BasicStats) Declaration public override sealed Explanation Explain(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description Explanation Overrides Lambda.Explain(BasicStats) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lambda.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMDirichletSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMDirichletSimilarity.html",
    "title": "Class LMDirichletSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LMDirichletSimilarity Bayesian smoothing using Dirichlet priors. From Chengxiang Zhai and John Lafferty. 2001. A study of smoothing methods for language models applied to Ad Hoc information retrieval. In Proceedings of the 24th annual international ACM SIGIR conference on Research and development in information retrieval (SIGIR '01). ACM, New York, NY, USA, 334-342. The formula as defined the paper assigns a negative score to documents that contain the term, but with fewer occurrences than predicted by the collection language model. The Lucene implementation returns 0 for such documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase LMSimilarity LMDirichletSimilarity Inherited Members LMSimilarity.m_collectionModel LMSimilarity.NewStats(String, Single) LMSimilarity.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) LMSimilarity.ToString() SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LMDirichletSimilarity : LMSimilarity Constructors | Improve this Doc View Source LMDirichletSimilarity() Instantiates the similarity with the default μ value of 2000. Declaration public LMDirichletSimilarity() | Improve this Doc View Source LMDirichletSimilarity(LMSimilarity.ICollectionModel) Instantiates the similarity with the default μ value of 2000. Declaration public LMDirichletSimilarity(LMSimilarity.ICollectionModel collectionModel) Parameters Type Name Description LMSimilarity.ICollectionModel collectionModel | Improve this Doc View Source LMDirichletSimilarity(LMSimilarity.ICollectionModel, Single) Instantiates the similarity with the provided μ parameter. Declaration public LMDirichletSimilarity(LMSimilarity.ICollectionModel collectionModel, float mu) Parameters Type Name Description LMSimilarity.ICollectionModel collectionModel System.Single mu | Improve this Doc View Source LMDirichletSimilarity(Single) Instantiates the similarity with the provided μ parameter. Declaration public LMDirichletSimilarity(float mu) Parameters Type Name Description System.Single mu Properties | Improve this Doc View Source Mu Returns the μ parameter. Declaration public virtual float Mu { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides LMSimilarity.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source GetName() Declaration public override string GetName() Returns Type Description System.String Overrides LMSimilarity.GetName() | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats System.Single freq System.Single docLen Returns Type Description System.Single Overrides SimilarityBase.Score(BasicStats, Single, Single)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMJelinekMercerSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMJelinekMercerSimilarity.html",
    "title": "Class LMJelinekMercerSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LMJelinekMercerSimilarity Language model based on the Jelinek-Mercer smoothing method. From Chengxiang Zhai and John Lafferty. 2001. A study of smoothing methods for language models applied to Ad Hoc information retrieval. In Proceedings of the 24th annual international ACM SIGIR conference on Research and development in information retrieval (SIGIR '01). ACM, New York, NY, USA, 334-342. The model has a single parameter, λ. According to said paper, the optimal value depends on both the collection and the query. The optimal value is around 0.1 for title queries and 0.7 for long queries. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase LMSimilarity LMJelinekMercerSimilarity Inherited Members LMSimilarity.m_collectionModel LMSimilarity.NewStats(String, Single) LMSimilarity.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) LMSimilarity.ToString() SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LMJelinekMercerSimilarity : LMSimilarity Constructors | Improve this Doc View Source LMJelinekMercerSimilarity(LMSimilarity.ICollectionModel, Single) Instantiates with the specified collectionModel and λ parameter. Declaration public LMJelinekMercerSimilarity(LMSimilarity.ICollectionModel collectionModel, float lambda) Parameters Type Name Description LMSimilarity.ICollectionModel collectionModel System.Single lambda | Improve this Doc View Source LMJelinekMercerSimilarity(Single) Instantiates with the specified λ parameter. Declaration public LMJelinekMercerSimilarity(float lambda) Parameters Type Name Description System.Single lambda Properties | Improve this Doc View Source Lambda Returns the λ parameter. Declaration public virtual float Lambda { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides LMSimilarity.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source GetName() Declaration public override string GetName() Returns Type Description System.String Overrides LMSimilarity.GetName() | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats System.Single freq System.Single docLen Returns Type Description System.Single Overrides SimilarityBase.Score(BasicStats, Single, Single)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.DefaultCollectionModel.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.DefaultCollectionModel.html",
    "title": "Class LMSimilarity.DefaultCollectionModel | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LMSimilarity.DefaultCollectionModel Models p(w|C) as the number of occurrences of the term in the collection, divided by the total number of tokens + 1 . Inheritance System.Object LMSimilarity.DefaultCollectionModel Implements LMSimilarity.ICollectionModel Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DefaultCollectionModel : object, LMSimilarity.ICollectionModel Constructors | Improve this Doc View Source DefaultCollectionModel() Sole constructor: parameter-free Declaration public DefaultCollectionModel() Methods | Improve this Doc View Source ComputeProbability(BasicStats) Declaration public virtual float ComputeProbability(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single | Improve this Doc View Source GetName() Declaration public virtual string GetName() Returns Type Description System.String Implements LMSimilarity.ICollectionModel"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.html",
    "title": "Class LMSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LMSimilarity Abstract superclass for language modeling Similarities. The following inner types are introduced: LMSimilarity.LMStats , which defines a new statistic, the probability that the collection language model generates the current term; LMSimilarity.ICollectionModel , which is a strategy interface for object that compute the collection language model p(w|C) ; LMSimilarity.DefaultCollectionModel , an implementation of the former, that computes the term probability as the number of occurrences of the term in the collection, divided by the total number of tokens. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase LMSimilarity LMDirichletSimilarity LMJelinekMercerSimilarity Inherited Members SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.Score(BasicStats, Single, Single) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class LMSimilarity : SimilarityBase Constructors | Improve this Doc View Source LMSimilarity() Creates a new instance with the default collection language model. Declaration public LMSimilarity() | Improve this Doc View Source LMSimilarity(LMSimilarity.ICollectionModel) Creates a new instance with the specified collection language model. Declaration public LMSimilarity(LMSimilarity.ICollectionModel collectionModel) Parameters Type Name Description LMSimilarity.ICollectionModel collectionModel Fields | Improve this Doc View Source m_collectionModel The collection model. Declaration protected readonly LMSimilarity.ICollectionModel m_collectionModel Field Value Type Description LMSimilarity.ICollectionModel Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides SimilarityBase.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) Computes the collection probability of the current term in addition to the usual statistics. Declaration protected override void FillBasicStats(BasicStats stats, CollectionStatistics collectionStats, TermStatistics termStats) Parameters Type Name Description BasicStats stats CollectionStatistics collectionStats TermStatistics termStats Overrides SimilarityBase.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) | Improve this Doc View Source GetName() Returns the name of the LM method. The values of the parameters should be included as well. Used in ToString() . Declaration public abstract string GetName() Returns Type Description System.String | Improve this Doc View Source NewStats(String, Single) Declaration protected override BasicStats NewStats(string field, float queryBoost) Parameters Type Name Description System.String field System.Single queryBoost Returns Type Description BasicStats Overrides SimilarityBase.NewStats(String, Single) | Improve this Doc View Source ToString() Returns the name of the LM method. If a custom collection model strategy is used, its name is included as well. Declaration public override string ToString() Returns Type Description System.String Overrides SimilarityBase.ToString() See Also GetName() GetName () LMSimilarity.DefaultCollectionModel"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.ICollectionModel.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.ICollectionModel.html",
    "title": "Interface LMSimilarity.ICollectionModel | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface LMSimilarity.ICollectionModel A strategy for computing the collection language model. Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public interface ICollectionModel Methods | Improve this Doc View Source ComputeProbability(BasicStats) Computes the probability p(w|C) according to the language model strategy for the current term. Declaration float ComputeProbability(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single | Improve this Doc View Source GetName() The name of the collection model strategy. Declaration string GetName() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.LMStats.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.LMStats.html",
    "title": "Class LMSimilarity.LMStats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LMSimilarity.LMStats Stores the collection distribution of the current term. Inheritance System.Object Similarity.SimWeight BasicStats LMSimilarity.LMStats Inherited Members BasicStats.m_numberOfDocuments BasicStats.m_numberOfFieldTokens BasicStats.m_avgFieldLength BasicStats.m_docFreq BasicStats.m_totalTermFreq BasicStats.m_queryBoost BasicStats.m_topLevelBoost BasicStats.m_totalBoost BasicStats.NumberOfDocuments BasicStats.NumberOfFieldTokens BasicStats.AvgFieldLength BasicStats.DocFreq BasicStats.TotalTermFreq BasicStats.Field BasicStats.GetValueForNormalization() BasicStats.RawNormalizationValue() BasicStats.Normalize(Single, Single) BasicStats.TotalBoost Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LMStats : BasicStats Constructors | Improve this Doc View Source LMStats(String, Single) Creates LMSimilarity.LMStats for the provided field and query-time boost Declaration public LMStats(string field, float queryBoost) Parameters Type Name Description System.String field System.Single queryBoost Properties | Improve this Doc View Source CollectionProbability Returns the probability that the current term is generated by the collection. Declaration public float CollectionProbability { get; set; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.MultiSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.MultiSimilarity.html",
    "title": "Class MultiSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiSimilarity Implements the CombSUM method for combining evidence from multiple similarity values described in: Joseph A. Shaw, Edward A. Fox. In Text REtrieval Conference (1993), pp. 243-252 This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity MultiSimilarity Inherited Members Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class MultiSimilarity : Similarity Constructors | Improve this Doc View Source MultiSimilarity(Similarity[]) Creates a MultiSimilarity which will sum the scores of the provided sims . Declaration public MultiSimilarity(Similarity[] sims) Parameters Type Name Description Similarity [] sims Fields | Improve this Doc View Source m_sims the sub-similarities used to create the combined score Declaration protected readonly Similarity[] m_sims Field Value Type Description Similarity [] Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Declaration public override long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override Similarity.SimScorer GetSimScorer(Similarity.SimWeight stats, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight stats AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Normalization.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Normalization.html",
    "title": "Class Normalization | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Normalization This class acts as the base class for the implementations of the term frequency normalization methods in the DFR framework. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization Normalization.NoNormalization NormalizationH1 NormalizationH2 NormalizationH3 NormalizationZ Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class Normalization : object Constructors | Improve this Doc View Source Normalization() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Normalization() Methods | Improve this Doc View Source Explain(BasicStats, Single, Single) Returns an explanation for the normalized term frequency. The default normalization methods use the field length of the document and the average field length to compute the normalized term frequency. This method provides a generic explanation for such methods. Subclasses that use other statistics must override this method. Declaration public virtual Explanation Explain(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description Explanation | Improve this Doc View Source Tfn(BasicStats, Single, Single) Returns the normalized term frequency. Declaration public abstract float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len the field length. Returns Type Description System.Single | Improve this Doc View Source ToString() Subclasses must override this method to return the code of the normalization formula. Refer to the original paper for the list. Declaration public abstract override string ToString() Returns Type Description System.String See Also DFRSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Normalization.NoNormalization.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Normalization.NoNormalization.html",
    "title": "Class Normalization.NoNormalization | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Normalization.NoNormalization Implementation used when there is no normalization. Inheritance System.Object Normalization Normalization.NoNormalization Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public sealed class NoNormalization : Normalization Constructors | Improve this Doc View Source NoNormalization() Sole constructor: parameter-free Declaration public NoNormalization() Methods | Improve this Doc View Source Explain(BasicStats, Single, Single) Declaration public override Explanation Explain(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description Explanation Overrides Normalization.Explain(BasicStats, Single, Single) | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH1.html",
    "title": "Class NormalizationH1 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormalizationH1 Normalization model that assumes a uniform distribution of the term frequency. While this model is parameterless in the original article , information-based models (see IBSimilarity ) introduced a multiplying factor. The default value for the c parameter is 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization NormalizationH1 Inherited Members Normalization.Explain(BasicStats, Single, Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class NormalizationH1 : Normalization Constructors | Improve this Doc View Source NormalizationH1() Calls NormalizationH1(1) Declaration public NormalizationH1() | Improve this Doc View Source NormalizationH1(Single) Creates NormalizationH1 with the supplied parameter c . Declaration public NormalizationH1(float c) Parameters Type Name Description System.Single c Hyper-parameter that controls the term frequency normalization with respect to the document length. Properties | Improve this Doc View Source C Returns the c parameter. Declaration public virtual float C { get; } Property Value Type Description System.Single See Also NormalizationH1(Single) Methods | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override sealed float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH2.html",
    "title": "Class NormalizationH2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormalizationH2 Normalization model in which the term frequency is inversely related to the length. While this model is parameterless in the original article , the thesis introduces the parameterized variant. The default value for the c parameter is 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization NormalizationH2 Inherited Members Normalization.Explain(BasicStats, Single, Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class NormalizationH2 : Normalization Constructors | Improve this Doc View Source NormalizationH2() Calls NormalizationH2(1) Declaration public NormalizationH2() | Improve this Doc View Source NormalizationH2(Single) Creates NormalizationH2 with the supplied parameter c . Declaration public NormalizationH2(float c) Parameters Type Name Description System.Single c Hyper-parameter that controls the term frequency normalization with respect to the document length. Properties | Improve this Doc View Source C Returns the c parameter. Declaration public virtual float C { get; } Property Value Type Description System.Single See Also NormalizationH2(Single) Methods | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override sealed float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH3.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH3.html",
    "title": "Class NormalizationH3 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormalizationH3 Dirichlet Priors normalization This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization NormalizationH3 Inherited Members Normalization.Explain(BasicStats, Single, Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class NormalizationH3 : Normalization Constructors | Improve this Doc View Source NormalizationH3() Calls NormalizationH3(800) Declaration public NormalizationH3() | Improve this Doc View Source NormalizationH3(Single) Creates NormalizationH3 with the supplied parameter μ . Declaration public NormalizationH3(float mu) Parameters Type Name Description System.Single mu smoothing parameter μ Properties | Improve this Doc View Source Mu Returns the parameter μ Declaration public virtual float Mu { get; } Property Value Type Description System.Single See Also NormalizationH3(Single) Methods | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationZ.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationZ.html",
    "title": "Class NormalizationZ | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormalizationZ Pareto-Zipf Normalization This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization NormalizationZ Inherited Members Normalization.Explain(BasicStats, Single, Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class NormalizationZ : Normalization Constructors | Improve this Doc View Source NormalizationZ() Calls NormalizationZ(0.3) Declaration public NormalizationZ() | Improve this Doc View Source NormalizationZ(Single) Creates NormalizationZ with the supplied parameter z . Declaration public NormalizationZ(float z) Parameters Type Name Description System.Single z represents A/(A+1) where A measures the specificity of the language. Properties | Improve this Doc View Source Z Returns the parameter z Declaration public virtual float Z { get; } Property Value Type Description System.Single See Also NormalizationZ(Single) Methods | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.PerFieldSimilarityWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.PerFieldSimilarityWrapper.html",
    "title": "Class PerFieldSimilarityWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PerFieldSimilarityWrapper Provides the ability to use a different Similarity for different fields. Subclasses should implement Get(String) to return an appropriate Similarity (for example, using field-specific parameter values) for the field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity PerFieldSimilarityWrapper Inherited Members Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class PerFieldSimilarityWrapper : Similarity Constructors | Improve this Doc View Source PerFieldSimilarityWrapper() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public PerFieldSimilarityWrapper() Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Declaration public override sealed long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override sealed Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source Get(String) Returns a Similarity for scoring a field. Declaration public abstract Similarity Get(string name) Parameters Type Name Description System.String name Returns Type Description Similarity | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override sealed Similarity.SimScorer GetSimScorer(Similarity.SimWeight weight, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight weight AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.html",
    "title": "Class Similarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Similarity Similarity defines the components of Lucene scoring. Expert: Scoring API. This is a low-level API, you should only extend this API if you want to implement an information retrieval model . If you are instead looking for a convenient way to alter Lucene's scoring, consider extending a higher-level implementation such as TFIDFSimilarity , which implements the vector space model with this API, or just tweaking the default implementation: DefaultSimilarity . Similarity determines how Lucene weights terms, and Lucene interacts with this class at both index-time and query-time . At indexing time, the indexer calls ComputeNorm(FieldInvertState) , allowing the Similarity implementation to set a per-document value for the field that will be later accessible via GetNormValues(String) . Lucene makes no assumption about what is in this norm, but it is most useful for encoding length normalization information. Implementations should carefully consider how the normalization is encoded: while Lucene's classical TFIDFSimilarity encodes a combination of index-time boost and length normalization information with SmallSingle into a single byte, this might not be suitable for all purposes. Many formulas require the use of average document length, which can be computed via a combination of SumTotalTermFreq and MaxDoc or DocCount , depending upon whether the average should reflect field sparsity. Additional scoring factors can be stored in named NumericDocValuesField s and accessed at query-time with GetNumericDocValues(String) . Finally, using index-time boosts (either via folding into the normalization byte or via DocValues ), is an inefficient way to boost the scores of different fields if the boost will be the same for every document, instead the Similarity can simply take a constant boost parameter C , and PerFieldSimilarityWrapper can return different instances with different boosts depending upon field name. At query-time, Queries interact with the Similarity via these steps: The ComputeWeight(Single, CollectionStatistics, TermStatistics[]) method is called a single time, allowing the implementation to compute any statistics (such as IDF, average document length, etc) across the entire collection . The TermStatistics and CollectionStatistics passed in already contain all of the raw statistics involved, so a Similarity can freely use any combination of statistics without causing any additional I/O. Lucene makes no assumption about what is stored in the returned Similarity.SimWeight object. The query normalization process occurs a single time: GetValueForNormalization() is called for each query leaf node, QueryNorm(Single) is called for the top-level query, and finally Normalize(Single, Single) passes down the normalization value and any top-level boosts (e.g. from enclosing BooleanQuery s). For each segment in the index, the Query creates a GetSimScorer(Similarity.SimWeight, AtomicReaderContext) The GetScore() method is called for each matching document. When Explain(Query, Int32) is called, queries consult the Similarity's DocScorer for an explanation of how it computed its score. The query passes in a the document id and an explanation of how the frequency was computed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity BM25Similarity MultiSimilarity PerFieldSimilarityWrapper SimilarityBase TFIDFSimilarity Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class Similarity : object Constructors | Improve this Doc View Source Similarity() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Similarity() Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Computes the normalization value for a field, given the accumulated state of term processing for this field (see FieldInvertState ). Matches in longer fields are less precise, so implementations of this method usually set smaller values when state.Length is large, and larger values when state.Length is small. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public abstract long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state current processing state for this field Returns Type Description System.Int64 computed norm value | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Compute any collection-level weight (e.g. IDF, average document length, etc) needed for scoring a query. Declaration public abstract Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost the query-time boost. CollectionStatistics collectionStats collection-level statistics, such as the number of tokens in the collection. TermStatistics [] termStats term-level statistics, such as the document frequency of a term across the collection. Returns Type Description Similarity.SimWeight Similarity.SimWeight object with the information this Similarity needs to score a query. | Improve this Doc View Source Coord(Int32, Int32) Hook to integrate coordinate-level matching. By default this is disabled (returns 1 ), as with most modern models this will only skew performance, but some implementations such as TFIDFSimilarity override this. Declaration public virtual float Coord(int overlap, int maxOverlap) Parameters Type Name Description System.Int32 overlap the number of query terms matched in the document System.Int32 maxOverlap the total number of terms in the query Returns Type Description System.Single a score factor based on term overlap with the query | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Creates a new Similarity.SimScorer to score matching documents from a segment of the inverted index. Declaration public abstract Similarity.SimScorer GetSimScorer(Similarity.SimWeight weight, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight weight collection information from ComputeWeight(Single, CollectionStatistics, TermStatistics[]) AtomicReaderContext context segment of the inverted index to be scored. Returns Type Description Similarity.SimScorer Sloppy Similarity.SimScorer for scoring documents across context | Improve this Doc View Source QueryNorm(Single) Computes the normalization value for a query given the sum of the normalized weights GetValueForNormalization() of each of the query terms. this value is passed back to the weight ( Normalize(Single, Single) of each query term, to provide a hook to attempt to make scores from different queries comparable. By default this is disabled (returns 1 ), but some implementations such as TFIDFSimilarity override this. Declaration public virtual float QueryNorm(float valueForNormalization) Parameters Type Name Description System.Single valueForNormalization the sum of the term normalization values Returns Type Description System.Single a normalization factor for query weights See Also Similarity Similarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.SimScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.SimScorer.html",
    "title": "Class Similarity.SimScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Similarity.SimScorer API for scoring \"sloppy\" queries such as TermQuery , SpanQuery , and PhraseQuery . Frequencies are floating-point values: an approximate within-document frequency adjusted for \"sloppiness\" by ComputeSlopFactor(Int32) . Inheritance System.Object Similarity.SimScorer Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class SimScorer : object Constructors | Improve this Doc View Source SimScorer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public SimScorer() Methods | Improve this Doc View Source ComputePayloadFactor(Int32, Int32, Int32, BytesRef) Calculate a scoring factor based on the data in the payload. Declaration public abstract float ComputePayloadFactor(int doc, int start, int end, BytesRef payload) Parameters Type Name Description System.Int32 doc System.Int32 start System.Int32 end BytesRef payload Returns Type Description System.Single | Improve this Doc View Source ComputeSlopFactor(Int32) Computes the amount of a sloppy phrase match, based on an edit distance. Declaration public abstract float ComputeSlopFactor(int distance) Parameters Type Name Description System.Int32 distance Returns Type Description System.Single | Improve this Doc View Source Explain(Int32, Explanation) Explain the score for a single document Declaration public virtual Explanation Explain(int doc, Explanation freq) Parameters Type Name Description System.Int32 doc document id within the inverted index segment Explanation freq Explanation of how the sloppy term frequency was computed Returns Type Description Explanation document's score | Improve this Doc View Source Score(Int32, Single) Score a single document Declaration public abstract float Score(int doc, float freq) Parameters Type Name Description System.Int32 doc document id within the inverted index segment System.Single freq sloppy term frequency Returns Type Description System.Single document's score"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.SimWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.SimWeight.html",
    "title": "Class Similarity.SimWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Similarity.SimWeight Stores the weight for a query across the indexed collection. this abstract implementation is empty; descendants of Similarity should subclass Similarity.SimWeight and define the statistics they require in the subclass. Examples include idf, average field length, etc. Inheritance System.Object Similarity.SimWeight BasicStats Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class SimWeight : object Constructors | Improve this Doc View Source SimWeight() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public SimWeight() Methods | Improve this Doc View Source GetValueForNormalization() The value for normalization of contained query clauses (e.g. sum of squared weights). NOTE: a Similarity implementation might not use any query normalization at all, its not required. However, if it wants to participate in query normalization, it can return a value here. Declaration public abstract float GetValueForNormalization() Returns Type Description System.Single | Improve this Doc View Source Normalize(Single, Single) Assigns the query normalization factor and boost from parent queries to this. NOTE: a Similarity implementation might not use this normalized value at all, its not required. However, its usually a good idea to at least incorporate the topLevelBoost (e.g. from an outer BooleanQuery ) into its score. Declaration public abstract void Normalize(float queryNorm, float topLevelBoost) Parameters Type Name Description System.Single queryNorm System.Single topLevelBoost"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.SimilarityBase.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.SimilarityBase.html",
    "title": "Class SimilarityBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimilarityBase A subclass of Similarity that provides a simplified API for its descendants. Subclasses are only required to implement the Score(BasicStats, Single, Single) and ToString() methods. Implementing Explain(Explanation, BasicStats, Int32, Single, Single) is optional, inasmuch as SimilarityBase already provides a basic explanation of the score and the term frequency. However, implementers of a subclass are encouraged to include as much detail about the scoring method as possible. Note: multi-word queries such as phrase queries are scored in a different way than Lucene's default ranking algorithm: whereas it \"fakes\" an IDF value for the phrase as a whole (since it does not know it), this class instead scores phrases as a summation of the individual term scores. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase DFRSimilarity IBSimilarity LMSimilarity Inherited Members Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class SimilarityBase : Similarity Constructors | Improve this Doc View Source SimilarityBase() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public SimilarityBase() Properties | Improve this Doc View Source DiscountOverlaps Determines whether overlap tokens (Tokens with 0 position increment) are ignored when computing norm. By default this is true , meaning overlap tokens do not count when computing norms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual bool DiscountOverlaps { get; set; } Property Value Type Description System.Boolean See Also ComputeNorm(FieldInvertState) Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Encodes the document length in the same way as TFIDFSimilarity . Declaration public override long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override sealed Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source DecodeNormValue(Byte) Decodes a normalization factor (document length) stored in an index. Declaration protected virtual float DecodeNormValue(byte norm) Parameters Type Name Description System.Byte norm Returns Type Description System.Single | Improve this Doc View Source EncodeNormValue(Single, Single) Encodes the length to a byte via SmallSingle . Declaration protected virtual byte EncodeNormValue(float boost, float length) Parameters Type Name Description System.Single boost System.Single length Returns Type Description System.Byte | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Subclasses should implement this method to explain the score. expl already contains the score, the name of the class and the doc id, as well as the term frequency and its explanation; subclasses can add additional clauses to explain details of their scoring formulae. The default implementation does nothing. Declaration protected virtual void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl the explanation to extend with details. BasicStats stats the corpus level statistics. System.Int32 doc the document id. System.Single freq the term frequency. System.Single docLen the document length. | Improve this Doc View Source Explain(BasicStats, Int32, Explanation, Single) Explains the score. The implementation here provides a basic explanation in the format Score(name-of-similarity, doc=doc-id, freq=term-frequency), computed from: , and attaches the score (computed via the Score(BasicStats, Single, Single) method) and the explanation for the term frequency. Subclasses content with this format may add additional details in Explain(Explanation, BasicStats, Int32, Single, Single) . Declaration public virtual Explanation Explain(BasicStats stats, int doc, Explanation freq, float docLen) Parameters Type Name Description BasicStats stats the corpus level statistics. System.Int32 doc the document id. Explanation freq the term frequency and its explanation. System.Single docLen the document length. Returns Type Description Explanation the explanation. | Improve this Doc View Source FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) Fills all member fields defined in BasicStats in stats . Subclasses can override this method to fill additional stats. Declaration protected virtual void FillBasicStats(BasicStats stats, CollectionStatistics collectionStats, TermStatistics termStats) Parameters Type Name Description BasicStats stats CollectionStatistics collectionStats TermStatistics termStats | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override Similarity.SimScorer GetSimScorer(Similarity.SimWeight stats, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight stats AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) | Improve this Doc View Source Log2(Double) Returns the base two logarithm of x . Declaration public static double Log2(double x) Parameters Type Name Description System.Double x Returns Type Description System.Double | Improve this Doc View Source NewStats(String, Single) Factory method to return a custom stats object Declaration protected virtual BasicStats NewStats(string field, float queryBoost) Parameters Type Name Description System.String field System.Single queryBoost Returns Type Description BasicStats | Improve this Doc View Source Score(BasicStats, Single, Single) Scores the document doc . Subclasses must apply their scoring formula in this class. Declaration public abstract float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats the corpus level statistics. System.Single freq the term frequency. System.Single docLen the document length. Returns Type Description System.Single the score. | Improve this Doc View Source ToString() Subclasses must override this method to return the name of the Similarity and preferably the values of parameters (if any) as well. Declaration public abstract override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.TFIDFSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.TFIDFSimilarity.html",
    "title": "Class TFIDFSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TFIDFSimilarity Implementation of Similarity with the Vector Space Model. Expert: Scoring API. TFIDFSimilarity defines the components of Lucene scoring. Overriding computation of these components is a convenient way to alter Lucene scoring. Suggested reading: Introduction To Information Retrieval, Chapter 6 . The following describes how Lucene scoring evolves from underlying information retrieval models to (efficient) implementation. We first brief on VSM Score , then derive from it Lucene's Conceptual Scoring Formula , from which, finally, evolves Lucene's Practical Scoring Function (the latter is connected directly with Lucene classes and methods). Lucene combines Boolean model (BM) of Information Retrieval with Vector Space Model (VSM) of Information Retrieval - documents \"approved\" by BM are scored by VSM. In VSM, documents and queries are represented as weighted vectors in a multi-dimensional space, where each distinct index term is a dimension, and weights are Tf-idf values. VSM does not require weights to be Tf-idf values, but Tf-idf values are believed to produce search results of high quality, and so Lucene is using Tf-idf . Tf and Idf are described in more detail below, but for now, for completion, let's just say that for given term t and document (or query) x , Tf(t,x) varies with the number of occurrences of term t in x (when one increases so does the other) and idf(t) similarly varies with the inverse of the number of index documents containing term t . VSM score of document d for query q is the Cosine Similarity of the weighted query vectors V(q) and V(d) : cosine-similarity(q,d) = V(q) · V(d) ––––––––– |V(q)| |V(d)| VSM Score Where V(q) · V(d) is the dot product of the weighted vectors, and |V(q)| and |V(d)| are their Euclidean norms . Note: the above equation can be viewed as the dot product of the normalized weighted vectors, in the sense that dividing V(q) by its euclidean norm is normalizing it to a unit vector. Lucene refines VSM score for both search quality and usability: Normalizing V(d) to the unit vector is known to be problematic in that it removes all document length information. For some documents removing this info is probably ok, e.g. a document made by duplicating a certain paragraph 10 times, especially if that paragraph is made of distinct terms. But for a document which contains no duplicated paragraphs, this might be wrong. To avoid this problem, a different document length normalization factor is used, which normalizes to a vector equal to or larger than the unit vector: doc-len-norm(d) . At indexing, users can specify that certain documents are more important than others, by assigning a document boost. For this, the score of each document is also multiplied by its boost value doc-boost(d) . Lucene is field based, hence each query term applies to a single field, document length normalization is by the length of the certain field, and in addition to document boost there are also document fields boosts. The same field can be added to a document during indexing several times, and so the boost of that field is the multiplication of the boosts of the separate additions (or parts) of that field within the document. At search time users can specify boosts to each query, sub-query, and each query term, hence the contribution of a query term to the score of a document is multiplied by the boost of that query term query-boost(q) . A document may match a multi term query without containing all the terms of that query (this is correct for some of the queries), and users can further reward documents matching more query terms through a coordination factor, which is usually larger when more terms are matched: coord-factor(q,d) . Under the simplifying assumption of a single field in the index, we get Lucene's Conceptual scoring formula : score(q,d) = coord-factor(q,d) · query-boost(q) · V(q) · V(d) ––––––––– |V(q)| · doc-len-norm(d) · doc-boost(d) Lucene Conceptual Scoring Formula The conceptual formula is a simplification in the sense that (1) terms and documents are fielded and (2) boosts are usually per query term rather than per query. We now describe how Lucene implements this conceptual scoring formula, and derive from it Lucene's Practical Scoring Function . For efficient score computation some scoring components are computed and aggregated in advance: Query-boost for the query (actually for each query term) is known when search starts. Query Euclidean norm |V(q)| can be computed when search starts, as it is independent of the document being scored. From search optimization perspective, it is a valid question why bother to normalize the query at all, because all scored documents will be multiplied by the same |V(q)| , and hence documents ranks (their order by score) will not be affected by this normalization. There are two good reasons to keep this normalization: Recall that Cosine Similarity can be used find how similar two documents are. One can use Lucene for e.g. clustering, and use a document as a query to compute its similarity to other documents. In this use case it is important that the score of document d3 for query d1 is comparable to the score of document d3 for query d2 . In other words, scores of a document for two distinct queries should be comparable. There are other applications that may require this. And this is exactly what normalizing the query vector V(q) provides: comparability (to a certain extent) of two or more queries. Applying query normalization on the scores helps to keep the scores around the unit vector, hence preventing loss of score data because of floating point precision limitations. Document length norm doc-len-norm(d) and document boost doc-boost(d) are known at indexing time. They are computed in advance and their multiplication is saved as a single value in the index: norm(d) . (In the equations below, norm(t in d) means norm(field(t) in doc d) where field(t) is the field associated with term t .) Lucene's Practical Scoring Function is derived from the above. The color codes demonstrate how it relates to those of the conceptual formula: score(q,d) = coord(q,d) · queryNorm(q) · ∑ ( tf(t in d) · idf(t) 2 · t.Boost · norm(t,d) ) t in q Lucene Practical Scoring Function where tf(t in d) correlates to the term's frequency , defined as the number of times term t appears in the currently scored document d . Documents that have more occurrences of a given term receive a higher score. Note that tf(t in q) is assumed to be 1 and therefore it does not appear in this equation, However if a query contains twice the same term, there will be two term-queries with that same term and hence the computation would still be correct (although not very efficient). The default computation for tf(t in d) in DefaultSimilarity ( Tf(Single) ) is: tf(t in d) = frequency ½ idf(t) stands for Inverse Document Frequency. this value correlates to the inverse of DocFreq (the number of documents in which the term t appears). this means rarer terms give higher contribution to the total score. idf(t) appears for t in both the query and the document, hence it is squared in the equation. The default computation for idf(t) in DefaultSimilarity ( Idf(Int64, Int64) ) is: idf(t) = 1 + log ( NumDocs ––––––––– DocFreq+1 ) coord(q,d) is a score factor based on how many of the query terms are found in the specified document. Typically, a document that contains more of the query's terms will receive a higher score than another document with fewer query terms. this is a search time factor computed in coord(q,d) ( Coord(Int32, Int32) ) by the Similarity in effect at search time. queryNorm(q) is a normalizing factor used to make scores between queries comparable. this factor does not affect document ranking (since all ranked documents are multiplied by the same factor), but rather just attempts to make scores from different queries (or even different indexes) comparable. this is a search time factor computed by the Similarity in effect at search time. The default computation in DefaultSimilarity ( QueryNorm(Single) ) produces a Euclidean norm : queryNorm(q) = queryNorm(sumOfSquaredWeights) = 1 –––––––––––––– sumOfSquaredWeights ½ The sum of squared weights (of the query terms) is computed by the query Weight object. For example, a BooleanQuery computes this value as: sumOfSquaredWeights = q.Boost 2 · ∑ ( idf(t) · t.Boost ) 2 t in q where sumOfSquaredWeights is GetValueForNormalization() and q.Boost is Boost t.Boost is a search time boost of term t in the query q as specified in the query text (see query syntax ), or as set by application calls to Boost . Notice that there is really no direct API for accessing a boost of one term in a multi term query, but rather multi terms are represented in a query as multi TermQuery objects, and so the boost of a term in the query is accessible by calling the sub-query Boost . norm(t,d) encapsulates a few (indexing time) boost and length factors: Field boost - set Boost before adding the field to a document. lengthNorm - computed when the document is added to the index in accordance with the number of tokens of this field in the document, so that shorter fields contribute more to the score. LengthNorm is computed by the Similarity class in effect at indexing. The ComputeNorm(FieldInvertState) method is responsible for combining all of these factors into a single . When a document is added to the index, all the above factors are multiplied. If the document has multiple fields with the same name, all their boosts are multiplied together: norm(t,d) = lengthNorm · ∏ Boost field f in d named as t Note that search time is too late to modify this norm part of scoring, e.g. by using a different Similarity for search. Inheritance System.Object Similarity TFIDFSimilarity DefaultSimilarity Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class TFIDFSimilarity : Similarity Constructors | Improve this Doc View Source TFIDFSimilarity() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public TFIDFSimilarity() Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Declaration public override sealed long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override sealed Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source Coord(Int32, Int32) Computes a score factor based on the fraction of all query terms that a document contains. this value is multiplied into scores. The presence of a large portion of the query terms indicates a better match with the query, so implementations of this method usually return larger values when the ratio between these parameters is large and smaller values when the ratio between them is small. Declaration public abstract override float Coord(int overlap, int maxOverlap) Parameters Type Name Description System.Int32 overlap The number of query terms matched in the document System.Int32 maxOverlap The total number of terms in the query Returns Type Description System.Single A score factor based on term overlap with the query Overrides Similarity.Coord(Int32, Int32) | Improve this Doc View Source DecodeNormValue(Int64) Decodes a normalization factor stored in an index. Declaration public abstract float DecodeNormValue(long norm) Parameters Type Name Description System.Int64 norm Returns Type Description System.Single | Improve this Doc View Source EncodeNormValue(Single) Encodes a normalization factor for storage in an index. Declaration public abstract long EncodeNormValue(float f) Parameters Type Name Description System.Single f Returns Type Description System.Int64 | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override sealed Similarity.SimScorer GetSimScorer(Similarity.SimWeight stats, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight stats AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) | Improve this Doc View Source Idf(Int64, Int64) Computes a score factor based on a term's document frequency (the number of documents which contain the term). This value is multiplied by the Tf(Single) factor for each term in the query and these products are then summed to form the initial score for a document. Terms that occur in fewer documents are better indicators of topic, so implementations of this method usually return larger values for rare terms, and smaller values for common terms. Declaration public abstract float Idf(long docFreq, long numDocs) Parameters Type Name Description System.Int64 docFreq The number of documents which contain the term System.Int64 numDocs The total number of documents in the collection Returns Type Description System.Single A score factor based on the term's document frequency | Improve this Doc View Source IdfExplain(CollectionStatistics, TermStatistics) Computes a score factor for a simple term and returns an explanation for that score factor. The default implementation uses: Idf(docFreq, searcher.MaxDoc); Note that MaxDoc is used instead of NumDocs because also DocFreq is used, and when the latter is inaccurate, so is MaxDoc , and in the same direction. In addition, MaxDoc is more efficient to compute Declaration public virtual Explanation IdfExplain(CollectionStatistics collectionStats, TermStatistics termStats) Parameters Type Name Description CollectionStatistics collectionStats Collection-level statistics TermStatistics termStats Term-level statistics for the term Returns Type Description Explanation An Explain object that includes both an idf score factor and an explanation for the term. | Improve this Doc View Source IdfExplain(CollectionStatistics, TermStatistics[]) Computes a score factor for a phrase. The default implementation sums the idf factor for each term in the phrase. Declaration public virtual Explanation IdfExplain(CollectionStatistics collectionStats, TermStatistics[] termStats) Parameters Type Name Description CollectionStatistics collectionStats Collection-level statistics TermStatistics [] termStats Term-level statistics for the terms in the phrase Returns Type Description Explanation An Explain object that includes both an idf score factor for the phrase and an explanation for each term. | Improve this Doc View Source LengthNorm(FieldInvertState) Compute an index-time normalization value for this field instance. This value will be stored in a single byte lossy representation by EncodeNormValue(Single) . Declaration public abstract float LengthNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Statistics of the current field (such as length, boost, etc) Returns Type Description System.Single An index-time normalization value | Improve this Doc View Source QueryNorm(Single) Computes the normalization value for a query given the sum of the squared weights of each of the query terms. this value is multiplied into the weight of each query term. While the classic query normalization factor is computed as 1/sqrt(sumOfSquaredWeights), other implementations might completely ignore sumOfSquaredWeights (ie return 1). This does not affect ranking, but the default implementation does make scores from different queries more comparable than they would be by eliminating the magnitude of the Query vector as a factor in the score. Declaration public abstract override float QueryNorm(float sumOfSquaredWeights) Parameters Type Name Description System.Single sumOfSquaredWeights The sum of the squares of query term weights Returns Type Description System.Single A normalization factor for query weights Overrides Similarity.QueryNorm(Single) | Improve this Doc View Source ScorePayload(Int32, Int32, Int32, BytesRef) Calculate a scoring factor based on the data in the payload. Implementations are responsible for interpreting what is in the payload. Lucene makes no assumptions about what is in the byte array. Declaration public abstract float ScorePayload(int doc, int start, int end, BytesRef payload) Parameters Type Name Description System.Int32 doc The docId currently being scored. System.Int32 start The start position of the payload System.Int32 end The end position of the payload BytesRef payload The payload byte array to be scored Returns Type Description System.Single An implementation dependent float to be used as a scoring factor | Improve this Doc View Source SloppyFreq(Int32) Computes the amount of a sloppy phrase match, based on an edit distance. this value is summed for each sloppy phrase match in a document to form the frequency to be used in scoring instead of the exact term count. A phrase match with a small edit distance to a document passage more closely matches the document, so implementations of this method usually return larger values when the edit distance is small and smaller values when it is large. Declaration public abstract float SloppyFreq(int distance) Parameters Type Name Description System.Int32 distance The edit distance of this sloppy phrase match Returns Type Description System.Single The frequency increment for this match See Also Slop | Improve this Doc View Source Tf(Single) Computes a score factor based on a term or phrase's frequency in a document. This value is multiplied by the Idf(Int64, Int64) factor for each term in the query and these products are then summed to form the initial score for a document. Terms and phrases repeated in a document indicate the topic of the document, so implementations of this method usually return larger values when freq is large, and smaller values when freq is small. Declaration public abstract float Tf(float freq) Parameters Type Name Description System.Single freq The frequency of a term within a document Returns Type Description System.Single A score factor based on a term's within-document frequency See Also Similarity Similarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Sort.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Sort.html",
    "title": "Class Sort | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Sort Encapsulates sort criteria for returned hits. The fields used to determine sort order must be carefully chosen. Document s must contain a single term in such a field, and the value of the term should indicate the document's relative position in a given sort order. The field must be indexed, but should not be tokenized, and does not need to be stored (unless you happen to want it back with the rest of your document data). In other words: document.Add(new Field(\"byNumber\", x.ToString(CultureInfo.InvariantCulture), Field.Store.NO, Field.Index.NOT_ANALYZED)); Valid Types of Values There are four possible kinds of term values which may be put into sorting fields: s, s, s, or s. Unless SortField objects are specified, the type of value in the field is determined by parsing the first term in the field. term values should contain only digits and an optional preceding negative sign. Values must be base 10 and in the range and inclusive. Documents which should appear first in the sort should have low value integers, later documents high values (i.e. the documents should be numbered 1..n where 1 is the first and n the last). term values should contain only digits and an optional preceding negative sign. Values must be base 10 and in the range and inclusive. Documents which should appear first in the sort should have low value integers, later documents high values. term values should conform to values accepted by (except that NaN and Infinity are not supported). Document s which should appear first in the sort should have low values, later documents high values. term values can contain any valid , but should not be tokenized. The values are sorted according to their comparable natural order ( ). Note that using this type of term value has higher memory requirements than the other two types. Object Reuse One of these objects can be used multiple times and the sort order changed between usages. This class is thread safe. Memory Usage Sorting uses of caches of term values maintained by the internal HitQueue(s). The cache is static and contains an or array of length IndexReader.MaxDoc for each field name for which a sort is performed. In other words, the size of the cache in bytes is: 4 * IndexReader.MaxDoc * (# of different fields actually used to sort) For fields, the cache is larger: in addition to the above array, the value of every term in the field is kept in memory. If there are many unique terms in the field, this could be quite large. Note that the size of the cache is not affected by how many fields are in the index and might be used to sort - only by the ones actually used to sort a result set. Created: Feb 12, 2004 10:53:57 AM @since lucene 1.4 Inheritance System.Object Sort Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class Sort : object Constructors | Improve this Doc View Source Sort() Sorts by computed relevance. This is the same sort criteria as calling Search(Query, Int32) without a sort criteria, only with slightly more overhead. Declaration public Sort() | Improve this Doc View Source Sort(SortField) Sorts by the criteria in the given SortField . Declaration public Sort(SortField field) Parameters Type Name Description SortField field | Improve this Doc View Source Sort(SortField[]) Sorts in succession by the criteria in each SortField . Declaration public Sort(params SortField[] fields) Parameters Type Name Description SortField [] fields Fields | Improve this Doc View Source INDEXORDER Represents sorting by index order. Declaration public static readonly Sort INDEXORDER Field Value Type Description Sort | Improve this Doc View Source RELEVANCE Represents sorting by computed relevance. Using this sort criteria returns the same results as calling Search(Query, Int32) without a sort criteria, only with slightly more overhead. Declaration public static readonly Sort RELEVANCE Field Value Type Description Sort Properties | Improve this Doc View Source NeedsScores Returns true if the relevance score is needed to sort documents. Declaration public virtual bool NeedsScores { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source GetSort() Representation of the sort criteria. Declaration public virtual SortField[] GetSort() Returns Type Description SortField [] Array of SortField objects used in this sort criteria | Improve this Doc View Source Rewrite(IndexSearcher) Rewrites the SortField s in this Sort , returning a new Sort if any of the fields changes during their rewriting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual Sort Rewrite(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher IndexSearcher to use in the rewriting Returns Type Description Sort this if the Sort/Fields have not changed, or a new Sort if there is a change | Improve this Doc View Source SetSort(SortField) Sets the sort to the given criteria. Declaration public virtual void SetSort(SortField field) Parameters Type Name Description SortField field | Improve this Doc View Source SetSort(SortField[]) Sets the sort to the given criteria in succession. Declaration public virtual void SetSort(params SortField[] fields) Parameters Type Name Description SortField [] fields | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.SortField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SortField.html",
    "title": "Class SortField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortField Stores information about how to sort documents by terms in an individual field. Fields must be indexed in order to sort by them. Created: Feb 11, 2004 1:25:29 PM @since lucene 1.4 Inheritance System.Object SortField Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class SortField : object Constructors | Improve this Doc View Source SortField(String, FieldCache.IParser) Creates a sort by terms in the given field, parsed to numeric values using a custom FieldCache.IParser . Declaration public SortField(string field, FieldCache.IParser parser) Parameters Type Name Description System.String field Name of field to sort by. Must not be null . FieldCache.IParser parser Instance of a FieldCache.IParser , which must subclass one of the existing numeric parsers from IFieldCache . Sort type is inferred by testing which numeric parser the parser subclasses. | Improve this Doc View Source SortField(String, FieldCache.IParser, Boolean) Creates a sort, possibly in reverse, by terms in the given field, parsed to numeric values using a custom FieldCache.IParser . Declaration public SortField(string field, FieldCache.IParser parser, bool reverse) Parameters Type Name Description System.String field Name of field to sort by. Must not be null . FieldCache.IParser parser Instance of a FieldCache.IParser , which must subclass one of the existing numeric parsers from IFieldCache . Sort type is inferred by testing which numeric parser the parser subclasses. System.Boolean reverse True if natural order should be reversed. | Improve this Doc View Source SortField(String, FieldComparerSource) Creates a sort with a custom comparison function. Declaration public SortField(string field, FieldComparerSource comparer) Parameters Type Name Description System.String field Name of field to sort by; cannot be null . FieldComparerSource comparer Returns a comparer for sorting hits. | Improve this Doc View Source SortField(String, FieldComparerSource, Boolean) Creates a sort, possibly in reverse, with a custom comparison function. Declaration public SortField(string field, FieldComparerSource comparer, bool reverse) Parameters Type Name Description System.String field Name of field to sort by; cannot be null . FieldComparerSource comparer Returns a comparer for sorting hits. System.Boolean reverse True if natural order should be reversed. | Improve this Doc View Source SortField(String, SortFieldType) Creates a sort by terms in the given field with the type of term values explicitly given. Declaration public SortField(string field, SortFieldType type) Parameters Type Name Description System.String field Name of field to sort by. Can be null if type is SCORE or DOC . SortFieldType type Type of values in the terms. | Improve this Doc View Source SortField(String, SortFieldType, Boolean) Creates a sort, possibly in reverse, by terms in the given field with the type of term values explicitly given. Declaration public SortField(string field, SortFieldType type, bool reverse) Parameters Type Name Description System.String field Name of field to sort by. Can be null if type is SCORE or DOC . SortFieldType type Type of values in the terms. System.Boolean reverse True if natural order should be reversed. Fields | Improve this Doc View Source FIELD_DOC Represents sorting by document number (index order). Declaration public static readonly SortField FIELD_DOC Field Value Type Description SortField | Improve this Doc View Source FIELD_SCORE Represents sorting by document score (relevance). Declaration public static readonly SortField FIELD_SCORE Field Value Type Description SortField | Improve this Doc View Source m_missingValue Declaration protected object m_missingValue Field Value Type Description System.Object | Improve this Doc View Source STRING_FIRST Pass this to MissingValue to have missing string values sort first. Declaration public static readonly object STRING_FIRST Field Value Type Description System.Object | Improve this Doc View Source STRING_LAST Pass this to MissingValue to have missing string values sort last. Declaration public static readonly object STRING_LAST Field Value Type Description System.Object Properties | Improve this Doc View Source BytesComparer Declaration public virtual IComparer<BytesRef> BytesComparer { get; set; } Property Value Type Description IComparer < BytesRef > | Improve this Doc View Source ComparerSource Returns the FieldComparerSource used for custom sorting. Declaration public virtual FieldComparerSource ComparerSource { get; } Property Value Type Description FieldComparerSource | Improve this Doc View Source Field Returns the name of the field. Could return null if the sort is by SCORE or DOC . Declaration public virtual string Field { get; } Property Value Type Description System.String Name of field, possibly null . | Improve this Doc View Source IsReverse Returns whether the sort should be reversed. Declaration public virtual bool IsReverse { get; } Property Value Type Description System.Boolean True if natural order should be reversed. | Improve this Doc View Source MissingValue Declaration public virtual object MissingValue { get; set; } Property Value Type Description System.Object | Improve this Doc View Source NeedsScores Whether the relevance score is needed to sort documents. Declaration public virtual bool NeedsScores { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Parser Returns the instance of a IFieldCache parser that fits to the given sort type. May return null if no parser was specified. Sorting is using the default parser then. Declaration public virtual FieldCache.IParser Parser { get; } Property Value Type Description FieldCache.IParser An instance of a IFieldCache parser, or null . | Improve this Doc View Source Type Returns the type of contents in the field. Declaration public virtual SortFieldType Type { get; } Property Value Type Description SortFieldType One of SCORE , DOC , STRING , INT32 or SINGLE . Methods | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. If a FieldComparerSource or FieldCache.IParser was provided, it must properly implement equals (unless a singleton is always used). Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source GetComparer(Int32, Int32) Returns the FieldComparer to use for sorting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual FieldComparer GetComparer(int numHits, int sortPos) Parameters Type Name Description System.Int32 numHits Number of top hits the queue will store System.Int32 sortPos Position of this SortField within Sort . The comparer is primary if sortPos==0, secondary if sortPos==1, etc. Some comparers can optimize themselves when they are the primary sort. Returns Type Description FieldComparer FieldComparer to use when sorting | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. If a FieldComparerSource or FieldCache.IParser was provided, it must properly implement GetHashCode() (unless a singleton is always used). Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Rewrite(IndexSearcher) Rewrites this SortField , returning a new SortField if a change is made. Subclasses should override this define their rewriting behavior when this SortField is of type REWRITEABLE . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual SortField Rewrite(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher IndexSearcher to use during rewriting Returns Type Description SortField New rewritten SortField , or this if nothing has changed. | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String See Also Sort"
  },
  "api/Lucene.Net/Lucene.Net.Search.SortFieldType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SortFieldType.html",
    "title": "Enum SortFieldType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum SortFieldType Specifies the type of the terms to be sorted, or special types such as CUSTOM Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public enum SortFieldType : int Fields Name Description BYTE Sort using term values as encoded s. Sort values are and lower values are at the front. BYTES Sort use byte[] index values. CUSTOM Sort using a custom . Sort values are any and sorting is done according to natural order. DOC Sort by document number (index order). Sort values are and lower values are at the front. DOUBLE Sort using term values as encoded s. Sort values are and lower values are at the front. INT16 Sort using term values as encoded s. Sort values are and lower values are at the front. NOTE: This was SHORT in Lucene INT32 Sort using term values as encoded s. Sort values are and lower values are at the front. NOTE: This was INT in Lucene INT64 Sort using term values as encoded s. Sort values are and lower values are at the front. NOTE: This was LONG in Lucene REWRITEABLE Force rewriting of SortField using Rewrite(IndexSearcher) before it can be used for sorting SCORE Sort by document score (relevance). Sort values are and higher values are at the front. SINGLE Sort using term values as encoded s. Sort values are and lower values are at the front. NOTE: This was FLOAT in Lucene STRING Sort using term values as s. Sort values are s and lower values are at the front. STRING_VAL Sort using term values as s, but comparing by value (using CompareTo(BytesRef) ) for all comparisons. this is typically slower than STRING , which uses ordinals to do the sorting."
  },
  "api/Lucene.Net/Lucene.Net.Search.SortRescorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SortRescorer.html",
    "title": "Class SortRescorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortRescorer A Rescorer that re-sorts according to a provided Sort. Inheritance System.Object Rescorer SortRescorer Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class SortRescorer : Rescorer Constructors | Improve this Doc View Source SortRescorer(Sort) Sole constructor. Declaration public SortRescorer(Sort sort) Parameters Type Name Description Sort sort Methods | Improve this Doc View Source Explain(IndexSearcher, Explanation, Int32) Declaration public override Explanation Explain(IndexSearcher searcher, Explanation firstPassExplanation, int docID) Parameters Type Name Description IndexSearcher searcher Explanation firstPassExplanation System.Int32 docID Returns Type Description Explanation Overrides Rescorer.Explain(IndexSearcher, Explanation, Int32) | Improve this Doc View Source Rescore(IndexSearcher, TopDocs, Int32) Declaration public override TopDocs Rescore(IndexSearcher searcher, TopDocs firstPassTopDocs, int topN) Parameters Type Name Description IndexSearcher searcher TopDocs firstPassTopDocs System.Int32 topN Returns Type Description TopDocs Overrides Rescorer.Rescore(IndexSearcher, TopDocs, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.FieldMaskingSpanQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.FieldMaskingSpanQuery.html",
    "title": "Class FieldMaskingSpanQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldMaskingSpanQuery Wrapper to allow SpanQuery objects participate in composite single-field SpanQueries by 'lying' about their search field. That is, the masked SpanQuery will function as normal, but Field simply hands back the value supplied in this class's constructor. This can be used to support Queries like SpanNearQuery or SpanOrQuery across different fields, which is not ordinarily permitted. This can be useful for denormalized relational data: for example, when indexing a document with conceptually many 'children': teacherid: 1 studentfirstname: james studentsurname: jones teacherid: 2 studenfirstname: james studentsurname: smith studentfirstname: sally studentsurname: jones A SpanNearQuery with a slop of 0 can be applied across two SpanTermQuery objects as follows: SpanQuery q1 = new SpanTermQuery(new Term(\"studentfirstname\", \"james\")); SpanQuery q2 = new SpanTermQuery(new Term(\"studentsurname\", \"jones\")); SpanQuery q2m = new FieldMaskingSpanQuery(q2, \"studentfirstname\"); Query q = new SpanNearQuery(new SpanQuery[] { q1, q2m }, -1, false); to search for 'studentfirstname:james studentsurname:jones' and find teacherid 1 without matching teacherid 2 (which has a 'james' in position 0 and 'jones' in position 1). Note: as Field returns the masked field, scoring will be done using the Similarity and collection statistics of the field name supplied, but with the term statistics of the real field. This may lead to exceptions, poor performance, and unexpected scoring behavior. Inheritance System.Object Query SpanQuery FieldMaskingSpanQuery Inherited Members Query.Boost Query.ToString() Query.Clone() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class FieldMaskingSpanQuery : SpanQuery Constructors | Improve this Doc View Source FieldMaskingSpanQuery(SpanQuery, String) Declaration public FieldMaskingSpanQuery(SpanQuery maskedQuery, string maskedField) Parameters Type Name Description SpanQuery maskedQuery System.String maskedField Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source MaskedQuery Declaration public virtual SpanQuery MaskedQuery { get; } Property Value Type Description SpanQuery Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides SpanQuery.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.html",
    "title": "Namespace Lucene.Net.Search.Spans | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Spans <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The calculus of spans. A span is a <doc,startPosition,endPosition> tuple. The following span query operators are implemented: * A SpanTermQuery matches all spans containing a particular Term . * A SpanNearQuery matches spans which occur near one another, and can be used to implement things like phrase search (when constructed from SpanTermQuery s) and inter-phrase proximity (when constructed from other SpanNearQuery s). * A SpanOrQuery merges spans from a number of other SpanQuery s. * A SpanNotQuery removes spans matching one SpanQuery which overlap (or comes near) another. This can be used, e.g., to implement within-paragraph search. * A SpanFirstQuery matches spans matching q whose end position is less than n . This can be used to constrain matches to the first part of the document. * A SpanPositionRangeQuery is a more general form of SpanFirstQuery that can constrain matches to arbitrary portions of the document. In all cases, output spans are minimally inclusive. In other words, a span formed by matching a span in x and y starts at the lesser of the two starts and ends at the greater of the two ends. For example, a span query which matches \"John Kerry\" within ten words of \"George Bush\" within the first 100 words of the document could be constructed with: SpanQuery john = new SpanTermQuery(new Term(\"content\", \"john\")); SpanQuery kerry = new SpanTermQuery(new Term(\"content\", \"kerry\")); SpanQuery george = new SpanTermQuery(new Term(\"content\", \"george\")); SpanQuery bush = new SpanTermQuery(new Term(\"content\", \"bush\")); SpanQuery johnKerry = new SpanNearQuery(new SpanQuery[] {john, kerry}, 0, true); SpanQuery georgeBush = new SpanNearQuery(new SpanQuery[] {george, bush}, 0, true); SpanQuery johnKerryNearGeorgeBush = new SpanNearQuery(new SpanQuery[] {johnKerry, georgeBush}, 10, false); SpanQuery johnKerryNearGeorgeBushAtStart = new SpanFirstQuery(johnKerryNearGeorgeBush, 100); Span queries may be freely intermixed with other Lucene queries. So, for example, the above query can be restricted to documents which also use the word \"iraq\" with: Query query = new BooleanQuery(); query.add(johnKerryNearGeorgeBushAtStart, true, false); query.add(new TermQuery(\"content\", \"iraq\"), true, false); Classes FieldMaskingSpanQuery Wrapper to allow SpanQuery objects participate in composite single-field SpanQueries by 'lying' about their search field. That is, the masked SpanQuery will function as normal, but Field simply hands back the value supplied in this class's constructor. This can be used to support Queries like SpanNearQuery or SpanOrQuery across different fields, which is not ordinarily permitted. This can be useful for denormalized relational data: for example, when indexing a document with conceptually many 'children': teacherid: 1 studentfirstname: james studentsurname: jones teacherid: 2 studenfirstname: james studentsurname: smith studentfirstname: sally studentsurname: jones A SpanNearQuery with a slop of 0 can be applied across two SpanTermQuery objects as follows: SpanQuery q1 = new SpanTermQuery(new Term(\"studentfirstname\", \"james\")); SpanQuery q2 = new SpanTermQuery(new Term(\"studentsurname\", \"jones\")); SpanQuery q2m = new FieldMaskingSpanQuery(q2, \"studentfirstname\"); Query q = new SpanNearQuery(new SpanQuery[] { q1, q2m }, -1, false); to search for 'studentfirstname:james studentsurname:jones' and find teacherid 1 without matching teacherid 2 (which has a 'james' in position 0 and 'jones' in position 1). Note: as Field returns the masked field, scoring will be done using the Similarity and collection statistics of the field name supplied, but with the term statistics of the real field. This may lead to exceptions, poor performance, and unexpected scoring behavior. NearSpansOrdered A Spans that is formed from the ordered subspans of a SpanNearQuery where the subspans do not overlap and have a maximum slop between them. The formed spans only contains minimum slop matches. The matching slop is computed from the distance(s) between the non overlapping matching Spans . Successive matches are always formed from the successive Spans of the SpanNearQuery . The formed spans may contain overlaps when the slop is at least 1. For example, when querying using t1 t2 t3 with slop at least 1, the fragment: t1 t2 t1 t3 t2 t3 matches twice: t1 t2 .. t3 t1 .. t2 t3 Expert: Only public for subclassing. Most implementations should not need this class NearSpansUnordered Similar to NearSpansOrdered , but for the unordered case. Expert: Only public for subclassing. Most implementations should not need this class SpanFirstQuery Matches spans near the beginning of a field. This class is a simple extension of SpanPositionRangeQuery in that it assumes the start to be zero and only checks the end boundary. SpanMultiTermQueryWrapper<Q> Wraps any MultiTermQuery as a SpanQuery , so it can be nested within other SpanQuery classes. The query is rewritten by default to a SpanOrQuery containing the expanded terms, but this can be customized. Example: WildcardQuery wildcard = new WildcardQuery(new Term(\"field\", \"bro?n\")); SpanQuery spanWildcard = new SpanMultiTermQueryWrapper<WildcardQuery>(wildcard); // do something with spanWildcard, such as use it in a SpanFirstQuery SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite A rewrite method that first translates each term into a SpanTermQuery in a SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. SpanNearPayloadCheckQuery Only return those matches that have a specific payload at the given position. SpanNearQuery Matches spans which are near one another. One can specify slop , the maximum number of intervening unmatched positions, as well as whether matches are required to be in-order. SpanNotQuery Removes matches which overlap with another SpanQuery or within a x tokens before or y tokens after another SpanQuery . SpanOrQuery Matches the union of its clauses. SpanPayloadCheckQuery Only return those matches that have a specific payload at the given position. Do not use this with a SpanQuery that contains a SpanNearQuery . Instead, use SpanNearPayloadCheckQuery since it properly handles the fact that payloads aren't ordered by SpanNearQuery . SpanPositionCheckQuery Base class for filtering a SpanQuery based on the position of a match. SpanPositionCheckQuery.PositionCheckSpan SpanPositionRangeQuery Checks to see if the Match lies between a start and end position SpanQuery Base class for span-based queries. SpanRewriteMethod Abstract class that defines how the query is rewritten. Spans Expert: an enumeration of span matches. Used to implement span searching. Each span represents a range of term positions within a document. Matches are enumerated in order, by increasing document number, within that by increasing start position and finally by increasing end position. SpanScorer Public for extension only. SpanTermQuery Matches spans containing a term. SpanWeight Expert-only. Public for use by other weight implementations TermSpans Expert: Public for extension only Interfaces ISpanMultiTermQueryWrapper LUCENENET specific interface for referring to/identifying a SpanMultiTermQueryWrapper<Q> without referring to its generic closing type. Enums SpanPositionCheckQuery.AcceptStatus Return value for AcceptPosition(Spans) ."
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.ISpanMultiTermQueryWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.ISpanMultiTermQueryWrapper.html",
    "title": "Interface ISpanMultiTermQueryWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISpanMultiTermQueryWrapper LUCENENET specific interface for referring to/identifying a SpanMultiTermQueryWrapper<Q> without referring to its generic closing type. Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public interface ISpanMultiTermQueryWrapper Properties | Improve this Doc View Source Field Declaration string Field { get; } Property Value Type Description System.String | Improve this Doc View Source MultiTermRewriteMethod Expert: Gets or Sets the rewrite method. This only makes sense to be a span rewrite method. Declaration SpanRewriteMethod MultiTermRewriteMethod { get; } Property Value Type Description SpanRewriteMethod | Improve this Doc View Source WrappedQuery Returns the wrapped query Declaration Query WrappedQuery { get; } Property Value Type Description Query Methods | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs IDictionary < Term , TermContext > termContexts Returns Type Description Spans | Improve this Doc View Source Rewrite(IndexReader) Declaration Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.NearSpansOrdered.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.NearSpansOrdered.html",
    "title": "Class NearSpansOrdered | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NearSpansOrdered A Spans that is formed from the ordered subspans of a SpanNearQuery where the subspans do not overlap and have a maximum slop between them. The formed spans only contains minimum slop matches. The matching slop is computed from the distance(s) between the non overlapping matching Spans . Successive matches are always formed from the successive Spans of the SpanNearQuery . The formed spans may contain overlaps when the slop is at least 1. For example, when querying using t1 t2 t3 with slop at least 1, the fragment: t1 t2 t1 t3 t2 t3 matches twice: t1 t2 .. t3 t1 .. t2 t3 Expert: Only public for subclassing. Most implementations should not need this class Inheritance System.Object Spans NearSpansOrdered Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class NearSpansOrdered : Spans Constructors | Improve this Doc View Source NearSpansOrdered(SpanNearQuery, AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public NearSpansOrdered(SpanNearQuery spanNearQuery, AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description SpanNearQuery spanNearQuery AtomicReaderContext context IBits acceptDocs IDictionary < Term , TermContext > termContexts | Improve this Doc View Source NearSpansOrdered(SpanNearQuery, AtomicReaderContext, IBits, IDictionary<Term, TermContext>, Boolean) Declaration public NearSpansOrdered(SpanNearQuery spanNearQuery, AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts, bool collectPayloads) Parameters Type Name Description SpanNearQuery spanNearQuery AtomicReaderContext context IBits acceptDocs IDictionary < Term , TermContext > termContexts System.Boolean collectPayloads Properties | Improve this Doc View Source Doc Returns the document number of the current match. Initially invalid. Declaration public override int Doc { get; } Property Value Type Description System.Int32 Overrides Spans.Doc | Improve this Doc View Source End Returns the end position of the current match. Initially invalid. Declaration public override int End { get; } Property Value Type Description System.Int32 Overrides Spans.End | Improve this Doc View Source IsPayloadAvailable Declaration public override bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean Overrides Spans.IsPayloadAvailable | Improve this Doc View Source Start Returns the start position of the current match. Initially invalid. Declaration public override int Start { get; } Property Value Type Description System.Int32 Overrides Spans.Start | Improve this Doc View Source SubSpans Declaration public virtual Spans[] SubSpans { get; } Property Value Type Description Spans [] Methods | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides Spans.GetCost() | Improve this Doc View Source GetPayload() Declaration public override ICollection<byte[]> GetPayload() Returns Type Description ICollection < System.Byte []> Overrides Spans.GetPayload() | Improve this Doc View Source Next() Move to the next match, returning true iff any such exists. Declaration public override bool Next() Returns Type Description System.Boolean Overrides Spans.Next() | Improve this Doc View Source SkipTo(Int32) Skips to the first match beyond the current, whose document number is greater than or equal to target . The behavior of this method is undefined when called with target <= current , or after the iterator has exhausted. Both cases may result in unpredicted behavior. Returns true if there is such a match. Behaves as if written: bool SkipTo(int target) { do { if (!Next()) return false; } while (target > Doc); return true; } Most implementations are considerably more efficient than that. Declaration public override bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean Overrides Spans.SkipTo(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.NearSpansUnordered.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.NearSpansUnordered.html",
    "title": "Class NearSpansUnordered | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NearSpansUnordered Similar to NearSpansOrdered , but for the unordered case. Expert: Only public for subclassing. Most implementations should not need this class Inheritance System.Object Spans NearSpansUnordered Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class NearSpansUnordered : Spans Constructors | Improve this Doc View Source NearSpansUnordered(SpanNearQuery, AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public NearSpansUnordered(SpanNearQuery query, AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description SpanNearQuery query AtomicReaderContext context IBits acceptDocs IDictionary < Term , TermContext > termContexts Properties | Improve this Doc View Source Doc Declaration public override int Doc { get; } Property Value Type Description System.Int32 Overrides Spans.Doc | Improve this Doc View Source End Declaration public override int End { get; } Property Value Type Description System.Int32 Overrides Spans.End | Improve this Doc View Source IsPayloadAvailable Declaration public override bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean Overrides Spans.IsPayloadAvailable | Improve this Doc View Source Start Declaration public override int Start { get; } Property Value Type Description System.Int32 Overrides Spans.Start | Improve this Doc View Source SubSpans Declaration public virtual Spans[] SubSpans { get; } Property Value Type Description Spans [] Methods | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides Spans.GetCost() | Improve this Doc View Source GetPayload() WARNING: The List is not necessarily in order of the the positions Declaration public override ICollection<byte[]> GetPayload() Returns Type Description ICollection < System.Byte []> Collection of byte[] payloads Overrides Spans.GetPayload() | Improve this Doc View Source Next() Declaration public override bool Next() Returns Type Description System.Boolean Overrides Spans.Next() | Improve this Doc View Source SkipTo(Int32) Declaration public override bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean Overrides Spans.SkipTo(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanFirstQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanFirstQuery.html",
    "title": "Class SpanFirstQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanFirstQuery Matches spans near the beginning of a field. This class is a simple extension of SpanPositionRangeQuery in that it assumes the start to be zero and only checks the end boundary. Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanPositionRangeQuery SpanFirstQuery Inherited Members SpanPositionRangeQuery.m_start SpanPositionRangeQuery.m_end SpanPositionRangeQuery.Start SpanPositionRangeQuery.End SpanPositionCheckQuery.m_match SpanPositionCheckQuery.Match SpanPositionCheckQuery.Field SpanPositionCheckQuery.ExtractTerms(ISet<Term>) SpanPositionCheckQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanPositionCheckQuery.Rewrite(IndexReader) SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanFirstQuery : SpanPositionRangeQuery Constructors | Improve this Doc View Source SpanFirstQuery(SpanQuery, Int32) Construct a SpanFirstQuery matching spans in match whose end position is less than or equal to end . Declaration public SpanFirstQuery(SpanQuery match, int end) Parameters Type Name Description SpanQuery match System.Int32 end Methods | Improve this Doc View Source AcceptPosition(Spans) Declaration protected override SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans Returns Type Description SpanPositionCheckQuery.AcceptStatus Overrides SpanPositionRangeQuery.AcceptPosition(Spans) | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides SpanPositionRangeQuery.Clone() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides SpanPositionRangeQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides SpanPositionRangeQuery.GetHashCode() | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides SpanPositionRangeQuery.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanMultiTermQueryWrapper-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanMultiTermQueryWrapper-1.html",
    "title": "Class SpanMultiTermQueryWrapper<Q> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanMultiTermQueryWrapper<Q> Wraps any MultiTermQuery as a SpanQuery , so it can be nested within other SpanQuery classes. The query is rewritten by default to a SpanOrQuery containing the expanded terms, but this can be customized. Example: WildcardQuery wildcard = new WildcardQuery(new Term(\"field\", \"bro?n\")); SpanQuery spanWildcard = new SpanMultiTermQueryWrapper<WildcardQuery>(wildcard); // do something with spanWildcard, such as use it in a SpanFirstQuery Inheritance System.Object Query SpanQuery SpanMultiTermQueryWrapper<Q> Implements ISpanMultiTermQueryWrapper Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() Query.ExtractTerms(ISet<Term>) Query.Clone() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanMultiTermQueryWrapper<Q> : SpanQuery, ISpanMultiTermQueryWrapper where Q : MultiTermQuery Type Parameters Name Description Q Constructors | Improve this Doc View Source SpanMultiTermQueryWrapper(Q) Create a new SpanMultiTermQueryWrapper<Q> . Declaration public SpanMultiTermQueryWrapper(Q query) Parameters Type Name Description Q query Query to wrap. NOTE: This will set MultiTermRewriteMethod on the wrapped query , changing its rewrite method to a suitable one for spans. Be sure to not change the rewrite method on the wrapped query afterwards! Doing so will throw on rewriting this query! Fields | Improve this Doc View Source m_query Declaration protected readonly Q m_query Field Value Type Description Q | Improve this Doc View Source SCORING_SPAN_QUERY_REWRITE A rewrite method that first translates each term into a SpanTermQuery in a SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. Declaration public static readonly SpanRewriteMethod SCORING_SPAN_QUERY_REWRITE Field Value Type Description SpanRewriteMethod See Also MultiTermRewriteMethod Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source MultiTermRewriteMethod Expert: Gets or Sets the rewrite method. This only makes sense to be a span rewrite method. Declaration public SpanRewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description SpanRewriteMethod | Improve this Doc View Source WrappedQuery Returns the wrapped query Declaration public virtual Query WrappedQuery { get; } Property Value Type Description Query Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Implements ISpanMultiTermQueryWrapper"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanMultiTermQueryWrapper-1.TopTermsSpanBooleanQueryRewrite.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanMultiTermQueryWrapper-1.TopTermsSpanBooleanQueryRewrite.html",
    "title": "Class SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite A rewrite method that first translates each term into a SpanTermQuery in a SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. Inheritance System.Object MultiTermQuery.RewriteMethod SpanRewriteMethod SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite Inherited Members MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public sealed class TopTermsSpanBooleanQueryRewrite : SpanRewriteMethod Constructors | Improve this Doc View Source TopTermsSpanBooleanQueryRewrite(Int32) Create a SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite for at most size terms. Declaration public TopTermsSpanBooleanQueryRewrite(int size) Parameters Type Name Description System.Int32 size Properties | Improve this Doc View Source Count return the maximum priority queue size. NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides SpanRewriteMethod.Rewrite(IndexReader, MultiTermQuery) See Also MultiTermRewriteMethod"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNearPayloadCheckQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNearPayloadCheckQuery.html",
    "title": "Class SpanNearPayloadCheckQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanNearPayloadCheckQuery Only return those matches that have a specific payload at the given position. Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanNearPayloadCheckQuery Inherited Members SpanPositionCheckQuery.m_match SpanPositionCheckQuery.Match SpanPositionCheckQuery.Field SpanPositionCheckQuery.ExtractTerms(ISet<Term>) SpanPositionCheckQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanPositionCheckQuery.Rewrite(IndexReader) SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanNearPayloadCheckQuery : SpanPositionCheckQuery Constructors | Improve this Doc View Source SpanNearPayloadCheckQuery(SpanNearQuery, ICollection<Byte[]>) Declaration public SpanNearPayloadCheckQuery(SpanNearQuery match, ICollection<byte[]> payloadToMatch) Parameters Type Name Description SpanNearQuery match The underlying SpanQuery to check ICollection < System.Byte []> payloadToMatch The ICollection{byte[]} of payloads to match. IMPORTANT: If the type provided does not implement (including arrays), , or , it should provide an and implementation that compares the values of the byte arrays to ensure they are the same. Fields | Improve this Doc View Source m_payloadToMatch Declaration protected readonly ICollection<byte[]> m_payloadToMatch Field Value Type Description ICollection < System.Byte []> Methods | Improve this Doc View Source AcceptPosition(Spans) Declaration protected override SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans Returns Type Description SpanPositionCheckQuery.AcceptStatus Overrides SpanPositionCheckQuery.AcceptPosition(Spans) | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNearQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNearQuery.html",
    "title": "Class SpanNearQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanNearQuery Matches spans which are near one another. One can specify slop , the maximum number of intervening unmatched positions, as well as whether matches are required to be in-order. Inheritance System.Object Query SpanQuery SpanNearQuery PayloadNearQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanNearQuery : SpanQuery Constructors | Improve this Doc View Source SpanNearQuery(SpanQuery[], Int32, Boolean) Construct a SpanNearQuery . Matches spans matching a span from each clause, with up to slop total unmatched positions between them. * When inOrder is true , the spans from each clause must be * ordered as in clauses . Declaration public SpanNearQuery(SpanQuery[] clauses, int slop, bool inOrder) Parameters Type Name Description SpanQuery [] clauses The clauses to find near each other System.Int32 slop The slop value System.Boolean inOrder true if order is important | Improve this Doc View Source SpanNearQuery(SpanQuery[], Int32, Boolean, Boolean) Declaration public SpanNearQuery(SpanQuery[] clauses, int slop, bool inOrder, bool collectPayloads) Parameters Type Name Description SpanQuery [] clauses System.Int32 slop System.Boolean inOrder System.Boolean collectPayloads Fields | Improve this Doc View Source m_clauses Declaration protected readonly IList<SpanQuery> m_clauses Field Value Type Description IList < SpanQuery > | Improve this Doc View Source m_field Declaration protected string m_field Field Value Type Description System.String | Improve this Doc View Source m_inOrder Declaration protected bool m_inOrder Field Value Type Description System.Boolean | Improve this Doc View Source m_slop Declaration protected int m_slop Field Value Type Description System.Int32 Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source IsInOrder Return true if matches are required to be in-order. Declaration public virtual bool IsInOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Slop Return the maximum number of intervening unmatched positions permitted. Declaration public virtual int Slop { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Returns true iff o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetClauses() Return the clauses whose spans are matched. Declaration public virtual SpanQuery[] GetClauses() Returns Type Description SpanQuery [] | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNotQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNotQuery.html",
    "title": "Class SpanNotQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanNotQuery Removes matches which overlap with another SpanQuery or within a x tokens before or y tokens after another SpanQuery . Inheritance System.Object Query SpanQuery SpanNotQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanNotQuery : SpanQuery Constructors | Improve this Doc View Source SpanNotQuery(SpanQuery, SpanQuery) Construct a SpanNotQuery matching spans from include which have no overlap with spans from exclude . Declaration public SpanNotQuery(SpanQuery include, SpanQuery exclude) Parameters Type Name Description SpanQuery include SpanQuery exclude | Improve this Doc View Source SpanNotQuery(SpanQuery, SpanQuery, Int32) Construct a SpanNotQuery matching spans from include which have no overlap with spans from exclude within dist tokens of include . Declaration public SpanNotQuery(SpanQuery include, SpanQuery exclude, int dist) Parameters Type Name Description SpanQuery include SpanQuery exclude System.Int32 dist | Improve this Doc View Source SpanNotQuery(SpanQuery, SpanQuery, Int32, Int32) Construct a SpanNotQuery matching spans from include which have no overlap with spans from exclude within pre tokens before or post tokens of include . Declaration public SpanNotQuery(SpanQuery include, SpanQuery exclude, int pre, int post) Parameters Type Name Description SpanQuery include SpanQuery exclude System.Int32 pre System.Int32 post Properties | Improve this Doc View Source Exclude Return the SpanQuery whose matches must not overlap those returned. Declaration public virtual SpanQuery Exclude { get; } Property Value Type Description SpanQuery | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source Include Return the SpanQuery whose matches are filtered. Declaration public virtual SpanQuery Include { get; } Property Value Type Description SpanQuery Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanOrQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanOrQuery.html",
    "title": "Class SpanOrQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanOrQuery Matches the union of its clauses. Inheritance System.Object Query SpanQuery SpanOrQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanOrQuery : SpanQuery Constructors | Improve this Doc View Source SpanOrQuery(SpanQuery[]) Construct a SpanOrQuery merging the provided clauses . Declaration public SpanOrQuery(params SpanQuery[] clauses) Parameters Type Name Description SpanQuery [] clauses Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field Methods | Improve this Doc View Source AddClause(SpanQuery) Adds a clause to this query Declaration public void AddClause(SpanQuery clause) Parameters Type Name Description SpanQuery clause | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetClauses() Return the clauses whose spans are matched. Declaration public virtual SpanQuery[] GetClauses() Returns Type Description SpanQuery [] | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPayloadCheckQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPayloadCheckQuery.html",
    "title": "Class SpanPayloadCheckQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanPayloadCheckQuery Only return those matches that have a specific payload at the given position. Do not use this with a SpanQuery that contains a SpanNearQuery . Instead, use SpanNearPayloadCheckQuery since it properly handles the fact that payloads aren't ordered by SpanNearQuery . Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanPayloadCheckQuery Inherited Members SpanPositionCheckQuery.m_match SpanPositionCheckQuery.Match SpanPositionCheckQuery.Field SpanPositionCheckQuery.ExtractTerms(ISet<Term>) SpanPositionCheckQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanPositionCheckQuery.Rewrite(IndexReader) SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanPayloadCheckQuery : SpanPositionCheckQuery Constructors | Improve this Doc View Source SpanPayloadCheckQuery(SpanQuery, ICollection<Byte[]>) Declaration public SpanPayloadCheckQuery(SpanQuery match, ICollection<byte[]> payloadToMatch) Parameters Type Name Description SpanQuery match The underlying SpanQuery to check ICollection < System.Byte []> payloadToMatch The ICollection{byte[]} of payloads to match. IMPORTANT: If the type provided does not implement (including arrays), , or , it should provide an and implementation that compares the values of the byte arrays to ensure they are the same. Fields | Improve this Doc View Source m_payloadToMatch Declaration protected readonly ICollection<byte[]> m_payloadToMatch Field Value Type Description ICollection < System.Byte []> Methods | Improve this Doc View Source AcceptPosition(Spans) Declaration protected override SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans Returns Type Description SpanPositionCheckQuery.AcceptStatus Overrides SpanPositionCheckQuery.AcceptPosition(Spans) | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.AcceptStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.AcceptStatus.html",
    "title": "Enum SpanPositionCheckQuery.AcceptStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum SpanPositionCheckQuery.AcceptStatus Return value for AcceptPosition(Spans) . Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax protected enum AcceptStatus : int Fields Name Description NO Indicates the match should be rejected NO_AND_ADVANCE Indicates the match should be rejected, and the enumeration should advance to the next document. YES Indicates the match should be accepted"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.html",
    "title": "Class SpanPositionCheckQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanPositionCheckQuery Base class for filtering a SpanQuery based on the position of a match. Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanNearPayloadCheckQuery SpanPayloadCheckQuery SpanPositionRangeQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString(String) Query.ToString() Query.Clone() Query.GetHashCode() Query.Equals(Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public abstract class SpanPositionCheckQuery : SpanQuery Constructors | Improve this Doc View Source SpanPositionCheckQuery(SpanQuery) Declaration public SpanPositionCheckQuery(SpanQuery match) Parameters Type Name Description SpanQuery match Fields | Improve this Doc View Source m_match Declaration protected SpanQuery m_match Field Value Type Description SpanQuery Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source Match Declaration public virtual SpanQuery Match { get; } Property Value Type Description SpanQuery The SpanQuery whose matches are filtered. Methods | Improve this Doc View Source AcceptPosition(Spans) Implementing classes are required to return whether the current position is a match for the passed in \"match\" SpanQuery . This is only called if the underlying Next() for the match is successful Declaration protected abstract SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans The Spans instance, positioned at the spot to check Returns Type Description SpanPositionCheckQuery.AcceptStatus Whether the match is accepted, rejected, or rejected and should move to the next doc. See Also Next () | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.PositionCheckSpan.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.PositionCheckSpan.html",
    "title": "Class SpanPositionCheckQuery.PositionCheckSpan | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanPositionCheckQuery.PositionCheckSpan Inheritance System.Object Spans SpanPositionCheckQuery.PositionCheckSpan Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax protected class PositionCheckSpan : Spans Constructors | Improve this Doc View Source PositionCheckSpan(SpanPositionCheckQuery, AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public PositionCheckSpan(SpanPositionCheckQuery outerInstance, AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description SpanPositionCheckQuery outerInstance AtomicReaderContext context IBits acceptDocs IDictionary < Term , TermContext > termContexts Properties | Improve this Doc View Source Doc Declaration public override int Doc { get; } Property Value Type Description System.Int32 Overrides Spans.Doc | Improve this Doc View Source End Declaration public override int End { get; } Property Value Type Description System.Int32 Overrides Spans.End | Improve this Doc View Source IsPayloadAvailable Declaration public override bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean Overrides Spans.IsPayloadAvailable | Improve this Doc View Source Start Declaration public override int Start { get; } Property Value Type Description System.Int32 Overrides Spans.Start Methods | Improve this Doc View Source DoNext() Declaration protected virtual bool DoNext() Returns Type Description System.Boolean | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides Spans.GetCost() | Improve this Doc View Source GetPayload() Declaration public override ICollection<byte[]> GetPayload() Returns Type Description ICollection < System.Byte []> Overrides Spans.GetPayload() | Improve this Doc View Source Next() Declaration public override bool Next() Returns Type Description System.Boolean Overrides Spans.Next() | Improve this Doc View Source SkipTo(Int32) Declaration public override bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean Overrides Spans.SkipTo(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionRangeQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionRangeQuery.html",
    "title": "Class SpanPositionRangeQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanPositionRangeQuery Checks to see if the Match lies between a start and end position Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanPositionRangeQuery SpanFirstQuery Inherited Members SpanPositionCheckQuery.m_match SpanPositionCheckQuery.Match SpanPositionCheckQuery.Field SpanPositionCheckQuery.ExtractTerms(ISet<Term>) SpanPositionCheckQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanPositionCheckQuery.Rewrite(IndexReader) SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanPositionRangeQuery : SpanPositionCheckQuery Constructors | Improve this Doc View Source SpanPositionRangeQuery(SpanQuery, Int32, Int32) Declaration public SpanPositionRangeQuery(SpanQuery match, int start, int end) Parameters Type Name Description SpanQuery match System.Int32 start System.Int32 end Fields | Improve this Doc View Source m_end Declaration protected int m_end Field Value Type Description System.Int32 | Improve this Doc View Source m_start Declaration protected int m_start Field Value Type Description System.Int32 Properties | Improve this Doc View Source End Declaration public virtual int End { get; } Property Value Type Description System.Int32 The maximum end position permitted in a match. | Improve this Doc View Source Start Declaration public virtual int Start { get; } Property Value Type Description System.Int32 The minimum position permitted in a match Methods | Improve this Doc View Source AcceptPosition(Spans) Declaration protected override SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans Returns Type Description SpanPositionCheckQuery.AcceptStatus Overrides SpanPositionCheckQuery.AcceptPosition(Spans) | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) See Also SpanFirstQuery"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanQuery.html",
    "title": "Class SpanQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanQuery Base class for span-based queries. Inheritance System.Object Query SpanQuery FieldMaskingSpanQuery SpanMultiTermQueryWrapper<Q> SpanNearQuery SpanNotQuery SpanOrQuery SpanPositionCheckQuery SpanTermQuery Inherited Members Query.Boost Query.ToString(String) Query.ToString() Query.Rewrite(IndexReader) Query.ExtractTerms(ISet<Term>) Query.Clone() Query.GetHashCode() Query.Equals(Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public abstract class SpanQuery : Query Properties | Improve this Doc View Source Field Returns the name of the field matched by this query. Note that this may return null if the query matches no terms. Declaration public abstract string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Expert: Returns the matches for this query in an index. Used internally to search for spans. Declaration public abstract Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs IDictionary < Term , TermContext > termContexts Returns Type Description Spans"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanRewriteMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanRewriteMethod.html",
    "title": "Class SpanRewriteMethod | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanRewriteMethod Abstract class that defines how the query is rewritten. Inheritance System.Object MultiTermQuery.RewriteMethod SpanRewriteMethod SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite Inherited Members MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public abstract class SpanRewriteMethod : MultiTermQuery.RewriteMethod Methods | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public abstract override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.Spans.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.Spans.html",
    "title": "Class Spans | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Spans Expert: an enumeration of span matches. Used to implement span searching. Each span represents a range of term positions within a document. Matches are enumerated in order, by increasing document number, within that by increasing start position and finally by increasing end position. Inheritance System.Object Spans NearSpansOrdered NearSpansUnordered SpanPositionCheckQuery.PositionCheckSpan TermSpans Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public abstract class Spans : object Properties | Improve this Doc View Source Doc Returns the document number of the current match. Initially invalid. Declaration public abstract int Doc { get; } Property Value Type Description System.Int32 | Improve this Doc View Source End Returns the end position of the current match. Initially invalid. Declaration public abstract int End { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsPayloadAvailable Checks if a payload can be loaded at this position. Payloads can only be loaded once per call to Next() . Declaration public abstract bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean true if there is a payload available at this position that can be loaded | Improve this Doc View Source Start Returns the start position of the current match. Initially invalid. Declaration public abstract int Start { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetCost() Returns the estimated cost of this spans. This is generally an upper bound of the number of documents this iterator might match, but may be a rough heuristic, hardcoded value, or otherwise completely inaccurate. Declaration public abstract long GetCost() Returns Type Description System.Int64 | Improve this Doc View Source GetPayload() Returns the payload data for the current span. this is invalid until Next() is called for the first time. This method must not be called more than once after each call of Next() . However, most payloads are loaded lazily, so if the payload data for the current position is not needed, this method may not be called at all for performance reasons. An ordered SpanQuery does not lazy load, so if you have payloads in your index and you do not want ordered SpanNearQuerys to collect payloads, you can disable collection with a constructor option. Note that the return type is a collection, thus the ordering should not be relied upon. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public abstract ICollection<byte[]> GetPayload() Returns Type Description ICollection < System.Byte []> A ICollection{byte[]} of byte arrays containing the data of this payload, otherwise null if IsPayloadAvailable is false | Improve this Doc View Source Next() Move to the next match, returning true if any such exists. Declaration public abstract bool Next() Returns Type Description System.Boolean | Improve this Doc View Source SkipTo(Int32) Skips to the first match beyond the current, whose document number is greater than or equal to target . The behavior of this method is undefined when called with target <= current , or after the iterator has exhausted. Both cases may result in unpredicted behavior. Returns true if there is such a match. Behaves as if written: bool SkipTo(int target) { do { if (!Next()) return false; } while (target > Doc); return true; } Most implementations are considerably more efficient than that. Declaration public abstract bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanScorer.html",
    "title": "Class SpanScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanScorer Public for extension only. Inheritance System.Object DocIdSetIterator DocsEnum Scorer SpanScorer PayloadNearQuery.PayloadNearSpanScorer PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer Inherited Members Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanScorer : Scorer Constructors | Improve this Doc View Source SpanScorer(Spans, Weight, Similarity.SimScorer) Declaration protected SpanScorer(Spans spans, Weight weight, Similarity.SimScorer docScorer) Parameters Type Name Description Spans spans Weight weight Similarity.SimScorer docScorer Fields | Improve this Doc View Source m_doc Declaration protected int m_doc Field Value Type Description System.Int32 | Improve this Doc View Source m_docScorer Declaration protected readonly Similarity.SimScorer m_docScorer Field Value Type Description Similarity.SimScorer | Improve this Doc View Source m_freq Declaration protected float m_freq Field Value Type Description System.Single | Improve this Doc View Source m_more Declaration protected bool m_more Field Value Type Description System.Boolean | Improve this Doc View Source m_numMatches Declaration protected int m_numMatches Field Value Type Description System.Int32 | Improve this Doc View Source m_spans Declaration protected Spans m_spans Field Value Type Description Spans Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source SloppyFreq Returns the intermediate \"sloppy freq\" adjusted for edit distance This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual float SloppyFreq { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source SetFreqCurrentDoc() Declaration protected virtual bool SetFreqCurrentDoc() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanTermQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanTermQuery.html",
    "title": "Class SpanTermQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanTermQuery Matches spans containing a term. Inheritance System.Object Query SpanQuery SpanTermQuery PayloadTermQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() Query.Rewrite(IndexReader) Query.Clone() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanTermQuery : SpanQuery Constructors | Improve this Doc View Source SpanTermQuery(Term) Construct a SpanTermQuery matching the named term's spans. Declaration public SpanTermQuery(Term term) Parameters Type Name Description Term term Fields | Improve this Doc View Source m_term Declaration protected Term m_term Field Value Type Description Term Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source Term Return the term whose spans are matched. Declaration public virtual Term Term { get; } Property Value Type Description Term Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanWeight.html",
    "title": "Class SpanWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanWeight Expert-only. Public for use by other weight implementations Inheritance System.Object Weight SpanWeight PayloadNearQuery.PayloadNearSpanWeight PayloadTermQuery.PayloadTermWeight Inherited Members Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanWeight : Weight Constructors | Improve this Doc View Source SpanWeight(SpanQuery, IndexSearcher) Declaration public SpanWeight(SpanQuery query, IndexSearcher searcher) Parameters Type Name Description SpanQuery query IndexSearcher searcher Fields | Improve this Doc View Source m_query Declaration protected SpanQuery m_query Field Value Type Description SpanQuery | Improve this Doc View Source m_similarity Declaration protected Similarity m_similarity Field Value Type Description Similarity | Improve this Doc View Source m_stats Declaration protected Similarity.SimWeight m_stats Field Value Type Description Similarity.SimWeight | Improve this Doc View Source m_termContexts Declaration protected IDictionary<Term, TermContext> m_termContexts Field Value Type Description IDictionary < Term , TermContext > Properties | Improve this Doc View Source Query Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides Weight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Declaration public override void Normalize(float queryNorm, float topLevelBoost) Parameters Type Name Description System.Single queryNorm System.Single topLevelBoost Overrides Weight.Normalize(Single, Single)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.TermSpans.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.TermSpans.html",
    "title": "Class TermSpans | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermSpans Expert: Public for extension only Inheritance System.Object Spans TermSpans Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class TermSpans : Spans Constructors | Improve this Doc View Source TermSpans(DocsAndPositionsEnum, Term) Declaration public TermSpans(DocsAndPositionsEnum postings, Term term) Parameters Type Name Description DocsAndPositionsEnum postings Term term Fields | Improve this Doc View Source EMPTY_TERM_SPANS Declaration public static readonly TermSpans EMPTY_TERM_SPANS Field Value Type Description TermSpans | Improve this Doc View Source m_count Declaration protected int m_count Field Value Type Description System.Int32 | Improve this Doc View Source m_doc Declaration protected int m_doc Field Value Type Description System.Int32 | Improve this Doc View Source m_freq Declaration protected int m_freq Field Value Type Description System.Int32 | Improve this Doc View Source m_position Declaration protected int m_position Field Value Type Description System.Int32 | Improve this Doc View Source m_postings Declaration protected readonly DocsAndPositionsEnum m_postings Field Value Type Description DocsAndPositionsEnum | Improve this Doc View Source m_readPayload Declaration protected bool m_readPayload Field Value Type Description System.Boolean | Improve this Doc View Source m_term Declaration protected readonly Term m_term Field Value Type Description Term Properties | Improve this Doc View Source Doc Declaration public override int Doc { get; } Property Value Type Description System.Int32 Overrides Spans.Doc | Improve this Doc View Source End Declaration public override int End { get; } Property Value Type Description System.Int32 Overrides Spans.End | Improve this Doc View Source IsPayloadAvailable Declaration public override bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean Overrides Spans.IsPayloadAvailable | Improve this Doc View Source Postings Declaration public virtual DocsAndPositionsEnum Postings { get; } Property Value Type Description DocsAndPositionsEnum | Improve this Doc View Source Start Declaration public override int Start { get; } Property Value Type Description System.Int32 Overrides Spans.Start Methods | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides Spans.GetCost() | Improve this Doc View Source GetPayload() Declaration public override ICollection<byte[]> GetPayload() Returns Type Description ICollection < System.Byte []> Overrides Spans.GetPayload() | Improve this Doc View Source Next() Declaration public override bool Next() Returns Type Description System.Boolean Overrides Spans.Next() | Improve this Doc View Source SkipTo(Int32) Declaration public override bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean Overrides Spans.SkipTo(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermCollectingRewrite-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermCollectingRewrite-1.html",
    "title": "Class TermCollectingRewrite<Q> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermCollectingRewrite<Q> Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite<Q> ConstantScoreAutoRewrite ScoringRewrite<Q> TopTermsRewrite<Q> Inherited Members MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class TermCollectingRewrite<Q> : MultiTermQuery.RewriteMethod where Q : Query Type Parameters Name Description Q Methods | Improve this Doc View Source AddClause(Q, Term, Int32, Single) Add a MultiTermQuery term to the top-level query Declaration protected void AddClause(Q topLevel, Term term, int docCount, float boost) Parameters Type Name Description Q topLevel Term term System.Int32 docCount System.Single boost | Improve this Doc View Source AddClause(Q, Term, Int32, Single, TermContext) Declaration protected abstract void AddClause(Q topLevel, Term term, int docCount, float boost, TermContext states) Parameters Type Name Description Q topLevel Term term System.Int32 docCount System.Single boost TermContext states | Improve this Doc View Source GetTopLevelQuery() Return a suitable top-level Query for holding all expanded terms. Declaration protected abstract Q GetTopLevelQuery() Returns Type Description Q"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermQuery.html",
    "title": "Class TermQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermQuery A Query that matches documents containing a term. this may be combined with other terms with a BooleanQuery . Inheritance System.Object Query TermQuery Inherited Members Query.Boost Query.ToString() Query.Rewrite(IndexReader) Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermQuery : Query Constructors | Improve this Doc View Source TermQuery(Term) Constructs a query for the term t . Declaration public TermQuery(Term t) Parameters Type Name Description Term t | Improve this Doc View Source TermQuery(Term, TermContext) Expert: constructs a TermQuery that will use the provided docFreq instead of looking up the docFreq against the searcher. Declaration public TermQuery(Term t, TermContext states) Parameters Type Name Description Term t TermContext states | Improve this Doc View Source TermQuery(Term, Int32) Expert: constructs a TermQuery that will use the provided docFreq instead of looking up the docFreq against the searcher. Declaration public TermQuery(Term t, int docFreq) Parameters Type Name Description Term t System.Int32 docFreq Properties | Improve this Doc View Source Term Returns the term of this query. Declaration public virtual Term Term { get; } Property Value Type Description Term Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermRangeFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermRangeFilter.html",
    "title": "Class TermRangeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermRangeFilter A Filter that restricts search results to a range of term values in a given field. This filter matches the documents looking for terms that fall into the supplied range according to , It is not intended for numerical ranges; use NumericRangeFilter instead. If you construct a large number of range filters with different ranges but on the same field, FieldCacheRangeFilter may have significantly better performance. @since 2.9 Inheritance System.Object Filter MultiTermQueryWrapperFilter < TermRangeQuery > TermRangeFilter Inherited Members MultiTermQueryWrapperFilter<TermRangeQuery>.m_query MultiTermQueryWrapperFilter<TermRangeQuery>.ToString() MultiTermQueryWrapperFilter<TermRangeQuery>.Equals(Object) MultiTermQueryWrapperFilter<TermRangeQuery>.GetHashCode() MultiTermQueryWrapperFilter<TermRangeQuery>.Field MultiTermQueryWrapperFilter<TermRangeQuery>.GetDocIdSet(AtomicReaderContext, IBits) Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermRangeFilter : MultiTermQueryWrapperFilter<TermRangeQuery> Constructors | Improve this Doc View Source TermRangeFilter(String, BytesRef, BytesRef, Boolean, Boolean) Declaration public TermRangeFilter(string fieldName, BytesRef lowerTerm, BytesRef upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description System.String fieldName The field this range applies to BytesRef lowerTerm The lower bound on this range BytesRef upperTerm The upper bound on this range System.Boolean includeLower Does this range include the lower bound? System.Boolean includeUpper Does this range include the upper bound? Properties | Improve this Doc View Source IncludesLower Returns true if the lower endpoint is inclusive Declaration public virtual bool IncludesLower { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesUpper Returns true if the upper endpoint is inclusive Declaration public virtual bool IncludesUpper { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerTerm Returns the lower value of this range filter Declaration public virtual BytesRef LowerTerm { get; } Property Value Type Description BytesRef | Improve this Doc View Source UpperTerm Returns the upper value of this range filter Declaration public virtual BytesRef UpperTerm { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Less(String, BytesRef) Constructs a filter for field fieldName matching less than or equal to upperTerm . Declaration public static TermRangeFilter Less(string fieldName, BytesRef upperTerm) Parameters Type Name Description System.String fieldName BytesRef upperTerm Returns Type Description TermRangeFilter | Improve this Doc View Source More(String, BytesRef) Constructs a filter for field fieldName matching greater than or equal to lowerTerm . Declaration public static TermRangeFilter More(string fieldName, BytesRef lowerTerm) Parameters Type Name Description System.String fieldName BytesRef lowerTerm Returns Type Description TermRangeFilter | Improve this Doc View Source NewStringRange(String, String, String, Boolean, Boolean) Factory that creates a new TermRangeFilter using s for term text. Declaration public static TermRangeFilter NewStringRange(string field, string lowerTerm, string upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.String lowerTerm System.String upperTerm System.Boolean includeLower System.Boolean includeUpper Returns Type Description TermRangeFilter"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermRangeQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermRangeQuery.html",
    "title": "Class TermRangeQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermRangeQuery A Query that matches documents within an range of terms. This query matches the documents looking for terms that fall into the supplied range according to . It is not intended for numerical ranges; use NumericRangeQuery instead. This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. @since 2.9 Inheritance System.Object Query MultiTermQuery TermRangeQuery Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermRangeQuery : MultiTermQuery Constructors | Improve this Doc View Source TermRangeQuery(String, BytesRef, BytesRef, Boolean, Boolean) Constructs a query selecting all terms greater/equal than lowerTerm but less/equal than upperTerm . If an endpoint is null , it is said to be \"open\". Either or both endpoints may be open. Open endpoints may not be exclusive (you can't select all but the first or last term without explicitly specifying the term to exclude.) Declaration public TermRangeQuery(string field, BytesRef lowerTerm, BytesRef upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field The field that holds both lower and upper terms. BytesRef lowerTerm The term text at the lower end of the range. BytesRef upperTerm The term text at the upper end of the range. System.Boolean includeLower If true, the lowerTerm is included in the range. System.Boolean includeUpper If true, the upperTerm is included in the range. Properties | Improve this Doc View Source IncludesLower Returns true if the lower endpoint is inclusive Declaration public virtual bool IncludesLower { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesUpper Returns true if the upper endpoint is inclusive Declaration public virtual bool IncludesUpper { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerTerm Returns the lower value of this range query Declaration public virtual BytesRef LowerTerm { get; } Property Value Type Description BytesRef | Improve this Doc View Source UpperTerm Returns the upper value of this range query Declaration public virtual BytesRef UpperTerm { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | Improve this Doc View Source NewStringRange(String, String, String, Boolean, Boolean) Factory that creates a new TermRangeQuery using s for term text. Declaration public static TermRangeQuery NewStringRange(string field, string lowerTerm, string upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.String lowerTerm System.String upperTerm System.Boolean includeLower System.Boolean includeUpper Returns Type Description TermRangeQuery | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermRangeTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermRangeTermsEnum.html",
    "title": "Class TermRangeTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermRangeTermsEnum Subclass of FilteredTermsEnum for enumerating all terms that match the specified range parameters. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Inheritance System.Object TermsEnum FilteredTermsEnum TermRangeTermsEnum Implements IBytesRefIterator Inherited Members FilteredTermsEnum.SetInitialSeekTerm(BytesRef) FilteredTermsEnum.NextSeekTerm(BytesRef) FilteredTermsEnum.Attributes FilteredTermsEnum.Term FilteredTermsEnum.Comparer FilteredTermsEnum.DocFreq FilteredTermsEnum.TotalTermFreq FilteredTermsEnum.SeekExact(BytesRef) FilteredTermsEnum.SeekCeil(BytesRef) FilteredTermsEnum.SeekExact(Int64) FilteredTermsEnum.Ord FilteredTermsEnum.Docs(IBits, DocsEnum, DocsFlags) FilteredTermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) FilteredTermsEnum.SeekExact(BytesRef, TermState) FilteredTermsEnum.GetTermState() FilteredTermsEnum.Next() TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermRangeTermsEnum : FilteredTermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source TermRangeTermsEnum(TermsEnum, BytesRef, BytesRef, Boolean, Boolean) Enumerates all terms greater/equal than lowerTerm but less/equal than upperTerm . If an endpoint is null , it is said to be \"open\". Either or both endpoints may be open. Open endpoints may not be exclusive (you can't select all but the first or last term without explicitly specifying the term to exclude.) Declaration public TermRangeTermsEnum(TermsEnum tenum, BytesRef lowerTerm, BytesRef upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description TermsEnum tenum TermsEnum to filter BytesRef lowerTerm The term text at the lower end of the range BytesRef upperTerm The term text at the upper end of the range System.Boolean includeLower If true, the lowerTerm is included in the range. System.Boolean includeUpper If true, the upperTerm is included in the range. Methods | Improve this Doc View Source Accept(BytesRef) Declaration protected override FilteredTermsEnum.AcceptStatus Accept(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description FilteredTermsEnum.AcceptStatus Overrides FilteredTermsEnum.Accept(BytesRef) Implements IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermStatistics.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermStatistics.html",
    "title": "Class TermStatistics | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermStatistics Contains statistics for a specific term This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermStatistics Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermStatistics : object Constructors | Improve this Doc View Source TermStatistics(BytesRef, Int64, Int64) Sole constructor. Declaration public TermStatistics(BytesRef term, long docFreq, long totalTermFreq) Parameters Type Name Description BytesRef term System.Int64 docFreq System.Int64 totalTermFreq Properties | Improve this Doc View Source DocFreq Returns the number of documents this term occurs in Declaration public long DocFreq { get; } Property Value Type Description System.Int64 See Also DocFreq | Improve this Doc View Source Term Returns the term text Declaration public BytesRef Term { get; } Property Value Type Description BytesRef | Improve this Doc View Source TotalTermFreq Returns the total number of occurrences of this term Declaration public long TotalTermFreq { get; } Property Value Type Description System.Int64 See Also TotalTermFreq"
  },
  "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.html",
    "title": "Class TimeLimitingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TimeLimitingCollector The TimeLimitingCollector is used to timeout search requests that take longer than the maximum allowed search time limit. After this time is exceeded, the search thread is stopped by throwing a TimeLimitingCollector.TimeExceededException . Inheritance System.Object TimeLimitingCollector Implements ICollector Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TimeLimitingCollector : object, ICollector Constructors | Improve this Doc View Source TimeLimitingCollector(ICollector, Counter, Int64) Create a TimeLimitingCollector wrapper over another ICollector with a specified timeout. Declaration public TimeLimitingCollector(ICollector collector, Counter clock, long ticksAllowed) Parameters Type Name Description ICollector collector The wrapped ICollector Counter clock The timer clock System.Int64 ticksAllowed Max time allowed for collecting hits after which TimeLimitingCollector.TimeExceededException is thrown Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source GlobalCounter Returns the global TimeLimitingCollector.TimerThread 's Counter Invoking this creates may create a new instance of TimeLimitingCollector.TimerThread iff the global TimeLimitingCollector.TimerThread has never been accessed before. The thread returned from this method is started on creation and will be alive unless you stop the TimeLimitingCollector.TimerThread via StopTimer() . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static Counter GlobalCounter { get; } Property Value Type Description Counter the global TimerThreads Counter | Improve this Doc View Source GlobalTimerThread Returns the global TimeLimitingCollector.TimerThread . Invoking this creates may create a new instance of TimeLimitingCollector.TimerThread iff the global TimeLimitingCollector.TimerThread has never been accessed before. The thread returned from this method is started on creation and will be alive unless you stop the TimeLimitingCollector.TimerThread via StopTimer() . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static TimeLimitingCollector.TimerThread GlobalTimerThread { get; } Property Value Type Description TimeLimitingCollector.TimerThread the global TimeLimitingCollector.TimerThread | Improve this Doc View Source IsGreedy Checks if this time limited collector is greedy in collecting the last hit. A non greedy collector, upon a timeout, would throw a TimeLimitingCollector.TimeExceededException without allowing the wrapped collector to collect current doc. A greedy one would first allow the wrapped hit collector to collect current doc and only then throw a TimeLimitingCollector.TimeExceededException . Declaration public virtual bool IsGreedy { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Calls Collect(Int32) on the decorated ICollector unless the allowed time has passed, in which case it throws an exception. Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc Exceptions Type Condition TimeLimitingCollector.TimeExceededException If the time allowed has exceeded. | Improve this Doc View Source SetBaseline() Syntactic sugar for SetBaseline(Int64) using Get() on the clock passed to the constructor. Declaration public virtual void SetBaseline() | Improve this Doc View Source SetBaseline(Int64) Sets the baseline for this collector. By default the collectors baseline is initialized once the first reader is passed to the collector. To include operations executed in prior to the actual document collection set the baseline through this method in your prelude. Example usage: // Counter is in the Lucene.Net.Util namespace Counter clock = Counter.NewCounter(true); long baseline = clock.Get(); // ... prepare search TimeLimitingCollector collector = new TimeLimitingCollector(c, clock, numTicks); collector.SetBaseline(baseline); indexSearcher.Search(query, collector); Declaration public virtual void SetBaseline(long clockTime) Parameters Type Name Description System.Int64 clockTime See Also SetBaseline() | Improve this Doc View Source SetCollector(ICollector) This is so the same timer can be used with a multi-phase search process such as grouping. We don't want to create a new TimeLimitingCollector for each phase because that would reset the timer for each phase. Once time is up subsequent phases need to timeout quickly. Declaration public virtual void SetCollector(ICollector collector) Parameters Type Name Description ICollector collector The actual collector performing search functionality. | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.TimeExceededException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.TimeExceededException.html",
    "title": "Class TimeLimitingCollector.TimeExceededException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TimeLimitingCollector.TimeExceededException Thrown when elapsed search time exceeds allowed search time. Inheritance System.Object TimeLimitingCollector.TimeExceededException Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TimeExceededException : Exception Properties | Improve this Doc View Source LastDocCollected Returns last doc (absolute doc id) that was collected when the search time exceeded. Declaration public virtual int LastDocCollected { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TimeAllowed Returns allowed time (milliseconds). Declaration public virtual long TimeAllowed { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TimeElapsed Returns elapsed time (milliseconds). Declaration public virtual long TimeElapsed { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.TimerThread.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.TimerThread.html",
    "title": "Class TimeLimitingCollector.TimerThread | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TimeLimitingCollector.TimerThread Thread used to timeout search requests. Can be stopped completely with StopTimer() This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TimeLimitingCollector.TimerThread Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class TimerThread : ThreadJob Constructors | Improve this Doc View Source TimerThread(Counter) Declaration public TimerThread(Counter counter) Parameters Type Name Description Counter counter | Improve this Doc View Source TimerThread(Int64, Counter) Declaration public TimerThread(long resolution, Counter counter) Parameters Type Name Description System.Int64 resolution Counter counter Fields | Improve this Doc View Source DEFAULT_RESOLUTION Declaration public const int DEFAULT_RESOLUTION = null Field Value Type Description System.Int32 | Improve this Doc View Source THREAD_NAME Declaration public const string THREAD_NAME = null Field Value Type Description System.String Properties | Improve this Doc View Source Milliseconds Get the timer value in milliseconds. Declaration public long Milliseconds { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Resolution Return the timer resolution. Declaration public long Resolution { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Run() Declaration public override void Run() | Improve this Doc View Source StopTimer() Stops the timer thread Declaration public void StopTimer()"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopDocs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopDocs.html",
    "title": "Class TopDocs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopDocs Represents hits returned by Search(Query, Filter, Int32) and Search(Query, Int32) . Inheritance System.Object TopDocs TopFieldDocs Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TopDocs : object Constructors | Improve this Doc View Source TopDocs(Int32, ScoreDoc[], Single) Declaration public TopDocs(int totalHits, ScoreDoc[] scoreDocs, float maxScore) Parameters Type Name Description System.Int32 totalHits ScoreDoc [] scoreDocs System.Single maxScore Properties | Improve this Doc View Source MaxScore Returns the maximum score value encountered. Note that in case scores are not tracked, this returns . Declaration public virtual float MaxScore { get; set; } Property Value Type Description System.Single | Improve this Doc View Source ScoreDocs The top hits for the query. Declaration public ScoreDoc[] ScoreDocs { get; set; } Property Value Type Description ScoreDoc [] | Improve this Doc View Source TotalHits The total number of hits for the query. Declaration public int TotalHits { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Merge(Sort, Int32, TopDocs[]) Returns a new TopDocs , containing topN results across the provided TopDocs , sorting by the specified Sort . Each of the TopDocs must have been sorted by the same Sort , and sort field values must have been filled (ie, fillFields=true must be passed to Create(Sort, Int32, Boolean, Boolean, Boolean, Boolean) . Pass sort =null to merge sort by score descending. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static TopDocs Merge(Sort sort, int topN, TopDocs[] shardHits) Parameters Type Name Description Sort sort System.Int32 topN TopDocs [] shardHits Returns Type Description TopDocs | Improve this Doc View Source Merge(Sort, Int32, Int32, TopDocs[]) Same as Merge(Sort, Int32, TopDocs[]) but also slices the result at the same time based on the provided start and size. The return TopDocs will always have a scoreDocs with length of at most Count . Declaration public static TopDocs Merge(Sort sort, int start, int size, TopDocs[] shardHits) Parameters Type Name Description Sort sort System.Int32 start System.Int32 size TopDocs [] shardHits Returns Type Description TopDocs"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopDocsCollector-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopDocsCollector-1.html",
    "title": "Class TopDocsCollector<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopDocsCollector<T> A base class for all collectors that return a TopDocs output. This collector allows easy extension by providing a single constructor which accepts a PriorityQueue<T> as well as protected members for that priority queue and a counter of the number of total hits. Extending classes can override any of the methods to provide their own implementation, as well as avoid the use of the priority queue entirely by passing null to TopDocsCollector(PriorityQueue<T>) . In that case however, you might want to consider overriding all methods, in order to avoid a . Inheritance System.Object TopDocsCollector<T> TopFieldCollector TopScoreDocCollector Implements ITopDocsCollector ICollector Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class TopDocsCollector<T> : object, ITopDocsCollector, ICollector where T : ScoreDoc Type Parameters Name Description T Constructors | Improve this Doc View Source TopDocsCollector(PriorityQueue<T>) Sole constructor. Declaration protected TopDocsCollector(PriorityQueue<T> pq) Parameters Type Name Description PriorityQueue <T> pq Fields | Improve this Doc View Source EMPTY_TOPDOCS This is used in case GetTopDocs() is called with illegal parameters, or there simply aren't (enough) results. Declaration protected static readonly TopDocs EMPTY_TOPDOCS Field Value Type Description TopDocs | Improve this Doc View Source m_pq The priority queue which holds the top documents. Note that different implementations of PriorityQueue<T> give different meaning to 'top documents'. Lucene.Net.Search.HitQueue for example aggregates the top scoring documents, while other priority queue implementations may hold documents sorted by other criteria. Declaration protected PriorityQueue<T> m_pq Field Value Type Description PriorityQueue <T> | Improve this Doc View Source m_totalHits The total number of documents that the collector encountered. Declaration protected int m_totalHits Field Value Type Description System.Int32 Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Return true if this collector does not require the matching docIDs to be delivered in int sort order (smallest to largest) to Collect(Int32) . Most Lucene Query implementations will visit matching docIDs in order. However, some queries (currently limited to certain cases of BooleanQuery ) can achieve faster searching if the ICollector allows them to deliver the docIDs out of order. Many collectors don't mind getting docIDs out of order, so it's important to return true here. Declaration public abstract bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TopDocsCount The number of valid priority queue entries Declaration protected virtual int TopDocsCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalHits The total number of documents that matched this query. Declaration public virtual int TotalHits { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source GetTopDocs() Returns the top docs that were collected by this collector. Declaration public virtual TopDocs GetTopDocs() Returns Type Description TopDocs | Improve this Doc View Source GetTopDocs(Int32) Returns the documents in the rage [ start .. pq.Count) that were collected by this collector. Note that if start >= pq.Count, an empty TopDocs is returned. This method is convenient to call if the application always asks for the last results, starting from the last 'page'. NOTE: you cannot call this method more than once for each search execution. If you need to call it more than once, passing each time a different start , you should call GetTopDocs() and work with the returned TopDocs object, which will contain all the results this search execution collected. Declaration public virtual TopDocs GetTopDocs(int start) Parameters Type Name Description System.Int32 start Returns Type Description TopDocs | Improve this Doc View Source GetTopDocs(Int32, Int32) Returns the documents in the rage [ start .. start + howMany ) that were collected by this collector. Note that if start >= pq.Count, an empty TopDocs is returned, and if pq.Count - start < howMany , then only the available documents in [ start .. pq.Count) are returned. This method is useful to call in case pagination of search results is allowed by the search application, as well as it attempts to optimize the memory used by allocating only as much as requested by howMany . NOTE: you cannot call this method more than once for each search execution. If you need to call it more than once, passing each time a different range, you should call GetTopDocs() and work with the returned TopDocs object, which will contain all the results this search execution collected. Declaration public virtual TopDocs GetTopDocs(int start, int howMany) Parameters Type Name Description System.Int32 start System.Int32 howMany Returns Type Description TopDocs | Improve this Doc View Source NewTopDocs(ScoreDoc[], Int32) Returns a TopDocs instance containing the given results. If results is null it means there are no results to return, either because there were 0 calls to Collect(Int32) or because the arguments to TopDocs were invalid. Declaration protected virtual TopDocs NewTopDocs(ScoreDoc[] results, int start) Parameters Type Name Description ScoreDoc [] results System.Int32 start Returns Type Description TopDocs | Improve this Doc View Source PopulateResults(ScoreDoc[], Int32) Populates the results array with the ScoreDoc instances. This can be overridden in case a different ScoreDoc type should be returned. Declaration protected virtual void PopulateResults(ScoreDoc[] results, int howMany) Parameters Type Name Description ScoreDoc [] results System.Int32 howMany | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Called before successive calls to Collect(Int32) . Implementations that need the score of the current document (passed-in to Collect(Int32) ), should save the passed-in Scorer and call GetScore() when needed. Declaration public abstract void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ITopDocsCollector ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopFieldCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopFieldCollector.html",
    "title": "Class TopFieldCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopFieldCollector A ICollector that sorts by SortField using FieldComparer s. See the Create(Sort, Int32, Boolean, Boolean, Boolean, Boolean) method for instantiating a TopFieldCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TopDocsCollector < FieldValueHitQueue.Entry > TopFieldCollector Implements ITopDocsCollector ICollector Inherited Members TopDocsCollector<FieldValueHitQueue.Entry>.EMPTY_TOPDOCS TopDocsCollector<FieldValueHitQueue.Entry>.m_pq TopDocsCollector<FieldValueHitQueue.Entry>.m_totalHits TopDocsCollector<FieldValueHitQueue.Entry>.TotalHits TopDocsCollector<FieldValueHitQueue.Entry>.TopDocsCount TopDocsCollector<FieldValueHitQueue.Entry>.GetTopDocs() TopDocsCollector<FieldValueHitQueue.Entry>.GetTopDocs(Int32) TopDocsCollector<FieldValueHitQueue.Entry>.GetTopDocs(Int32, Int32) TopDocsCollector<FieldValueHitQueue.Entry>.SetScorer(Scorer) TopDocsCollector<FieldValueHitQueue.Entry>.Collect(Int32) TopDocsCollector<FieldValueHitQueue.Entry>.SetNextReader(AtomicReaderContext) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class TopFieldCollector : TopDocsCollector<FieldValueHitQueue.Entry>, ITopDocsCollector, ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public override bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.FieldValueHitQueue.Entry>.AcceptsDocsOutOfOrder Methods | Improve this Doc View Source Create(Sort, Int32, FieldDoc, Boolean, Boolean, Boolean, Boolean) Creates a new TopFieldCollector from the given arguments. NOTE : The instances returned by this method pre-allocate a full array of length numHits . Declaration public static TopFieldCollector Create(Sort sort, int numHits, FieldDoc after, bool fillFields, bool trackDocScores, bool trackMaxScore, bool docsScoredInOrder) Parameters Type Name Description Sort sort The sort criteria ( SortField s). System.Int32 numHits The number of results to collect. FieldDoc after Only hits after this FieldDoc will be collected System.Boolean fillFields Specifies whether the actual field values should be returned on the results ( FieldDoc ). System.Boolean trackDocScores Specifies whether document scores should be tracked and set on the results. Note that if set to false , then the results' scores will be set to . Setting this to true affects performance, as it incurs the score computation on each competitive result. Therefore if document scores are not required by the application, it is recommended to set it to false . System.Boolean trackMaxScore Specifies whether the query's maxScore should be tracked and set on the resulting TopDocs . Note that if set to false , MaxScore returns . Setting this to true affects performance as it incurs the score computation on each result. Also, setting this true automatically sets trackDocScores to true as well. System.Boolean docsScoredInOrder Specifies whether documents are scored in doc Id order or not by the given Scorer in SetScorer(Scorer) . Returns Type Description TopFieldCollector A TopFieldCollector instance which will sort the results by the sort criteria. | Improve this Doc View Source Create(Sort, Int32, Boolean, Boolean, Boolean, Boolean) Creates a new TopFieldCollector from the given arguments. NOTE : The instances returned by this method pre-allocate a full array of length numHits . Declaration public static TopFieldCollector Create(Sort sort, int numHits, bool fillFields, bool trackDocScores, bool trackMaxScore, bool docsScoredInOrder) Parameters Type Name Description Sort sort The sort criteria ( SortField s). System.Int32 numHits The number of results to collect. System.Boolean fillFields Specifies whether the actual field values should be returned on the results ( FieldDoc ). System.Boolean trackDocScores Specifies whether document scores should be tracked and set on the results. Note that if set to false , then the results' scores will be set to . Setting this to true affects performance, as it incurs the score computation on each competitive result. Therefore if document scores are not required by the application, it is recommended to set it to false . System.Boolean trackMaxScore Specifies whether the query's Lucene.Net.Search.TopFieldCollector.maxScore should be tracked and set on the resulting TopDocs . Note that if set to false , MaxScore returns . Setting this to true affects performance as it incurs the score computation on each result. Also, setting this true automatically sets trackDocScores to true as well. System.Boolean docsScoredInOrder Specifies whether documents are scored in doc Id order or not by the given Scorer in SetScorer(Scorer) . Returns Type Description TopFieldCollector A TopFieldCollector instance which will sort the results by the sort criteria. | Improve this Doc View Source NewTopDocs(ScoreDoc[], Int32) Declaration protected override TopDocs NewTopDocs(ScoreDoc[] results, int start) Parameters Type Name Description ScoreDoc [] results System.Int32 start Returns Type Description TopDocs Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.FieldValueHitQueue.Entry>.NewTopDocs(Lucene.Net.Search.ScoreDoc[], System.Int32) | Improve this Doc View Source PopulateResults(ScoreDoc[], Int32) Declaration protected override void PopulateResults(ScoreDoc[] results, int howMany) Parameters Type Name Description ScoreDoc [] results System.Int32 howMany Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.FieldValueHitQueue.Entry>.PopulateResults(Lucene.Net.Search.ScoreDoc[], System.Int32) Implements ITopDocsCollector ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopFieldDocs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopFieldDocs.html",
    "title": "Class TopFieldDocs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopFieldDocs Represents hits returned by Search(Query, Filter, Int32, Sort) . Inheritance System.Object TopDocs TopFieldDocs Inherited Members TopDocs.TotalHits TopDocs.ScoreDocs TopDocs.MaxScore TopDocs.Merge(Sort, Int32, TopDocs[]) TopDocs.Merge(Sort, Int32, Int32, TopDocs[]) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TopFieldDocs : TopDocs Constructors | Improve this Doc View Source TopFieldDocs(Int32, ScoreDoc[], SortField[], Single) Creates one of these objects. Declaration public TopFieldDocs(int totalHits, ScoreDoc[] scoreDocs, SortField[] fields, float maxScore) Parameters Type Name Description System.Int32 totalHits Total number of hits for the query. ScoreDoc [] scoreDocs The top hits for the query. SortField [] fields The sort criteria used to find the top hits. System.Single maxScore The maximum score encountered. Properties | Improve this Doc View Source Fields The fields which were used to sort results by. Declaration public SortField[] Fields { get; set; } Property Value Type Description SortField []"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopScoreDocCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopScoreDocCollector.html",
    "title": "Class TopScoreDocCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopScoreDocCollector A ICollector implementation that collects the top-scoring hits, returning them as a TopDocs . this is used by IndexSearcher to implement TopDocs -based search. Hits are sorted by score descending and then (when the scores are tied) docID ascending. When you create an instance of this collector you should know in advance whether documents are going to be collected in doc Id order or not. NOTE : The values and are not valid scores. This collector will not properly collect hits with such scores. Inheritance System.Object TopDocsCollector < ScoreDoc > TopScoreDocCollector Implements ITopDocsCollector ICollector Inherited Members TopDocsCollector<ScoreDoc>.EMPTY_TOPDOCS TopDocsCollector<ScoreDoc>.m_pq TopDocsCollector<ScoreDoc>.m_totalHits TopDocsCollector<ScoreDoc>.PopulateResults(ScoreDoc[], Int32) TopDocsCollector<ScoreDoc>.TotalHits TopDocsCollector<ScoreDoc>.TopDocsCount TopDocsCollector<ScoreDoc>.GetTopDocs() TopDocsCollector<ScoreDoc>.GetTopDocs(Int32) TopDocsCollector<ScoreDoc>.GetTopDocs(Int32, Int32) TopDocsCollector<ScoreDoc>.Collect(Int32) TopDocsCollector<ScoreDoc>.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class TopScoreDocCollector : TopDocsCollector<ScoreDoc>, ITopDocsCollector, ICollector Methods | Improve this Doc View Source Create(Int32, ScoreDoc, Boolean) Creates a new TopScoreDocCollector given the number of hits to collect, the bottom of the previous page, and whether documents are scored in order by the input Scorer to SetScorer(Scorer) . NOTE : The instances returned by this method pre-allocate a full array of length numHits , and fill the array with sentinel objects. Declaration public static TopScoreDocCollector Create(int numHits, ScoreDoc after, bool docsScoredInOrder) Parameters Type Name Description System.Int32 numHits ScoreDoc after System.Boolean docsScoredInOrder Returns Type Description TopScoreDocCollector | Improve this Doc View Source Create(Int32, Boolean) Creates a new TopScoreDocCollector given the number of hits to collect and whether documents are scored in order by the input Scorer to SetScorer(Scorer) . NOTE : The instances returned by this method pre-allocate a full array of length numHits , and fill the array with sentinel objects. Declaration public static TopScoreDocCollector Create(int numHits, bool docsScoredInOrder) Parameters Type Name Description System.Int32 numHits System.Boolean docsScoredInOrder Returns Type Description TopScoreDocCollector | Improve this Doc View Source NewTopDocs(ScoreDoc[], Int32) Declaration protected override TopDocs NewTopDocs(ScoreDoc[] results, int start) Parameters Type Name Description ScoreDoc [] results System.Int32 start Returns Type Description TopDocs Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.ScoreDoc>.NewTopDocs(Lucene.Net.Search.ScoreDoc[], System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.ScoreDoc>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetScorer(Scorer) Declaration public override void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.ScoreDoc>.SetScorer(Lucene.Net.Search.Scorer) Implements ITopDocsCollector ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopTermsRewrite-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopTermsRewrite-1.html",
    "title": "Class TopTermsRewrite<Q> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopTermsRewrite<Q> Base rewrite method for collecting only the top terms via a priority queue. @lucene.internal - Only public to be accessible by spans package. Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite <Q> TopTermsRewrite<Q> MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite MultiTermQuery.TopTermsScoringBooleanQueryRewrite Inherited Members TermCollectingRewrite<Q>.GetTopLevelQuery() TermCollectingRewrite<Q>.AddClause(Q, Term, Int32, Single) TermCollectingRewrite<Q>.AddClause(Q, Term, Int32, Single, TermContext) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class TopTermsRewrite<Q> : TermCollectingRewrite<Q>, ITopTermsRewrite where Q : Query Type Parameters Name Description Q Constructors | Improve this Doc View Source TopTermsRewrite(Int32) Create a TopTermsRewrite<Q> for at most count terms. NOTE: if MaxClauseCount is smaller than count , then it will be used instead. Declaration public TopTermsRewrite(int count) Parameters Type Name Description System.Int32 count Properties | Improve this Doc View Source Count Return the maximum priority queue size. NOTE: This was size() in Lucene. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxSize Return the maximum size of the priority queue (for boolean rewrites this is MaxClauseCount ). Declaration protected abstract int MaxSize { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TotalHitCountCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TotalHitCountCollector.html",
    "title": "Class TotalHitCountCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TotalHitCountCollector Just counts the total number of hits. Inheritance System.Object TotalHitCountCollector Implements ICollector Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TotalHitCountCollector : object, ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TotalHits Returns how many hits matched the search. Declaration public virtual int TotalHits { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Search.Weight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Weight.html",
    "title": "Class Weight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Weight Expert: Calculate query weights and build query scorers. The purpose of Weight is to ensure searching does not modify a Query , so that a Query instance can be reused. IndexSearcher dependent state of the query should reside in the Weight . AtomicReader dependent state should reside in the Scorer . Since Weight creates Scorer instances for a given AtomicReaderContext ( GetScorer(AtomicReaderContext, IBits) ) callers must maintain the relationship between the searcher's top-level IndexReaderContext and the context used to create a Scorer . A Weight is used in the following way: A Weight is constructed by a top-level query, given a IndexSearcher ( CreateWeight(IndexSearcher) ). The GetValueForNormalization() method is called on the Weight to compute the query normalization factor QueryNorm(Single) of the query clauses contained in the query. The query normalization factor is passed to Normalize(Single, Single) . At this point the weighting is complete. A Scorer is constructed by GetScorer(AtomicReaderContext, IBits) . @since 2.9 Inheritance System.Object Weight BooleanQuery.BooleanWeight ConstantScoreQuery.ConstantWeight DisjunctionMaxQuery.DisjunctionMaxWeight SpanWeight Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Weight : object Properties | Improve this Doc View Source Query The query that this concerns. Declaration public abstract Query Query { get; } Property Value Type Description Query | Improve this Doc View Source ScoresDocsOutOfOrder Returns true if this implementation scores docs only out of order. This method is used in conjunction with ICollector 's AcceptsDocsOutOfOrder and GetBulkScorer(AtomicReaderContext, Boolean, IBits) to create a matching Scorer instance for a given ICollector , or vice versa. NOTE: the default implementation returns false , i.e. the Scorer scores documents in-order. Declaration public virtual bool ScoresDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) An explanation of the score computation for the named document. Declaration public abstract Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context The readers context to create the Explanation for. System.Int32 doc The document's id relative to the given context's reader Returns Type Description Explanation An Explanation for the score | Improve this Doc View Source GetBulkScorer(AtomicReaderContext, Boolean, IBits) Optional method, to return a BulkScorer to score the query and send hits to a ICollector . Only queries that have a different top-level approach need to override this; the default implementation pulls a normal Scorer and iterates and collects the resulting hits. Declaration public virtual BulkScorer GetBulkScorer(AtomicReaderContext context, bool scoreDocsInOrder, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context The AtomicReaderContext for which to return the Scorer . System.Boolean scoreDocsInOrder Specifies whether in-order scoring of documents is required. Note that if set to false (i.e., out-of-order scoring is required), this method can return whatever scoring mode it supports, as every in-order scorer is also an out-of-order one. However, an out-of-order scorer may not support NextDoc() and/or Advance(Int32) , therefore it is recommended to request an in-order scorer if use of these methods is required. IBits acceptDocs IBits that represent the allowable docs to match (typically deleted docs but possibly filtering other documents) Returns Type Description BulkScorer A BulkScorer which scores documents and passes them to a collector. | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Returns a Scorer which scores documents in/out-of order according to scoreDocsInOrder . NOTE: even if scoreDocsInOrder is false , it is recommended to check whether the returned Scorer indeed scores documents out of order (i.e., call ScoresDocsOutOfOrder ), as some Scorer implementations will always return documents in-order. NOTE: null can be returned if no documents will be scored by this query. Declaration public abstract Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context The AtomicReaderContext for which to return the Scorer . IBits acceptDocs IBits that represent the allowable docs to match (typically deleted docs but possibly filtering other documents) Returns Type Description Scorer A Scorer which scores documents in/out-of order. | Improve this Doc View Source GetValueForNormalization() The value for normalization of contained query clauses (e.g. sum of squared weights). Declaration public abstract float GetValueForNormalization() Returns Type Description System.Single | Improve this Doc View Source Normalize(Single, Single) Assigns the query normalization factor and boost from parent queries to this. Declaration public abstract void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost"
  },
  "api/Lucene.Net/Lucene.Net.Search.WildcardQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.WildcardQuery.html",
    "title": "Class WildcardQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WildcardQuery Implements the wildcard search query. Supported wildcards are , which matches any character sequence (including the empty one), and ? , which matches any single character. '&apos; is the escape character. Note this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow WildcardQueries, a Wildcard term should not start with the wildcard This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. Inheritance System.Object Query MultiTermQuery AutomatonQuery WildcardQuery Inherited Members AutomatonQuery.m_automaton AutomatonQuery.m_compiled AutomatonQuery.m_term AutomatonQuery.GetTermsEnum(Terms, AttributeSource) AutomatonQuery.GetHashCode() AutomatonQuery.Equals(Object) AutomatonQuery.Automaton MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class WildcardQuery : AutomatonQuery Constructors | Improve this Doc View Source WildcardQuery(Term) Constructs a query for terms matching term . Declaration public WildcardQuery(Term term) Parameters Type Name Description Term term Fields | Improve this Doc View Source WILDCARD_CHAR Char equality with support for wildcards Declaration public const char WILDCARD_CHAR = null Field Value Type Description System.Char | Improve this Doc View Source WILDCARD_ESCAPE Escape character Declaration public const char WILDCARD_ESCAPE = null Field Value Type Description System.Char | Improve this Doc View Source WILDCARD_STRING String equality with support for wildcards Declaration public const char WILDCARD_STRING = null Field Value Type Description System.Char Properties | Improve this Doc View Source Term Returns the pattern term. Declaration public virtual Term Term { get; } Property Value Type Description Term Methods | Improve this Doc View Source ToAutomaton(Term) Convert Lucene wildcard syntax into an automaton. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static Automaton ToAutomaton(Term wildcardquery) Parameters Type Name Description Term wildcardquery Returns Type Description Automaton | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides AutomatonQuery.ToString(String) See Also AutomatonQuery"
  },
  "api/Lucene.Net/Lucene.Net.Store.BaseDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.BaseDirectory.html",
    "title": "Class BaseDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseDirectory Base implementation for a concrete Directory . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory BaseDirectory CompoundFileDirectory FileSwitchDirectory FSDirectory RAMDirectory Inherited Members Directory.ListAll() Directory.FileExists(String) Directory.DeleteFile(String) Directory.FileLength(String) Directory.CreateOutput(String, IOContext) Directory.Sync(ICollection<String>) Directory.OpenInput(String, IOContext) Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Dispose(Boolean) Directory.GetLockID() Directory.ToString() Directory.Copy(Directory, String, String, IOContext) Directory.CreateSlicer(String, IOContext) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class BaseDirectory : Directory Constructors | Improve this Doc View Source BaseDirectory() Sole constructor. Declaration protected BaseDirectory() Fields | Improve this Doc View Source m_lockFactory Holds the LockFactory instance (implements locking for this Directory instance). Declaration protected LockFactory m_lockFactory Field Value Type Description LockFactory Properties | Improve this Doc View Source IsOpen Declaration protected virtual bool IsOpen { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source LockFactory Declaration public override LockFactory LockFactory { get; } Property Value Type Description LockFactory Overrides Directory.LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string name) Parameters Type Name Description System.String name Overrides Directory.ClearLock(String) | Improve this Doc View Source EnsureOpen() Declaration protected override sealed void EnsureOpen() Overrides Directory.EnsureOpen() | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string name) Parameters Type Name Description System.String name Returns Type Description Lock Overrides Directory.MakeLock(String) | Improve this Doc View Source SetLockFactory(LockFactory) Declaration public override void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory Overrides Directory.SetLockFactory(LockFactory)"
  },
  "api/Lucene.Net/Lucene.Net.Store.BufferedChecksum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.BufferedChecksum.html",
    "title": "Class BufferedChecksum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferedChecksum Wraps another IChecksum with an internal buffer to speed up checksum calculations. Inheritance System.Object BufferedChecksum Implements IChecksum Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class BufferedChecksum : object, IChecksum Constructors | Improve this Doc View Source BufferedChecksum(IChecksum) Create a new BufferedChecksum with DEFAULT_BUFFERSIZE Declaration public BufferedChecksum(IChecksum in) Parameters Type Name Description IChecksum in | Improve this Doc View Source BufferedChecksum(IChecksum, Int32) Create a new BufferedChecksum with the specified bufferSize Declaration public BufferedChecksum(IChecksum in, int bufferSize) Parameters Type Name Description IChecksum in System.Int32 bufferSize Fields | Improve this Doc View Source DEFAULT_BUFFERSIZE Default buffer size: 256 Declaration public const int DEFAULT_BUFFERSIZE = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source Value Declaration public virtual long Value { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Reset() Declaration public virtual void Reset() | Improve this Doc View Source Update(Byte[]) Declaration public virtual void Update(byte[] b) Parameters Type Name Description System.Byte [] b | Improve this Doc View Source Update(Byte[], Int32, Int32) Declaration public virtual void Update(byte[] b, int off, int len) Parameters Type Name Description System.Byte [] b System.Int32 off System.Int32 len | Improve this Doc View Source Update(Int32) Declaration public virtual void Update(int b) Parameters Type Name Description System.Int32 b Implements IChecksum"
  },
  "api/Lucene.Net/Lucene.Net.Store.BufferedChecksumIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.BufferedChecksumIndexInput.html",
    "title": "Class BufferedChecksumIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferedChecksumIndexInput Simple implementation of ChecksumIndexInput that wraps another input and delegates calls. Inheritance System.Object DataInput IndexInput ChecksumIndexInput BufferedChecksumIndexInput Implements IDisposable Inherited Members ChecksumIndexInput.Seek(Int64) IndexInput.Dispose() IndexInput.ToString() DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class BufferedChecksumIndexInput : ChecksumIndexInput, IDisposable Constructors | Improve this Doc View Source BufferedChecksumIndexInput(IndexInput) Creates a new BufferedChecksumIndexInput Declaration public BufferedChecksumIndexInput(IndexInput main) Parameters Type Name Description IndexInput main Properties | Improve this Doc View Source Checksum Declaration public override long Checksum { get; } Property Value Type Description System.Int64 Overrides ChecksumIndexInput.Checksum | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides IndexInput.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexInput.GetFilePointer() | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.BufferedIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.BufferedIndexInput.html",
    "title": "Class BufferedIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferedIndexInput Base implementation class for buffered IndexInput . Inheritance System.Object DataInput IndexInput BufferedIndexInput NIOFSDirectory.NIOFSIndexInput SimpleFSDirectory.SimpleFSIndexInput Implements IDisposable Inherited Members IndexInput.Dispose() IndexInput.Dispose(Boolean) IndexInput.Length IndexInput.ToString() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class BufferedIndexInput : IndexInput, IDisposable Constructors | Improve this Doc View Source BufferedIndexInput(String) Declaration public BufferedIndexInput(string resourceDesc) Parameters Type Name Description System.String resourceDesc | Improve this Doc View Source BufferedIndexInput(String, IOContext) Declaration public BufferedIndexInput(string resourceDesc, IOContext context) Parameters Type Name Description System.String resourceDesc IOContext context | Improve this Doc View Source BufferedIndexInput(String, Int32) Inits BufferedIndexInput with a specific bufferSize Declaration public BufferedIndexInput(string resourceDesc, int bufferSize) Parameters Type Name Description System.String resourceDesc System.Int32 bufferSize Fields | Improve this Doc View Source BUFFER_SIZE Default buffer size set to BUFFER_SIZE . Declaration public const int BUFFER_SIZE = null Field Value Type Description System.Int32 | Improve this Doc View Source m_buffer Declaration protected byte[] m_buffer Field Value Type Description System.Byte [] | Improve this Doc View Source MERGE_BUFFER_SIZE A buffer size for merges set to MERGE_BUFFER_SIZE . Declaration public const int MERGE_BUFFER_SIZE = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source BufferSize Returns buffer size. Declaration public int BufferSize { get; } Property Value Type Description System.Int32 See Also SetBufferSize(Int32) Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides IndexInput.Clone() | Improve this Doc View Source FlushBuffer(IndexOutput, Int64) Flushes the in-memory buffer to the given output, copying at most numBytes . NOTE: this method does not refill the buffer, however it does advance the buffer position. Declaration protected int FlushBuffer(IndexOutput out, long numBytes) Parameters Type Name Description IndexOutput out System.Int64 numBytes Returns Type Description System.Int32 the number of bytes actually flushed from the in-memory buffer. | Improve this Doc View Source GetBufferSize(IOContext) Returns default buffer sizes for the given IOContext Declaration public static int GetBufferSize(IOContext context) Parameters Type Name Description IOContext context Returns Type Description System.Int32 | Improve this Doc View Source GetFilePointer() Declaration public override sealed long GetFilePointer() Returns Type Description System.Int64 Overrides IndexInput.GetFilePointer() | Improve this Doc View Source NewBuffer(Byte[]) Declaration protected virtual void NewBuffer(byte[] newBuffer) Parameters Type Name Description System.Byte [] newBuffer | Improve this Doc View Source ReadByte() Declaration public override sealed byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override sealed void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32, Boolean) Declaration public override sealed void ReadBytes(byte[] b, int offset, int len, bool useBuffer) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len System.Boolean useBuffer Overrides DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) | Improve this Doc View Source ReadInt16() NOTE: this was readShort() in Lucene Declaration public override sealed short ReadInt16() Returns Type Description System.Int16 Overrides DataInput.ReadInt16() | Improve this Doc View Source ReadInt32() NOTE: this was readInt() in Lucene Declaration public override sealed int ReadInt32() Returns Type Description System.Int32 Overrides DataInput.ReadInt32() | Improve this Doc View Source ReadInt64() NOTE: this was readLong() in Lucene Declaration public override sealed long ReadInt64() Returns Type Description System.Int64 Overrides DataInput.ReadInt64() | Improve this Doc View Source ReadInternal(Byte[], Int32, Int32) Expert: implements buffer refill. Reads bytes from the current position in the input. Declaration protected abstract void ReadInternal(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b the array to read bytes into System.Int32 offset the offset in the array to start storing bytes System.Int32 length the number of bytes to read | Improve this Doc View Source ReadVInt32() NOTE: this was readVInt() in Lucene Declaration public override sealed int ReadVInt32() Returns Type Description System.Int32 Overrides DataInput.ReadVInt32() | Improve this Doc View Source ReadVInt64() NOTE: this was readVLong() in Lucene Declaration public override sealed long ReadVInt64() Returns Type Description System.Int64 Overrides DataInput.ReadVInt64() | Improve this Doc View Source Seek(Int64) Declaration public override sealed void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexInput.Seek(Int64) | Improve this Doc View Source SeekInternal(Int64) Expert: implements seek. Sets current position in this file, where the next ReadInternal(Byte[], Int32, Int32) will occur. Declaration protected abstract void SeekInternal(long pos) Parameters Type Name Description System.Int64 pos See Also ReadInternal(Byte[], Int32, Int32) | Improve this Doc View Source SetBufferSize(Int32) Change the buffer size used by this IndexInput Declaration public void SetBufferSize(int newSize) Parameters Type Name Description System.Int32 newSize Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.BufferedIndexOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.BufferedIndexOutput.html",
    "title": "Class BufferedIndexOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferedIndexOutput Base implementation class for buffered IndexOutput . Inheritance System.Object DataOutput IndexOutput BufferedIndexOutput FSDirectory.FSIndexOutput Implements IDisposable Inherited Members IndexOutput.Dispose() DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class BufferedIndexOutput : IndexOutput, IDisposable Constructors | Improve this Doc View Source BufferedIndexOutput() Creates a new BufferedIndexOutput with the default buffer size ( DEFAULT_BUFFER_SIZE bytes see DEFAULT_BUFFER_SIZE ) Declaration public BufferedIndexOutput() | Improve this Doc View Source BufferedIndexOutput(Int32) Creates a new BufferedIndexOutput with the given buffer size. Declaration public BufferedIndexOutput(int bufferSize) Parameters Type Name Description System.Int32 bufferSize the buffer size in bytes used to buffer writes internally. Fields | Improve this Doc View Source DEFAULT_BUFFER_SIZE The default buffer size in bytes ( DEFAULT_BUFFER_SIZE ). Declaration public const int DEFAULT_BUFFER_SIZE = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source BufferSize Returns size of the used output buffer in bytes. Declaration public int BufferSize { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Checksum Declaration public override long Checksum { get; } Property Value Type Description System.Int64 Overrides IndexOutput.Checksum | Improve this Doc View Source Length Declaration public abstract override long Length { get; } Property Value Type Description System.Int64 Overrides IndexOutput.Length Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexOutput.Dispose(Boolean) | Improve this Doc View Source Flush() Declaration public override void Flush() Overrides IndexOutput.Flush() | Improve this Doc View Source FlushBuffer(Byte[], Int32, Int32) Expert: implements buffer write. Writes bytes at the current position in the output. Declaration protected abstract void FlushBuffer(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b the bytes to write System.Int32 offset the offset in the byte array System.Int32 len the number of bytes to write | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexOutput.GetFilePointer() | Improve this Doc View Source Seek(Int64) Declaration public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexOutput.Seek(Int64) | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.ByteArrayDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.ByteArrayDataInput.html",
    "title": "Class ByteArrayDataInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteArrayDataInput DataInput backed by a byte array. WARNING: this class omits all low-level checks. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DataInput ByteArrayDataInput Inherited Members DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadString() DataInput.Clone() DataInput.ReadStringStringMap() DataInput.ReadStringSet() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public sealed class ByteArrayDataInput : DataInput Constructors | Improve this Doc View Source ByteArrayDataInput() Declaration public ByteArrayDataInput() | Improve this Doc View Source ByteArrayDataInput(Byte[]) Declaration public ByteArrayDataInput(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source ByteArrayDataInput(Byte[], Int32, Int32) Declaration public ByteArrayDataInput(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Properties | Improve this Doc View Source Eof Declaration public bool Eof { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Position Declaration public int Position { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source ReadInt16() LUCENENET NOTE: Important - always cast to ushort (System.UInt16) before using to ensure the value is positive! NOTE: this was readShort() in Lucene Declaration public override short ReadInt16() Returns Type Description System.Int16 Overrides DataInput.ReadInt16() | Improve this Doc View Source ReadInt32() NOTE: this was readInt() in Lucene Declaration public override int ReadInt32() Returns Type Description System.Int32 Overrides DataInput.ReadInt32() | Improve this Doc View Source ReadInt64() NOTE: this was readLong() in Lucene Declaration public override long ReadInt64() Returns Type Description System.Int64 Overrides DataInput.ReadInt64() | Improve this Doc View Source ReadVInt32() NOTE: this was readVInt() in Lucene Declaration public override int ReadVInt32() Returns Type Description System.Int32 Overrides DataInput.ReadVInt32() | Improve this Doc View Source ReadVInt64() NOTE: this was readVLong() in Lucene Declaration public override long ReadVInt64() Returns Type Description System.Int64 Overrides DataInput.ReadVInt64() | Improve this Doc View Source Reset(Byte[]) Declaration public void Reset(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source Reset(Byte[], Int32, Int32) Declaration public void Reset(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len | Improve this Doc View Source Rewind() NOTE: sets pos to 0, which is not right if you had called reset w/ non-zero offset!! Declaration public void Rewind() | Improve this Doc View Source SkipBytes(Int64) Declaration public override void SkipBytes(long count) Parameters Type Name Description System.Int64 count Overrides DataInput.SkipBytes(Int64)"
  },
  "api/Lucene.Net/Lucene.Net.Store.ByteArrayDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.ByteArrayDataOutput.html",
    "title": "Class ByteArrayDataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteArrayDataOutput DataOutput backed by a byte array. WARNING: this class omits most low-level checks, so be sure to test heavily with assertions enabled. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DataOutput ByteArrayDataOutput Inherited Members DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class ByteArrayDataOutput : DataOutput Constructors | Improve this Doc View Source ByteArrayDataOutput() Declaration public ByteArrayDataOutput() | Improve this Doc View Source ByteArrayDataOutput(Byte[]) Declaration public ByteArrayDataOutput(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source ByteArrayDataOutput(Byte[], Int32, Int32) Declaration public ByteArrayDataOutput(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Properties | Improve this Doc View Source Position Declaration public virtual int Position { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Reset(Byte[]) Declaration public virtual void Reset(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source Reset(Byte[], Int32, Int32) Declaration public virtual void Reset(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Store.ByteBufferIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.ByteBufferIndexInput.html",
    "title": "Class ByteBufferIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteBufferIndexInput Base IndexInput implementation that uses an array of s to represent a file. Because Java's uses an to address the values, it's necessary to access a file greater in size using multiple byte buffers. For efficiency, this class requires that the buffers are a power-of-two ( chunkSizePower ). Inheritance System.Object DataInput IndexInput ByteBufferIndexInput MMapDirectory.MMapIndexInput Implements IDisposable Inherited Members IndexInput.Dispose() DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadVInt32() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class ByteBufferIndexInput : IndexInput, IDisposable Properties | Improve this Doc View Source Length Declaration public override sealed long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Clone() Declaration public override sealed object Clone() Returns Type Description System.Object Overrides IndexInput.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source FreeBuffer(ByteBuffer) Called when the contents of a buffer will be no longer needed. Declaration protected abstract void FreeBuffer(ByteBuffer b) Parameters Type Name Description ByteBuffer b | Improve this Doc View Source GetFilePointer() Declaration public override sealed long GetFilePointer() Returns Type Description System.Int64 Overrides IndexInput.GetFilePointer() | Improve this Doc View Source ReadByte() Declaration public override sealed byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override sealed void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source ReadInt16() NOTE: this was readShort() in Lucene Declaration public override sealed short ReadInt16() Returns Type Description System.Int16 Overrides DataInput.ReadInt16() | Improve this Doc View Source ReadInt32() NOTE: this was readInt() in Lucene Declaration public override sealed int ReadInt32() Returns Type Description System.Int32 Overrides DataInput.ReadInt32() | Improve this Doc View Source ReadInt64() NOTE: this was readLong() in Lucene Declaration public override sealed long ReadInt64() Returns Type Description System.Int64 Overrides DataInput.ReadInt64() | Improve this Doc View Source Seek(Int64) Declaration public override sealed void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexInput.Seek(Int64) | Improve this Doc View Source Slice(String, Int64, Int64) Creates a slice of this index input, with the given description, offset, and length. The slice is seeked to the beginning. Declaration public ByteBufferIndexInput Slice(string sliceDescription, long offset, long length) Parameters Type Name Description System.String sliceDescription System.Int64 offset System.Int64 length Returns Type Description ByteBufferIndexInput | Improve this Doc View Source ToString() Declaration public override sealed string ToString() Returns Type Description System.String Overrides IndexInput.ToString() Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.ChecksumIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.ChecksumIndexInput.html",
    "title": "Class ChecksumIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ChecksumIndexInput Extension of IndexInput , computing checksum as it goes. Callers can retrieve the checksum via Checksum . Inheritance System.Object DataInput IndexInput ChecksumIndexInput BufferedChecksumIndexInput Implements IDisposable Inherited Members IndexInput.Dispose() IndexInput.Dispose(Boolean) IndexInput.GetFilePointer() IndexInput.Length IndexInput.ToString() IndexInput.Clone() DataInput.ReadByte() DataInput.ReadBytes(Byte[], Int32, Int32) DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class ChecksumIndexInput : IndexInput, IDisposable Constructors | Improve this Doc View Source ChecksumIndexInput(String) resourceDescription should be a non-null, opaque string describing this resource; it's returned from . Declaration protected ChecksumIndexInput(string resourceDescription) Parameters Type Name Description System.String resourceDescription Properties | Improve this Doc View Source Checksum Returns the current checksum value Declaration public abstract long Checksum { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Seek(Int64) Sets current position in this file, where the next read will occur. ChecksumIndexInput can only seek forward and seeks are expensive since they imply to read bytes in-between the current position and the target position in order to update the checksum. Declaration public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexInput.Seek(Int64) Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.CompoundFileDirectory.FileEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.CompoundFileDirectory.FileEntry.html",
    "title": "Class CompoundFileDirectory.FileEntry | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompoundFileDirectory.FileEntry Offset/Length for a slice inside of a compound file Inheritance System.Object CompoundFileDirectory.FileEntry Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public sealed class FileEntry : object"
  },
  "api/Lucene.Net/Lucene.Net.Store.CompoundFileDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.CompoundFileDirectory.html",
    "title": "Class CompoundFileDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompoundFileDirectory Class for accessing a compound stream. This class implements a directory, but is limited to only read operations. Directory methods that would normally modify data throw an exception. All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats used by the Codec . When using the Compound File format these files are collapsed into a single .cfs file (except for the LiveDocsFormat , with a corresponding .cfe file indexing its sub-files. Files: .cfs : An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. .cfe : The \"virtual\" compound file's entry table holding all entries in the corresponding .cfs file. Description: Compound (.cfs) --> Header, FileData FileCount Compound Entry Table (.cfe) --> Header, FileCount, <FileName, DataOffset, DataLength> FileCount , Footer Header --> WriteHeader(DataOutput, String, Int32) FileCount --> WriteVInt32(Int32) DataOffset,DataLength --> WriteInt64(Int64) FileName --> WriteString(String) FileData --> raw file data Footer --> WriteFooter(IndexOutput) Notes: FileCount indicates how many files are contained in this compound file. The entry table that follows has that many entries. Each directory entry contains a long pointer to the start of this file's data section, the files length, and a with that file's name. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory BaseDirectory CompoundFileDirectory Inherited Members BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.ClearLock(String) BaseDirectory.SetLockFactory(LockFactory) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.GetLockID() Directory.Copy(Directory, String, String, IOContext) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public sealed class CompoundFileDirectory : BaseDirectory Constructors | Improve this Doc View Source CompoundFileDirectory(Directory, String, IOContext, Boolean) Create a new CompoundFileDirectory . Declaration public CompoundFileDirectory(Directory directory, string fileName, IOContext context, bool openForWrite) Parameters Type Name Description Directory directory System.String fileName IOContext context System.Boolean openForWrite Properties | Improve this Doc View Source Directory Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source Name Declaration public string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source DeleteFile(String) Not implemented Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source FileExists(String) Returns true iff a file with the given name exists. Declaration public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Returns the length of a file in the directory. Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) | Improve this Doc View Source ListAll() Returns an array of strings, one for each file in the directory. Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source MakeLock(String) Not implemented Declaration public override Lock MakeLock(string name) Parameters Type Name Description System.String name Returns Type Description Lock Overrides BaseDirectory.MakeLock(String) | Improve this Doc View Source OpenInput(String, IOContext) Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source RenameFile(String, String) Not implemented Declaration public void RenameFile(string from, string to) Parameters Type Name Description System.String from System.String to | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description ICollection < System.String > names Overrides Directory.Sync(ICollection<String>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Directory.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Store.DataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.DataInput.html",
    "title": "Class DataInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DataInput Abstract base class for performing read operations of Lucene's low-level data types. DataInput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). To allow multithreaded use, every DataInput instance must be cloned before used in another thread. Subclasses must therefore implement Clone() , returning a new DataInput which operates on the same underlying resource, but positioned independently. Inheritance System.Object DataInput ByteSliceReader ByteArrayDataInput IndexInput InputStreamDataInput BinaryReaderDataInput FST.BytesReader PagedBytes.PagedBytesDataInput Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class DataInput : object Methods | Improve this Doc View Source Clone() Returns a clone of this stream. Clones of a stream access the same data, and are positioned at the same point as the stream they were cloned from. Expert: Subclasses must ensure that clones may be positioned at different points in the input from each other and from the stream they were cloned from. Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source ReadByte() Reads and returns a single byte. Declaration public abstract byte ReadByte() Returns Type Description System.Byte See Also WriteByte ( System.Byte ) | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Reads a specified number of bytes into an array at the specified offset. Declaration public abstract void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b the array to read bytes into System.Int32 offset the offset in the array to start storing bytes System.Int32 len the number of bytes to read See Also WriteBytes ( System.Byte [], System.Int32 ) | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32, Boolean) Reads a specified number of bytes into an array at the specified offset with control over whether the read should be buffered (callers who have their own buffer should pass in \"false\" for useBuffer ). Currently only BufferedIndexInput respects this parameter. Declaration public virtual void ReadBytes(byte[] b, int offset, int len, bool useBuffer) Parameters Type Name Description System.Byte [] b the array to read bytes into System.Int32 offset the offset in the array to start storing bytes System.Int32 len the number of bytes to read System.Boolean useBuffer set to false if the caller will handle buffering. See Also WriteBytes ( System.Byte [], System.Int32 ) | Improve this Doc View Source ReadInt16() Reads two bytes and returns a . LUCENENET NOTE: Important - always cast to ushort (System.UInt16) before using to ensure the value is positive! NOTE: this was readShort() in Lucene Declaration public virtual short ReadInt16() Returns Type Description System.Int16 See Also WriteInt16 ( System.Int16 ) | Improve this Doc View Source ReadInt32() Reads four bytes and returns an . NOTE: this was readInt() in Lucene Declaration public virtual int ReadInt32() Returns Type Description System.Int32 See Also WriteInt32 ( System.Int32 ) | Improve this Doc View Source ReadInt64() Reads eight bytes and returns a . NOTE: this was readLong() in Lucene Declaration public virtual long ReadInt64() Returns Type Description System.Int64 See Also WriteInt64 ( System.Int64 ) | Improve this Doc View Source ReadString() Reads a . Declaration public virtual string ReadString() Returns Type Description System.String See Also WriteString ( System.String ) | Improve this Doc View Source ReadStringSet() Reads a ISet<string> previously written with WriteStringSet(ISet<String>) . Declaration public virtual ISet<string> ReadStringSet() Returns Type Description ISet < System.String > | Improve this Doc View Source ReadStringStringMap() Reads a IDictionary<string,string> previously written with WriteStringStringMap(IDictionary<String, String>) . Declaration public virtual IDictionary<string, string> ReadStringStringMap() Returns Type Description IDictionary < System.String , System.String > | Improve this Doc View Source ReadVInt32() Reads an stored in variable-length format. Reads between one and five bytes. Smaller values take fewer bytes. Negative numbers are not supported. The format is described further in WriteVInt32(Int32) . NOTE: this was readVInt() in Lucene Declaration public virtual int ReadVInt32() Returns Type Description System.Int32 See Also WriteVInt32 ( System.Int32 ) | Improve this Doc View Source ReadVInt64() Reads a stored in variable-length format. Reads between one and nine bytes. Smaller values take fewer bytes. Negative numbers are not supported. The format is described further in WriteVInt32(Int32) . NOTE: this was readVLong() in Lucene Declaration public virtual long ReadVInt64() Returns Type Description System.Int64 See Also WriteVInt64 ( System.Int64 ) | Improve this Doc View Source SkipBytes(Int64) Skip over numBytes bytes. The contract on this method is that it should have the same behavior as reading the same number of bytes into a buffer and discarding its content. Negative values of numBytes are not supported. Declaration public virtual void SkipBytes(long numBytes) Parameters Type Name Description System.Int64 numBytes"
  },
  "api/Lucene.Net/Lucene.Net.Store.DataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.DataOutput.html",
    "title": "Class DataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DataOutput Abstract base class for performing write operations of Lucene's low-level data types. DataOutput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). Inheritance System.Object DataOutput ByteArrayDataOutput IndexOutput OutputStreamDataOutput BinaryWriterDataOutput GrowableByteArrayDataOutput PagedBytes.PagedBytesDataOutput Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class DataOutput : object Methods | Improve this Doc View Source CopyBytes(DataInput, Int64) Copy numBytes bytes from input to ourself. Declaration public virtual void CopyBytes(DataInput input, long numBytes) Parameters Type Name Description DataInput input System.Int64 numBytes | Improve this Doc View Source WriteByte(Byte) Writes a single byte. The most primitive data type is an eight-bit byte. Files are accessed as sequences of bytes. All other data types are defined as sequences of bytes, so file formats are byte-order independent. Declaration public abstract void WriteByte(byte b) Parameters Type Name Description System.Byte b See Also ReadByte () | Improve this Doc View Source WriteBytes(Byte[], Int32) Writes an array of bytes. Declaration public virtual void WriteBytes(byte[] b, int length) Parameters Type Name Description System.Byte [] b the bytes to write System.Int32 length the number of bytes to write See Also ReadBytes ( System.Byte [], System.Int32 , System.Int32 ) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Writes an array of bytes. Declaration public abstract void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b the bytes to write System.Int32 offset the offset in the byte array System.Int32 length the number of bytes to write See Also ReadBytes ( System.Byte [], System.Int32 , System.Int32 ) | Improve this Doc View Source WriteInt16(Int16) Writes a short as two bytes. NOTE: this was writeShort() in Lucene Declaration public virtual void WriteInt16(short i) Parameters Type Name Description System.Int16 i See Also ReadInt16 () | Improve this Doc View Source WriteInt32(Int32) Writes an as four bytes. 32-bit unsigned integer written as four bytes, high-order bytes first. NOTE: this was writeInt() in Lucene Declaration public virtual void WriteInt32(int i) Parameters Type Name Description System.Int32 i See Also ReadInt32 () | Improve this Doc View Source WriteInt64(Int64) Writes a as eight bytes. 64-bit unsigned integer written as eight bytes, high-order bytes first. NOTE: this was writeLong() in Lucene Declaration public virtual void WriteInt64(long i) Parameters Type Name Description System.Int64 i See Also ReadInt64 () | Improve this Doc View Source WriteString(String) Writes a string. Writes strings as UTF-8 encoded bytes. First the length, in bytes, is written as a WriteVInt32(Int32) , followed by the bytes. Declaration public virtual void WriteString(string s) Parameters Type Name Description System.String s See Also ReadString () | Improve this Doc View Source WriteStringSet(ISet<String>) Writes a set. First the size is written as an WriteInt32(Int32) , followed by each value written as a WriteString(String) . Declaration public virtual void WriteStringSet(ISet<string> set) Parameters Type Name Description ISet < System.String > set Input ISet{string} . May be null (equivalent to an empty set) | Improve this Doc View Source WriteStringStringMap(IDictionary<String, String>) Writes a . First the size is written as an WriteInt32(Int32) , followed by each key-value pair written as two consecutive WriteString(String) s. Declaration public virtual void WriteStringStringMap(IDictionary<string, string> map) Parameters Type Name Description IDictionary < System.String , System.String > map Input . May be null (equivalent to an empty dictionary) | Improve this Doc View Source WriteVInt32(Int32) Writes an in a variable-length format. Writes between one and five bytes. Smaller values take fewer bytes. Negative numbers are supported, but should be avoided. VByte is a variable-length format for positive integers is defined where the high-order bit of each byte indicates whether more bytes remain to be read. The low-order seven bits are appended as increasingly more significant bits in the resulting integer value. Thus values from zero to 127 may be stored in a single byte, values from 128 to 16,383 may be stored in two bytes, and so on. VByte Encoding Example ValueByte 1Byte 2Byte 3 000000000 100000001 200000010 ... 12701111111 1281000000000000001 1291000000100000001 1301000001000000001 ... 16,3831111111101111111 16,384100000001000000000000001 16,385100000011000000000000001 ... this provides compression while still being efficient to decode. NOTE: this was writeVInt() in Lucene Declaration public void WriteVInt32(int i) Parameters Type Name Description System.Int32 i Smaller values take fewer bytes. Negative numbers are supported, but should be avoided. See Also ReadVInt32 () | Improve this Doc View Source WriteVInt64(Int64) Writes an in a variable-length format. Writes between one and nine bytes. Smaller values take fewer bytes. Negative numbers are not supported. The format is described further in WriteVInt32(Int32) . NOTE: this was writeVLong() in Lucene Declaration public void WriteVInt64(long i) Parameters Type Name Description System.Int64 i See Also ReadVInt64 ()"
  },
  "api/Lucene.Net/Lucene.Net.Store.Directory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.Directory.html",
    "title": "Class Directory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Directory A Directory is a flat list of files. Files may be written once, when they are created. Once a file is created it may only be opened for read, or deleted. Random access is permitted both when reading and writing. .NET's i/o APIs not used directly, but rather all i/o is through this API. This permits things such as: implementation of RAM-based indices; implementation indices stored in a database; implementation of an index as a single file; Directory locking is implemented by an instance of LockFactory , and can be changed for each Directory instance using SetLockFactory(LockFactory) . Inheritance System.Object Directory BaseDirectory FilterDirectory NRTCachingDirectory Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class Directory : IDisposable Properties | Improve this Doc View Source LockFactory Get the LockFactory that this Directory instance is using for its locking implementation. Note that this may be null for Directory implementations that provide their own locking implementation. Declaration public abstract LockFactory LockFactory { get; } Property Value Type Description LockFactory Methods | Improve this Doc View Source ClearLock(String) Attempt to clear (forcefully unlock and remove) the specified lock. Only call this at a time when you are certain this lock is no longer in use. Declaration public abstract void ClearLock(string name) Parameters Type Name Description System.String name name of the lock to be cleared. | Improve this Doc View Source Copy(Directory, String, String, IOContext) Copies the file src to Directory to under the new file name dest . If you want to copy the entire source directory to the destination one, you can do so like this: Directory to; // the directory to copy to foreach (string file in dir.ListAll()) { dir.Copy(to, file, newFile, IOContext.DEFAULT); // newFile can be either file, or a new name } NOTE: this method does not check whether dest exist and will overwrite it if it does. Declaration public virtual void Copy(Directory to, string src, string dest, IOContext context) Parameters Type Name Description Directory to System.String src System.String dest IOContext context | Improve this Doc View Source CreateOutput(String, IOContext) Creates a new, empty file in the directory with the given name. Returns a stream writing this file. Declaration public abstract IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput | Improve this Doc View Source CreateSlicer(String, IOContext) Creates an Directory.IndexInputSlicer for the given file name. Directory.IndexInputSlicer allows other Directory implementations to efficiently open one or more sliced IndexInput instances from a single file handle. The underlying file handle is kept open until the Directory.IndexInputSlicer is closed. Throws if the file does not exist. @lucene.internal This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer | Improve this Doc View Source DeleteFile(String) Removes an existing file in the directory. Declaration public abstract void DeleteFile(string name) Parameters Type Name Description System.String name | Improve this Doc View Source Dispose() Disposes the store. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Disposes the store. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EnsureOpen() Declaration protected virtual void EnsureOpen() | Improve this Doc View Source FileExists(String) Returns true iff a file with the given name exists. Declaration public abstract bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean | Improve this Doc View Source FileLength(String) Returns the length of a file in the directory. this method follows the following contract: Declaration public abstract long FileLength(string name) Parameters Type Name Description System.String name the name of the file for which to return the length. Returns Type Description System.Int64 | Improve this Doc View Source GetLockID() Return a string identifier that uniquely differentiates this Directory instance from other Directory instances. This ID should be the same if two Directory instances (even in different AppDomains and/or on different machines) are considered \"the same index\". This is how locking \"scopes\" to the right index. Declaration public virtual string GetLockID() Returns Type Description System.String | Improve this Doc View Source ListAll() Returns an array of strings, one for each file in the directory. Declaration public abstract string[] ListAll() Returns Type Description System.String [] | Improve this Doc View Source MakeLock(String) Construct a Lock . Declaration public abstract Lock MakeLock(string name) Parameters Type Name Description System.String name the name of the lock file Returns Type Description Lock | Improve this Doc View Source OpenChecksumInput(String, IOContext) Returns a stream reading an existing file, computing checksum as it reads Declaration public virtual ChecksumIndexInput OpenChecksumInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description ChecksumIndexInput | Improve this Doc View Source OpenInput(String, IOContext) Returns a stream reading an existing file, with the specified read buffer size. The particular Directory implementation may ignore the buffer size. Currently the only Directory implementations that respect this parameter are FSDirectory and CompoundFileDirectory . Throws if the file does not exist. Declaration public abstract IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput | Improve this Doc View Source SetLockFactory(LockFactory) Set the LockFactory that this Directory instance should use for its locking implementation. Each * instance of LockFactory should only be used for one directory (ie, do not share a single instance across multiple Directories). Declaration public abstract void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory instance of LockFactory . | Improve this Doc View Source Sync(ICollection<String>) Ensure that any writes to these files are moved to stable storage. Lucene uses this to properly commit changes to the index, to prevent a machine/OS crash from corrupting the index. NOTE: Clients may call this method for same files over and over again, so some impls might optimize for that. For other impls the operation can be a noop, for various reasons. Declaration public abstract void Sync(ICollection<string> names) Parameters Type Name Description ICollection < System.String > names | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Store.Directory.IndexInputSlicer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.Directory.IndexInputSlicer.html",
    "title": "Class Directory.IndexInputSlicer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Directory.IndexInputSlicer Allows to create one or more sliced IndexInput instances from a single file handle. Some Directory implementations may be able to efficiently map slices of a file into memory when only certain parts of a file are required. @lucene.internal This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory.IndexInputSlicer Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class IndexInputSlicer : IDisposable Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source OpenFullSlice() Returns an IndexInput slice starting at offset 0 with a length equal to the length of the underlying file Declaration public abstract IndexInput OpenFullSlice() Returns Type Description IndexInput | Improve this Doc View Source OpenSlice(String, Int64, Int64) Returns an IndexInput slice starting at the given offset with the given length. Declaration public abstract IndexInput OpenSlice(string sliceDescription, long offset, long length) Parameters Type Name Description System.String sliceDescription System.Int64 offset System.Int64 length Returns Type Description IndexInput"
  },
  "api/Lucene.Net/Lucene.Net.Store.FileSwitchDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FileSwitchDirectory.html",
    "title": "Class FileSwitchDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FileSwitchDirectory Expert: A Directory instance that switches files between two other Directory instances. Files with the specified extensions are placed in the primary directory; others are placed in the secondary directory. The provided ISet{string} must not change once passed to this class, and must allow multiple threads to call contains at once. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory BaseDirectory FileSwitchDirectory Inherited Members BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.SetLockFactory(LockFactory) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.GetLockID() Directory.ToString() Directory.Copy(Directory, String, String, IOContext) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class FileSwitchDirectory : BaseDirectory Constructors | Improve this Doc View Source FileSwitchDirectory(ISet<String>, Directory, Directory, Boolean) Declaration public FileSwitchDirectory(ISet<string> primaryExtensions, Directory primaryDir, Directory secondaryDir, bool doClose) Parameters Type Name Description ISet < System.String > primaryExtensions Directory primaryDir Directory secondaryDir System.Boolean doClose Properties | Improve this Doc View Source PrimaryDir Return the primary directory Declaration public virtual Directory PrimaryDir { get; } Property Value Type Description Directory | Improve this Doc View Source SecondaryDir Return the secondary directory Declaration public virtual Directory SecondaryDir { get; } Property Value Type Description Directory Methods | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source DeleteFile(String) Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source FileExists(String) Declaration public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) | Improve this Doc View Source GetExtension(String) Utility method to return a file's extension. Declaration public static string GetExtension(string name) Parameters Type Name Description System.String name Returns Type Description System.String | Improve this Doc View Source ListAll() Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source OpenInput(String, IOContext) Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description ICollection < System.String > names Overrides Directory.Sync(ICollection<String>)"
  },
  "api/Lucene.Net/Lucene.Net.Store.FilterDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FilterDirectory.html",
    "title": "Class FilterDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterDirectory Directory implementation that delegates calls to another directory. This class can be used to add limitations on top of an existing Directory implementation such as rate limiting ( RateLimitedDirectoryWrapper ) or to add additional sanity checks for tests. However, if you plan to write your own Directory implementation, you should consider extending directly Directory or BaseDirectory rather than try to reuse functionality of existing Directory s by extending this class. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Directory FilterDirectory RateLimitedDirectoryWrapper TrackingDirectoryWrapper Inherited Members Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) Directory.CreateSlicer(String, IOContext) Directory.EnsureOpen() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class FilterDirectory : Directory Constructors | Improve this Doc View Source FilterDirectory(Directory) Sole constructor, typically called from sub-classes. Declaration protected FilterDirectory(Directory in) Parameters Type Name Description Directory in Fields | Improve this Doc View Source m_input Declaration protected readonly Directory m_input Field Value Type Description Directory Properties | Improve this Doc View Source Delegate Return the wrapped Directory . Declaration public Directory Delegate { get; } Property Value Type Description Directory | Improve this Doc View Source LockFactory Declaration public override LockFactory LockFactory { get; } Property Value Type Description LockFactory Overrides Directory.LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string name) Parameters Type Name Description System.String name Overrides Directory.ClearLock(String) | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source DeleteFile(String) Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source FileExists(String) Declaration public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) | Improve this Doc View Source GetLockID() Declaration public override string GetLockID() Returns Type Description System.String Overrides Directory.GetLockID() | Improve this Doc View Source ListAll() Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string name) Parameters Type Name Description System.String name Returns Type Description Lock Overrides Directory.MakeLock(String) | Improve this Doc View Source OpenInput(String, IOContext) Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source SetLockFactory(LockFactory) Declaration public override void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory Overrides Directory.SetLockFactory(LockFactory) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description ICollection < System.String > names Overrides Directory.Sync(ICollection<String>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Directory.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Store.FlushInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FlushInfo.html",
    "title": "Class FlushInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FlushInfo A FlushInfo provides information required for a FLUSH context. It is used as part of an IOContext in case of FLUSH context. Inheritance System.Object FlushInfo Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class FlushInfo : object Constructors | Improve this Doc View Source FlushInfo(Int32, Int64) Creates a new FlushInfo instance from the values required for a FLUSH IOContext context. These values are only estimates and are not the actual values. Declaration public FlushInfo(int numDocs, long estimatedSegmentSize) Parameters Type Name Description System.Int32 numDocs System.Int64 estimatedSegmentSize Properties | Improve this Doc View Source EstimatedSegmentSize Declaration public long EstimatedSegmentSize { get; } Property Value Type Description System.Int64 | Improve this Doc View Source NumDocs Declaration public int NumDocs { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Store.FSDirectory.FSIndexOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FSDirectory.FSIndexOutput.html",
    "title": "Class FSDirectory.FSIndexOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSDirectory.FSIndexOutput Writes output with Inheritance System.Object DataOutput IndexOutput BufferedIndexOutput FSDirectory.FSIndexOutput Implements IDisposable Inherited Members BufferedIndexOutput.DEFAULT_BUFFER_SIZE BufferedIndexOutput.WriteByte(Byte) BufferedIndexOutput.WriteBytes(Byte[], Int32, Int32) BufferedIndexOutput.Flush() BufferedIndexOutput.GetFilePointer() BufferedIndexOutput.BufferSize BufferedIndexOutput.Checksum IndexOutput.Dispose() DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax protected class FSIndexOutput : BufferedIndexOutput, IDisposable Constructors | Improve this Doc View Source FSIndexOutput(FSDirectory, String) Declaration public FSIndexOutput(FSDirectory parent, string name) Parameters Type Name Description FSDirectory parent System.String name Properties | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Overrides BufferedIndexOutput.Length Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides BufferedIndexOutput.Dispose(Boolean) | Improve this Doc View Source FlushBuffer(Byte[], Int32, Int32) Declaration protected override void FlushBuffer(byte[] b, int offset, int size) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 size Overrides BufferedIndexOutput.FlushBuffer(Byte[], Int32, Int32) | Improve this Doc View Source Seek(Int64) Random-access methods Declaration public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides BufferedIndexOutput.Seek(Int64) Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.FSDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FSDirectory.html",
    "title": "Class FSDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSDirectory Base class for Directory implementations that store index files in the file system. There are currently three core subclasses: SimpleFSDirectory is a straightforward implementation using . However, it has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. NIOFSDirectory uses java.nio's FileChannel's positional io when reading to avoid synchronization when reading from the same file. Unfortunately, due to a Windows-only Sun JRE bug this is a poor choice for Windows, but on all other platforms this is the preferred choice. Applications using or should use SimpleFSDirectory instead. See NIOFSDirectory java doc for details. MMapDirectory uses memory-mapped IO when reading. This is a good choice if you have plenty of virtual memory relative to your index size, eg if you are running on a 64 bit runtime, or you are running on a 32 bit runtime but your index sizes are small enough to fit into the virtual memory space. Applications using or should use SimpleFSDirectory instead. See MMapDirectory doc for details. Unfortunately, because of system peculiarities, there is no single overall best implementation. Therefore, we've added the Open(String) method (or one of its overloads), to allow Lucene to choose the best FSDirectory implementation given your environment, and the known limitations of each implementation. For users who have no reason to prefer a specific implementation, it's best to simply use Open(String) (or one of its overloads). For all others, you should instantiate the desired implementation directly. The locking implementation is by default NativeFSLockFactory , but can be changed by passing in a custom LockFactory instance. Inheritance System.Object Directory BaseDirectory FSDirectory MMapDirectory NIOFSDirectory SimpleFSDirectory Inherited Members BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenInput(String, IOContext) Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) Directory.CreateSlicer(String, IOContext) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class FSDirectory : BaseDirectory Constructors | Improve this Doc View Source FSDirectory(DirectoryInfo) Declaration protected FSDirectory(DirectoryInfo dir) Parameters Type Name Description DirectoryInfo dir | Improve this Doc View Source FSDirectory(DirectoryInfo, LockFactory) Create a new FSDirectory for the named location (ctor for subclasses). Declaration protected FSDirectory(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Fields | Improve this Doc View Source DEFAULT_READ_CHUNK_SIZE Default read chunk size: 8192 bytes (this is the size up to which the runtime does not allocate additional arrays while reading/writing) Declaration public const int DEFAULT_READ_CHUNK_SIZE = null Field Value Type Description System.Int32 | Improve this Doc View Source m_directory Declaration protected readonly DirectoryInfo m_directory Field Value Type Description DirectoryInfo Properties | Improve this Doc View Source Directory the underlying filesystem directory Declaration public virtual DirectoryInfo Directory { get; } Property Value Type Description DirectoryInfo | Improve this Doc View Source ReadChunkSize this setting has no effect anymore. Declaration public int ReadChunkSize { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CreateOutput(String, IOContext) Creates an IndexOutput for the file with the given name. Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source DeleteFile(String) Removes an existing file in the directory. Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Closes the store to future operations. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source EnsureCanWrite(String) Declaration protected virtual void EnsureCanWrite(string name) Parameters Type Name Description System.String name | Improve this Doc View Source FileExists(String) Returns true iff a file with the given name exists. Declaration public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Returns the length in bytes of a file in the directory. Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) | Improve this Doc View Source GetLockID() Declaration public override string GetLockID() Returns Type Description System.String Overrides Directory.GetLockID() | Improve this Doc View Source ListAll() Lists all files (not subdirectories) in the directory. Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() See Also ListAll(DirectoryInfo) | Improve this Doc View Source ListAll(DirectoryInfo) Lists all files (not subdirectories) in the directory. This method never returns null (throws instead). Declaration public static string[] ListAll(DirectoryInfo dir) Parameters Type Name Description DirectoryInfo dir Returns Type Description System.String [] | Improve this Doc View Source OnIndexOutputClosed(FSDirectory.FSIndexOutput) Declaration protected virtual void OnIndexOutputClosed(FSDirectory.FSIndexOutput io) Parameters Type Name Description FSDirectory.FSIndexOutput io | Improve this Doc View Source Open(DirectoryInfo) Creates an FSDirectory instance, trying to pick the best implementation given the current environment. The directory returned uses the NativeFSLockFactory . Currently this returns MMapDirectory for most Solaris and Windows 64-bit runtimes, NIOFSDirectory for other non-Windows runtimes, and SimpleFSDirectory for other runtimes on Windows. It is highly recommended that you consult the implementation's documentation for your platform before using this method. NOTE : this method may suddenly change which implementation is returned from release to release, in the event that higher performance defaults become possible; if the precise implementation is important to your application, please instantiate it directly, instead. For optimal performance you should consider using MMapDirectory on 64 bit runtimes. See FSDirectory . Declaration public static FSDirectory Open(DirectoryInfo path) Parameters Type Name Description DirectoryInfo path Returns Type Description FSDirectory | Improve this Doc View Source Open(DirectoryInfo, LockFactory) Just like Open(DirectoryInfo) , but allows you to also specify a custom LockFactory . Declaration public static FSDirectory Open(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description DirectoryInfo path LockFactory lockFactory Returns Type Description FSDirectory | Improve this Doc View Source Open(String) Just like Open(DirectoryInfo) , but allows you to specify the directory as a . Declaration public static FSDirectory Open(string path) Parameters Type Name Description System.String path The path (to a directory) to open Returns Type Description FSDirectory An open FSDirectory | Improve this Doc View Source Open(String, LockFactory) Just like Open(DirectoryInfo, LockFactory) , but allows you to specify the directory as a . Declaration public static FSDirectory Open(string path, LockFactory lockFactory) Parameters Type Name Description System.String path The path (to a directory) to open LockFactory lockFactory Returns Type Description FSDirectory An open FSDirectory | Improve this Doc View Source SetLockFactory(LockFactory) Declaration public override void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory Overrides BaseDirectory.SetLockFactory(LockFactory) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description ICollection < System.String > names Overrides Directory.Sync(ICollection<String>) | Improve this Doc View Source ToString() For debug output. Declaration public override string ToString() Returns Type Description System.String Overrides Directory.ToString() See Also Directory"
  },
  "api/Lucene.Net/Lucene.Net.Store.FSLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FSLockFactory.html",
    "title": "Class FSLockFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSLockFactory Base class for file system based locking implementation. Inheritance System.Object LockFactory FSLockFactory NativeFSLockFactory SimpleFSLockFactory Inherited Members LockFactory.m_lockPrefix LockFactory.LockPrefix LockFactory.MakeLock(String) LockFactory.ClearLock(String) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class FSLockFactory : LockFactory Fields | Improve this Doc View Source m_lockDir Directory for the lock files. Declaration protected DirectoryInfo m_lockDir Field Value Type Description DirectoryInfo Properties | Improve this Doc View Source LockDir Gets the lock directory. Declaration public DirectoryInfo LockDir { get; } Property Value Type Description DirectoryInfo Methods | Improve this Doc View Source SetLockDir(DirectoryInfo) Set the lock directory. This property can be only called once to initialize the lock directory. It is used by FSDirectory to set the lock directory to itself. Subclasses can also use this property to set the directory in the constructor. Declaration protected void SetLockDir(DirectoryInfo lockDir) Parameters Type Name Description DirectoryInfo lockDir | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Store.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.html",
    "title": "Namespace Lucene.Net.Store | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Store <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Binary i/o API, used for all index data. Classes BaseDirectory Base implementation for a concrete Directory . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BufferedChecksum Wraps another IChecksum with an internal buffer to speed up checksum calculations. BufferedChecksumIndexInput Simple implementation of ChecksumIndexInput that wraps another input and delegates calls. BufferedIndexInput Base implementation class for buffered IndexInput . BufferedIndexOutput Base implementation class for buffered IndexOutput . ByteArrayDataInput DataInput backed by a byte array. WARNING: this class omits all low-level checks. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ByteArrayDataOutput DataOutput backed by a byte array. WARNING: this class omits most low-level checks, so be sure to test heavily with assertions enabled. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ByteBufferIndexInput Base IndexInput implementation that uses an array of s to represent a file. Because Java's uses an to address the values, it's necessary to access a file greater in size using multiple byte buffers. For efficiency, this class requires that the buffers are a power-of-two ( chunkSizePower ). ChecksumIndexInput Extension of IndexInput , computing checksum as it goes. Callers can retrieve the checksum via Checksum . CompoundFileDirectory Class for accessing a compound stream. This class implements a directory, but is limited to only read operations. Directory methods that would normally modify data throw an exception. All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats used by the Codec . When using the Compound File format these files are collapsed into a single .cfs file (except for the LiveDocsFormat , with a corresponding .cfe file indexing its sub-files. Files: .cfs : An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. .cfe : The \"virtual\" compound file's entry table holding all entries in the corresponding .cfs file. Description: Compound (.cfs) --> Header, FileData FileCount Compound Entry Table (.cfe) --> Header, FileCount, <FileName, DataOffset, DataLength> FileCount , Footer Header --> WriteHeader(DataOutput, String, Int32) FileCount --> WriteVInt32(Int32) DataOffset,DataLength --> WriteInt64(Int64) FileName --> WriteString(String) FileData --> raw file data Footer --> WriteFooter(IndexOutput) Notes: FileCount indicates how many files are contained in this compound file. The entry table that follows has that many entries. Each directory entry contains a long pointer to the start of this file's data section, the files length, and a with that file's name. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompoundFileDirectory.FileEntry Offset/Length for a slice inside of a compound file DataInput Abstract base class for performing read operations of Lucene's low-level data types. DataInput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). To allow multithreaded use, every DataInput instance must be cloned before used in another thread. Subclasses must therefore implement Clone() , returning a new DataInput which operates on the same underlying resource, but positioned independently. DataOutput Abstract base class for performing write operations of Lucene's low-level data types. DataOutput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). Directory A Directory is a flat list of files. Files may be written once, when they are created. Once a file is created it may only be opened for read, or deleted. Random access is permitted both when reading and writing. .NET's i/o APIs not used directly, but rather all i/o is through this API. This permits things such as: implementation of RAM-based indices; implementation indices stored in a database; implementation of an index as a single file; Directory locking is implemented by an instance of LockFactory , and can be changed for each Directory instance using SetLockFactory(LockFactory) . Directory.IndexInputSlicer Allows to create one or more sliced IndexInput instances from a single file handle. Some Directory implementations may be able to efficiently map slices of a file into memory when only certain parts of a file are required. @lucene.internal This is a Lucene.NET EXPERIMENTAL API, use at your own risk FileSwitchDirectory Expert: A Directory instance that switches files between two other Directory instances. Files with the specified extensions are placed in the primary directory; others are placed in the secondary directory. The provided ISet{string} must not change once passed to this class, and must allow multiple threads to call contains at once. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FilterDirectory Directory implementation that delegates calls to another directory. This class can be used to add limitations on top of an existing Directory implementation such as rate limiting ( RateLimitedDirectoryWrapper ) or to add additional sanity checks for tests. However, if you plan to write your own Directory implementation, you should consider extending directly Directory or BaseDirectory rather than try to reuse functionality of existing Directory s by extending this class. This is a Lucene.NET INTERNAL API, use at your own risk FlushInfo A FlushInfo provides information required for a FLUSH context. It is used as part of an IOContext in case of FLUSH context. FSDirectory Base class for Directory implementations that store index files in the file system. There are currently three core subclasses: SimpleFSDirectory is a straightforward implementation using . However, it has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. NIOFSDirectory uses java.nio's FileChannel's positional io when reading to avoid synchronization when reading from the same file. Unfortunately, due to a Windows-only Sun JRE bug this is a poor choice for Windows, but on all other platforms this is the preferred choice. Applications using or should use SimpleFSDirectory instead. See NIOFSDirectory java doc for details. MMapDirectory uses memory-mapped IO when reading. This is a good choice if you have plenty of virtual memory relative to your index size, eg if you are running on a 64 bit runtime, or you are running on a 32 bit runtime but your index sizes are small enough to fit into the virtual memory space. Applications using or should use SimpleFSDirectory instead. See MMapDirectory doc for details. Unfortunately, because of system peculiarities, there is no single overall best implementation. Therefore, we've added the Open(String) method (or one of its overloads), to allow Lucene to choose the best FSDirectory implementation given your environment, and the known limitations of each implementation. For users who have no reason to prefer a specific implementation, it's best to simply use Open(String) (or one of its overloads). For all others, you should instantiate the desired implementation directly. The locking implementation is by default NativeFSLockFactory , but can be changed by passing in a custom LockFactory instance. FSDirectory.FSIndexOutput Writes output with FSLockFactory Base class for file system based locking implementation. IndexInput Abstract base class for input from a file in a Directory . A random-access input stream. Used for all Lucene index input operations. IndexInput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). To allow multithreaded use, every IndexInput instance must be cloned before used in another thread. Subclasses must therefore implement Clone() , returning a new IndexInput which operates on the same underlying resource, but positioned independently. Lucene never closes cloned IndexInput s, it will only do this on the original one. The original instance must take care that cloned instances throw when the original one is closed. IndexOutput Abstract base class for output to a file in a Directory . A random-access output stream. Used for all Lucene index output operations. IndexOutput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). InputStreamDataInput A DataInput wrapping a plain . IOContext IOContext holds additional details on the merge/search context. A IOContext object can never be initialized as null as passed as a parameter to either OpenInput(String, IOContext) or CreateOutput(String, IOContext) Lock An interprocess mutex lock. Typical use might look like: var result = Lock.With.NewAnonymous<string>( @lock: directory.MakeLock(\"my.lock\"), lockWaitTimeout: Lock.LOCK_OBTAIN_WAIT_FOREVER, doBody: () => { //... code to execute while locked ... return \"the result\"; }).Run(); Lock.With<T> Utility class for executing code with exclusive access. LockFactory Base class for Locking implementation. Directory uses instances of this class to implement locking. Lucene uses NativeFSLockFactory by default for FSDirectory -based index directories. Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change on all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that some LockFactory implementation is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . LockObtainFailedException This exception is thrown when the write.lock could not be acquired. This happens when a writer tries to open an index that another writer already has open. LockReleaseFailedException This exception is thrown when the write.lock could not be released. LockStressTest Simple standalone tool that forever acquires & releases a lock using a specific LockFactory . Run without any args to see usage. LockVerifyServer Simple standalone server that must be running when you use VerifyingLockFactory . This server simply verifies at most one process holds the lock at a time. Run without any args to see usage. MergeInfo A MergeInfo provides information required for a MERGE context. It is used as part of an IOContext in case of MERGE context. MMapDirectory File-based Directory implementation that uses for reading, and FSDirectory.FSIndexOutput for writing. NOTE : memory mapping uses up a portion of the virtual memory address space in your process equal to the size of the file being mapped. Before using this class, be sure your have plenty of virtual address space, e.g. by using a 64 bit runtime, or a 32 bit runtime with indexes that are guaranteed to fit within the address space. On 32 bit platforms also consult MMapDirectory(DirectoryInfo, LockFactory, Int32) if you have problems with mmap failing because of fragmented address space. If you get an , it is recommended to reduce the chunk size, until it works. NOTE: Accessing this class either directly or indirectly from a thread while it's interrupted can close the underlying channel immediately if at the same time the thread is blocked on IO. The channel will remain closed and subsequent access to MMapDirectory will throw a . MMapDirectory.MMapIndexInput NativeFSLockFactory Implements LockFactory using native OS file locks. For NFS based access to an index, it's recommended that you try SimpleFSLockFactory first and work around the one limitation that a lock file could be left when the runtime exits abnormally. The primary benefit of NativeFSLockFactory is that locks (not the lock file itsself) will be properly removed (by the OS) if the runtime has an abnormal exit. Note that, unlike SimpleFSLockFactory , the existence of leftover lock files in the filesystem is fine because the OS will free the locks held against these files even though the files still remain. Lucene will never actively remove the lock files, so although you see them, the index may not be locked. Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change on all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that this or any other LockFactory is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . NIOFSDirectory An FSDirectory implementation that uses 's positional read, which allows multiple threads to read from the same file without synchronizing. This class only uses when reading; writing is achieved with FSDirectory.FSIndexOutput . NOTE : NIOFSDirectory is not recommended on Windows because of a bug in how FileChannel.read is implemented in Sun's JRE. Inside of the implementation the position is apparently synchronized. See here for details. NOTE: Accessing this class either directly or indirectly from a thread while it's interrupted can close the underlying file descriptor immediately if at the same time the thread is blocked on IO. The file descriptor will remain closed and subsequent access to NIOFSDirectory will throw a . If your application uses either or you should use SimpleFSDirectory in favor of NIOFSDirectory . NIOFSDirectory.NIOFSIndexInput Reads bytes with the Read(FileStream, ByteBuffer, Int64) extension method for . NoLockFactory Use this LockFactory to disable locking entirely. Only one instance of this lock is created. You should call GetNoLockFactory() to get the instance. NRTCachingDirectory Wraps a RAMDirectory around any provided delegate directory, to be used during NRT search. This class is likely only useful in a near-real-time context, where indexing rate is lowish but reopen rate is highish, resulting in many tiny files being written. This directory keeps such segments (as well as the segments produced by merging them, as long as they are small enough), in RAM. This is safe to use: when your app calls Commit() , all cached files will be flushed from the cached and sync'd. Here's a simple example usage: Directory fsDir = FSDirectory.Open(new DirectoryInfo(\"/path/to/index\")); NRTCachingDirectory cachedFSDir = new NRTCachingDirectory(fsDir, 5.0, 60.0); IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_48, analyzer); IndexWriter writer = new IndexWriter(cachedFSDir, conf); This will cache all newly flushed segments, all merges whose expected segment size is <= 5 MB, unless the net cached bytes exceeds 60 MB at which point all writes will not be cached (until the net bytes falls below 60 MB). This is a Lucene.NET EXPERIMENTAL API, use at your own risk OutputStreamDataOutput A DataOutput wrapping a plain . RAMDirectory A memory-resident Directory implementation. Locking implementation is by default the SingleInstanceLockFactory but can be changed with SetLockFactory(LockFactory) . Warning: This class is not intended to work with huge indexes. Everything beyond several hundred megabytes will waste resources (GC cycles), because it uses an internal buffer size of 1024 bytes, producing millions of byte[1024] arrays. This class is optimized for small memory-resident indexes. It also has bad concurrency on multithreaded environments. It is recommended to materialize large indexes on disk and use MMapDirectory , which is a high-performance directory implementation working directly on the file system cache of the operating system, so copying data to heap space is not useful. RAMFile Represents a file in RAM as a list of byte[] buffers. This is a Lucene.NET INTERNAL API, use at your own risk RAMInputStream A memory-resident IndexInput implementation. This is a Lucene.NET INTERNAL API, use at your own risk RAMOutputStream A memory-resident IndexOutput implementation. This is a Lucene.NET INTERNAL API, use at your own risk RateLimitedDirectoryWrapper A Directory wrapper that allows IndexOutput rate limiting using IO context ( IOContext.UsageContext ) specific rate limiters ( RateLimiter ). This is a Lucene.NET EXPERIMENTAL API, use at your own risk RateLimiter Abstract base class to rate limit IO. Typically implementations are shared across multiple IndexInput s or IndexOutput s (for example those involved all merging). Those IndexInput s and IndexOutput s would call Pause(Int64) whenever they want to read bytes or write bytes. RateLimiter.SimpleRateLimiter Simple class to rate limit IO. SimpleFSDirectory A straightforward implementation of FSDirectory using . However, this class has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. It's usually better to use NIOFSDirectory or MMapDirectory instead. SimpleFSDirectory.SimpleFSIndexInput Reads bytes with followed by . SimpleFSLockFactory Implements LockFactory using (writes the file with UTF8 encoding and no byte order mark). Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change to all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that this or any other LockFactory is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . SingleInstanceLockFactory Implements LockFactory for a single in-process instance, meaning all locking will take place through this one instance. Only use this LockFactory when you are certain all IndexReader s and IndexWriter s for a given index are running against a single shared in-process Directory instance. This is currently the default locking for RAMDirectory . TrackingDirectoryWrapper A delegating Directory that records which files were written to and deleted. VerifyingLockFactory A LockFactory that wraps another LockFactory and verifies that each lock obtain/release is \"correct\" (never results in two processes holding the lock at the same time). It does this by contacting an external server ( LockVerifyServer ) to assert that at most one process holds the lock at a time. To use this, you should also run LockVerifyServer on the host & port matching what you pass to the constructor. Enums IOContext.UsageContext IOContext.UsageContext is a enumeration which specifies the context in which the Directory is being used for. NOTE: This was Context in Lucene"
  },
  "api/Lucene.Net/Lucene.Net.Store.IndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.IndexInput.html",
    "title": "Class IndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexInput Abstract base class for input from a file in a Directory . A random-access input stream. Used for all Lucene index input operations. IndexInput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). To allow multithreaded use, every IndexInput instance must be cloned before used in another thread. Subclasses must therefore implement Clone() , returning a new IndexInput which operates on the same underlying resource, but positioned independently. Lucene never closes cloned IndexInput s, it will only do this on the original one. The original instance must take care that cloned instances throw when the original one is closed. Inheritance System.Object DataInput IndexInput BufferedIndexInput ByteBufferIndexInput ChecksumIndexInput RAMInputStream Implements IDisposable Inherited Members DataInput.ReadByte() DataInput.ReadBytes(Byte[], Int32, Int32) DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class IndexInput : DataInput, IDisposable Constructors | Improve this Doc View Source IndexInput(String) resourceDescription should be a non-null, opaque string describing this resource; it's returned from ToString() . Declaration protected IndexInput(string resourceDescription) Parameters Type Name Description System.String resourceDescription Properties | Improve this Doc View Source Length The number of bytes in the file. Declaration public abstract long Length { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Clone() Returns a clone of this stream. Clones of a stream access the same data, and are positioned at the same point as the stream they were cloned from. Expert: Subclasses must ensure that clones may be positioned at different points in the input from each other and from the stream they were cloned from. Warning: Lucene never closes cloned IndexInput s, it will only do this on the original one. The original instance must take care that cloned instances throw when the original one is closed. Declaration public override object Clone() Returns Type Description System.Object Overrides DataInput.Clone() | Improve this Doc View Source Dispose() Closes the stream to further operations. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Closes the stream to further operations. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetFilePointer() Returns the current position in this file, where the next read will occur. Declaration public abstract long GetFilePointer() Returns Type Description System.Int64 See Also Seek(Int64) | Improve this Doc View Source Seek(Int64) Sets current position in this file, where the next read will occur. Declaration public abstract void Seek(long pos) Parameters Type Name Description System.Int64 pos See Also GetFilePointer() | Improve this Doc View Source ToString() Returns the resourceDescription that was passed into the constructor. Declaration public override string ToString() Returns Type Description System.String Implements IDisposable See Also Directory"
  },
  "api/Lucene.Net/Lucene.Net.Store.IndexOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.IndexOutput.html",
    "title": "Class IndexOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexOutput Abstract base class for output to a file in a Directory . A random-access output stream. Used for all Lucene index output operations. IndexOutput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). Inheritance System.Object DataOutput IndexOutput BufferedIndexOutput RAMOutputStream Implements IDisposable Inherited Members DataOutput.WriteByte(Byte) DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteBytes(Byte[], Int32, Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class IndexOutput : DataOutput, IDisposable Properties | Improve this Doc View Source Checksum Returns the current checksum of bytes written so far Declaration public abstract long Checksum { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Length Gets or Sets the file length. By default, this property's setter does nothing (it's optional for a Directory to implement it). But, certain Directory implementations (for example FSDirectory ) can use this to inform the underlying IO system to pre-allocate the file to the specified size. If the length is longer than the current file length, the bytes added to the file are undefined. Otherwise the file is truncated. Declaration public virtual long Length { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Dispose() Closes this stream to further operations. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Closes this stream to further operations. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Flush() Forces any buffered output to be written. Declaration public abstract void Flush() | Improve this Doc View Source GetFilePointer() Returns the current position in this file, where the next write will occur. Declaration public abstract long GetFilePointer() Returns Type Description System.Int64 See Also Seek(Int64) | Improve this Doc View Source Seek(Int64) Sets current position in this file, where the next write will occur. Declaration public abstract void Seek(long pos) Parameters Type Name Description System.Int64 pos See Also GetFilePointer() Implements IDisposable See Also Directory IndexInput"
  },
  "api/Lucene.Net/Lucene.Net.Store.InputStreamDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.InputStreamDataInput.html",
    "title": "Class InputStreamDataInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InputStreamDataInput A DataInput wrapping a plain . Inheritance System.Object DataInput InputStreamDataInput Implements IDisposable Inherited Members DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.Clone() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class InputStreamDataInput : DataInput, IDisposable Constructors | Improve this Doc View Source InputStreamDataInput(Stream) Declaration public InputStreamDataInput(Stream is) Parameters Type Name Description Stream is Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.IOContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.IOContext.html",
    "title": "Class IOContext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IOContext IOContext holds additional details on the merge/search context. A IOContext object can never be initialized as null as passed as a parameter to either OpenInput(String, IOContext) or CreateOutput(String, IOContext) Inheritance System.Object IOContext Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class IOContext : object Constructors | Improve this Doc View Source IOContext() Declaration public IOContext() | Improve this Doc View Source IOContext(FlushInfo) Declaration public IOContext(FlushInfo flushInfo) Parameters Type Name Description FlushInfo flushInfo | Improve this Doc View Source IOContext(IOContext, Boolean) This constructor is used to initialize a IOContext instance with a new value for the ReadOnce property. Declaration public IOContext(IOContext ctxt, bool readOnce) Parameters Type Name Description IOContext ctxt IOContext object whose information is used to create the new instance except the ReadOnce property. System.Boolean readOnce The new IOContext object will use this value for ReadOnce . | Improve this Doc View Source IOContext(IOContext.UsageContext) Declaration public IOContext(IOContext.UsageContext context) Parameters Type Name Description IOContext.UsageContext context | Improve this Doc View Source IOContext(MergeInfo) Declaration public IOContext(MergeInfo mergeInfo) Parameters Type Name Description MergeInfo mergeInfo Fields | Improve this Doc View Source DEFAULT Declaration public static readonly IOContext DEFAULT Field Value Type Description IOContext | Improve this Doc View Source READ Declaration public static readonly IOContext READ Field Value Type Description IOContext | Improve this Doc View Source READ_ONCE Declaration public static readonly IOContext READ_ONCE Field Value Type Description IOContext Properties | Improve this Doc View Source Context A IOContext.UsageContext setting Declaration public IOContext.UsageContext Context { get; } Property Value Type Description IOContext.UsageContext | Improve this Doc View Source FlushInfo Declaration public FlushInfo FlushInfo { get; } Property Value Type Description FlushInfo | Improve this Doc View Source MergeInfo Declaration public MergeInfo MergeInfo { get; } Property Value Type Description MergeInfo | Improve this Doc View Source ReadOnce Declaration public bool ReadOnce { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Store.IOContext.UsageContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.IOContext.UsageContext.html",
    "title": "Enum IOContext.UsageContext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum IOContext.UsageContext IOContext.UsageContext is a enumeration which specifies the context in which the Directory is being used for. NOTE: This was Context in Lucene Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public enum UsageContext : int Fields Name Description DEFAULT FLUSH MERGE READ"
  },
  "api/Lucene.Net/Lucene.Net.Store.Lock.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.Lock.html",
    "title": "Class Lock | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lock An interprocess mutex lock. Typical use might look like: var result = Lock.With.NewAnonymous<string>( @lock: directory.MakeLock(\"my.lock\"), lockWaitTimeout: Lock.LOCK_OBTAIN_WAIT_FOREVER, doBody: () => { //... code to execute while locked ... return \"the result\"; }).Run(); Inheritance System.Object Lock Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class Lock : IDisposable Fields | Improve this Doc View Source LOCK_OBTAIN_WAIT_FOREVER Pass this value to Obtain(Int64) to try forever to obtain the lock. Declaration public const long LOCK_OBTAIN_WAIT_FOREVER = null Field Value Type Description System.Int64 | Improve this Doc View Source LOCK_POLL_INTERVAL How long Obtain(Int64) waits, in milliseconds, in between attempts to acquire the lock. Declaration public static long LOCK_POLL_INTERVAL Field Value Type Description System.Int64 Properties | Improve this Doc View Source FailureReason If a lock obtain called, this failureReason may be set with the \"root cause\" as to why the lock was not obtained. Declaration protected Exception FailureReason { get; set; } Property Value Type Description Exception Methods | Improve this Doc View Source Dispose() Releases exclusive access. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Releases exclusive access. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source IsLocked() Returns true if the resource is currently locked. Note that one must still call Obtain() before using the resource. Declaration public abstract bool IsLocked() Returns Type Description System.Boolean | Improve this Doc View Source NewAnonymous<T>(Lock, Int32, Func<T>) Creates a new instance with the ability to specify the DoBody() method through the doBody argument Simple example: var result = Lock.With.NewAnonymous<string>( @lock: directory.MakeLock(\"my.lock\"), lockWaitTimeout: Lock.LOCK_OBTAIN_WAIT_FOREVER, doBody: () => { //... code to execute while locked ... return \"the result\"; }).Run(); The result of the operation is the value that is returned from doBody (i.e. () => { return \"the result\"; }). The type of determines the return type of the operation. Declaration public static Lock.With<T> NewAnonymous<T>(Lock lock, int lockWaitTimeout, Func<T> doBody) Parameters Type Name Description Lock lock the Lock instance to use System.Int32 lockWaitTimeout length of time to wait in milliseconds or LOCK_OBTAIN_WAIT_FOREVER to retry forever Func <T> doBody a delegate method that Returns Type Description Lock.With <T> The value that is returned from the doBody delegate method (i.e. () => { return theObject; }) Type Parameters Name Description T | Improve this Doc View Source Obtain() Attempts to obtain exclusive access and immediately return upon success or failure. Use Dispose() to release the lock. Declaration public abstract bool Obtain() Returns Type Description System.Boolean true iff exclusive access is obtained | Improve this Doc View Source Obtain(Int64) Attempts to obtain an exclusive lock within amount of time given. Polls once per LOCK_POLL_INTERVAL (currently 1000) milliseconds until lockWaitTimeout is passed. Declaration public bool Obtain(long lockWaitTimeout) Parameters Type Name Description System.Int64 lockWaitTimeout length of time to wait in milliseconds or LOCK_OBTAIN_WAIT_FOREVER to retry forever Returns Type Description System.Boolean true if lock was obtained Exceptions Type Condition LockObtainFailedException if lock wait times out See Also MakeLock ( System.String )"
  },
  "api/Lucene.Net/Lucene.Net.Store.Lock.With-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.Lock.With-1.html",
    "title": "Class Lock.With<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lock.With<T> Utility class for executing code with exclusive access. Inheritance System.Object Lock.With<T> Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class With<T> : object Type Parameters Name Description T Constructors | Improve this Doc View Source With(Lock, Int64) Constructs an executor that will grab the named lock . Declaration public With(Lock lock, long lockWaitTimeout) Parameters Type Name Description Lock lock the Lock instance to use System.Int64 lockWaitTimeout length of time to wait in milliseconds or LOCK_OBTAIN_WAIT_FOREVER to retry forever Methods | Improve this Doc View Source DoBody() Code to execute with exclusive access. Declaration protected abstract T DoBody() Returns Type Description T | Improve this Doc View Source Run() Calls DoBody() while lock is obtained. Blocks if lock cannot be obtained immediately. Retries to obtain lock once per second until it is obtained, or until it has tried ten times. Lock is released when DoBody() exits. Declaration public virtual T Run() Returns Type Description T Exceptions Type Condition LockObtainFailedException if lock could not be obtained"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockFactory.html",
    "title": "Class LockFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LockFactory Base class for Locking implementation. Directory uses instances of this class to implement locking. Lucene uses NativeFSLockFactory by default for FSDirectory -based index directories. Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change on all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that some LockFactory implementation is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . Inheritance System.Object LockFactory FSLockFactory NoLockFactory SingleInstanceLockFactory VerifyingLockFactory Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class LockFactory : object Fields | Improve this Doc View Source m_lockPrefix Declaration protected string m_lockPrefix Field Value Type Description System.String Properties | Improve this Doc View Source LockPrefix Gets or Sets the prefix in use for all locks created in this LockFactory . This is normally called once, when a Directory gets this LockFactory instance. However, you can also call this (after this instance is assigned to a Directory ) to override the prefix in use. This is helpful if you're running Lucene on machines that have different mount points for the same shared directory. Declaration public virtual string LockPrefix { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source ClearLock(String) Attempt to clear (forcefully unlock and remove) the specified lock. Only call this at a time when you are certain this lock is no longer in use. Declaration public abstract void ClearLock(string lockName) Parameters Type Name Description System.String lockName name of the lock to be cleared. | Improve this Doc View Source MakeLock(String) Return a new Lock instance identified by lockName . Declaration public abstract Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName name of the lock to be created. Returns Type Description Lock See Also LockVerifyServer LockStressTest VerifyingLockFactory"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockObtainFailedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockObtainFailedException.html",
    "title": "Class LockObtainFailedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LockObtainFailedException This exception is thrown when the write.lock could not be acquired. This happens when a writer tries to open an index that another writer already has open. Inheritance System.Object LockObtainFailedException Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class LockObtainFailedException : IOException Constructors | Improve this Doc View Source LockObtainFailedException(String) Declaration public LockObtainFailedException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source LockObtainFailedException(String, Exception) Declaration public LockObtainFailedException(string message, Exception ex) Parameters Type Name Description System.String message Exception ex See Also Obtain(Int64)"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockReleaseFailedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockReleaseFailedException.html",
    "title": "Class LockReleaseFailedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LockReleaseFailedException This exception is thrown when the write.lock could not be released. Inheritance System.Object LockReleaseFailedException Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class LockReleaseFailedException : IOException Constructors | Improve this Doc View Source LockReleaseFailedException(String) Declaration public LockReleaseFailedException(string message) Parameters Type Name Description System.String message See Also Dispose()"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockStressTest.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockStressTest.html",
    "title": "Class LockStressTest | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LockStressTest Simple standalone tool that forever acquires & releases a lock using a specific LockFactory . Run without any args to see usage. Inheritance System.Object LockStressTest Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class LockStressTest : object Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args See Also VerifyingLockFactory LockVerifyServer"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockVerifyServer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockVerifyServer.html",
    "title": "Class LockVerifyServer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LockVerifyServer Simple standalone server that must be running when you use VerifyingLockFactory . This server simply verifies at most one process holds the lock at a time. Run without any args to see usage. Inheritance System.Object LockVerifyServer Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class LockVerifyServer : object Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args See Also VerifyingLockFactory LockStressTest"
  },
  "api/Lucene.Net/Lucene.Net.Store.MergeInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.MergeInfo.html",
    "title": "Class MergeInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergeInfo A MergeInfo provides information required for a MERGE context. It is used as part of an IOContext in case of MERGE context. Inheritance System.Object MergeInfo Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class MergeInfo : object Constructors | Improve this Doc View Source MergeInfo(Int32, Int64, Boolean, Int32) Creates a new MergeInfo instance from the values required for a MERGE IOContext context. These values are only estimates and are not the actual values. Declaration public MergeInfo(int totalDocCount, long estimatedMergeBytes, bool isExternal, int mergeMaxNumSegments) Parameters Type Name Description System.Int32 totalDocCount System.Int64 estimatedMergeBytes System.Boolean isExternal System.Int32 mergeMaxNumSegments Properties | Improve this Doc View Source EstimatedMergeBytes Declaration public long EstimatedMergeBytes { get; } Property Value Type Description System.Int64 | Improve this Doc View Source IsExternal Declaration public bool IsExternal { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MergeMaxNumSegments Declaration public int MergeMaxNumSegments { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalDocCount Declaration public int TotalDocCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Store.MMapDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.MMapDirectory.html",
    "title": "Class MMapDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MMapDirectory File-based Directory implementation that uses for reading, and FSDirectory.FSIndexOutput for writing. NOTE : memory mapping uses up a portion of the virtual memory address space in your process equal to the size of the file being mapped. Before using this class, be sure your have plenty of virtual address space, e.g. by using a 64 bit runtime, or a 32 bit runtime with indexes that are guaranteed to fit within the address space. On 32 bit platforms also consult MMapDirectory(DirectoryInfo, LockFactory, Int32) if you have problems with mmap failing because of fragmented address space. If you get an , it is recommended to reduce the chunk size, until it works. NOTE: Accessing this class either directly or indirectly from a thread while it's interrupted can close the underlying channel immediately if at the same time the thread is blocked on IO. The channel will remain closed and subsequent access to MMapDirectory will throw a . Inheritance System.Object Directory BaseDirectory FSDirectory MMapDirectory Inherited Members FSDirectory.DEFAULT_READ_CHUNK_SIZE FSDirectory.m_directory FSDirectory.Open(DirectoryInfo) FSDirectory.Open(String) FSDirectory.Open(DirectoryInfo, LockFactory) FSDirectory.Open(String, LockFactory) FSDirectory.SetLockFactory(LockFactory) FSDirectory.ListAll(DirectoryInfo) FSDirectory.ListAll() FSDirectory.FileExists(String) FSDirectory.FileLength(String) FSDirectory.DeleteFile(String) FSDirectory.CreateOutput(String, IOContext) FSDirectory.EnsureCanWrite(String) FSDirectory.OnIndexOutputClosed(FSDirectory.FSIndexOutput) FSDirectory.Sync(ICollection<String>) FSDirectory.GetLockID() FSDirectory.Dispose(Boolean) FSDirectory.Directory FSDirectory.ToString() FSDirectory.ReadChunkSize BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class MMapDirectory : FSDirectory Constructors | Improve this Doc View Source MMapDirectory(DirectoryInfo) Create a new MMapDirectory for the named location and NativeFSLockFactory . Declaration public MMapDirectory(DirectoryInfo path) Parameters Type Name Description DirectoryInfo path the path of the directory | Improve this Doc View Source MMapDirectory(DirectoryInfo, LockFactory) Create a new MMapDirectory for the named location. Declaration public MMapDirectory(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); | Improve this Doc View Source MMapDirectory(DirectoryInfo, LockFactory, Int32) Create a new MMapDirectory for the named location, specifying the maximum chunk size used for memory mapping. Declaration public MMapDirectory(DirectoryInfo path, LockFactory lockFactory, int maxChunkSize) Parameters Type Name Description DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); System.Int32 maxChunkSize maximum chunk size (default is 1 GiBytes for 64 bit runtimes and 256 MiBytes for 32 bit runtimes) used for memory mapping. Especially on 32 bit platform, the address space can be very fragmented, so large index files cannot be mapped. Using a lower chunk size makes the directory implementation a little bit slower (as the correct chunk may be resolved on lots of seeks) but the chance is higher that mmap does not fail. On 64 bit platforms, this parameter should always be 1 << 30 , as the address space is big enough. Please note: The chunk size is always rounded down to a power of 2. | Improve this Doc View Source MMapDirectory(String) Create a new MMapDirectory for the named location and NativeFSLockFactory . LUCENENET specific overload for convenience using string instead of . Declaration public MMapDirectory(string path) Parameters Type Name Description System.String path the path of the directory | Improve this Doc View Source MMapDirectory(String, LockFactory) Create a new MMapDirectory for the named location. LUCENENET specific overload for convenience using string instead of . Declaration public MMapDirectory(string path, LockFactory lockFactory) Parameters Type Name Description System.String path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); | Improve this Doc View Source MMapDirectory(String, LockFactory, Int32) Create a new MMapDirectory for the named location, specifying the maximum chunk size used for memory mapping. LUCENENET specific overload for convenience using string instead of . Declaration public MMapDirectory(string path, LockFactory lockFactory, int maxChunkSize) Parameters Type Name Description System.String path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); System.Int32 maxChunkSize maximum chunk size (default is 1 GiBytes for 64 bit runtimes and 256 MiBytes for 32 bit runtimes) used for memory mapping. Especially on 32 bit platform, the address space can be very fragmented, so large index files cannot be mapped. Using a lower chunk size makes the directory implementation a little bit slower (as the correct chunk may be resolved on lots of seeks) but the chance is higher that mmap does not fail. On 64 bit platforms, this parameter should always be 1 << 30 , as the address space is big enough. Please note: The chunk size is always rounded down to a power of 2. Fields | Improve this Doc View Source DEFAULT_MAX_BUFF Default max chunk size. Declaration public static readonly int DEFAULT_MAX_BUFF Field Value Type Description System.Int32 See Also MMapDirectory(DirectoryInfo, LockFactory, Int32) Properties | Improve this Doc View Source MaxChunkSize Returns the current mmap chunk size. Declaration public int MaxChunkSize { get; } Property Value Type Description System.Int32 See Also MMapDirectory(DirectoryInfo, LockFactory, Int32) Methods | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source OpenInput(String, IOContext) Creates an IndexInput for the file with the given name. Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext)"
  },
  "api/Lucene.Net/Lucene.Net.Store.MMapDirectory.MMapIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.MMapDirectory.MMapIndexInput.html",
    "title": "Class MMapDirectory.MMapIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MMapDirectory.MMapIndexInput Inheritance System.Object DataInput IndexInput ByteBufferIndexInput MMapDirectory.MMapIndexInput Implements IDisposable Inherited Members ByteBufferIndexInput.ReadByte() ByteBufferIndexInput.ReadBytes(Byte[], Int32, Int32) ByteBufferIndexInput.ReadInt16() ByteBufferIndexInput.ReadInt32() ByteBufferIndexInput.ReadInt64() ByteBufferIndexInput.GetFilePointer() ByteBufferIndexInput.Seek(Int64) ByteBufferIndexInput.Length ByteBufferIndexInput.Clone() ByteBufferIndexInput.Slice(String, Int64, Int64) ByteBufferIndexInput.ToString() IndexInput.Dispose() DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadVInt32() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public sealed class MMapIndexInput : ByteBufferIndexInput, IDisposable Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override sealed void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ByteBufferIndexInput.Dispose(Boolean) | Improve this Doc View Source FreeBuffer(ByteBuffer) Try to unmap the buffer, this method silently fails if no support for that in the runtime. On Windows, this leads to the fact, that mmapped files cannot be modified or deleted. Declaration protected override void FreeBuffer(ByteBuffer buffer) Parameters Type Name Description ByteBuffer buffer Overrides ByteBufferIndexInput.FreeBuffer(ByteBuffer) Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.NativeFSLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NativeFSLockFactory.html",
    "title": "Class NativeFSLockFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NativeFSLockFactory Implements LockFactory using native OS file locks. For NFS based access to an index, it's recommended that you try SimpleFSLockFactory first and work around the one limitation that a lock file could be left when the runtime exits abnormally. The primary benefit of NativeFSLockFactory is that locks (not the lock file itsself) will be properly removed (by the OS) if the runtime has an abnormal exit. Note that, unlike SimpleFSLockFactory , the existence of leftover lock files in the filesystem is fine because the OS will free the locks held against these files even though the files still remain. Lucene will never actively remove the lock files, so although you see them, the index may not be locked. Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change on all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that this or any other LockFactory is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . Inheritance System.Object LockFactory FSLockFactory NativeFSLockFactory Inherited Members FSLockFactory.m_lockDir FSLockFactory.SetLockDir(DirectoryInfo) FSLockFactory.LockDir FSLockFactory.ToString() LockFactory.m_lockPrefix LockFactory.LockPrefix Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class NativeFSLockFactory : FSLockFactory Constructors | Improve this Doc View Source NativeFSLockFactory() Create a NativeFSLockFactory instance, with null (unset) lock directory. When you pass this factory to a FSDirectory subclass, the lock directory is automatically set to the directory itself. Be sure to create one instance for each directory your create! Declaration public NativeFSLockFactory() | Improve this Doc View Source NativeFSLockFactory(DirectoryInfo) Create a NativeFSLockFactory instance, storing lock files into the specified lockDir Declaration public NativeFSLockFactory(DirectoryInfo lockDir) Parameters Type Name Description DirectoryInfo lockDir where lock files are created. | Improve this Doc View Source NativeFSLockFactory(String) Create a NativeFSLockFactory instance, storing lock files into the specified lockDirName Declaration public NativeFSLockFactory(string lockDirName) Parameters Type Name Description System.String lockDirName where lock files are created. Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) See Also LockFactory"
  },
  "api/Lucene.Net/Lucene.Net.Store.NIOFSDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NIOFSDirectory.html",
    "title": "Class NIOFSDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NIOFSDirectory An FSDirectory implementation that uses 's positional read, which allows multiple threads to read from the same file without synchronizing. This class only uses when reading; writing is achieved with FSDirectory.FSIndexOutput . NOTE : NIOFSDirectory is not recommended on Windows because of a bug in how FileChannel.read is implemented in Sun's JRE. Inside of the implementation the position is apparently synchronized. See here for details. NOTE: Accessing this class either directly or indirectly from a thread while it's interrupted can close the underlying file descriptor immediately if at the same time the thread is blocked on IO. The file descriptor will remain closed and subsequent access to NIOFSDirectory will throw a . If your application uses either or you should use SimpleFSDirectory in favor of NIOFSDirectory . Inheritance System.Object Directory BaseDirectory FSDirectory NIOFSDirectory Inherited Members FSDirectory.DEFAULT_READ_CHUNK_SIZE FSDirectory.m_directory FSDirectory.Open(DirectoryInfo) FSDirectory.Open(String) FSDirectory.Open(DirectoryInfo, LockFactory) FSDirectory.Open(String, LockFactory) FSDirectory.SetLockFactory(LockFactory) FSDirectory.ListAll(DirectoryInfo) FSDirectory.ListAll() FSDirectory.FileExists(String) FSDirectory.FileLength(String) FSDirectory.DeleteFile(String) FSDirectory.CreateOutput(String, IOContext) FSDirectory.EnsureCanWrite(String) FSDirectory.OnIndexOutputClosed(FSDirectory.FSIndexOutput) FSDirectory.Sync(ICollection<String>) FSDirectory.GetLockID() FSDirectory.Dispose(Boolean) FSDirectory.Directory FSDirectory.ToString() FSDirectory.ReadChunkSize BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class NIOFSDirectory : FSDirectory Constructors | Improve this Doc View Source NIOFSDirectory(DirectoryInfo) Create a new NIOFSDirectory for the named location and NativeFSLockFactory . Declaration public NIOFSDirectory(DirectoryInfo path) Parameters Type Name Description DirectoryInfo path the path of the directory | Improve this Doc View Source NIOFSDirectory(DirectoryInfo, LockFactory) Create a new NIOFSDirectory for the named location. Declaration public NIOFSDirectory(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); | Improve this Doc View Source NIOFSDirectory(String) Create a new NIOFSDirectory for the named location and NativeFSLockFactory . LUCENENET specific overload for convenience using string instead of . Declaration public NIOFSDirectory(string path) Parameters Type Name Description System.String path the path of the directory | Improve this Doc View Source NIOFSDirectory(String, LockFactory) Create a new NIOFSDirectory for the named location. LUCENENET specific overload for convenience using string instead of . Declaration public NIOFSDirectory(string path, LockFactory lockFactory) Parameters Type Name Description System.String path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Methods | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source OpenInput(String, IOContext) Creates an IndexInput for the file with the given name. Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext)"
  },
  "api/Lucene.Net/Lucene.Net.Store.NIOFSDirectory.NIOFSIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NIOFSDirectory.NIOFSIndexInput.html",
    "title": "Class NIOFSDirectory.NIOFSIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NIOFSDirectory.NIOFSIndexInput Reads bytes with the Read(FileStream, ByteBuffer, Int64) extension method for . Inheritance System.Object DataInput IndexInput BufferedIndexInput NIOFSDirectory.NIOFSIndexInput Implements IDisposable Inherited Members BufferedIndexInput.BUFFER_SIZE BufferedIndexInput.MERGE_BUFFER_SIZE BufferedIndexInput.m_buffer BufferedIndexInput.ReadByte() BufferedIndexInput.SetBufferSize(Int32) BufferedIndexInput.BufferSize BufferedIndexInput.ReadBytes(Byte[], Int32, Int32) BufferedIndexInput.ReadBytes(Byte[], Int32, Int32, Boolean) BufferedIndexInput.ReadInt16() BufferedIndexInput.ReadInt32() BufferedIndexInput.ReadInt64() BufferedIndexInput.ReadVInt32() BufferedIndexInput.ReadVInt64() BufferedIndexInput.GetFilePointer() BufferedIndexInput.Seek(Int64) BufferedIndexInput.FlushBuffer(IndexOutput, Int64) BufferedIndexInput.GetBufferSize(IOContext) IndexInput.Dispose() IndexInput.ToString() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax protected class NIOFSIndexInput : BufferedIndexInput, IDisposable Constructors | Improve this Doc View Source NIOFSIndexInput(String, FileStream, IOContext) Declaration public NIOFSIndexInput(string resourceDesc, FileStream fc, IOContext context) Parameters Type Name Description System.String resourceDesc FileStream fc IOContext context | Improve this Doc View Source NIOFSIndexInput(String, FileStream, Int64, Int64, Int32) Declaration public NIOFSIndexInput(string resourceDesc, FileStream fc, long off, long length, int bufferSize) Parameters Type Name Description System.String resourceDesc FileStream fc System.Int64 off System.Int64 length System.Int32 bufferSize Fields | Improve this Doc View Source m_channel the file channel we will read from Declaration protected readonly FileStream m_channel Field Value Type Description FileStream | Improve this Doc View Source m_end end offset (start+length) Declaration protected readonly long m_end Field Value Type Description System.Int64 | Improve this Doc View Source m_off start offset: non-zero in the slice case Declaration protected readonly long m_off Field Value Type Description System.Int64 Properties | Improve this Doc View Source Length Declaration public override sealed long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides BufferedIndexInput.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source NewBuffer(Byte[]) Declaration protected override void NewBuffer(byte[] newBuffer) Parameters Type Name Description System.Byte [] newBuffer Overrides BufferedIndexInput.NewBuffer(Byte[]) | Improve this Doc View Source ReadInternal(Byte[], Int32, Int32) Declaration protected override void ReadInternal(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides BufferedIndexInput.ReadInternal(Byte[], Int32, Int32) | Improve this Doc View Source SeekInternal(Int64) Declaration protected override void SeekInternal(long pos) Parameters Type Name Description System.Int64 pos Overrides BufferedIndexInput.SeekInternal(Int64) Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.NoLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NoLockFactory.html",
    "title": "Class NoLockFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoLockFactory Use this LockFactory to disable locking entirely. Only one instance of this lock is created. You should call GetNoLockFactory() to get the instance. Inheritance System.Object LockFactory NoLockFactory Inherited Members LockFactory.m_lockPrefix LockFactory.LockPrefix Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class NoLockFactory : LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source GetNoLockFactory() Declaration public static NoLockFactory GetNoLockFactory() Returns Type Description NoLockFactory | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) See Also LockFactory"
  },
  "api/Lucene.Net/Lucene.Net.Store.NRTCachingDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NRTCachingDirectory.html",
    "title": "Class NRTCachingDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NRTCachingDirectory Wraps a RAMDirectory around any provided delegate directory, to be used during NRT search. This class is likely only useful in a near-real-time context, where indexing rate is lowish but reopen rate is highish, resulting in many tiny files being written. This directory keeps such segments (as well as the segments produced by merging them, as long as they are small enough), in RAM. This is safe to use: when your app calls Commit() , all cached files will be flushed from the cached and sync'd. Here's a simple example usage: Directory fsDir = FSDirectory.Open(new DirectoryInfo(\"/path/to/index\")); NRTCachingDirectory cachedFSDir = new NRTCachingDirectory(fsDir, 5.0, 60.0); IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_48, analyzer); IndexWriter writer = new IndexWriter(cachedFSDir, conf); This will cache all newly flushed segments, all merges whose expected segment size is <= 5 MB, unless the net cached bytes exceeds 60 MB at which point all writes will not be cached (until the net bytes falls below 60 MB). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory NRTCachingDirectory Inherited Members Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) Directory.EnsureOpen() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class NRTCachingDirectory : Directory Constructors | Improve this Doc View Source NRTCachingDirectory(Directory, Double, Double) We will cache a newly created output if 1) it's a flush or a merge and the estimated size of the merged segment is <= maxMergeSizeMB, and 2) the total cached bytes is <= maxCachedMB Declaration public NRTCachingDirectory(Directory delegate, double maxMergeSizeMB, double maxCachedMB) Parameters Type Name Description Directory delegate System.Double maxMergeSizeMB System.Double maxCachedMB Properties | Improve this Doc View Source Delegate Declaration public virtual Directory Delegate { get; } Property Value Type Description Directory | Improve this Doc View Source LockFactory Declaration public override LockFactory LockFactory { get; } Property Value Type Description LockFactory Overrides Directory.LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string name) Parameters Type Name Description System.String name Overrides Directory.ClearLock(String) | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source DeleteFile(String) Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Dispose this directory, which flushes any cached files to the delegate and then disposes the delegate. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source DoCacheWrite(String, IOContext) Subclass can override this to customize logic; return true if this file should be written to the RAMDirectory . Declaration protected virtual bool DoCacheWrite(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description System.Boolean | Improve this Doc View Source FileExists(String) Declaration public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) | Improve this Doc View Source GetLockID() Declaration public override string GetLockID() Returns Type Description System.String Overrides Directory.GetLockID() | Improve this Doc View Source GetSizeInBytes() Returns how many bytes are being used by the RAMDirectory cache Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source ListAll() Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source ListCachedFiles() Declaration public virtual string[] ListCachedFiles() Returns Type Description System.String [] | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string name) Parameters Type Name Description System.String name Returns Type Description Lock Overrides Directory.MakeLock(String) | Improve this Doc View Source OpenInput(String, IOContext) Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source SetLockFactory(LockFactory) Declaration public override void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory Overrides Directory.SetLockFactory(LockFactory) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> fileNames) Parameters Type Name Description ICollection < System.String > fileNames Overrides Directory.Sync(ICollection<String>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Directory.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Store.OutputStreamDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.OutputStreamDataOutput.html",
    "title": "Class OutputStreamDataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OutputStreamDataOutput A DataOutput wrapping a plain . Inheritance System.Object DataOutput OutputStreamDataOutput Implements IDisposable Inherited Members DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class OutputStreamDataOutput : DataOutput, IDisposable Constructors | Improve this Doc View Source OutputStreamDataOutput(Stream) Declaration public OutputStreamDataOutput(Stream os) Parameters Type Name Description Stream os Methods | Improve this Doc View Source Dispose() Declaration public virtual void Dispose() | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.RAMDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RAMDirectory.html",
    "title": "Class RAMDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RAMDirectory A memory-resident Directory implementation. Locking implementation is by default the SingleInstanceLockFactory but can be changed with SetLockFactory(LockFactory) . Warning: This class is not intended to work with huge indexes. Everything beyond several hundred megabytes will waste resources (GC cycles), because it uses an internal buffer size of 1024 bytes, producing millions of byte[1024] arrays. This class is optimized for small memory-resident indexes. It also has bad concurrency on multithreaded environments. It is recommended to materialize large indexes on disk and use MMapDirectory , which is a high-performance directory implementation working directly on the file system cache of the operating system, so copying data to heap space is not useful. Inheritance System.Object Directory BaseDirectory RAMDirectory Inherited Members BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.SetLockFactory(LockFactory) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.ToString() Directory.Copy(Directory, String, String, IOContext) Directory.CreateSlicer(String, IOContext) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class RAMDirectory : BaseDirectory Constructors | Improve this Doc View Source RAMDirectory() Constructs an empty Directory . Declaration public RAMDirectory() | Improve this Doc View Source RAMDirectory(Directory, IOContext) Creates a new RAMDirectory instance from a different Directory implementation. This can be used to load a disk-based index into memory. Warning: this class is not intended to work with huge indexes. Everything beyond several hundred megabytes will waste resources (GC cycles), because it uses an internal buffer size of 1024 bytes, producing millions of byte[1024] arrays. this class is optimized for small memory-resident indexes. It also has bad concurrency on multithreaded environments. For disk-based indexes it is recommended to use MMapDirectory , which is a high-performance directory implementation working directly on the file system cache of the operating system, so copying data to heap space is not useful. Note that the resulting RAMDirectory instance is fully independent from the original Directory (it is a complete copy). Any subsequent changes to the original Directory will not be visible in the RAMDirectory instance. Declaration public RAMDirectory(Directory dir, IOContext context) Parameters Type Name Description Directory dir a Directory value IOContext context io context Fields | Improve this Doc View Source m_fileMap Declaration protected readonly ConcurrentDictionary<string, RAMFile> m_fileMap Field Value Type Description ConcurrentDictionary < System.String , RAMFile > | Improve this Doc View Source m_sizeInBytes Declaration protected readonly AtomicInt64 m_sizeInBytes Field Value Type Description AtomicInt64 Methods | Improve this Doc View Source CreateOutput(String, IOContext) Creates a new, empty file in the directory with the given name. Returns a stream writing this file. Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source DeleteFile(String) Removes an existing file in the directory. Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Closes the store to future operations, releasing associated memory. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source FileExists(String) Returns true iff the named file exists in this directory. Declaration public override sealed bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Returns the length in bytes of a file in the directory. Declaration public override sealed long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) | Improve this Doc View Source GetLockID() Declaration public override string GetLockID() Returns Type Description System.String Overrides Directory.GetLockID() | Improve this Doc View Source GetSizeInBytes() Return total size in bytes of all files in this directory. This is currently quantized to Lucene.Net.Store.RAMOutputStream.BUFFER_SIZE . Declaration public long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source ListAll() Declaration public override sealed string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source NewRAMFile() Returns a new RAMFile for storing data. this method can be overridden to return different RAMFile impls, that e.g. override NewBuffer(Int32) . Declaration protected virtual RAMFile NewRAMFile() Returns Type Description RAMFile | Improve this Doc View Source OpenInput(String, IOContext) Returns a stream reading an existing file. Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description ICollection < System.String > names Overrides Directory.Sync(ICollection<String>)"
  },
  "api/Lucene.Net/Lucene.Net.Store.RAMFile.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RAMFile.html",
    "title": "Class RAMFile | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RAMFile Represents a file in RAM as a list of byte[] buffers. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object RAMFile Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class RAMFile : object Constructors | Improve this Doc View Source RAMFile() File used as buffer, in no RAMDirectory Declaration public RAMFile() | Improve this Doc View Source RAMFile(RAMDirectory) Declaration public RAMFile(RAMDirectory directory) Parameters Type Name Description RAMDirectory directory Fields | Improve this Doc View Source m_buffers Declaration protected List<byte[]> m_buffers Field Value Type Description List < System.Byte []> | Improve this Doc View Source m_sizeInBytes Declaration protected long m_sizeInBytes Field Value Type Description System.Int64 Properties | Improve this Doc View Source Length For non-stream access from thread that might be concurrent with writing Declaration public virtual long Length { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source NumBuffers Declaration protected int NumBuffers { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddBuffer(Int32) Declaration protected byte[] AddBuffer(int size) Parameters Type Name Description System.Int32 size Returns Type Description System.Byte [] | Improve this Doc View Source GetBuffer(Int32) Declaration protected byte[] GetBuffer(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Byte [] | Improve this Doc View Source GetSizeInBytes() Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source NewBuffer(Int32) Expert: allocate a new buffer. Subclasses can allocate differently. Declaration protected virtual byte[] NewBuffer(int size) Parameters Type Name Description System.Int32 size size of allocated buffer. Returns Type Description System.Byte [] allocated buffer."
  },
  "api/Lucene.Net/Lucene.Net.Store.RAMInputStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RAMInputStream.html",
    "title": "Class RAMInputStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RAMInputStream A memory-resident IndexInput implementation. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DataInput IndexInput RAMInputStream Implements IDisposable Inherited Members IndexInput.Dispose() IndexInput.ToString() IndexInput.Clone() DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class RAMInputStream : IndexInput, IDisposable Constructors | Improve this Doc View Source RAMInputStream(String, RAMFile) Declaration public RAMInputStream(string name, RAMFile f) Parameters Type Name Description System.String name RAMFile f Properties | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexInput.GetFilePointer() | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source Seek(Int64) Declaration public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexInput.Seek(Int64) Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.RAMOutputStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RAMOutputStream.html",
    "title": "Class RAMOutputStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RAMOutputStream A memory-resident IndexOutput implementation. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DataOutput IndexOutput RAMOutputStream Implements IDisposable Inherited Members IndexOutput.Dispose() DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class RAMOutputStream : IndexOutput, IDisposable Constructors | Improve this Doc View Source RAMOutputStream() Construct an empty output buffer. Declaration public RAMOutputStream() | Improve this Doc View Source RAMOutputStream(RAMFile) Declaration public RAMOutputStream(RAMFile f) Parameters Type Name Description RAMFile f Properties | Improve this Doc View Source Checksum Declaration public override long Checksum { get; } Property Value Type Description System.Int64 Overrides IndexOutput.Checksum | Improve this Doc View Source Length Declaration public override long Length { get; set; } Property Value Type Description System.Int64 Overrides IndexOutput.Length Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexOutput.Dispose(Boolean) | Improve this Doc View Source Flush() Declaration public override void Flush() Overrides IndexOutput.Flush() | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexOutput.GetFilePointer() | Improve this Doc View Source GetSizeInBytes() Returns byte usage of all buffers. Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source Reset() Resets this to an empty file. Declaration public virtual void Reset() | Improve this Doc View Source Seek(Int64) Declaration public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexOutput.Seek(Int64) | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) | Improve this Doc View Source WriteTo(DataOutput) Copy the current contents of this buffer to the named output. Declaration public virtual void WriteTo(DataOutput out) Parameters Type Name Description DataOutput out | Improve this Doc View Source WriteTo(Byte[], Int32) Copy the current contents of this buffer to output byte array Declaration public virtual void WriteTo(byte[] bytes, int offset) Parameters Type Name Description System.Byte [] bytes System.Int32 offset Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.RateLimitedDirectoryWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RateLimitedDirectoryWrapper.html",
    "title": "Class RateLimitedDirectoryWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RateLimitedDirectoryWrapper A Directory wrapper that allows IndexOutput rate limiting using IO context ( IOContext.UsageContext ) specific rate limiters ( RateLimiter ). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory FilterDirectory RateLimitedDirectoryWrapper Inherited Members FilterDirectory.m_input FilterDirectory.Delegate FilterDirectory.ListAll() FilterDirectory.FileExists(String) FilterDirectory.DeleteFile(String) FilterDirectory.FileLength(String) FilterDirectory.Sync(ICollection<String>) FilterDirectory.OpenInput(String, IOContext) FilterDirectory.MakeLock(String) FilterDirectory.ClearLock(String) FilterDirectory.Dispose(Boolean) FilterDirectory.SetLockFactory(LockFactory) FilterDirectory.GetLockID() FilterDirectory.LockFactory FilterDirectory.ToString() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.EnsureOpen() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public sealed class RateLimitedDirectoryWrapper : FilterDirectory Constructors | Improve this Doc View Source RateLimitedDirectoryWrapper(Directory) Declaration public RateLimitedDirectoryWrapper(Directory wrapped) Parameters Type Name Description Directory wrapped Methods | Improve this Doc View Source Copy(Directory, String, String, IOContext) Declaration public override void Copy(Directory to, string src, string dest, IOContext context) Parameters Type Name Description Directory to System.String src System.String dest IOContext context Overrides Directory.Copy(Directory, String, String, IOContext) | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides FilterDirectory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source GetMaxWriteMBPerSec(IOContext.UsageContext) See SetMaxWriteMBPerSec(Nullable<Double>, IOContext.UsageContext) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public double GetMaxWriteMBPerSec(IOContext.UsageContext context) Parameters Type Name Description IOContext.UsageContext context Returns Type Description System.Double | Improve this Doc View Source SetMaxWriteMBPerSec(Nullable<Double>, IOContext.UsageContext) Sets the maximum (approx) MB/sec allowed by all write IO performed by IndexOutput created with the given IOContext.UsageContext . Pass null for mbPerSec to have no limit. NOTE : For already created IndexOutput instances there is no guarantee this new rate will apply to them; it will only be guaranteed to apply for new created IndexOutput instances. NOTE : this is an optional operation and might not be respected by all Directory implementations. Currently only buffered ( FSDirectory ) Directory implementations use rate-limiting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void SetMaxWriteMBPerSec(double? mbPerSec, IOContext.UsageContext context) Parameters Type Name Description System.Nullable < System.Double > mbPerSec IOContext.UsageContext context | Improve this Doc View Source SetRateLimiter(RateLimiter, IOContext.UsageContext) Sets the rate limiter to be used to limit (approx) MB/sec allowed by all IO performed with the given context ( IOContext.UsageContext ). Pass null to have no limit. Passing an instance of rate limiter compared to setting it using SetMaxWriteMBPerSec(Nullable<Double>, IOContext.UsageContext) allows to use the same limiter instance across several directories globally limiting IO across them. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void SetRateLimiter(RateLimiter mergeWriteRateLimiter, IOContext.UsageContext context) Parameters Type Name Description RateLimiter mergeWriteRateLimiter IOContext.UsageContext context See Also SetRateLimiter(RateLimiter, IOContext.UsageContext)"
  },
  "api/Lucene.Net/Lucene.Net.Store.RateLimiter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RateLimiter.html",
    "title": "Class RateLimiter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RateLimiter Abstract base class to rate limit IO. Typically implementations are shared across multiple IndexInput s or IndexOutput s (for example those involved all merging). Those IndexInput s and IndexOutput s would call Pause(Int64) whenever they want to read bytes or write bytes. Inheritance System.Object RateLimiter RateLimiter.SimpleRateLimiter Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class RateLimiter : object Properties | Improve this Doc View Source MbPerSec The current mb per second rate limit. Declaration public abstract double MbPerSec { get; } Property Value Type Description System.Double Methods | Improve this Doc View Source Pause(Int64) Pauses, if necessary, to keep the instantaneous IO rate at or below the target. Note: the implementation is thread-safe Declaration public abstract long Pause(long bytes) Parameters Type Name Description System.Int64 bytes Returns Type Description System.Int64 the pause time in nano seconds | Improve this Doc View Source SetMbPerSec(Double) Sets an updated mb per second rate limit. Declaration public abstract void SetMbPerSec(double mbPerSec) Parameters Type Name Description System.Double mbPerSec"
  },
  "api/Lucene.Net/Lucene.Net.Store.RateLimiter.SimpleRateLimiter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RateLimiter.SimpleRateLimiter.html",
    "title": "Class RateLimiter.SimpleRateLimiter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RateLimiter.SimpleRateLimiter Simple class to rate limit IO. Inheritance System.Object RateLimiter RateLimiter.SimpleRateLimiter Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class SimpleRateLimiter : RateLimiter Constructors | Improve this Doc View Source SimpleRateLimiter(Double) mbPerSec is the MB/sec max IO rate Declaration public SimpleRateLimiter(double mbPerSec) Parameters Type Name Description System.Double mbPerSec Properties | Improve this Doc View Source MbPerSec The current mb per second rate limit. Declaration public override double MbPerSec { get; } Property Value Type Description System.Double Overrides RateLimiter.MbPerSec Methods | Improve this Doc View Source Pause(Int64) Pauses, if necessary, to keep the instantaneous IO rate at or below the target. NOTE: multiple threads may safely use this, however the implementation is not perfectly thread safe but likely in practice this is harmless (just means in some rare cases the rate might exceed the target). It's best to call this with a biggish count, not one byte at a time. Declaration public override long Pause(long bytes) Parameters Type Name Description System.Int64 bytes Returns Type Description System.Int64 the pause time in nano seconds Overrides RateLimiter.Pause(Int64) | Improve this Doc View Source SetMbPerSec(Double) Sets an updated mb per second rate limit. Declaration public override void SetMbPerSec(double mbPerSec) Parameters Type Name Description System.Double mbPerSec Overrides RateLimiter.SetMbPerSec(Double)"
  },
  "api/Lucene.Net/Lucene.Net.Store.SimpleFSDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.SimpleFSDirectory.html",
    "title": "Class SimpleFSDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFSDirectory A straightforward implementation of FSDirectory using . However, this class has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. It's usually better to use NIOFSDirectory or MMapDirectory instead. Inheritance System.Object Directory BaseDirectory FSDirectory SimpleFSDirectory Inherited Members FSDirectory.DEFAULT_READ_CHUNK_SIZE FSDirectory.m_directory FSDirectory.Open(DirectoryInfo) FSDirectory.Open(String) FSDirectory.Open(DirectoryInfo, LockFactory) FSDirectory.Open(String, LockFactory) FSDirectory.SetLockFactory(LockFactory) FSDirectory.ListAll(DirectoryInfo) FSDirectory.ListAll() FSDirectory.FileExists(String) FSDirectory.FileLength(String) FSDirectory.DeleteFile(String) FSDirectory.CreateOutput(String, IOContext) FSDirectory.EnsureCanWrite(String) FSDirectory.OnIndexOutputClosed(FSDirectory.FSIndexOutput) FSDirectory.Sync(ICollection<String>) FSDirectory.GetLockID() FSDirectory.Dispose(Boolean) FSDirectory.Directory FSDirectory.ToString() FSDirectory.ReadChunkSize BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class SimpleFSDirectory : FSDirectory Constructors | Improve this Doc View Source SimpleFSDirectory(DirectoryInfo) Create a new SimpleFSDirectory for the named location and NativeFSLockFactory . Declaration public SimpleFSDirectory(DirectoryInfo path) Parameters Type Name Description DirectoryInfo path the path of the directory | Improve this Doc View Source SimpleFSDirectory(DirectoryInfo, LockFactory) Create a new SimpleFSDirectory for the named location. Declaration public SimpleFSDirectory(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); | Improve this Doc View Source SimpleFSDirectory(String) Create a new SimpleFSDirectory for the named location and NativeFSLockFactory . LUCENENET specific overload for convenience using string instead of . Declaration public SimpleFSDirectory(string path) Parameters Type Name Description System.String path the path of the directory | Improve this Doc View Source SimpleFSDirectory(String, LockFactory) Create a new SimpleFSDirectory for the named location. LUCENENET specific overload for convenience using string instead of . Declaration public SimpleFSDirectory(string path, LockFactory lockFactory) Parameters Type Name Description System.String path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Methods | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source OpenInput(String, IOContext) Creates an IndexInput for the file with the given name. Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext)"
  },
  "api/Lucene.Net/Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexInput.html",
    "title": "Class SimpleFSDirectory.SimpleFSIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFSDirectory.SimpleFSIndexInput Reads bytes with followed by . Inheritance System.Object DataInput IndexInput BufferedIndexInput SimpleFSDirectory.SimpleFSIndexInput Implements IDisposable Inherited Members BufferedIndexInput.BUFFER_SIZE BufferedIndexInput.MERGE_BUFFER_SIZE BufferedIndexInput.m_buffer BufferedIndexInput.ReadByte() BufferedIndexInput.SetBufferSize(Int32) BufferedIndexInput.NewBuffer(Byte[]) BufferedIndexInput.BufferSize BufferedIndexInput.ReadBytes(Byte[], Int32, Int32) BufferedIndexInput.ReadBytes(Byte[], Int32, Int32, Boolean) BufferedIndexInput.ReadInt16() BufferedIndexInput.ReadInt32() BufferedIndexInput.ReadInt64() BufferedIndexInput.ReadVInt32() BufferedIndexInput.ReadVInt64() BufferedIndexInput.GetFilePointer() BufferedIndexInput.Seek(Int64) BufferedIndexInput.FlushBuffer(IndexOutput, Int64) BufferedIndexInput.GetBufferSize(IOContext) IndexInput.Dispose() IndexInput.ToString() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax protected class SimpleFSIndexInput : BufferedIndexInput, IDisposable Constructors | Improve this Doc View Source SimpleFSIndexInput(String, FileStream, IOContext) Declaration public SimpleFSIndexInput(string resourceDesc, FileStream file, IOContext context) Parameters Type Name Description System.String resourceDesc FileStream file IOContext context | Improve this Doc View Source SimpleFSIndexInput(String, FileStream, Int64, Int64, Int32) Declaration public SimpleFSIndexInput(string resourceDesc, FileStream file, long off, long length, int bufferSize) Parameters Type Name Description System.String resourceDesc FileStream file System.Int64 off System.Int64 length System.Int32 bufferSize Fields | Improve this Doc View Source m_end end offset (start+length) Declaration protected readonly long m_end Field Value Type Description System.Int64 | Improve this Doc View Source m_file the file channel we will read from Declaration protected readonly FileStream m_file Field Value Type Description FileStream | Improve this Doc View Source m_off start offset: non-zero in the slice case Declaration protected readonly long m_off Field Value Type Description System.Int64 Properties | Improve this Doc View Source IsClone is this instance a clone and hence does not own the file to close it Declaration public bool IsClone { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsFDValid Declaration public virtual bool IsFDValid { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Length Declaration public override sealed long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides BufferedIndexInput.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source ReadInternal(Byte[], Int32, Int32) IndexInput methods Declaration protected override void ReadInternal(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides BufferedIndexInput.ReadInternal(Byte[], Int32, Int32) | Improve this Doc View Source SeekInternal(Int64) Declaration protected override void SeekInternal(long position) Parameters Type Name Description System.Int64 position Overrides BufferedIndexInput.SeekInternal(Int64) Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Store.SimpleFSLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.SimpleFSLockFactory.html",
    "title": "Class SimpleFSLockFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFSLockFactory Implements LockFactory using (writes the file with UTF8 encoding and no byte order mark). Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change to all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that this or any other LockFactory is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . Inheritance System.Object LockFactory FSLockFactory SimpleFSLockFactory Inherited Members FSLockFactory.m_lockDir FSLockFactory.SetLockDir(DirectoryInfo) FSLockFactory.LockDir FSLockFactory.ToString() LockFactory.m_lockPrefix LockFactory.LockPrefix Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class SimpleFSLockFactory : FSLockFactory Constructors | Improve this Doc View Source SimpleFSLockFactory() Create a SimpleFSLockFactory instance, with null (unset) lock directory. When you pass this factory to a FSDirectory subclass, the lock directory is automatically set to the directory itself. Be sure to create one instance for each directory your create! Declaration public SimpleFSLockFactory() | Improve this Doc View Source SimpleFSLockFactory(DirectoryInfo) Instantiate using the provided directory (as a instance). Declaration public SimpleFSLockFactory(DirectoryInfo lockDir) Parameters Type Name Description DirectoryInfo lockDir where lock files should be created. | Improve this Doc View Source SimpleFSLockFactory(String) Instantiate using the provided directory name ( ). Declaration public SimpleFSLockFactory(string lockDirName) Parameters Type Name Description System.String lockDirName where lock files should be created. Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) See Also LockFactory"
  },
  "api/Lucene.Net/Lucene.Net.Store.SingleInstanceLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.SingleInstanceLockFactory.html",
    "title": "Class SingleInstanceLockFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleInstanceLockFactory Implements LockFactory for a single in-process instance, meaning all locking will take place through this one instance. Only use this LockFactory when you are certain all IndexReader s and IndexWriter s for a given index are running against a single shared in-process Directory instance. This is currently the default locking for RAMDirectory . Inheritance System.Object LockFactory SingleInstanceLockFactory Inherited Members LockFactory.m_lockPrefix LockFactory.LockPrefix Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class SingleInstanceLockFactory : LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) See Also LockFactory"
  },
  "api/Lucene.Net/Lucene.Net.Store.TrackingDirectoryWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.TrackingDirectoryWrapper.html",
    "title": "Class TrackingDirectoryWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrackingDirectoryWrapper A delegating Directory that records which files were written to and deleted. Inheritance System.Object Directory FilterDirectory TrackingDirectoryWrapper Inherited Members FilterDirectory.m_input FilterDirectory.Delegate FilterDirectory.ListAll() FilterDirectory.FileExists(String) FilterDirectory.FileLength(String) FilterDirectory.Sync(ICollection<String>) FilterDirectory.OpenInput(String, IOContext) FilterDirectory.MakeLock(String) FilterDirectory.ClearLock(String) FilterDirectory.Dispose(Boolean) FilterDirectory.SetLockFactory(LockFactory) FilterDirectory.GetLockID() FilterDirectory.LockFactory FilterDirectory.ToString() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.EnsureOpen() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public sealed class TrackingDirectoryWrapper : FilterDirectory Constructors | Improve this Doc View Source TrackingDirectoryWrapper(Directory) Declaration public TrackingDirectoryWrapper(Directory in) Parameters Type Name Description Directory in Properties | Improve this Doc View Source CreatedFiles Declaration public ISet<string> CreatedFiles { get; } Property Value Type Description ISet < System.String > Methods | Improve this Doc View Source Copy(Directory, String, String, IOContext) Declaration public override void Copy(Directory to, string src, string dest, IOContext context) Parameters Type Name Description Directory to System.String src System.String dest IOContext context Overrides Directory.Copy(Directory, String, String, IOContext) | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides FilterDirectory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source DeleteFile(String) Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides FilterDirectory.DeleteFile(String)"
  },
  "api/Lucene.Net/Lucene.Net.Store.VerifyingLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.VerifyingLockFactory.html",
    "title": "Class VerifyingLockFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VerifyingLockFactory A LockFactory that wraps another LockFactory and verifies that each lock obtain/release is \"correct\" (never results in two processes holding the lock at the same time). It does this by contacting an external server ( LockVerifyServer ) to assert that at most one process holds the lock at a time. To use this, you should also run LockVerifyServer on the host & port matching what you pass to the constructor. Inheritance System.Object LockFactory VerifyingLockFactory Inherited Members LockFactory.m_lockPrefix LockFactory.LockPrefix Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class VerifyingLockFactory : LockFactory Constructors | Improve this Doc View Source VerifyingLockFactory(LockFactory, Stream) Creates a new VerifyingLockFactory instance. Declaration public VerifyingLockFactory(LockFactory lf, Stream stream) Parameters Type Name Description LockFactory lf the LockFactory that we are testing Stream stream the socket's stream input/output to LockVerifyServer Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) See Also LockVerifyServer LockStressTest"
  },
  "api/Lucene.Net/Lucene.Net.Support.Arrays.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Arrays.html",
    "title": "Class Arrays | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Arrays Inheritance System.Object Arrays Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class Arrays : object Methods | Improve this Doc View Source AsList<T>(T[]) Declaration public static List<T> AsList<T>(params T[] objects) Parameters Type Name Description T[] objects Returns Type Description List <T> Type Parameters Name Description T | Improve this Doc View Source CopyOf<T>(T[], Int32) Declaration public static T[] CopyOf<T>(T[] original, int newLength) Parameters Type Name Description T[] original System.Int32 newLength Returns Type Description T[] Type Parameters Name Description T | Improve this Doc View Source CopyOfRange<T>(T[], Int32, Int32) Declaration public static T[] CopyOfRange<T>(T[] original, int startIndexInc, int endIndexExc) Parameters Type Name Description T[] original System.Int32 startIndexInc System.Int32 endIndexExc Returns Type Description T[] Type Parameters Name Description T | Improve this Doc View Source Equals<T>(T[], T[]) Compares the entire members of one array whith the other one. Declaration public static bool Equals<T>(T[] a, T[] b) Parameters Type Name Description T[] a The array to be compared. T[] b The array to be compared with. Returns Type Description System.Boolean Returns true if the two specified arrays of Objects are equal to one another. The two arrays are considered equal if both arrays contain the same number of elements, and all corresponding pairs of elements in the two arrays are equal. Two objects e1 and e2 are considered equal if (e1==null ? e2==null : e1.Equals(e2)). In other words, the two arrays are equal if they contain the same elements in the same order. Also, two array references are considered equal if both are null. Note that if the type of is a , , or , its values and any nested collection values will be compared for equality as well. Type Parameters Name Description T | Improve this Doc View Source Fill<T>(T[], T) Assigns the specified value to each element of the specified array. Declaration public static void Fill<T>(T[] a, T val) Parameters Type Name Description T[] a the array to be filled T val the value to be stored in all elements of the array Type Parameters Name Description T the type of the array | Improve this Doc View Source Fill<T>(T[], Int32, Int32, T) Assigns the specified long value to each element of the specified range of the specified array of longs. The range to be filled extends from index fromIndex , inclusive, to index toIndex , exclusive. (If fromIndex==toIndex , the range to be filled is empty.) Declaration public static void Fill<T>(T[] a, int fromIndex, int toIndex, T val) Parameters Type Name Description T[] a the array to be filled System.Int32 fromIndex the index of the first element (inclusive) to be filled with the specified value System.Int32 toIndex the index of the last element (exclusive) to be filled with the specified value T val the value to be stored in all elements of the array Type Parameters Name Description T the type of the array | Improve this Doc View Source GetHashCode<T>(T[]) Returns a hash code based on the contents of the given array. For any two T arrays a and b , if Arrays.Equals(b) returns true , it means that the return value of Arrays.GetHashCode(a) equals Arrays.GetHashCode(b) . Declaration public static int GetHashCode<T>(T[] array) Parameters Type Name Description T[] array The array whose hash code to compute. Returns Type Description System.Int32 The hash code for array . Type Parameters Name Description T The array element type. | Improve this Doc View Source ToString<T>(T[]) Creates a representation of the array passed. The result is surrounded by brackets \"[]\" , each element is converted to a via the and separated by \", \" . If the array is null , then \"null\" is returned. Declaration public static string ToString<T>(T[] array) Parameters Type Name Description T[] array Returns Type Description System.String Type Parameters Name Description T The type of array element."
  },
  "api/Lucene.Net/Lucene.Net.Support.AssemblyExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.AssemblyExtensions.html",
    "title": "Class AssemblyExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssemblyExtensions Inheritance System.Object AssemblyExtensions Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class AssemblyExtensions : object Methods | Improve this Doc View Source FindAndGetManifestResourceStream(Assembly, Type, String) Aggressively searches for a resource and, if found, returns an open where it can be read. Declaration public static Stream FindAndGetManifestResourceStream(this Assembly assembly, Type type, string name) Parameters Type Name Description Assembly assembly this assembly Type type a type in the same namespace as the resource System.String name the resource name to locate Returns Type Description Stream an open that can be used to read the resource, or null if the resource cannot be found. | Improve this Doc View Source FindResource(Assembly, Type, String) Aggressively searches to find a resource based on a and resource name. Declaration public static string FindResource(this Assembly assembly, Type type, string name) Parameters Type Name Description Assembly assembly this assembly Type type a type in the same namespace as the resource System.String name the resource name to locate Returns Type Description System.String the resource, if found; if not found, returns null"
  },
  "api/Lucene.Net/Lucene.Net.Support.AssemblyUtils.DotNetFrameworkFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.AssemblyUtils.DotNetFrameworkFilter.html",
    "title": "Class AssemblyUtils.DotNetFrameworkFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssemblyUtils.DotNetFrameworkFilter Assembly filter logic from: https://raw.githubusercontent.com/Microsoft/dotnet-apiport/master/src/Microsoft.Fx.Portability/Analyzer/DotNetFrameworkFilter.cs Inheritance System.Object AssemblyUtils.DotNetFrameworkFilter Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class DotNetFrameworkFilter : object Methods | Improve this Doc View Source IsFrameworkAssembly(Assembly) Gets a best guess as to whether this assembly is a .NET Framework assembly or not. Declaration public static bool IsFrameworkAssembly(Assembly assembly) Parameters Type Name Description Assembly assembly Returns Type Description System.Boolean | Improve this Doc View Source IsFrameworkAssembly(AssemblyName) Gets a best guess as to whether this assembly is a .NET Framework assembly or not. Declaration public static bool IsFrameworkAssembly(AssemblyName assembly) Parameters Type Name Description AssemblyName assembly Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Support.AssemblyUtils.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.AssemblyUtils.html",
    "title": "Class AssemblyUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssemblyUtils Methods for working with Assemblies. Inheritance System.Object AssemblyUtils Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class AssemblyUtils : object Methods | Improve this Doc View Source GetReferencedAssemblies() Gets a list of the host assembly's referenced assemblies excluding any Microsoft, System, or Mono prefixed assemblies or assemblies with official Microsoft key hashes. Essentially, we get a list of all non Microsoft assemblies here. Declaration public static IList<Assembly> GetReferencedAssemblies() Returns Type Description IList < Assembly >"
  },
  "api/Lucene.Net/Lucene.Net.Support.BitArrayExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.BitArrayExtensions.html",
    "title": "Class BitArrayExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BitArrayExtensions This class provides supporting methods of java.util.BitSet that are not present in System.Collections.BitArray. Inheritance System.Object BitArrayExtensions Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class BitArrayExtensions : object Methods | Improve this Doc View Source And_UnequalLengths(BitArray, BitArray) Declaration public static BitArray And_UnequalLengths(this BitArray bitsA, BitArray bitsB) Parameters Type Name Description BitArray bitsA BitArray bitsB Returns Type Description BitArray | Improve this Doc View Source AndNot(BitArray, BitArray) Declaration public static void AndNot(this BitArray bitsA, BitArray bitsB) Parameters Type Name Description BitArray bitsA BitArray bitsB | Improve this Doc View Source BitWiseEquals(BitArray, BitArray) Declaration public static bool BitWiseEquals(this BitArray bitsA, BitArray bitsB) Parameters Type Name Description BitArray bitsA BitArray bitsB Returns Type Description System.Boolean | Improve this Doc View Source Cardinality(BitArray) Returns the number of bits set to true in this . Declaration public static int Cardinality(this BitArray bits) Parameters Type Name Description BitArray bits This . Returns Type Description System.Int32 The number of bits set to true in this . | Improve this Doc View Source Clear(BitArray) Sets all bits to false Declaration public static void Clear(this BitArray bits) Parameters Type Name Description BitArray bits The BitArray object. | Improve this Doc View Source Clear(BitArray, Int32) Sets the bit at the given index to false. Declaration public static void Clear(this BitArray bits, int index) Parameters Type Name Description BitArray bits The BitArray object. System.Int32 index The position to set to false. | Improve this Doc View Source Clear(BitArray, Int32, Int32) Declaration public static void Clear(this BitArray bits, int startIdx, int endIdx) Parameters Type Name Description BitArray bits System.Int32 startIdx System.Int32 endIdx | Improve this Doc View Source Equal(BitArray, OpenBitSet) Declaration public static bool Equal(this BitArray a, OpenBitSet b) Parameters Type Name Description BitArray a OpenBitSet b Returns Type Description System.Boolean | Improve this Doc View Source Flip(BitArray, Int32, Int32) Declaration public static void Flip(this BitArray bits, int startIdx, int endIdx) Parameters Type Name Description BitArray bits System.Int32 startIdx System.Int32 endIdx | Improve this Doc View Source NextClearBit(BitArray, Int32) Returns the next un-set bit at or after index, or -1 if no such bit exists. Declaration public static int NextClearBit(this BitArray bitArray, int index) Parameters Type Name Description BitArray bitArray System.Int32 index the index of bit array at which to start checking Returns Type Description System.Int32 the next set bit or -1 | Improve this Doc View Source NextSetBit(BitArray, Int32) Returns the next set bit at or after index, or -1 if no such bit exists. Declaration public static int NextSetBit(this BitArray bitArray, int index) Parameters Type Name Description BitArray bitArray System.Int32 index the index of bit array at which to start checking Returns Type Description System.Int32 the next set bit or -1 | Improve this Doc View Source Or_UnequalLengths(BitArray, BitArray) Declaration public static BitArray Or_UnequalLengths(this BitArray bitsA, BitArray bitsB) Parameters Type Name Description BitArray bitsA BitArray bitsB Returns Type Description BitArray | Improve this Doc View Source PrevSetBit(BitArray, Int32) Declaration public static int PrevSetBit(this BitArray bitArray, int index) Parameters Type Name Description BitArray bitArray System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source SafeGet(BitArray, Int32) Declaration public static bool SafeGet(this BitArray a, int loc) Parameters Type Name Description BitArray a System.Int32 loc Returns Type Description System.Boolean | Improve this Doc View Source SafeSet(BitArray, Int32, Boolean) Declaration public static void SafeSet(this BitArray a, int loc, bool value) Parameters Type Name Description BitArray a System.Int32 loc System.Boolean value | Improve this Doc View Source Set(BitArray, Int32) Sets the bit at the given index to true. Declaration public static void Set(this BitArray bits, int index) Parameters Type Name Description BitArray bits The BitArray object. System.Int32 index The position to set to true. | Improve this Doc View Source Set(BitArray, Int32, Int32) Declaration public static void Set(this BitArray bits, int startIdx, int endIdx) Parameters Type Name Description BitArray bits System.Int32 startIdx System.Int32 endIdx | Improve this Doc View Source Set(BitArray, Int32, Int32, Boolean) Sets the bit at the given index range to true. Declaration public static void Set(this BitArray bits, int fromIndex, int toIndex, bool value) Parameters Type Name Description BitArray bits The BitArray object. System.Int32 fromIndex The start of the range to set(inclusive) System.Int32 toIndex The end of the range to set(exclusive) System.Boolean value the value to set to the range | Improve this Doc View Source Xor_UnequalLengths(BitArray, BitArray) Declaration public static BitArray Xor_UnequalLengths(this BitArray bitsA, BitArray bitsB) Parameters Type Name Description BitArray bitsA BitArray bitsB Returns Type Description BitArray"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.CircularQueue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.CircularQueue-1.html",
    "title": "Class CircularQueue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CircularQueue<T> Inheritance System.Object EnumerableBase <T> CollectionValueBase <T> CollectionBase <T> DirectedCollectionBase <T> SequencedBase <T> CircularQueue<T> Implements IQueue <T> IStack <T> IDirectedCollectionValue <T> ICollectionValue <T> IShowable IFormattable IDirectedEnumerable <T> System.Collections.Generic.IEnumerable <T> Inherited Members SequencedBase<T>.ComputeHashCode(ISequenced<T>, System.Collections.Generic.IEqualityComparer<T>) SequencedBase<T>.StaticEquals(ISequenced<T>, ISequenced<T>, System.Collections.Generic.IEqualityComparer<T>) SequencedBase<T>.GetSequencedHashCode() SequencedBase<T>.SequencedEquals(ISequenced<T>) SequencedBase<T>.Direction SequencedBase<T>.FindIndex(Func<T, Boolean>) SequencedBase<T>.FindLastIndex(Func<T, Boolean>) DirectedCollectionBase<T>.FindLast(Func<T, Boolean>, T) CollectionBase<T>.isReadOnlyBase CollectionBase<T>.stamp CollectionBase<T>.size CollectionBase<T>.itemequalityComparer CollectionBase<T>.checkRange(Int32, Int32) CollectionBase<T>.ComputeHashCode(ICollectionValue<T>, System.Collections.Generic.IEqualityComparer<T>) CollectionBase<T>.StaticEquals(ICollection<T>, ICollection<T>, System.Collections.Generic.IEqualityComparer<T>) CollectionBase<T>.GetUnsequencedHashCode() CollectionBase<T>.UnsequencedEquals(ICollection<T>) CollectionBase<T>.modifycheck(Int32) CollectionBase<T>.updatecheck() CollectionBase<T>.IsReadOnly CollectionBase<T>.Count CollectionBase<T>.CountSpeed CollectionBase<T>.EqualityComparer CollectionBase<T>.IsEmpty CollectionValueBase<T>.ActiveEvents CollectionValueBase<T>.CollectionChanged CollectionValueBase<T>.raiseCollectionChanged() CollectionValueBase<T>.CollectionCleared CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<T>.ItemsAdded CollectionValueBase<T>.raiseItemsAdded(T, Int32) CollectionValueBase<T>.ItemsRemoved CollectionValueBase<T>.raiseItemsRemoved(T, Int32) CollectionValueBase<T>.ItemInserted CollectionValueBase<T>.raiseItemInserted(T, Int32) CollectionValueBase<T>.ItemRemovedAt CollectionValueBase<T>.raiseItemRemovedAt(T, Int32) CollectionValueBase<T>.raiseForSetThis(Int32, T, T) CollectionValueBase<T>.raiseForInsert(Int32, T) CollectionValueBase<T>.raiseForRemove(T) CollectionValueBase<T>.raiseForRemove(T, Int32) CollectionValueBase<T>.raiseForRemoveAt(Int32, T) CollectionValueBase<T>.raiseForUpdate(T, T) CollectionValueBase<T>.raiseForUpdate(T, T, Int32) CollectionValueBase<T>.raiseForAdd(T) CollectionValueBase<T>.raiseForRemoveAll(ICollectionValue<T>) CollectionValueBase<T>.CopyTo(T[], Int32) CollectionValueBase<T>.ToArray() CollectionValueBase<T>.Apply(Action<T>) CollectionValueBase<T>.Exists(Func<T, Boolean>) CollectionValueBase<T>.Find(Func<T, Boolean>, T) CollectionValueBase<T>.All(Func<T, Boolean>) CollectionValueBase<T>.Filter(Func<T, Boolean>) CollectionValueBase<T>.Show(System.Text.StringBuilder, Int32, IFormatProvider) CollectionValueBase<T>.ToString(String, IFormatProvider) CollectionValueBase<T>.ToString() EnumerableBase<T>.countItems(System.Collections.Generic.IEnumerable<T>) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class CircularQueue<T> : SequencedBase<T>, IQueue<T>, IStack<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, System.Collections.Generic.IEnumerable<T> Type Parameters Name Description T Constructors | Improve this Doc View Source CircularQueue(MemoryType) Declaration public CircularQueue(MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description MemoryType memoryType | Improve this Doc View Source CircularQueue(Int32, MemoryType) Declaration public CircularQueue(int capacity, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Int32 capacity MemoryType memoryType The memory type strategy of the internal enumerator used to iterate over the collection Properties | Improve this Doc View Source AllowsDuplicates Declaration public virtual bool AllowsDuplicates { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[Int32] Get the i'th item in the queue. The front of the queue is at index 0. Declaration public virtual T this[int i] { get; } Parameters Type Name Description System.Int32 i Property Value Type Description T | Improve this Doc View Source ListenableEvents Declaration public override EventTypeEnum ListenableEvents { get; } Property Value Type Description EventTypeEnum Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.ListenableEvents Methods | Improve this Doc View Source Backwards() Declaration public override IDirectedCollectionValue<T> Backwards() Returns Type Description IDirectedCollectionValue <T> Overrides Lucene.Net.Support.C5.DirectedCollectionBase<T>.Backwards() | Improve this Doc View Source Check() Declaration public virtual bool Check() Returns Type Description System.Boolean | Improve this Doc View Source Choose() Declaration public override T Choose() Returns Type Description T Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.Choose() | Improve this Doc View Source Dequeue() Declaration public virtual T Dequeue() Returns Type Description T | Improve this Doc View Source Enqueue(T) Declaration public virtual void Enqueue(T item) Parameters Type Name Description T item | Improve this Doc View Source GetEnumerator() Declaration public override System.Collections.Generic.IEnumerator<T> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <T> Overrides Lucene.Net.Support.C5.EnumerableBase<T>.GetEnumerator() | Improve this Doc View Source Pop() Declaration public T Pop() Returns Type Description T | Improve this Doc View Source Push(T) Declaration public void Push(T item) Parameters Type Name Description T item Explicit Interface Implementations | Improve this Doc View Source IDirectedEnumerable<T>.Backwards() Declaration IDirectedEnumerable<T> IDirectedEnumerable<T>.Backwards() Returns Type Description IDirectedEnumerable <T> Implements IQueue<T> IStack<T> IDirectedCollectionValue<T> ICollectionValue<T> IShowable IFormattable IDirectedEnumerable<T> System.Collections.Generic.IEnumerable<>"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ClearedEventArgs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ClearedEventArgs.html",
    "title": "Class ClearedEventArgs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClearedEventArgs Inheritance System.Object ClearedEventArgs ClearedRangeEventArgs Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class ClearedEventArgs : EventArgs Constructors | Improve this Doc View Source ClearedEventArgs(Boolean, Int32) Declaration public ClearedEventArgs(bool full, int count) Parameters Type Name Description System.Boolean full True if the operation cleared all of the collection System.Int32 count The number of items removed by the clear. Fields | Improve this Doc View Source Count Declaration public readonly int Count Field Value Type Description System.Int32 | Improve this Doc View Source Full Declaration public readonly bool Full Field Value Type Description System.Boolean Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ClearedRangeEventArgs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ClearedRangeEventArgs.html",
    "title": "Class ClearedRangeEventArgs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClearedRangeEventArgs Inheritance System.Object ClearedEventArgs ClearedRangeEventArgs Inherited Members ClearedEventArgs.Full ClearedEventArgs.Count Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class ClearedRangeEventArgs : ClearedEventArgs Constructors | Improve this Doc View Source ClearedRangeEventArgs(Boolean, Int32, Nullable<Int32>) Declaration public ClearedRangeEventArgs(bool full, int count, int? start) Parameters Type Name Description System.Boolean full System.Int32 count System.Nullable < System.Int32 > start Fields | Improve this Doc View Source Start Declaration public readonly int? Start Field Value Type Description System.Nullable < System.Int32 > Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides ClearedEventArgs.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.CollectionBase-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.CollectionBase-1.html",
    "title": "Class CollectionBase<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectionBase<T> Base class (abstract) for ICollection implementations. Inheritance System.Object EnumerableBase <T> CollectionValueBase <T> CollectionBase<T> DirectedCollectionBase<T> HashSet<T> Implements ICollectionValue <T> System.Collections.Generic.IEnumerable <T> IShowable IFormattable Inherited Members CollectionValueBase<T>.ListenableEvents CollectionValueBase<T>.ActiveEvents CollectionValueBase<T>.CollectionChanged CollectionValueBase<T>.raiseCollectionChanged() CollectionValueBase<T>.CollectionCleared CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<T>.ItemsAdded CollectionValueBase<T>.raiseItemsAdded(T, Int32) CollectionValueBase<T>.ItemsRemoved CollectionValueBase<T>.raiseItemsRemoved(T, Int32) CollectionValueBase<T>.ItemInserted CollectionValueBase<T>.raiseItemInserted(T, Int32) CollectionValueBase<T>.ItemRemovedAt CollectionValueBase<T>.raiseItemRemovedAt(T, Int32) CollectionValueBase<T>.raiseForSetThis(Int32, T, T) CollectionValueBase<T>.raiseForInsert(Int32, T) CollectionValueBase<T>.raiseForRemove(T) CollectionValueBase<T>.raiseForRemove(T, Int32) CollectionValueBase<T>.raiseForRemoveAt(Int32, T) CollectionValueBase<T>.raiseForUpdate(T, T) CollectionValueBase<T>.raiseForUpdate(T, T, Int32) CollectionValueBase<T>.raiseForAdd(T) CollectionValueBase<T>.raiseForRemoveAll(ICollectionValue<T>) CollectionValueBase<T>.CopyTo(T[], Int32) CollectionValueBase<T>.ToArray() CollectionValueBase<T>.Apply(Action<T>) CollectionValueBase<T>.Exists(Func<T, Boolean>) CollectionValueBase<T>.Find(Func<T, Boolean>, T) CollectionValueBase<T>.All(Func<T, Boolean>) CollectionValueBase<T>.Filter(Func<T, Boolean>) CollectionValueBase<T>.Choose() CollectionValueBase<T>.Show(System.Text.StringBuilder, Int32, IFormatProvider) CollectionValueBase<T>.ToString(String, IFormatProvider) CollectionValueBase<T>.ToString() EnumerableBase<T>.GetEnumerator() EnumerableBase<T>.countItems(System.Collections.Generic.IEnumerable<T>) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class CollectionBase<T> : CollectionValueBase<T>, ICollectionValue<T>, System.Collections.Generic.IEnumerable<T>, IShowable, IFormattable Type Parameters Name Description T Constructors | Improve this Doc View Source CollectionBase(System.Collections.Generic.IEqualityComparer<T>, MemoryType) Declaration protected CollectionBase(System.Collections.Generic.IEqualityComparer<T> itemequalityComparer, MemoryType memoryType) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <T> itemequalityComparer MemoryType memoryType The type of memory for the enumerator used to iterate the collection Fields | Improve this Doc View Source isReadOnlyBase The underlying field of the ReadOnly property Declaration protected bool isReadOnlyBase Field Value Type Description System.Boolean | Improve this Doc View Source itemequalityComparer The item equalityComparer of the collection Declaration protected readonly System.Collections.Generic.IEqualityComparer<T> itemequalityComparer Field Value Type Description System.Collections.Generic.IEqualityComparer <T> | Improve this Doc View Source size The number of items in the collection Declaration protected int size Field Value Type Description System.Int32 Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 The size of this collection Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.Count | Improve this Doc View Source CountSpeed The value is symbolic indicating the type of asymptotic complexity in terms of the size of this collection (worst-case or amortized as relevant). Declaration public override Speed CountSpeed { get; } Property Value Type Description Speed A characterization of the speed of the Count property in this collection. Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.CountSpeed | Improve this Doc View Source EqualityComparer Declaration public virtual System.Collections.Generic.IEqualityComparer<T> EqualityComparer { get; } Property Value Type Description System.Collections.Generic.IEqualityComparer <T> | Improve this Doc View Source IsEmpty Declaration public override bool IsEmpty { get; } Property Value Type Description System.Boolean True if this collection is empty Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.IsEmpty | Improve this Doc View Source IsReadOnly Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean True if this collection is read only | Improve this Doc View Source stamp The current stamp value Declaration protected int stamp { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source checkRange(Int32, Int32) Utility method for range checking. Declaration protected void checkRange(int start, int count) Parameters Type Name Description System.Int32 start start of range System.Int32 count size of range | Improve this Doc View Source ComputeHashCode(ICollectionValue<T>, System.Collections.Generic.IEqualityComparer<T>) Compute the unsequenced hash code of a collection Declaration public static int ComputeHashCode(ICollectionValue<T> items, System.Collections.Generic.IEqualityComparer<T> itemequalityComparer) Parameters Type Name Description ICollectionValue <T> items The collection to compute hash code for System.Collections.Generic.IEqualityComparer <T> itemequalityComparer The item equalitySCG.Comparer Returns Type Description System.Int32 The hash code | Improve this Doc View Source GetUnsequencedHashCode() Get the unsequenced collection hash code of this collection: from the cached value if present and up to date, else (re)compute. Declaration public virtual int GetUnsequencedHashCode() Returns Type Description System.Int32 The hash code | Improve this Doc View Source modifycheck(Int32) Check if the collection has been modified since a specified time, expressed as a stamp value. Declaration protected virtual void modifycheck(int thestamp) Parameters Type Name Description System.Int32 thestamp The stamp identifying the target time Exceptions Type Condition CollectionModifiedException if this collection has been updated since a target time | Improve this Doc View Source StaticEquals(ICollection<T>, ICollection<T>, System.Collections.Generic.IEqualityComparer<T>) Examine if collection1 and collection2 are equal as unsequenced collections using the specified item equalityComparer (assumed compatible with the two collections). Declaration public static bool StaticEquals(ICollection<T> collection1, ICollection<T> collection2, System.Collections.Generic.IEqualityComparer<T> itemequalityComparer) Parameters Type Name Description ICollection <T> collection1 The first collection ICollection <T> collection2 The second collection System.Collections.Generic.IEqualityComparer <T> itemequalityComparer The item equalityComparer to use for comparison Returns Type Description System.Boolean True if equal | Improve this Doc View Source UnsequencedEquals(ICollection<T>) Check if the contents of otherCollection is equal to the contents of this in the unsequenced sense. Uses the item equality comparer of this collection Declaration public virtual bool UnsequencedEquals(ICollection<T> otherCollection) Parameters Type Name Description ICollection <T> otherCollection The collection to compare to. Returns Type Description System.Boolean True if equal | Improve this Doc View Source updatecheck() Check if it is valid to perform update operations, and if so increment stamp. Declaration protected virtual void updatecheck() Exceptions Type Condition ReadOnlyCollectionException If collection is read-only Implements ICollectionValue<T> System.Collections.Generic.IEnumerable<> IShowable IFormattable"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.CollectionChangedHandler-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.CollectionChangedHandler-1.html",
    "title": "Delegate CollectionChangedHandler<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate CollectionChangedHandler<T> The type of event raised after an operation on a collection has changed its contents. Normally, a multioperation like AddAll, C5.IExtensible`1.AddAll(System.Collections.Generic.IEnumerable{`0}) will only fire one CollectionChanged event. Any operation that changes the collection must fire CollectionChanged as its last event. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public delegate void CollectionChangedHandler<T>(object sender); Parameters Type Name Description System.Object sender Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.CollectionClearedHandler-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.CollectionClearedHandler-1.html",
    "title": "Delegate CollectionClearedHandler<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate CollectionClearedHandler<T> The type of event raised after the Clear() operation on a collection. Note: The Clear() operation will not fire ItemsRemoved events. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public delegate void CollectionClearedHandler<T>(object sender, ClearedEventArgs eventArgs); Parameters Type Name Description System.Object sender ClearedEventArgs eventArgs Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.CollectionModifiedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.CollectionModifiedException.html",
    "title": "Class CollectionModifiedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectionModifiedException An exception thrown by enumerators, range views etc. when accessed after the underlying collection has been modified. Inheritance System.Object CollectionModifiedException Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class CollectionModifiedException : Exception Constructors | Improve this Doc View Source CollectionModifiedException() Create a simple exception with no further explanation. Declaration public CollectionModifiedException() | Improve this Doc View Source CollectionModifiedException(String) Create the exception with an explanation of the reason. Declaration public CollectionModifiedException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.CollectionValueBase-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.CollectionValueBase-1.html",
    "title": "Class CollectionValueBase<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectionValueBase<T> Base class for classes implementing ICollectionValue[T] Inheritance System.Object EnumerableBase <T> CollectionValueBase<T> CollectionBase<T> DictionaryBase<K, V> DirectedCollectionValueBase<T> Implements ICollectionValue <T> System.Collections.Generic.IEnumerable <T> IShowable IFormattable Inherited Members EnumerableBase<T>.GetEnumerator() EnumerableBase<T>.countItems(System.Collections.Generic.IEnumerable<T>) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class CollectionValueBase<T> : EnumerableBase<T>, ICollectionValue<T>, System.Collections.Generic.IEnumerable<T>, IShowable, IFormattable Type Parameters Name Description T Properties | Improve this Doc View Source ActiveEvents A flag bitmap of the events currently subscribed to by this collection. Declaration public virtual EventTypeEnum ActiveEvents { get; } Property Value Type Description EventTypeEnum | Improve this Doc View Source Count The number of items in this collection. Declaration public abstract int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source CountSpeed The value is symbolic indicating the type of asymptotic complexity in terms of the size of this collection (worst-case or amortized as relevant). Declaration public abstract Speed CountSpeed { get; } Property Value Type Description Speed A characterization of the speed of the Count property in this collection. | Improve this Doc View Source IsEmpty Check if collection is empty. Declaration public abstract bool IsEmpty { get; } Property Value Type Description System.Boolean True if empty | Improve this Doc View Source ListenableEvents Declaration public virtual EventTypeEnum ListenableEvents { get; } Property Value Type Description EventTypeEnum Methods | Improve this Doc View Source All(Func<T, Boolean>) Check if all items in this collection satisfies a specific predicate. Declaration public virtual bool All(Func<T, bool> predicate) Parameters Type Name Description Func <T, System.Boolean > predicate A delegate ( Func<, > with R = bool ) defining the predicate Returns Type Description System.Boolean True if all items satisfies the predicate | Improve this Doc View Source Apply(Action<T>) Apply an single argument action, Action<> to this enumerable Declaration public virtual void Apply(Action<T> action) Parameters Type Name Description Action <T> action The action delegate | Improve this Doc View Source Choose() Choose some item of this collection. Declaration public abstract T Choose() Returns Type Description T Exceptions Type Condition NoSuchItemException if collection is empty. | Improve this Doc View Source CopyTo(T[], Int32) Copy the items of this collection to part of an array. Declaration public virtual void CopyTo(T[] array, int index) Parameters Type Name Description T[] array The array to copy to. System.Int32 index The starting index. | Improve this Doc View Source Exists(Func<T, Boolean>) Check if there exists an item that satisfies a specific predicate in this collection. Declaration public virtual bool Exists(Func<T, bool> predicate) Parameters Type Name Description Func <T, System.Boolean > predicate A delegate ( Func<, > with R = bool ) defining the predicate Returns Type Description System.Boolean True if such an item exists | Improve this Doc View Source Filter(Func<T, Boolean>) Create an enumerable, enumerating the items of this collection that satisfies a certain condition. Declaration public virtual System.Collections.Generic.IEnumerable<T> Filter(Func<T, bool> predicate) Parameters Type Name Description Func <T, System.Boolean > predicate A delegate ( Func<, > with R = bool ) defining the predicate Returns Type Description System.Collections.Generic.IEnumerable <T> The filtered enumerable | Improve this Doc View Source Find(Func<T, Boolean>, out T) Check if there exists an item that satisfies a specific predicate in this collection and return the first one in enumeration order. Declaration public virtual bool Find(Func<T, bool> predicate, out T item) Parameters Type Name Description Func <T, System.Boolean > predicate A delegate ( Func<, > with R == bool ) defining the predicate T item Returns Type Description System.Boolean True is such an item exists | Improve this Doc View Source raiseCollectionChanged() Fire the CollectionChanged event Declaration protected virtual void raiseCollectionChanged() | Improve this Doc View Source raiseCollectionCleared(Boolean, Int32) Fire the CollectionCleared event Declaration protected virtual void raiseCollectionCleared(bool full, int count) Parameters Type Name Description System.Boolean full System.Int32 count | Improve this Doc View Source raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) Fire the CollectionCleared event Declaration protected virtual void raiseCollectionCleared(bool full, int count, int? offset) Parameters Type Name Description System.Boolean full System.Int32 count System.Nullable < System.Int32 > offset | Improve this Doc View Source raiseForAdd(T) Declaration protected virtual void raiseForAdd(T item) Parameters Type Name Description T item | Improve this Doc View Source raiseForInsert(Int32, T) Declaration protected virtual void raiseForInsert(int i, T item) Parameters Type Name Description System.Int32 i T item | Improve this Doc View Source raiseForRemove(T) Declaration protected void raiseForRemove(T item) Parameters Type Name Description T item | Improve this Doc View Source raiseForRemove(T, Int32) Declaration protected void raiseForRemove(T item, int count) Parameters Type Name Description T item System.Int32 count | Improve this Doc View Source raiseForRemoveAll(ICollectionValue<T>) Declaration protected virtual void raiseForRemoveAll(ICollectionValue<T> wasRemoved) Parameters Type Name Description ICollectionValue <T> wasRemoved | Improve this Doc View Source raiseForRemoveAt(Int32, T) Declaration protected void raiseForRemoveAt(int index, T item) Parameters Type Name Description System.Int32 index T item | Improve this Doc View Source raiseForSetThis(Int32, T, T) Declaration protected virtual void raiseForSetThis(int index, T value, T item) Parameters Type Name Description System.Int32 index T value T item | Improve this Doc View Source raiseForUpdate(T, T) Declaration protected virtual void raiseForUpdate(T newitem, T olditem) Parameters Type Name Description T newitem T olditem | Improve this Doc View Source raiseForUpdate(T, T, Int32) Declaration protected virtual void raiseForUpdate(T newitem, T olditem, int count) Parameters Type Name Description T newitem T olditem System.Int32 count | Improve this Doc View Source raiseItemInserted(T, Int32) Fire the ItemInserted event Declaration protected virtual void raiseItemInserted(T item, int index) Parameters Type Name Description T item The item that was added System.Int32 index | Improve this Doc View Source raiseItemRemovedAt(T, Int32) Fire the ItemRemovedAt event Declaration protected virtual void raiseItemRemovedAt(T item, int index) Parameters Type Name Description T item The item that was removed System.Int32 index | Improve this Doc View Source raiseItemsAdded(T, Int32) Fire the ItemsAdded event Declaration protected virtual void raiseItemsAdded(T item, int count) Parameters Type Name Description T item The item that was added System.Int32 count | Improve this Doc View Source raiseItemsRemoved(T, Int32) Fire the ItemsRemoved event Declaration protected virtual void raiseItemsRemoved(T item, int count) Parameters Type Name Description T item The item that was removed System.Int32 count | Improve this Doc View Source Show(System.Text.StringBuilder, ref Int32, IFormatProvider) Declaration public virtual bool Show(System.Text.StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description System.Text.StringBuilder stringbuilder System.Int32 rest IFormatProvider formatProvider Returns Type Description System.Boolean | Improve this Doc View Source ToArray() Create an array with the items of this collection (in the same order as an enumerator would output them). Declaration public virtual T[] ToArray() Returns Type Description T[] The array | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public virtual string ToString(string format, IFormatProvider formatProvider) Parameters Type Name Description System.String format IFormatProvider formatProvider Returns Type Description System.String Events | Improve this Doc View Source CollectionChanged The change event. Will be raised for every change operation on the collection. Declaration public virtual event CollectionChangedHandler<T> CollectionChanged Event Type Type Description CollectionChangedHandler <T> | Improve this Doc View Source CollectionCleared The clear event. Will be raised for every Clear operation on the collection. Declaration public virtual event CollectionClearedHandler<T> CollectionCleared Event Type Type Description CollectionClearedHandler <T> | Improve this Doc View Source ItemInserted The item added event. Will be raised for every individual addition to the collection. Declaration public virtual event ItemInsertedHandler<T> ItemInserted Event Type Type Description ItemInsertedHandler <T> | Improve this Doc View Source ItemRemovedAt The item removed event. Will be raised for every individual removal from the collection. Declaration public virtual event ItemRemovedAtHandler<T> ItemRemovedAt Event Type Type Description ItemRemovedAtHandler <T> | Improve this Doc View Source ItemsAdded The item added event. Will be raised for every individual addition to the collection. Declaration public virtual event ItemsAddedHandler<T> ItemsAdded Event Type Type Description ItemsAddedHandler <T> | Improve this Doc View Source ItemsRemoved The item removed event. Will be raised for every individual removal from the collection. Declaration public virtual event ItemsRemovedHandler<T> ItemsRemoved Event Type Type Description ItemsRemovedHandler <T> Implements ICollectionValue<T> System.Collections.Generic.IEnumerable<> IShowable IFormattable"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.CollectionValueBase-1.RaiseForRemoveAllHandler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.CollectionValueBase-1.RaiseForRemoveAllHandler.html",
    "title": "Class CollectionValueBase<T>.RaiseForRemoveAllHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectionValueBase<T>.RaiseForRemoveAllHandler Inheritance System.Object CollectionValueBase<T>.RaiseForRemoveAllHandler Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax protected class RaiseForRemoveAllHandler : object Constructors | Improve this Doc View Source RaiseForRemoveAllHandler(CollectionValueBase<T>) Declaration public RaiseForRemoveAllHandler(CollectionValueBase<T> collection) Parameters Type Name Description CollectionValueBase <T> collection Fields | Improve this Doc View Source MustFire Declaration public readonly bool MustFire Field Value Type Description System.Boolean Methods | Improve this Doc View Source Raise() Declaration public void Raise() | Improve this Doc View Source Remove(T) Declaration public void Remove(T item) Parameters Type Name Description T item"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ConcurrentEnumerationException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ConcurrentEnumerationException.html",
    "title": "Class ConcurrentEnumerationException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConcurrentEnumerationException An exception thrown by the MemorySafeEnumerator if the collection is enumerated by multiple threads concurrently Inheritance System.Object ConcurrentEnumerationException Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class ConcurrentEnumerationException : Exception Constructors | Improve this Doc View Source ConcurrentEnumerationException() Create a simple exception with no further explanation. Declaration public ConcurrentEnumerationException() | Improve this Doc View Source ConcurrentEnumerationException(String) Create a simple exception with the an explanation contained in the error message. Declaration public ConcurrentEnumerationException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.DictionaryBase-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.DictionaryBase-2.html",
    "title": "Class DictionaryBase<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DictionaryBase<K, V> A base class for implementing a dictionary based on a set collection implementation. See the source code for C5.HashDictionary`2 for an example Inheritance System.Object EnumerableBase < KeyValuePair <K, V>> CollectionValueBase < KeyValuePair <K, V>> DictionaryBase<K, V> HashDictionary<K, V> SortedDictionaryBase<K, V> Implements IDictionary <K, V> ICollectionValue < KeyValuePair <K, V>> System.Collections.Generic.IEnumerable < KeyValuePair <K, V>> IShowable IFormattable Inherited Members CollectionValueBase<KeyValuePair<K, V>>.ListenableEvents CollectionValueBase<KeyValuePair<K, V>>.ActiveEvents CollectionValueBase<KeyValuePair<K, V>>.CollectionChanged CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionChanged() CollectionValueBase<KeyValuePair<K, V>>.CollectionCleared CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<KeyValuePair<K, V>>.ItemsAdded CollectionValueBase<KeyValuePair<K, V>>.raiseItemsAdded(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemsRemoved CollectionValueBase<KeyValuePair<K, V>>.raiseItemsRemoved(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemInserted CollectionValueBase<KeyValuePair<K, V>>.raiseItemInserted(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemRemovedAt CollectionValueBase<KeyValuePair<K, V>>.raiseItemRemovedAt(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForSetThis(Int32, KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForInsert(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAt(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForAdd(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAll(ICollectionValue<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.IsEmpty CollectionValueBase<KeyValuePair<K, V>>.Count CollectionValueBase<KeyValuePair<K, V>>.CountSpeed CollectionValueBase<KeyValuePair<K, V>>.CopyTo(KeyValuePair<K, V>[], Int32) CollectionValueBase<KeyValuePair<K, V>>.ToArray() CollectionValueBase<KeyValuePair<K, V>>.Apply(Action<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.Exists(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Find(Func<KeyValuePair<K, V>, Boolean>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.All(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Filter(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Choose() CollectionValueBase<KeyValuePair<K, V>>.Show(System.Text.StringBuilder, Int32, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString(String, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString() EnumerableBase<KeyValuePair<K, V>>.GetEnumerator() EnumerableBase<KeyValuePair<K, V>>.countItems(System.Collections.Generic.IEnumerable<KeyValuePair<K, V>>) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class DictionaryBase<K, V> : CollectionValueBase<KeyValuePair<K, V>>, IDictionary<K, V>, ICollectionValue<KeyValuePair<K, V>>, System.Collections.Generic.IEnumerable<KeyValuePair<K, V>>, IShowable, IFormattable Type Parameters Name Description K V Constructors | Improve this Doc View Source DictionaryBase(System.Collections.Generic.IEqualityComparer<K>, MemoryType) Declaration protected DictionaryBase(System.Collections.Generic.IEqualityComparer<K> keyequalityComparer, MemoryType memoryType) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <K> keyequalityComparer MemoryType memoryType Fields | Improve this Doc View Source pairs The set collection of entries underlying this dictionary implementation Declaration protected ICollection<KeyValuePair<K, V>> pairs Field Value Type Description ICollection < KeyValuePair <K, V>> Properties | Improve this Doc View Source ActiveEvents Declaration public override EventTypeEnum ActiveEvents { get; } Property Value Type Description EventTypeEnum Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.ActiveEvents | Improve this Doc View Source ContainsSpeed Declaration public virtual Speed ContainsSpeed { get; } Property Value Type Description Speed | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 The number of entries in the dictionary Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.Count | Improve this Doc View Source CountSpeed Declaration public override Speed CountSpeed { get; } Property Value Type Description Speed The number of entries in the dictionary Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.CountSpeed | Improve this Doc View Source EqualityComparer Declaration public virtual System.Collections.Generic.IEqualityComparer<K> EqualityComparer { get; } Property Value Type Description System.Collections.Generic.IEqualityComparer <K> | Improve this Doc View Source Func Declaration public virtual Func<K, V> Func { get; } Property Value Type Description Func <K, V> | Improve this Doc View Source IsEmpty Declaration public override bool IsEmpty { get; } Property Value Type Description System.Boolean True if this collection is empty. Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.IsEmpty | Improve this Doc View Source IsReadOnly Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean True if dictionary is read only | Improve this Doc View Source Item[K] Indexer by key for dictionary. The get method will throw an exception if no entry is found. The set method behaves like C5.DictionaryBase`2.UpdateOrAdd(`0,`1) . Declaration public virtual V this[K key] { get; set; } Parameters Type Name Description K key Property Value Type Description V The value corresponding to the key Exceptions Type Condition NoSuchItemException On get if no entry is found. | Improve this Doc View Source Keys Declaration public virtual ICollectionValue<K> Keys { get; } Property Value Type Description ICollectionValue <K> A collection containing all the keys of the dictionary | Improve this Doc View Source ListenableEvents Declaration public override EventTypeEnum ListenableEvents { get; } Property Value Type Description EventTypeEnum Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.ListenableEvents | Improve this Doc View Source Values Declaration public virtual ICollectionValue<V> Values { get; } Property Value Type Description ICollectionValue <V> A collection containing all the values of the dictionary Methods | Improve this Doc View Source Add(K, V) Add a new (key, value) pair (a mapping) to the dictionary. Declaration public virtual void Add(K key, V value) Parameters Type Name Description K key Key to add V value Value to add Exceptions Type Condition DuplicateNotAllowedException if there already is an entry with the same key. | Improve this Doc View Source AddAll<L, W>(System.Collections.Generic.IEnumerable<KeyValuePair<L, W>>) Add the entries from a collection of C5.KeyValuePair`2 pairs to this dictionary. TODO: add restrictions L:K and W:V when the .Net SDK allows it Declaration public virtual void AddAll<L, W>(System.Collections.Generic.IEnumerable<KeyValuePair<L, W>> entries) where L : K where W : V Parameters Type Name Description System.Collections.Generic.IEnumerable < KeyValuePair <L, W>> entries Type Parameters Name Description L W Exceptions Type Condition DuplicateNotAllowedException If the input contains duplicate keys or a key already present in this dictionary. | Improve this Doc View Source Check() Check the integrity of the internal data structures of this dictionary. Declaration public virtual bool Check() Returns Type Description System.Boolean True if check does not fail. | Improve this Doc View Source Choose() Choose some entry in this Dictionary. Declaration public override KeyValuePair<K, V> Choose() Returns Type Description KeyValuePair <K, V> Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.Choose() Exceptions Type Condition NoSuchItemException if collection is empty. | Improve this Doc View Source Clear() Remove all entries from the dictionary Declaration public virtual void Clear() | Improve this Doc View Source Contains(K) Check if there is an entry with a specified key Declaration public virtual bool Contains(K key) Parameters Type Name Description K key The key to look for Returns Type Description System.Boolean True if key was found | Improve this Doc View Source ContainsAll<H>(System.Collections.Generic.IEnumerable<H>) Declaration public virtual bool ContainsAll<H>(System.Collections.Generic.IEnumerable<H> keys) where H : K Parameters Type Name Description System.Collections.Generic.IEnumerable <H> keys Returns Type Description System.Boolean Type Parameters Name Description H | Improve this Doc View Source Find(ref K, out V) Check if there is an entry with a specified key and report the corresponding value if found. This can be seen as a safe form of \"val = this[key]\". Declaration public virtual bool Find(ref K key, out V value) Parameters Type Name Description K key The key to look for V value On exit, the value of the entry Returns Type Description System.Boolean True if key was found | Improve this Doc View Source FindOrAdd(K, ref V) Look for a specific key in the dictionary. If found, report the corresponding value, else add an entry with the key and the supplied value. Declaration public virtual bool FindOrAdd(K key, ref V value) Parameters Type Name Description K key On entry the key to look for V value On entry the value to add if the key is not found. On exit the value found if any. Returns Type Description System.Boolean True if key was found | Improve this Doc View Source GetEnumerator() Create an enumerator for the collection of entries of the dictionary Declaration public override System.Collections.Generic.IEnumerator<KeyValuePair<K, V>> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < KeyValuePair <K, V>> The enumerator Overrides Lucene.Net.Support.C5.EnumerableBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.GetEnumerator() | Improve this Doc View Source Remove(K) Remove an entry with a given key from the dictionary Declaration public virtual bool Remove(K key) Parameters Type Name Description K key The key of the entry to remove Returns Type Description System.Boolean True if an entry was found (and removed) | Improve this Doc View Source Remove(K, out V) Remove an entry with a given key from the dictionary and report its value. Declaration public virtual bool Remove(K key, out V value) Parameters Type Name Description K key The key of the entry to remove V value On exit, the value of the removed entry Returns Type Description System.Boolean True if an entry was found (and removed) | Improve this Doc View Source Show(System.Text.StringBuilder, ref Int32, IFormatProvider) Declaration public override bool Show(System.Text.StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description System.Text.StringBuilder stringbuilder System.Int32 rest IFormatProvider formatProvider Returns Type Description System.Boolean Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.Show(System.Text.StringBuilder, System.Int32, IFormatProvider) | Improve this Doc View Source Update(K, V) Look for a specific key in the dictionary and if found replace the value with a new one. This can be seen as a non-adding version of \"this[key] = val\". Declaration public virtual bool Update(K key, V value) Parameters Type Name Description K key The key to look for V value The new value Returns Type Description System.Boolean True if key was found | Improve this Doc View Source Update(K, V, out V) Declaration public virtual bool Update(K key, V value, out V oldvalue) Parameters Type Name Description K key V value V oldvalue Returns Type Description System.Boolean | Improve this Doc View Source UpdateOrAdd(K, V) Update value in dictionary corresponding to key if found, else add new entry. More general than \"this[key] = val;\" by reporting if key was found. Declaration public virtual bool UpdateOrAdd(K key, V value) Parameters Type Name Description K key The key to look for V value The value to add or replace with. Returns Type Description System.Boolean True if entry was updated. | Improve this Doc View Source UpdateOrAdd(K, V, out V) Update value in dictionary corresponding to key if found, else add new entry. More general than \"this[key] = val;\" by reporting if key was found and the old value if any. Declaration public virtual bool UpdateOrAdd(K key, V value, out V oldvalue) Parameters Type Name Description K key V value V oldvalue Returns Type Description System.Boolean Events | Improve this Doc View Source CollectionChanged The change event. Will be raised for every change operation on the collection. Declaration public override event CollectionChangedHandler<KeyValuePair<K, V>> CollectionChanged Event Type Type Description CollectionChangedHandler < KeyValuePair <K, V>> Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.CollectionChanged | Improve this Doc View Source CollectionCleared The change event. Will be raised for every change operation on the collection. Declaration public override event CollectionClearedHandler<KeyValuePair<K, V>> CollectionCleared Event Type Type Description CollectionClearedHandler < KeyValuePair <K, V>> Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.CollectionCleared | Improve this Doc View Source ItemsAdded The item added event. Will be raised for every individual addition to the collection. Declaration public override event ItemsAddedHandler<KeyValuePair<K, V>> ItemsAdded Event Type Type Description ItemsAddedHandler < KeyValuePair <K, V>> Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.ItemsAdded | Improve this Doc View Source ItemsRemoved The item added event. Will be raised for every individual removal from the collection. Declaration public override event ItemsRemovedHandler<KeyValuePair<K, V>> ItemsRemoved Event Type Type Description ItemsRemovedHandler < KeyValuePair <K, V>> Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.ItemsRemoved Implements IDictionary<K, V> ICollectionValue<T> System.Collections.Generic.IEnumerable<> IShowable IFormattable"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.DirectedCollectionBase-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.DirectedCollectionBase-1.html",
    "title": "Class DirectedCollectionBase<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectedCollectionBase<T> Inheritance System.Object EnumerableBase <T> CollectionValueBase <T> CollectionBase <T> DirectedCollectionBase<T> SequencedBase<T> Implements IDirectedCollectionValue <T> ICollectionValue <T> IShowable IFormattable IDirectedEnumerable <T> System.Collections.Generic.IEnumerable <T> Inherited Members CollectionBase<T>.isReadOnlyBase CollectionBase<T>.stamp CollectionBase<T>.size CollectionBase<T>.itemequalityComparer CollectionBase<T>.checkRange(Int32, Int32) CollectionBase<T>.ComputeHashCode(ICollectionValue<T>, System.Collections.Generic.IEqualityComparer<T>) CollectionBase<T>.StaticEquals(ICollection<T>, ICollection<T>, System.Collections.Generic.IEqualityComparer<T>) CollectionBase<T>.GetUnsequencedHashCode() CollectionBase<T>.UnsequencedEquals(ICollection<T>) CollectionBase<T>.modifycheck(Int32) CollectionBase<T>.updatecheck() CollectionBase<T>.IsReadOnly CollectionBase<T>.Count CollectionBase<T>.CountSpeed CollectionBase<T>.EqualityComparer CollectionBase<T>.IsEmpty CollectionValueBase<T>.ListenableEvents CollectionValueBase<T>.ActiveEvents CollectionValueBase<T>.CollectionChanged CollectionValueBase<T>.raiseCollectionChanged() CollectionValueBase<T>.CollectionCleared CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<T>.ItemsAdded CollectionValueBase<T>.raiseItemsAdded(T, Int32) CollectionValueBase<T>.ItemsRemoved CollectionValueBase<T>.raiseItemsRemoved(T, Int32) CollectionValueBase<T>.ItemInserted CollectionValueBase<T>.raiseItemInserted(T, Int32) CollectionValueBase<T>.ItemRemovedAt CollectionValueBase<T>.raiseItemRemovedAt(T, Int32) CollectionValueBase<T>.raiseForSetThis(Int32, T, T) CollectionValueBase<T>.raiseForInsert(Int32, T) CollectionValueBase<T>.raiseForRemove(T) CollectionValueBase<T>.raiseForRemove(T, Int32) CollectionValueBase<T>.raiseForRemoveAt(Int32, T) CollectionValueBase<T>.raiseForUpdate(T, T) CollectionValueBase<T>.raiseForUpdate(T, T, Int32) CollectionValueBase<T>.raiseForAdd(T) CollectionValueBase<T>.raiseForRemoveAll(ICollectionValue<T>) CollectionValueBase<T>.CopyTo(T[], Int32) CollectionValueBase<T>.ToArray() CollectionValueBase<T>.Apply(Action<T>) CollectionValueBase<T>.Exists(Func<T, Boolean>) CollectionValueBase<T>.Find(Func<T, Boolean>, T) CollectionValueBase<T>.All(Func<T, Boolean>) CollectionValueBase<T>.Filter(Func<T, Boolean>) CollectionValueBase<T>.Choose() CollectionValueBase<T>.Show(System.Text.StringBuilder, Int32, IFormatProvider) CollectionValueBase<T>.ToString(String, IFormatProvider) CollectionValueBase<T>.ToString() EnumerableBase<T>.GetEnumerator() EnumerableBase<T>.countItems(System.Collections.Generic.IEnumerable<T>) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class DirectedCollectionBase<T> : CollectionBase<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, System.Collections.Generic.IEnumerable<T> Type Parameters Name Description T Constructors | Improve this Doc View Source DirectedCollectionBase(System.Collections.Generic.IEqualityComparer<T>, MemoryType) Declaration protected DirectedCollectionBase(System.Collections.Generic.IEqualityComparer<T> itemequalityComparer, MemoryType memoryType) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <T> itemequalityComparer MemoryType memoryType The type of memory for the enumerator used to iterate the collection Properties | Improve this Doc View Source Direction Forwards if same, else Backwards Declaration public virtual EnumerationDirection Direction { get; } Property Value Type Description EnumerationDirection The enumeration direction relative to the original collection. Methods | Improve this Doc View Source Backwards() Declaration public abstract IDirectedCollectionValue<T> Backwards() Returns Type Description IDirectedCollectionValue <T> | Improve this Doc View Source FindLast(Func<T, Boolean>, out T) Check if there exists an item that satisfies a specific predicate in this collection and return the first one in enumeration order. Declaration public virtual bool FindLast(Func<T, bool> predicate, out T item) Parameters Type Name Description Func <T, System.Boolean > predicate A delegate ( Func<, > with R == bool ) defining the predicate T item Returns Type Description System.Boolean True is such an item exists Explicit Interface Implementations | Improve this Doc View Source IDirectedEnumerable<T>.Backwards() Declaration IDirectedEnumerable<T> IDirectedEnumerable<T>.Backwards() Returns Type Description IDirectedEnumerable <T> Implements IDirectedCollectionValue<T> ICollectionValue<T> IShowable IFormattable IDirectedEnumerable<T> System.Collections.Generic.IEnumerable<>"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.DirectedCollectionValueBase-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.DirectedCollectionValueBase-1.html",
    "title": "Class DirectedCollectionValueBase<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectedCollectionValueBase<T> Inheritance System.Object EnumerableBase <T> CollectionValueBase <T> DirectedCollectionValueBase<T> Implements IDirectedCollectionValue <T> ICollectionValue <T> IShowable IFormattable IDirectedEnumerable <T> System.Collections.Generic.IEnumerable <T> Inherited Members CollectionValueBase<T>.ListenableEvents CollectionValueBase<T>.ActiveEvents CollectionValueBase<T>.CollectionChanged CollectionValueBase<T>.raiseCollectionChanged() CollectionValueBase<T>.CollectionCleared CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<T>.ItemsAdded CollectionValueBase<T>.raiseItemsAdded(T, Int32) CollectionValueBase<T>.ItemsRemoved CollectionValueBase<T>.raiseItemsRemoved(T, Int32) CollectionValueBase<T>.ItemInserted CollectionValueBase<T>.raiseItemInserted(T, Int32) CollectionValueBase<T>.ItemRemovedAt CollectionValueBase<T>.raiseItemRemovedAt(T, Int32) CollectionValueBase<T>.raiseForSetThis(Int32, T, T) CollectionValueBase<T>.raiseForInsert(Int32, T) CollectionValueBase<T>.raiseForRemove(T) CollectionValueBase<T>.raiseForRemove(T, Int32) CollectionValueBase<T>.raiseForRemoveAt(Int32, T) CollectionValueBase<T>.raiseForUpdate(T, T) CollectionValueBase<T>.raiseForUpdate(T, T, Int32) CollectionValueBase<T>.raiseForAdd(T) CollectionValueBase<T>.raiseForRemoveAll(ICollectionValue<T>) CollectionValueBase<T>.IsEmpty CollectionValueBase<T>.Count CollectionValueBase<T>.CountSpeed CollectionValueBase<T>.CopyTo(T[], Int32) CollectionValueBase<T>.ToArray() CollectionValueBase<T>.Apply(Action<T>) CollectionValueBase<T>.Exists(Func<T, Boolean>) CollectionValueBase<T>.Find(Func<T, Boolean>, T) CollectionValueBase<T>.All(Func<T, Boolean>) CollectionValueBase<T>.Filter(Func<T, Boolean>) CollectionValueBase<T>.Choose() CollectionValueBase<T>.Show(System.Text.StringBuilder, Int32, IFormatProvider) CollectionValueBase<T>.ToString(String, IFormatProvider) CollectionValueBase<T>.ToString() EnumerableBase<T>.GetEnumerator() EnumerableBase<T>.countItems(System.Collections.Generic.IEnumerable<T>) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class DirectedCollectionValueBase<T> : CollectionValueBase<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, System.Collections.Generic.IEnumerable<T> Type Parameters Name Description T Properties | Improve this Doc View Source Direction Forwards if same, else Backwards Declaration public virtual EnumerationDirection Direction { get; } Property Value Type Description EnumerationDirection The enumeration direction relative to the original collection. Methods | Improve this Doc View Source Backwards() Declaration public abstract IDirectedCollectionValue<T> Backwards() Returns Type Description IDirectedCollectionValue <T> | Improve this Doc View Source FindLast(Func<T, Boolean>, out T) Check if there exists an item that satisfies a specific predicate in this collection and return the first one in enumeration order. Declaration public virtual bool FindLast(Func<T, bool> predicate, out T item) Parameters Type Name Description Func <T, System.Boolean > predicate A delegate ( Func<, > with R == bool ) defining the predicate T item Returns Type Description System.Boolean True is such an item exists Explicit Interface Implementations | Improve this Doc View Source IDirectedEnumerable<T>.Backwards() Declaration IDirectedEnumerable<T> IDirectedEnumerable<T>.Backwards() Returns Type Description IDirectedEnumerable <T> Implements IDirectedCollectionValue<T> ICollectionValue<T> IShowable IFormattable IDirectedEnumerable<T> System.Collections.Generic.IEnumerable<>"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.DuplicateNotAllowedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.DuplicateNotAllowedException.html",
    "title": "Class DuplicateNotAllowedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DuplicateNotAllowedException An exception thrown when an operation attempts to create a duplicate in a collection with set semantics ( C5.IExtensible`1.AllowsDuplicates is false) or attempts to create a duplicate key in a dictionary. With collections this can only happen with Insert operations on lists, since the Add operations will not try to create duplictes and either ignore the failure or report it in a bool return value. With dictionaries this can happen with the C5.IDictionary`2.Add(`0,`1) metod. Inheritance System.Object DuplicateNotAllowedException Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class DuplicateNotAllowedException : Exception Constructors | Improve this Doc View Source DuplicateNotAllowedException() Create a simple exception with no further explanation. Declaration public DuplicateNotAllowedException() | Improve this Doc View Source DuplicateNotAllowedException(String) Create the exception with an explanation of the reason. Declaration public DuplicateNotAllowedException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.EnumerableBase-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.EnumerableBase-1.html",
    "title": "Class EnumerableBase<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnumerableBase<T> A base class for implementing an IEnumerable<T> Inheritance System.Object EnumerableBase<T> CollectionValueBase<T> Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class EnumerableBase<T> : System.Collections.Generic.IEnumerable<T> Type Parameters Name Description T Methods | Improve this Doc View Source countItems(System.Collections.Generic.IEnumerable<T>) Count the number of items in an enumerable by enumeration Declaration protected static int countItems(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The enumerable to count Returns Type Description System.Int32 The size of the enumerable | Improve this Doc View Source GetEnumerator() Create an enumerator for this collection. Declaration public abstract System.Collections.Generic.IEnumerator<T> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <T> The enumerator"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.EnumerationDirection.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.EnumerationDirection.html",
    "title": "Enum EnumerationDirection | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum EnumerationDirection Direction of enumeration order relative to original collection. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public enum EnumerationDirection : int Fields Name Description Backwards Opposite direction Forwards Same direction"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.EqualityComparer-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.EqualityComparer-1.html",
    "title": "Class EqualityComparer<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EqualityComparer<T> Utility class for building default generic equality comparers. Inheritance System.Object EqualityComparer<T> Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public static class EqualityComparer<T> : object Type Parameters Name Description T Properties | Improve this Doc View Source Default A default generic equality comparer for type T. The procedure is as follows: Declaration public static System.Collections.Generic.IEqualityComparer<T> Default { get; } Property Value Type Description System.Collections.Generic.IEqualityComparer <T> The comparer"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.EventTypeEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.EventTypeEnum.html",
    "title": "Enum EventTypeEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum EventTypeEnum Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public enum EventTypeEnum : int Fields Name Description Added All Basic Changed Cleared Inserted None Removed RemovedAt"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.FixedSizeCollectionException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.FixedSizeCollectionException.html",
    "title": "Class FixedSizeCollectionException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedSizeCollectionException Inheritance System.Object FixedSizeCollectionException Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class FixedSizeCollectionException : Exception Constructors | Improve this Doc View Source FixedSizeCollectionException() Create a simple exception with no further explanation. Declaration public FixedSizeCollectionException() | Improve this Doc View Source FixedSizeCollectionException(String) Create the exception with an explanation of the reason. Declaration public FixedSizeCollectionException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.HashDictionary-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.HashDictionary-2.html",
    "title": "Class HashDictionary<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HashDictionary<K, V> A generic dictionary class based on a hash set class C5.HashSet`1 . Inheritance System.Object EnumerableBase < KeyValuePair <K, V>> CollectionValueBase < KeyValuePair <K, V>> DictionaryBase <K, V> HashDictionary<K, V> Implements IDictionary <K, V> ICollectionValue < KeyValuePair <K, V>> System.Collections.Generic.IEnumerable < KeyValuePair <K, V>> IShowable IFormattable Inherited Members DictionaryBase<K, V>.pairs DictionaryBase<K, V>.CollectionChanged DictionaryBase<K, V>.CollectionCleared DictionaryBase<K, V>.ItemsAdded DictionaryBase<K, V>.ItemsRemoved DictionaryBase<K, V>.ListenableEvents DictionaryBase<K, V>.ActiveEvents DictionaryBase<K, V>.EqualityComparer DictionaryBase<K, V>.Add(K, V) DictionaryBase<K, V>.AddAll<L, W>(System.Collections.Generic.IEnumerable<KeyValuePair<L, W>>) DictionaryBase<K, V>.Remove(K) DictionaryBase<K, V>.Remove(K, V) DictionaryBase<K, V>.Clear() DictionaryBase<K, V>.ContainsSpeed DictionaryBase<K, V>.Contains(K) DictionaryBase<K, V>.ContainsAll<H>(System.Collections.Generic.IEnumerable<H>) DictionaryBase<K, V>.Find(K, V) DictionaryBase<K, V>.Update(K, V) DictionaryBase<K, V>.Update(K, V, V) DictionaryBase<K, V>.FindOrAdd(K, V) DictionaryBase<K, V>.UpdateOrAdd(K, V) DictionaryBase<K, V>.UpdateOrAdd(K, V, V) DictionaryBase<K, V>.Keys DictionaryBase<K, V>.Values DictionaryBase<K, V>.Func DictionaryBase<K, V>.Item[K] DictionaryBase<K, V>.IsReadOnly DictionaryBase<K, V>.Check() DictionaryBase<K, V>.IsEmpty DictionaryBase<K, V>.Count DictionaryBase<K, V>.CountSpeed DictionaryBase<K, V>.Choose() DictionaryBase<K, V>.GetEnumerator() DictionaryBase<K, V>.Show(System.Text.StringBuilder, Int32, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ListenableEvents CollectionValueBase<KeyValuePair<K, V>>.ActiveEvents CollectionValueBase<KeyValuePair<K, V>>.CollectionChanged CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionChanged() CollectionValueBase<KeyValuePair<K, V>>.CollectionCleared CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<KeyValuePair<K, V>>.ItemsAdded CollectionValueBase<KeyValuePair<K, V>>.raiseItemsAdded(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemsRemoved CollectionValueBase<KeyValuePair<K, V>>.raiseItemsRemoved(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemInserted CollectionValueBase<KeyValuePair<K, V>>.raiseItemInserted(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemRemovedAt CollectionValueBase<KeyValuePair<K, V>>.raiseItemRemovedAt(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForSetThis(Int32, KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForInsert(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAt(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForAdd(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAll(ICollectionValue<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.IsEmpty CollectionValueBase<KeyValuePair<K, V>>.Count CollectionValueBase<KeyValuePair<K, V>>.CountSpeed CollectionValueBase<KeyValuePair<K, V>>.CopyTo(KeyValuePair<K, V>[], Int32) CollectionValueBase<KeyValuePair<K, V>>.ToArray() CollectionValueBase<KeyValuePair<K, V>>.Apply(Action<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.Exists(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Find(Func<KeyValuePair<K, V>, Boolean>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.All(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Filter(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Choose() CollectionValueBase<KeyValuePair<K, V>>.Show(System.Text.StringBuilder, Int32, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString(String, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString() EnumerableBase<KeyValuePair<K, V>>.GetEnumerator() EnumerableBase<KeyValuePair<K, V>>.countItems(System.Collections.Generic.IEnumerable<KeyValuePair<K, V>>) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class HashDictionary<K, V> : DictionaryBase<K, V>, IDictionary<K, V>, ICollectionValue<KeyValuePair<K, V>>, System.Collections.Generic.IEnumerable<KeyValuePair<K, V>>, IShowable, IFormattable Type Parameters Name Description K V Constructors | Improve this Doc View Source HashDictionary(MemoryType) Create a hash dictionary using a default equalityComparer for the keys. Initial capacity of internal table will be 16 entries and threshold for expansion is 66% fill. Declaration public HashDictionary(MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description MemoryType memoryType | Improve this Doc View Source HashDictionary(System.Collections.Generic.IEqualityComparer<K>, MemoryType) Create a hash dictionary using a custom equalityComparer for the keys. Initial capacity of internal table will be 16 entries and threshold for expansion is 66% fill. Declaration public HashDictionary(System.Collections.Generic.IEqualityComparer<K> keyequalityComparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <K> keyequalityComparer The external key equalitySCG.Comparer MemoryType memoryType The memory type of the enumerator used to iterate the collection | Improve this Doc View Source HashDictionary(Int32, Double, System.Collections.Generic.IEqualityComparer<K>, MemoryType) Create a hash dictionary using a custom equalityComparer and prescribing the initial size of the dictionary and a non-default threshold for internal table expansion. Declaration public HashDictionary(int capacity, double fill, System.Collections.Generic.IEqualityComparer<K> keyequalityComparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Int32 capacity The initial capacity. Will be rounded upwards to nearest power of 2, at least 16. System.Double fill The expansion threshold. Must be between 10% and 90%. System.Collections.Generic.IEqualityComparer <K> keyequalityComparer The external key equalitySCG.Comparer MemoryType memoryType The memory type of the enumerator used to iterate the collection Implements IDictionary<K, V> ICollectionValue<T> System.Collections.Generic.IEnumerable<> IShowable IFormattable"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.HashSet-1.Feature.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.HashSet-1.Feature.html",
    "title": "Enum HashSet<T>.Feature | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum HashSet<T>.Feature Enum class to assist printing of compilation alternatives. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public enum Feature : short Fields Name Description Chaining Use chaining to resolve index clashes Dummy Nothing InterHashing Use hash function on item hash code LinearProbing Using linear probing to resolve index clashes RandomInterHashing Use a universal family of hash functions on item hash code RefTypeBucket Buckets are of reference type ShrinkTable Shrink table when very sparsely filled ValueTypeBucket Primary buckets are of value type"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.HashSet-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.HashSet-1.html",
    "title": "Class HashSet<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HashSet<T> A set collection class based on linear hashing Inheritance System.Object EnumerableBase <T> CollectionValueBase <T> CollectionBase <T> HashSet<T> Implements ICollection <T> IExtensible <T> ICollectionValue <T> System.Collections.Generic.IEnumerable <T> IShowable IFormattable System.Collections.Generic.ICollection <T> Inherited Members CollectionBase<T>.isReadOnlyBase CollectionBase<T>.stamp CollectionBase<T>.size CollectionBase<T>.itemequalityComparer CollectionBase<T>.checkRange(Int32, Int32) CollectionBase<T>.ComputeHashCode(ICollectionValue<T>, System.Collections.Generic.IEqualityComparer<T>) CollectionBase<T>.StaticEquals(ICollection<T>, ICollection<T>, System.Collections.Generic.IEqualityComparer<T>) CollectionBase<T>.GetUnsequencedHashCode() CollectionBase<T>.UnsequencedEquals(ICollection<T>) CollectionBase<T>.modifycheck(Int32) CollectionBase<T>.updatecheck() CollectionBase<T>.IsReadOnly CollectionBase<T>.Count CollectionBase<T>.CountSpeed CollectionBase<T>.EqualityComparer CollectionBase<T>.IsEmpty CollectionValueBase<T>.ActiveEvents CollectionValueBase<T>.CollectionChanged CollectionValueBase<T>.raiseCollectionChanged() CollectionValueBase<T>.CollectionCleared CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<T>.ItemsAdded CollectionValueBase<T>.raiseItemsAdded(T, Int32) CollectionValueBase<T>.ItemsRemoved CollectionValueBase<T>.raiseItemsRemoved(T, Int32) CollectionValueBase<T>.ItemInserted CollectionValueBase<T>.raiseItemInserted(T, Int32) CollectionValueBase<T>.ItemRemovedAt CollectionValueBase<T>.raiseItemRemovedAt(T, Int32) CollectionValueBase<T>.raiseForSetThis(Int32, T, T) CollectionValueBase<T>.raiseForInsert(Int32, T) CollectionValueBase<T>.raiseForRemove(T) CollectionValueBase<T>.raiseForRemove(T, Int32) CollectionValueBase<T>.raiseForRemoveAt(Int32, T) CollectionValueBase<T>.raiseForUpdate(T, T) CollectionValueBase<T>.raiseForUpdate(T, T, Int32) CollectionValueBase<T>.raiseForAdd(T) CollectionValueBase<T>.raiseForRemoveAll(ICollectionValue<T>) CollectionValueBase<T>.CopyTo(T[], Int32) CollectionValueBase<T>.Apply(Action<T>) CollectionValueBase<T>.Exists(Func<T, Boolean>) CollectionValueBase<T>.Find(Func<T, Boolean>, T) CollectionValueBase<T>.All(Func<T, Boolean>) CollectionValueBase<T>.Filter(Func<T, Boolean>) CollectionValueBase<T>.Show(System.Text.StringBuilder, Int32, IFormatProvider) CollectionValueBase<T>.ToString(String, IFormatProvider) CollectionValueBase<T>.ToString() EnumerableBase<T>.countItems(System.Collections.Generic.IEnumerable<T>) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class HashSet<T> : CollectionBase<T>, ICollection<T>, IExtensible<T>, ICollectionValue<T>, System.Collections.Generic.IEnumerable<T>, IShowable, IFormattable, System.Collections.Generic.ICollection<T> Type Parameters Name Description T Constructors | Improve this Doc View Source HashSet() Declaration public HashSet() | Improve this Doc View Source HashSet(MemoryType) Create a hash set with natural item equalityComparer and default fill threshold (66%) and initial table size (16). Declaration public HashSet(MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description MemoryType memoryType | Improve this Doc View Source HashSet(System.Collections.Generic.IEqualityComparer<T>, MemoryType) Create a hash set with external item equalityComparer and default fill threshold (66%) and initial table size (16). Declaration public HashSet(System.Collections.Generic.IEqualityComparer<T> itemequalityComparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <T> itemequalityComparer The external item equalitySCG.Comparer MemoryType memoryType | Improve this Doc View Source HashSet(Int32, System.Collections.Generic.IEqualityComparer<T>, MemoryType) Create a hash set with external item equalityComparer and default fill threshold (66%) Declaration public HashSet(int capacity, System.Collections.Generic.IEqualityComparer<T> itemequalityComparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Int32 capacity Initial table size (rounded to power of 2, at least 16) System.Collections.Generic.IEqualityComparer <T> itemequalityComparer The external item equalitySCG.Comparer MemoryType memoryType | Improve this Doc View Source HashSet(Int32, Double, System.Collections.Generic.IEqualityComparer<T>, MemoryType) Create a hash set with external item equalityComparer. Declaration public HashSet(int capacity, double fill, System.Collections.Generic.IEqualityComparer<T> itemequalityComparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Int32 capacity Initial table size (rounded to power of 2, at least 16) System.Double fill Fill threshold (in range 10% to 90%) System.Collections.Generic.IEqualityComparer <T> itemequalityComparer The external item equalitySCG.Comparer MemoryType memoryType Properties | Improve this Doc View Source AllowsDuplicates Report if this is a set collection. Declaration public virtual bool AllowsDuplicates { get; } Property Value Type Description System.Boolean Always false | Improve this Doc View Source ContainsSpeed The complexity of the Contains operation Declaration public virtual Speed ContainsSpeed { get; } Property Value Type Description Speed Always returns Speed.Constant | Improve this Doc View Source DuplicatesByCounting By convention this is true for any collection with set semantics. Declaration public virtual bool DuplicatesByCounting { get; } Property Value Type Description System.Boolean True if only one representative of a group of equal items is kept in the collection together with the total count. | Improve this Doc View Source Features Show which implementation features was chosen at compilation time Declaration public static HashSet<T>.Feature Features { get; } Property Value Type Description HashSet.Feature <> | Improve this Doc View Source ListenableEvents Declaration public override EventTypeEnum ListenableEvents { get; } Property Value Type Description EventTypeEnum Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.ListenableEvents Methods | Improve this Doc View Source Add(T) Add an item to this set. Declaration public virtual bool Add(T item) Parameters Type Name Description T item The item to add. Returns Type Description System.Boolean True if item was added (i.e. not found) | Improve this Doc View Source AddAll(System.Collections.Generic.IEnumerable<T>) Add the elements from another collection with a more specialized item type to this collection. Since this collection has set semantics, only items not already in the collection will be added. Declaration public virtual void AddAll(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to add | Improve this Doc View Source BucketCostDistribution() Produce statistics on distribution of bucket sizes. Current implementation is incomplete. Declaration public ISortedDictionary<int, int> BucketCostDistribution() Returns Type Description ISortedDictionary < System.Int32 , System.Int32 > Histogram data. | Improve this Doc View Source Check() Test internal structure of data (invariants) Declaration public virtual bool Check() Returns Type Description System.Boolean True if pass | Improve this Doc View Source Choose() Choose some item of this collection. Declaration public override T Choose() Returns Type Description T Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.Choose() Exceptions Type Condition NoSuchItemException if collection is empty. | Improve this Doc View Source Clear() Remove all items from the set, resetting internal table to initial size. Declaration public virtual void Clear() | Improve this Doc View Source Contains(T) Check if an item is in the set Declaration public virtual bool Contains(T item) Parameters Type Name Description T item The item to look for Returns Type Description System.Boolean True if set contains item | Improve this Doc View Source ContainsAll(System.Collections.Generic.IEnumerable<T>) Check if all items in a supplied collection is in this set (ignoring multiplicities). Declaration public virtual bool ContainsAll(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to look for. Returns Type Description System.Boolean True if all items are found. | Improve this Doc View Source ContainsCount(T) Count the number of times an item is in this set (either 0 or 1). Declaration public virtual int ContainsCount(T item) Parameters Type Name Description T item The item to look for. Returns Type Description System.Int32 1 if item is in set, 0 else | Improve this Doc View Source Find(ref T) Check if an item (collection equal to a given one) is in the set and if so report the actual item object found. Declaration public virtual bool Find(ref T item) Parameters Type Name Description T item On entry, the item to look for. On exit the item found, if any Returns Type Description System.Boolean True if set contains item | Improve this Doc View Source FindOrAdd(ref T) Check if an item (collection equal to a given one) is in the set. If found, report the actual item object in the set, else add the supplied one. Declaration public virtual bool FindOrAdd(ref T item) Parameters Type Name Description T item On entry, the item to look for or add. On exit the actual object found, if any. Returns Type Description System.Boolean True if item was found | Improve this Doc View Source GetEnumerator() Create an enumerator for this set. Declaration public override System.Collections.Generic.IEnumerator<T> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <T> The enumerator Overrides Lucene.Net.Support.C5.EnumerableBase<T>.GetEnumerator() | Improve this Doc View Source ItemMultiplicities() Declaration public virtual ICollectionValue<KeyValuePair<T, int>> ItemMultiplicities() Returns Type Description ICollectionValue < KeyValuePair <T, System.Int32 >> | Improve this Doc View Source Remove(T) Remove an item from the set Declaration public virtual bool Remove(T item) Parameters Type Name Description T item The item to remove Returns Type Description System.Boolean True if item was (found and) removed | Improve this Doc View Source Remove(T, out T) Remove an item from the set, reporting the actual matching item object. Declaration public virtual bool Remove(T item, out T removeditem) Parameters Type Name Description T item The value to remove. T removeditem The removed value. Returns Type Description System.Boolean True if item was found. | Improve this Doc View Source RemoveAll(System.Collections.Generic.IEnumerable<T>) Remove all items in a supplied collection from this set. Declaration public virtual void RemoveAll(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to remove. | Improve this Doc View Source RemoveAllCopies(T) Remove all (at most 1) copies of item from this set. Declaration public virtual void RemoveAllCopies(T item) Parameters Type Name Description T item The item to remove | Improve this Doc View Source RetainAll(System.Collections.Generic.IEnumerable<T>) Remove all items not in a supplied collection from this set. Declaration public virtual void RetainAll(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to retain | Improve this Doc View Source ToArray() Create an array containing all items in this set (in enumeration order). Declaration public override T[] ToArray() Returns Type Description T[] The array Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.ToArray() | Improve this Doc View Source UniqueItems() Declaration public virtual ICollectionValue<T> UniqueItems() Returns Type Description ICollectionValue <T> | Improve this Doc View Source Update(T) Check if an item (collection equal to a given one) is in the set and if so replace the item object in the set with the supplied one. Declaration public virtual bool Update(T item) Parameters Type Name Description T item The item object to update with Returns Type Description System.Boolean True if item was found (and updated) | Improve this Doc View Source Update(T, out T) Check if an item (collection equal to a given one) is in the set and if so replace the item object in the set with the supplied one. Declaration public virtual bool Update(T item, out T olditem) Parameters Type Name Description T item The item object to update with T olditem Returns Type Description System.Boolean True if item was found (and updated) | Improve this Doc View Source UpdateOrAdd(T) Check if an item (collection equal to a supplied one) is in the set and if so replace the item object in the set with the supplied one; else add the supplied one. Declaration public virtual bool UpdateOrAdd(T item) Parameters Type Name Description T item The item to look for and update or add Returns Type Description System.Boolean True if item was updated | Improve this Doc View Source UpdateOrAdd(T, out T) Check if an item (collection equal to a supplied one) is in the set and if so replace the item object in the set with the supplied one; else add the supplied one. Declaration public virtual bool UpdateOrAdd(T item, out T olditem) Parameters Type Name Description T item The item to look for and update or add T olditem Returns Type Description System.Boolean True if item was updated Implements ICollection<T> IExtensible<T> ICollectionValue<T> System.Collections.Generic.IEnumerable<> IShowable IFormattable System.Collections.Generic.ICollection<>"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.html",
    "title": "Namespace Lucene.Net.Support.C5 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Support.C5 Classes CircularQueue<T> ClearedEventArgs ClearedRangeEventArgs CollectionBase<T> Base class (abstract) for ICollection implementations. CollectionModifiedException An exception thrown by enumerators, range views etc. when accessed after the underlying collection has been modified. CollectionValueBase<T> Base class for classes implementing ICollectionValue[T] CollectionValueBase<T>.RaiseForRemoveAllHandler ConcurrentEnumerationException An exception thrown by the MemorySafeEnumerator if the collection is enumerated by multiple threads concurrently DictionaryBase<K, V> A base class for implementing a dictionary based on a set collection implementation. See the source code for C5.HashDictionary`2 for an example DirectedCollectionBase<T> DirectedCollectionValueBase<T> DuplicateNotAllowedException An exception thrown when an operation attempts to create a duplicate in a collection with set semantics ( C5.IExtensible`1.AllowsDuplicates is false) or attempts to create a duplicate key in a dictionary. With collections this can only happen with Insert operations on lists, since the Add operations will not try to create duplictes and either ignore the failure or report it in a bool return value. With dictionaries this can happen with the C5.IDictionary`2.Add(`0,`1) metod. EnumerableBase<T> A base class for implementing an IEnumerable<T> EqualityComparer<T> Utility class for building default generic equality comparers. FixedSizeCollectionException HashDictionary<K, V> A generic dictionary class based on a hash set class C5.HashSet`1 . HashSet<T> A set collection class based on linear hashing IncompatibleViewException An exception thrown by operations on a list that expects an argument that is a view on the same underlying list. InternalException An exception to throw from library code when an internal inconsistency is encountered. InvalidPriorityQueueHandleException ItemAtEventArgs<T> ItemCountEventArgs<T> KeyValuePairComparer<K, V> Default comparer for dictionary entries in a sorted dictionary. Entry comparisons only look at keys and uses an externally defined comparer for that. KeyValuePairEqualityComparer<K, V> Default equalityComparer for dictionary entries. Operations only look at keys and uses an externally defined equalityComparer for that. Logger Logging module MultipleEnumerationException An exception thrown by the MemorySafeEnumerator if the collection is enumerated multiple times when the memory mode is set to Strict NoSuchItemException An exception thrown by a lookup or lookup with update operation that does not find the lookup item and has no other means to communicate failure. The typical scenario is a lookup by key in a dictionary with an indexer, see e.g. C5.IDictionary`2.Item(`0) NotAViewException An exception thrown by an operation on a list ( C5.IList`1 ) that only makes sense for a view, not for an underlying list. NotComparableException An exception thrown by an operation that need to construct a natural comparer for a type. ReadOnlyCollectionException An exception thrown by an update operation on a Read-Only collection or dictionary. This exception will be thrown unconditionally when an update operation (method or set property) is called. No check is made to see if the update operation, if allowed, would actually change the collection. SequencedBase<T> Base class (abstract) for sequenced collection implementations. SequencedCollectionEqualityComparer<T, W> Prototype for a sequenced equalityComparer for something (T) that implements ISequenced[W]. This will use ISequenced[W] specific implementations of the equality comparer operations. Showing SortedDictionaryBase<K, V> A base class for implementing a sorted dictionary based on a sorted set collection implementation. See the source code for C5.TreeDictionary`2 for an example TreeDictionary<K, V> A sorted generic dictionary based on a red-black tree set. UnlistenableEventException UnsequencedCollectionEqualityComparer<T, W> Prototype for an unsequenced equalityComparer for something (T) that implements ICollection[W] This will use ICollection[W] specific implementations of the equalityComparer operations ViewDisposedException An exception thrown when trying to access a view (a list view on a C5.IList`1 or a snapshot on a C5.IPersistentSorted`1 ) that has been invalidated by some earlier operation. The typical scenario is a view on a list that hash been invalidated by a call to Sort, Reverse or Shuffle on some other, overlapping view or the whole list. Structs KeyValuePair<K, V> An entry in a dictionary from K to V. Interfaces ICollection<T> The simplest interface of a main stream generic collection with lookup, insertion and removal operations. ICollectionValue<T> A generic collection that may be enumerated and can answer efficiently how many items it contains. Like IEnumerable<T> , this interface does not prescribe any operations to initialize or update the collection. The main usage for this interface is to be the return type of query operations on generic collection. IDictionary<K, V> A dictionary with keys of type K and values of type V. Equivalent to a finite partial map from K to V. IDirectedCollectionValue<T> A sized generic collection, that can be enumerated backwards. IDirectedEnumerable<T> A generic collection, that can be enumerated backwards. IExtensible<T> A generic collection to which one may add items. This is just the intersection of the main stream generic collection interfaces and the priority queue interface, C5.ICollection`1 and C5.IPriorityQueue`1 . IIndexed<T> A sequenced collection, where indices of items in the order are maintained IIndexedSorted<T> A collection where items are maintained in sorted order together with their indexes in that order. IList<T> This is an indexed collection, where the item order is chosen by the user at insertion time. NBNBNB: we need a description of the view functionality here! IPersistentSorted<T> The type of a sorted collection with persistence IPriorityQueue<T> A generic collection of items prioritized by a comparison (order) relation. Supports adding items and reporting or removing extremal elements. When adding an item, the user may choose to have a handle allocated for this item in the queue. The resulting handle may be used for deleting the item even if not extremal, and for replacing the item. A priority queue typically only holds numeric priorities associated with some objects maintained separately in other collection objects. IPriorityQueueHandle<T> The base type of a priority queue handle IQueue<T> The interface describing the operations of a FIFO queue data structure. IReadOnlyCollection<T> Represents a strongly-typed, read-only collection of elements. Enables System.Collections.Generic.IReadOnlyCollection to be used in .NET 4.5 projects IReadOnlyList<T> Represents a read-only collection of elements that can be accessed by index. Enables System.Collections.Generic.IReadOnlyList to be used in .NET 4.5 projects ISequenced<T> An editable collection maintaining a definite sequence order of the items. Implementations of this interface must compute the hash code and equality exactly as prescribed in the method definitions in order to be consistent with other collection classes implementing this interface. This interface is usually implemented by explicit interface implementation, not as ordinary virtual methods. IShowable (Describe usage of \"L:300\" format string.) ISorted<T> A sorted collection, i.e. a collection where items are maintained and can be searched for in sorted order. Thus the sequence order is given as a sorting order. The sorting order is defined by a comparer, an object of type IComparer<T> ( C5.IComparer`1 ). Implementors of this interface will normally let the user define the comparer as an argument to a constructor. Usually there will also be constructors without a comparer argument, in which case the comparer should be the defalt comparer for the item type, C5.Comparer`1.Default . The comparer of the sorted collection is available as the System.Collections.Generic.Comparer property ( C5.ISorted`1.Comparer ). The methods are grouped according to Since this interface extends ISequenced<T>, sorted collections will also have an item equalityComparer ( C5.IExtensible`1.EqualityComparer ). This equalityComparer will not be used in connection with the inner workings of the sorted collection, but will be used if the sorted collection is used as an item in a collection of unsequenced or sequenced collections, ( C5.ICollection`1 and C5.ISequenced`1 ) Note that code may check if two sorted collections has the same sorting order by checking if the Comparer properties are equal. This is done a few places in this library for optimization purposes. ISortedDictionary<K, V> A dictionary with sorted keys. IStack<T> The interface describing the operations of a LIFO stack data structure. Enums EnumerationDirection Direction of enumeration order relative to original collection. EventTypeEnum HashSet<T>.Feature Enum class to assist printing of compilation alternatives. MemoryType It specifies the memory type strategy of the internal enumerator implemented to iterate over the collection. Speed The symbolic characterization of the speed of lookups for a collection. The values may refer to worst-case, amortized and/or expected asymtotic complexity wrt. the collection size. Delegates CollectionChangedHandler<T> The type of event raised after an operation on a collection has changed its contents. Normally, a multioperation like AddAll, C5.IExtensible`1.AddAll(System.Collections.Generic.IEnumerable{`0}) will only fire one CollectionChanged event. Any operation that changes the collection must fire CollectionChanged as its last event. CollectionClearedHandler<T> The type of event raised after the Clear() operation on a collection. Note: The Clear() operation will not fire ItemsRemoved events. ItemInsertedHandler<T> The type of event raised after an item has been inserted into a list by an Insert, InsertFirst or InsertLast operation. The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: an ItemsAdded event will also be fired. ItemRemovedAtHandler<T> The type of event raised after an item has been removed from a list by a RemoveAt(int i) operation (or RemoveFirst(), RemoveLast(), Remove() operation). The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: an ItemRemoved event will also be fired. ItemsAddedHandler<T> The type of event raised after an item has been added to a collection. The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: an Update operation will fire an ItemsRemoved and an ItemsAdded event. Note: When an item is inserted into a list ( C5.IList`1 ), both ItemInserted and ItemsAdded events will be fired. ItemsRemovedHandler<T> The type of event raised after an item has been removed from a collection. The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: The Clear() operation will not fire ItemsRemoved events. Note: an Update operation will fire an ItemsRemoved and an ItemsAdded event. Note: When an item is removed from a list by the RemoveAt operation, both an ItemsRemoved and an ItemRemovedAt event will be fired."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ICollection-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ICollection-1.html",
    "title": "Interface ICollection<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICollection<T> The simplest interface of a main stream generic collection with lookup, insertion and removal operations. Inherited Members IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.AddAll(System.Collections.Generic.IEnumerable<T>) IExtensible<T>.Check() ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.CountSpeed ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface ICollection<T> : IExtensible<T>, ICollectionValue<T>, System.Collections.Generic.IEnumerable<T>, IShowable, IFormattable, System.Collections.Generic.ICollection<T> Type Parameters Name Description T Properties | Improve this Doc View Source ContainsSpeed The value is symbolic indicating the type of asymptotic complexity in terms of the size of this collection (worst-case or amortized as relevant). See C5.Speed for the set of symbols. Declaration Speed ContainsSpeed { get; } Property Value Type Description Speed A characterization of the speed of lookup operations ( Contains() etc.) of the implementation of this collection. | Improve this Doc View Source Count Declaration int Count { get; } Property Value Type Description System.Int32 The number of items in this collection | Improve this Doc View Source IsReadOnly If true any call of an updating operation will throw an ReadOnlyCollectionException Declaration bool IsReadOnly { get; } Property Value Type Description System.Boolean True if this collection is read-only. Methods | Improve this Doc View Source Add(T) Add an item to this collection if possible. If this collection has set semantics, the item will be added if not already in the collection. If bag semantics, the item will always be added. Declaration bool Add(T item) Parameters Type Name Description T item The item to add. Returns Type Description System.Boolean True if item was added. | Improve this Doc View Source Clear() Remove all items from this collection. Declaration void Clear() | Improve this Doc View Source Contains(T) Check if this collection contains (an item equivalent to according to the itemequalityComparer) a particular value. Declaration bool Contains(T item) Parameters Type Name Description T item The value to check for. Returns Type Description System.Boolean True if the items is in this collection. | Improve this Doc View Source ContainsAll(System.Collections.Generic.IEnumerable<T>) Check whether this collection contains all the values in another collection. If this collection has bag semantics ( AllowsDuplicates==true ) the check is made with respect to multiplicities, else multiplicities are not taken into account. Declaration bool ContainsAll(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The Returns Type Description System.Boolean True if all values in items is in this collection. | Improve this Doc View Source ContainsCount(T) Count the number of items of the collection equal to a particular value. Returns 0 if and only if the value is not in the collection. Declaration int ContainsCount(T item) Parameters Type Name Description T item The value to count. Returns Type Description System.Int32 The number of copies found. | Improve this Doc View Source CopyTo(T[], Int32) Copy the items of this collection to a contiguous part of an array. Declaration void CopyTo(T[] array, int index) Parameters Type Name Description T[] array The array to copy to System.Int32 index The index at which to copy the first item | Improve this Doc View Source Find(ref T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, return in the ref argument (a binary copy of) the actual value found. Declaration bool Find(ref T item) Parameters Type Name Description T item The value to look for. Returns Type Description System.Boolean True if the items is in this collection. | Improve this Doc View Source FindOrAdd(ref T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, return in the ref argument (a binary copy of) the actual value found. Else, add the item to the collection. Declaration bool FindOrAdd(ref T item) Parameters Type Name Description T item The value to look for. Returns Type Description System.Boolean True if the item was found (hence not added). | Improve this Doc View Source GetUnsequencedHashCode() The unordered collection hashcode is defined as the sum of h(hashcode(item)) over the items of the collection, where the function h is a function from int to int of the form t -> (a0*t+b0)^(a1*t+b1)^(a2*t+b2) , where the ax and bx are the same for all collection classes. The current implementation uses fixed values for the ax and bx, specified as constants in the code. Declaration int GetUnsequencedHashCode() Returns Type Description System.Int32 The unordered hashcode of this collection. | Improve this Doc View Source ItemMultiplicities() Declaration ICollectionValue<KeyValuePair<T, int>> ItemMultiplicities() Returns Type Description ICollectionValue < KeyValuePair <T, System.Int32 >> | Improve this Doc View Source Remove(T) Remove a particular item from this collection. If the collection has bag semantics only one copy equivalent to the supplied item is removed. Declaration bool Remove(T item) Parameters Type Name Description T item The value to remove. Returns Type Description System.Boolean True if the item was found (and removed). | Improve this Doc View Source Remove(T, out T) Remove a particular item from this collection if found. If the collection has bag semantics only one copy equivalent to the supplied item is removed, which one is implementation dependent. If an item was removed, report a binary copy of the actual item removed in the argument. Declaration bool Remove(T item, out T removeditem) Parameters Type Name Description T item The value to remove. T removeditem The value removed if any. Returns Type Description System.Boolean True if the item was found (and removed). | Improve this Doc View Source RemoveAll(System.Collections.Generic.IEnumerable<T>) Remove all items in another collection from this one. If this collection has bag semantics, take multiplicities into account. Declaration void RemoveAll(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to remove. | Improve this Doc View Source RemoveAllCopies(T) Remove all items equivalent to a given value. Declaration void RemoveAllCopies(T item) Parameters Type Name Description T item The value to remove. | Improve this Doc View Source RetainAll(System.Collections.Generic.IEnumerable<T>) Remove all items not in some other collection from this one. If this collection has bag semantics, take multiplicities into account. Declaration void RetainAll(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to retain. | Improve this Doc View Source UniqueItems() Declaration ICollectionValue<T> UniqueItems() Returns Type Description ICollectionValue <T> | Improve this Doc View Source UnsequencedEquals(ICollection<T>) Compare the contents of this collection to another one without regards to the sequence order. The comparison will use this collection's itemequalityComparer to compare individual items. Declaration bool UnsequencedEquals(ICollection<T> otherCollection) Parameters Type Name Description ICollection <T> otherCollection The collection to compare to. Returns Type Description System.Boolean True if this collection and that contains the same items. | Improve this Doc View Source Update(T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, update the item in the collection with a (binary copy of) the supplied value. If the collection has bag semantics, it depends on the value of DuplicatesByCounting if this updates all equivalent copies in the collection or just one. Declaration bool Update(T item) Parameters Type Name Description T item Value to update. Returns Type Description System.Boolean True if the item was found and hence updated. | Improve this Doc View Source Update(T, out T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, update the item in the collection with a (binary copy of) the supplied value. If the collection has bag semantics, it depends on the value of DuplicatesByCounting if this updates all equivalent copies in the collection or just one. Declaration bool Update(T item, out T olditem) Parameters Type Name Description T item Value to update. T olditem On output the olditem, if found. Returns Type Description System.Boolean True if the item was found and hence updated. | Improve this Doc View Source UpdateOrAdd(T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, update the item in the collection to with a binary copy of the supplied value; else add the value to the collection. Declaration bool UpdateOrAdd(T item) Parameters Type Name Description T item Value to add or update. Returns Type Description System.Boolean True if the item was found and updated (hence not added). | Improve this Doc View Source UpdateOrAdd(T, out T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, update the item in the collection to with a binary copy of the supplied value; else add the value to the collection. Declaration bool UpdateOrAdd(T item, out T olditem) Parameters Type Name Description T item Value to add or update. T olditem On output the olditem, if found. Returns Type Description System.Boolean True if the item was found and updated (hence not added)."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ICollectionValue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ICollectionValue-1.html",
    "title": "Interface ICollectionValue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICollectionValue<T> A generic collection that may be enumerated and can answer efficiently how many items it contains. Like IEnumerable<T> , this interface does not prescribe any operations to initialize or update the collection. The main usage for this interface is to be the return type of query operations on generic collection. Inherited Members IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface ICollectionValue<T> : System.Collections.Generic.IEnumerable<T>, IShowable, IFormattable Type Parameters Name Description T Properties | Improve this Doc View Source ActiveEvents A flag bitmap of the events currently subscribed to by this collection. Declaration EventTypeEnum ActiveEvents { get; } Property Value Type Description EventTypeEnum | Improve this Doc View Source Count Declaration int Count { get; } Property Value Type Description System.Int32 The number of items in this collection | Improve this Doc View Source CountSpeed The value is symbolic indicating the type of asymptotic complexity in terms of the size of this collection (worst-case or amortized as relevant). Declaration Speed CountSpeed { get; } Property Value Type Description Speed A characterization of the speed of the Count property in this collection. | Improve this Doc View Source IsEmpty Declaration bool IsEmpty { get; } Property Value Type Description System.Boolean True if this collection is empty. | Improve this Doc View Source ListenableEvents A flag bitmap of the events subscribable to by this collection. Declaration EventTypeEnum ListenableEvents { get; } Property Value Type Description EventTypeEnum Methods | Improve this Doc View Source All(Func<T, Boolean>) Check if all items in this collection satisfies a specific predicate. Declaration bool All(Func<T, bool> predicate) Parameters Type Name Description Func <T, System.Boolean > predicate A delegate ( Func<, > with R == bool ) defining the predicate Returns Type Description System.Boolean True if all items satisfies the predicate | Improve this Doc View Source Apply(Action<T>) Apply a delegate to all items of this collection. Declaration void Apply(Action<T> action) Parameters Type Name Description Action <T> action The delegate to apply | Improve this Doc View Source Choose() Choose some item of this collection. Implementations must assure that the item returned may be efficiently removed. Implementors may decide to implement this method in a way such that repeated calls do not necessarily give the same result, i.e. so that the result of the following test is undetermined: coll.Choose() == coll.Choose() Declaration T Choose() Returns Type Description T Exceptions Type Condition NoSuchItemException if collection is empty. | Improve this Doc View Source CopyTo(T[], Int32) Copy the items of this collection to a contiguous part of an array. Declaration void CopyTo(T[] array, int index) Parameters Type Name Description T[] array The array to copy to System.Int32 index The index at which to copy the first item | Improve this Doc View Source Exists(Func<T, Boolean>) Check if there exists an item that satisfies a specific predicate in this collection. Declaration bool Exists(Func<T, bool> predicate) Parameters Type Name Description Func <T, System.Boolean > predicate A delegate ( Func<, > with R == bool ) defining the predicate Returns Type Description System.Boolean True is such an item exists | Improve this Doc View Source Filter(Func<T, Boolean>) Create an enumerable, enumerating the items of this collection that satisfies a certain condition. Declaration System.Collections.Generic.IEnumerable<T> Filter(Func<T, bool> filter) Parameters Type Name Description Func <T, System.Boolean > filter The T->bool filter delegate defining the condition Returns Type Description System.Collections.Generic.IEnumerable <T> The filtered enumerable | Improve this Doc View Source Find(Func<T, Boolean>, out T) Check if there exists an item that satisfies a specific predicate in this collection and return the first one in enumeration order. Declaration bool Find(Func<T, bool> predicate, out T item) Parameters Type Name Description Func <T, System.Boolean > predicate A delegate ( Func<, > with R == bool ) defining the predicate T item Returns Type Description System.Boolean True is such an item exists | Improve this Doc View Source ToArray() Create an array with the items of this collection (in the same order as an enumerator would output them). Declaration T[] ToArray() Returns Type Description T[] The array Events | Improve this Doc View Source CollectionChanged The change event. Will be raised for every change operation on the collection. Declaration event CollectionChangedHandler<T> CollectionChanged Event Type Type Description CollectionChangedHandler <T> | Improve this Doc View Source CollectionCleared The change event. Will be raised for every clear operation on the collection. Declaration event CollectionClearedHandler<T> CollectionCleared Event Type Type Description CollectionClearedHandler <T> | Improve this Doc View Source ItemInserted The item inserted event. Will be raised for every individual insertion to the collection. Declaration event ItemInsertedHandler<T> ItemInserted Event Type Type Description ItemInsertedHandler <T> | Improve this Doc View Source ItemRemovedAt The item removed at event. Will be raised for every individual removal at from the collection. Declaration event ItemRemovedAtHandler<T> ItemRemovedAt Event Type Type Description ItemRemovedAtHandler <T> | Improve this Doc View Source ItemsAdded The item added event. Will be raised for every individual addition to the collection. Declaration event ItemsAddedHandler<T> ItemsAdded Event Type Type Description ItemsAddedHandler <T> | Improve this Doc View Source ItemsRemoved The item removed event. Will be raised for every individual removal from the collection. Declaration event ItemsRemovedHandler<T> ItemsRemoved Event Type Type Description ItemsRemovedHandler <T>"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IDictionary-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IDictionary-2.html",
    "title": "Interface IDictionary<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDictionary<K, V> A dictionary with keys of type K and values of type V. Equivalent to a finite partial map from K to V. Inherited Members ICollectionValue<KeyValuePair<K, V>>.ListenableEvents ICollectionValue<KeyValuePair<K, V>>.ActiveEvents ICollectionValue<KeyValuePair<K, V>>.CollectionChanged ICollectionValue<KeyValuePair<K, V>>.CollectionCleared ICollectionValue<KeyValuePair<K, V>>.ItemsAdded ICollectionValue<KeyValuePair<K, V>>.ItemInserted ICollectionValue<KeyValuePair<K, V>>.ItemsRemoved ICollectionValue<KeyValuePair<K, V>>.ItemRemovedAt ICollectionValue<KeyValuePair<K, V>>.IsEmpty ICollectionValue<KeyValuePair<K, V>>.Count ICollectionValue<KeyValuePair<K, V>>.CountSpeed ICollectionValue<KeyValuePair<K, V>>.CopyTo(KeyValuePair<K, V>[], Int32) ICollectionValue<KeyValuePair<K, V>>.ToArray() ICollectionValue<KeyValuePair<K, V>>.Apply(Action<KeyValuePair<K, V>>) ICollectionValue<KeyValuePair<K, V>>.Exists(Func<KeyValuePair<K, V>, Boolean>) ICollectionValue<KeyValuePair<K, V>>.Find(Func<KeyValuePair<K, V>, Boolean>, KeyValuePair<K, V>) ICollectionValue<KeyValuePair<K, V>>.All(Func<KeyValuePair<K, V>, Boolean>) ICollectionValue<KeyValuePair<K, V>>.Choose() ICollectionValue<KeyValuePair<K, V>>.Filter(Func<KeyValuePair<K, V>, Boolean>) IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IDictionary<K, V> : ICollectionValue<KeyValuePair<K, V>>, System.Collections.Generic.IEnumerable<KeyValuePair<K, V>>, IShowable, IFormattable Type Parameters Name Description K V Properties | Improve this Doc View Source ContainsSpeed The value is symbolic indicating the type of asymptotic complexity in terms of the size of this collection (worst-case or amortized as relevant). See C5.Speed for the set of symbols. Declaration Speed ContainsSpeed { get; } Property Value Type Description Speed A characterization of the speed of lookup operations ( Contains() etc.) of the implementation of this dictionary. | Improve this Doc View Source EqualityComparer The key equalityComparer. Declaration System.Collections.Generic.IEqualityComparer<K> EqualityComparer { get; } Property Value Type Description System.Collections.Generic.IEqualityComparer <K> | Improve this Doc View Source Func Declaration Func<K, V> Func { get; } Property Value Type Description Func <K, V> A delegate of type Func<, > defining the partial function from K to V give by the dictionary. | Improve this Doc View Source IsReadOnly Declaration bool IsReadOnly { get; } Property Value Type Description System.Boolean True if dictionary is read-only | Improve this Doc View Source Item[K] Indexer for dictionary. Declaration V this[K key] { get; set; } Parameters Type Name Description K key Property Value Type Description V The value corresponding to the key Exceptions Type Condition NoSuchItemException if no entry is found. | Improve this Doc View Source Keys Declaration ICollectionValue<K> Keys { get; } Property Value Type Description ICollectionValue <K> A collection containing all the keys of the dictionary | Improve this Doc View Source Values Declaration ICollectionValue<V> Values { get; } Property Value Type Description ICollectionValue <V> A collection containing all the values of the dictionary Methods | Improve this Doc View Source Add(K, V) Add a new (key, value) pair (a mapping) to the dictionary. Declaration void Add(K key, V val) Parameters Type Name Description K key Key to add V val Value to add Exceptions Type Condition DuplicateNotAllowedException if there already is an entry with the same key. | Improve this Doc View Source AddAll<U, W>(System.Collections.Generic.IEnumerable<KeyValuePair<U, W>>) Add the entries from a collection of C5.KeyValuePair`2 pairs to this dictionary. Declaration void AddAll<U, W>(System.Collections.Generic.IEnumerable<KeyValuePair<U, W>> entries) where U : K where W : V Parameters Type Name Description System.Collections.Generic.IEnumerable < KeyValuePair <U, W>> entries Type Parameters Name Description U W Exceptions Type Condition DuplicateNotAllowedException If the input contains duplicate keys or a key already present in this dictionary. | Improve this Doc View Source Check() Check the integrity of the internal data structures of this dictionary. Only available in DEBUG builds??? Declaration bool Check() Returns Type Description System.Boolean True if check does not fail. | Improve this Doc View Source Clear() Remove all entries from the dictionary Declaration void Clear() | Improve this Doc View Source Contains(K) Check if there is an entry with a specified key Declaration bool Contains(K key) Parameters Type Name Description K key The key to look for Returns Type Description System.Boolean True if key was found | Improve this Doc View Source ContainsAll<H>(System.Collections.Generic.IEnumerable<H>) Check whether this collection contains all the values in another collection. If this collection has bag semantics ( AllowsDuplicates==true ) the check is made with respect to multiplicities, else multiplicities are not taken into account. Declaration bool ContainsAll<H>(System.Collections.Generic.IEnumerable<H> items) where H : K Parameters Type Name Description System.Collections.Generic.IEnumerable <H> items The Returns Type Description System.Boolean True if all values in items is in this collection. Type Parameters Name Description H | Improve this Doc View Source Find(ref K, out V) Check if there is an entry with a specified key and report the corresponding value if found. This can be seen as a safe form of \"val = this[key]\". Declaration bool Find(ref K key, out V val) Parameters Type Name Description K key The key to look for V val On exit, the value of the entry Returns Type Description System.Boolean True if key was found | Improve this Doc View Source FindOrAdd(K, ref V) Look for a specific key in the dictionary. If found, report the corresponding value, else add an entry with the key and the supplied value. Declaration bool FindOrAdd(K key, ref V val) Parameters Type Name Description K key The key to look for V val On entry the value to add if the key is not found. On exit the value found if any. Returns Type Description System.Boolean True if key was found | Improve this Doc View Source Remove(K) Remove an entry with a given key from the dictionary Declaration bool Remove(K key) Parameters Type Name Description K key The key of the entry to remove Returns Type Description System.Boolean True if an entry was found (and removed) | Improve this Doc View Source Remove(K, out V) Remove an entry with a given key from the dictionary and report its value. Declaration bool Remove(K key, out V val) Parameters Type Name Description K key The key of the entry to remove V val On exit, the value of the removed entry Returns Type Description System.Boolean True if an entry was found (and removed) | Improve this Doc View Source Update(K, V) Look for a specific key in the dictionary and if found replace the value with a new one. This can be seen as a non-adding version of \"this[key] = val\". Declaration bool Update(K key, V val) Parameters Type Name Description K key The key to look for V val The new value Returns Type Description System.Boolean True if key was found | Improve this Doc View Source Update(K, V, out V) Look for a specific key in the dictionary and if found replace the value with a new one. This can be seen as a non-adding version of \"this[key] = val\" reporting the old value. Declaration bool Update(K key, V val, out V oldval) Parameters Type Name Description K key The key to look for V val The new value V oldval The old value if any Returns Type Description System.Boolean True if key was found | Improve this Doc View Source UpdateOrAdd(K, V) Update value in dictionary corresponding to key if found, else add new entry. More general than \"this[key] = val;\" by reporting if key was found. Declaration bool UpdateOrAdd(K key, V val) Parameters Type Name Description K key The key to look for V val The value to add or replace with. Returns Type Description System.Boolean True if key was found and value updated. | Improve this Doc View Source UpdateOrAdd(K, V, out V) Update value in dictionary corresponding to key if found, else add new entry. More general than \"this[key] = val;\" by reporting if key was found. Declaration bool UpdateOrAdd(K key, V val, out V oldval) Parameters Type Name Description K key The key to look for V val The value to add or replace with. V oldval The old value if any Returns Type Description System.Boolean True if key was found and value updated."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IDirectedCollectionValue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IDirectedCollectionValue-1.html",
    "title": "Interface IDirectedCollectionValue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDirectedCollectionValue<T> A sized generic collection, that can be enumerated backwards. Inherited Members ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.Count ICollectionValue<T>.CountSpeed ICollectionValue<T>.CopyTo(T[], Int32) ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) IDirectedEnumerable<T>.Direction Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IDirectedCollectionValue<T> : ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, System.Collections.Generic.IEnumerable<T> Type Parameters Name Description T Methods | Improve this Doc View Source Backwards() Create a collection containing the same items as this collection, but whose enumerator will enumerate the items backwards. The new collection will become invalid if the original is modified. Method typically used as in foreach (T x in coll.Backwards()) {...} Declaration IDirectedCollectionValue<T> Backwards() Returns Type Description IDirectedCollectionValue <T> The backwards collection. | Improve this Doc View Source FindLast(Func<T, Boolean>, out T) Check if there exists an item that satisfies a specific predicate in this collection and return the first one in enumeration order. Declaration bool FindLast(Func<T, bool> predicate, out T item) Parameters Type Name Description Func <T, System.Boolean > predicate A delegate ( Func<, > with R == bool ) defining the predicate T item Returns Type Description System.Boolean True is such an item exists"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IDirectedEnumerable-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IDirectedEnumerable-1.html",
    "title": "Interface IDirectedEnumerable<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDirectedEnumerable<T> A generic collection, that can be enumerated backwards. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IDirectedEnumerable<T> : System.Collections.Generic.IEnumerable<T> Type Parameters Name Description T Properties | Improve this Doc View Source Direction Forwards if same, else Backwards Declaration EnumerationDirection Direction { get; } Property Value Type Description EnumerationDirection The enumeration direction relative to the original collection. Methods | Improve this Doc View Source Backwards() Create a collection containing the same items as this collection, but whose enumerator will enumerate the items backwards. The new collection will become invalid if the original is modified. Method typically used as in foreach (T x in coll.Backwards()) {...} Declaration IDirectedEnumerable<T> Backwards() Returns Type Description IDirectedEnumerable <T> The backwards collection."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IExtensible-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IExtensible-1.html",
    "title": "Interface IExtensible<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IExtensible<T> A generic collection to which one may add items. This is just the intersection of the main stream generic collection interfaces and the priority queue interface, C5.ICollection`1 and C5.IPriorityQueue`1 . Inherited Members ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.Count ICollectionValue<T>.CountSpeed ICollectionValue<T>.CopyTo(T[], Int32) ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IExtensible<T> : ICollectionValue<T>, System.Collections.Generic.IEnumerable<T>, IShowable, IFormattable Type Parameters Name Description T Properties | Improve this Doc View Source AllowsDuplicates Declaration bool AllowsDuplicates { get; } Property Value Type Description System.Boolean False if this collection has set semantics, true if bag semantics. | Improve this Doc View Source DuplicatesByCounting By convention this is true for any collection with set semantics. Declaration bool DuplicatesByCounting { get; } Property Value Type Description System.Boolean True if only one representative of a group of equal items is kept in the collection together with the total count. | Improve this Doc View Source EqualityComparer (Here should be a discussion of the role of equalityComparers. Any ). Declaration System.Collections.Generic.IEqualityComparer<T> EqualityComparer { get; } Property Value Type Description System.Collections.Generic.IEqualityComparer <T> The equalityComparer used by this collection to check equality of items. Or null (????) if collection does not check equality at all or uses a comparer. | Improve this Doc View Source IsReadOnly If true any call of an updating operation will throw an ReadOnlyCollectionException Declaration bool IsReadOnly { get; } Property Value Type Description System.Boolean True if this collection is read-only. Methods | Improve this Doc View Source Add(T) Add an item to this collection if possible. If this collection has set semantics, the item will be added if not already in the collection. If bag semantics, the item will always be added. Declaration bool Add(T item) Parameters Type Name Description T item The item to add. Returns Type Description System.Boolean True if item was added. | Improve this Doc View Source AddAll(System.Collections.Generic.IEnumerable<T>) Add the elements from another collection with a more specialized item type to this collection. If this collection has set semantics, only items not already in the collection will be added. Declaration void AddAll(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to add | Improve this Doc View Source Check() Check the integrity of the internal data structures of this collection. This is only relevant for developers of the library Declaration bool Check() Returns Type Description System.Boolean True if check was passed."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IIndexed-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IIndexed-1.html",
    "title": "Interface IIndexed<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IIndexed<T> A sequenced collection, where indices of items in the order are maintained Inherited Members ISequenced<T>.GetSequencedHashCode() ISequenced<T>.SequencedEquals(ISequenced<T>) ICollection<T>.ContainsSpeed ICollection<T>.Count ICollection<T>.IsReadOnly ICollection<T>.Add(T) ICollection<T>.CopyTo(T[], Int32) ICollection<T>.GetUnsequencedHashCode() ICollection<T>.UnsequencedEquals(ICollection<T>) ICollection<T>.Contains(T) ICollection<T>.ContainsCount(T) ICollection<T>.UniqueItems() ICollection<T>.ItemMultiplicities() ICollection<T>.ContainsAll(System.Collections.Generic.IEnumerable<T>) ICollection<T>.Find(T) ICollection<T>.FindOrAdd(T) ICollection<T>.Update(T) ICollection<T>.Update(T, T) ICollection<T>.UpdateOrAdd(T) ICollection<T>.UpdateOrAdd(T, T) ICollection<T>.Remove(T) ICollection<T>.Remove(T, T) ICollection<T>.RemoveAllCopies(T) ICollection<T>.RemoveAll(System.Collections.Generic.IEnumerable<T>) ICollection<T>.Clear() ICollection<T>.RetainAll(System.Collections.Generic.IEnumerable<T>) IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.AddAll(System.Collections.Generic.IEnumerable<T>) IExtensible<T>.Check() IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.CountSpeed ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) IDirectedEnumerable<T>.Direction IReadOnlyList<T>.Item[Int32] Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IIndexed<T> : ISequenced<T>, ICollection<T>, IExtensible<T>, System.Collections.Generic.ICollection<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IReadOnlyList<T>, IReadOnlyCollection<T>, System.Collections.Generic.IEnumerable<T>, System.Collections.IEnumerable Type Parameters Name Description T Properties | Improve this Doc View Source IndexingSpeed Declaration Speed IndexingSpeed { get; } Property Value Type Description Speed | Improve this Doc View Source Item[Int32, Int32] Declaration IDirectedCollectionValue<T> this[int start, int count] { get; } Parameters Type Name Description System.Int32 start The low index of the interval (inclusive). System.Int32 count The size of the range. Property Value Type Description IDirectedCollectionValue <T> The directed collection of items in a specific index interval. Methods | Improve this Doc View Source FindIndex(Func<T, Boolean>) Check if there exists an item that satisfies a specific predicate in this collection and return the index of the first one. Declaration int FindIndex(Func<T, bool> predicate) Parameters Type Name Description Func <T, System.Boolean > predicate A delegate ( Func<, > with R == bool ) defining the predicate Returns Type Description System.Int32 the index, if found, a negative value else | Improve this Doc View Source FindLastIndex(Func<T, Boolean>) Check if there exists an item that satisfies a specific predicate in this collection and return the index of the last one. Declaration int FindLastIndex(Func<T, bool> predicate) Parameters Type Name Description Func <T, System.Boolean > predicate A delegate ( Func<, > with R == bool ) defining the predicate Returns Type Description System.Int32 the index, if found, a negative value else | Improve this Doc View Source IndexOf(T) Searches for an item in the list going forwards from the start. Declaration int IndexOf(T item) Parameters Type Name Description T item Item to search for. Returns Type Description System.Int32 Index of item from start. A negative number if item not found, namely the one's complement of the index at which the Add operation would put the item. | Improve this Doc View Source LastIndexOf(T) Searches for an item in the list going backwards from the end. Declaration int LastIndexOf(T item) Parameters Type Name Description T item Item to search for. Returns Type Description System.Int32 Index of of item from the end. A negative number if item not found, namely the two-complement of the index at which the Add operation would put the item. | Improve this Doc View Source RemoveAt(Int32) Remove the item at a specific position of the list. Declaration T RemoveAt(int index) Parameters Type Name Description System.Int32 index The index of the item to remove. Returns Type Description T The removed item. | Improve this Doc View Source RemoveInterval(Int32, Int32) Remove all items in an index interval. Declaration void RemoveInterval(int start, int count) Parameters Type Name Description System.Int32 start The index of the first item to remove. System.Int32 count The number of items to remove."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IIndexedSorted-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IIndexedSorted-1.html",
    "title": "Interface IIndexedSorted<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IIndexedSorted<T> A collection where items are maintained in sorted order together with their indexes in that order. Inherited Members ISorted<T>.FindMin() ISorted<T>.DeleteMin() ISorted<T>.FindMax() ISorted<T>.DeleteMax() ISorted<T>.Comparer ISorted<T>.TryPredecessor(T, T) ISorted<T>.TrySuccessor(T, T) ISorted<T>.TryWeakPredecessor(T, T) ISorted<T>.TryWeakSuccessor(T, T) ISorted<T>.Predecessor(T) ISorted<T>.Successor(T) ISorted<T>.WeakPredecessor(T) ISorted<T>.WeakSuccessor(T) ISorted<T>.Cut(IComparable<T>, T, Boolean, T, Boolean) ISorted<T>.RangeAll() ISorted<T>.AddSorted(System.Collections.Generic.IEnumerable<T>) ISorted<T>.RemoveRangeFrom(T) ISorted<T>.RemoveRangeFromTo(T, T) ISorted<T>.RemoveRangeTo(T) IIndexed<T>.IndexingSpeed IIndexed<T>.Item[Int32, Int32] IIndexed<T>.IndexOf(T) IIndexed<T>.LastIndexOf(T) IIndexed<T>.FindIndex(Func<T, Boolean>) IIndexed<T>.FindLastIndex(Func<T, Boolean>) IIndexed<T>.RemoveAt(Int32) IIndexed<T>.RemoveInterval(Int32, Int32) ISequenced<T>.GetSequencedHashCode() ISequenced<T>.SequencedEquals(ISequenced<T>) ICollection<T>.ContainsSpeed ICollection<T>.Count ICollection<T>.IsReadOnly ICollection<T>.Add(T) ICollection<T>.CopyTo(T[], Int32) ICollection<T>.GetUnsequencedHashCode() ICollection<T>.UnsequencedEquals(ICollection<T>) ICollection<T>.Contains(T) ICollection<T>.ContainsCount(T) ICollection<T>.UniqueItems() ICollection<T>.ItemMultiplicities() ICollection<T>.ContainsAll(System.Collections.Generic.IEnumerable<T>) ICollection<T>.Find(T) ICollection<T>.FindOrAdd(T) ICollection<T>.Update(T) ICollection<T>.Update(T, T) ICollection<T>.UpdateOrAdd(T) ICollection<T>.UpdateOrAdd(T, T) ICollection<T>.Remove(T) ICollection<T>.Remove(T, T) ICollection<T>.RemoveAllCopies(T) ICollection<T>.RemoveAll(System.Collections.Generic.IEnumerable<T>) ICollection<T>.Clear() ICollection<T>.RetainAll(System.Collections.Generic.IEnumerable<T>) IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.AddAll(System.Collections.Generic.IEnumerable<T>) IExtensible<T>.Check() IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.CountSpeed ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) IDirectedEnumerable<T>.Direction IReadOnlyList<T>.Item[Int32] Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IIndexedSorted<T> : ISorted<T>, IIndexed<T>, ISequenced<T>, ICollection<T>, IExtensible<T>, System.Collections.Generic.ICollection<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IReadOnlyList<T>, IReadOnlyCollection<T>, System.Collections.Generic.IEnumerable<T>, System.Collections.IEnumerable Type Parameters Name Description T Methods | Improve this Doc View Source CountFrom(T) Determine the number of items at or above a supplied threshold. Declaration int CountFrom(T bot) Parameters Type Name Description T bot The lower bound (inclusive) Returns Type Description System.Int32 The number of matching items. | Improve this Doc View Source CountFromTo(T, T) Determine the number of items between two supplied thresholds. Declaration int CountFromTo(T bot, T top) Parameters Type Name Description T bot The lower bound (inclusive) T top The upper bound (exclusive) Returns Type Description System.Int32 The number of matching items. | Improve this Doc View Source CountTo(T) Determine the number of items below a supplied threshold. Declaration int CountTo(T top) Parameters Type Name Description T top The upper bound (exclusive) Returns Type Description System.Int32 The number of matching items. | Improve this Doc View Source FindAll(Func<T, Boolean>) Create a new indexed sorted collection consisting of the items of this indexed sorted collection satisfying a certain predicate. Declaration IIndexedSorted<T> FindAll(Func<T, bool> predicate) Parameters Type Name Description Func <T, System.Boolean > predicate The filter delegate defining the predicate. Returns Type Description IIndexedSorted <T> The new indexed sorted collection. | Improve this Doc View Source Map<V>(Func<T, V>, System.Collections.Generic.IComparer<V>) Create a new indexed sorted collection consisting of the results of mapping all items of this list. if the map is not increasing over the items of this collection (with respect to the two given comparison relations). Declaration IIndexedSorted<V> Map<V>(Func<T, V> mapper, System.Collections.Generic.IComparer<V> comparer) Parameters Type Name Description Func <T, V> mapper The delegate definging the map. System.Collections.Generic.IComparer <V> comparer The comparion relation to use for the result. Returns Type Description IIndexedSorted <V> The new sorted collection. Type Parameters Name Description V | Improve this Doc View Source RangeFrom(T) Query this sorted collection for items greater than or equal to a supplied value. Declaration IDirectedCollectionValue<T> RangeFrom(T bot) Parameters Type Name Description T bot The lower bound (inclusive). Returns Type Description IDirectedCollectionValue <T> The result directed collection. | Improve this Doc View Source RangeFromTo(T, T) Query this sorted collection for items between two supplied values. Declaration IDirectedCollectionValue<T> RangeFromTo(T bot, T top) Parameters Type Name Description T bot The lower bound (inclusive). T top The upper bound (exclusive). Returns Type Description IDirectedCollectionValue <T> The result directed collection. | Improve this Doc View Source RangeTo(T) Query this sorted collection for items less than a supplied value. Declaration IDirectedCollectionValue<T> RangeTo(T top) Parameters Type Name Description T top The upper bound (exclusive). Returns Type Description IDirectedCollectionValue <T> The result directed collection."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IList-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IList-1.html",
    "title": "Interface IList<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IList<T> This is an indexed collection, where the item order is chosen by the user at insertion time. NBNBNB: we need a description of the view functionality here! Inherited Members IIndexed<T>.IndexingSpeed IIndexed<T>.Item[Int32, Int32] IIndexed<T>.LastIndexOf(T) IIndexed<T>.FindIndex(Func<T, Boolean>) IIndexed<T>.FindLastIndex(Func<T, Boolean>) IIndexed<T>.RemoveInterval(Int32, Int32) ISequenced<T>.GetSequencedHashCode() ISequenced<T>.SequencedEquals(ISequenced<T>) ICollection<T>.ContainsSpeed ICollection<T>.GetUnsequencedHashCode() ICollection<T>.UnsequencedEquals(ICollection<T>) ICollection<T>.ContainsCount(T) ICollection<T>.UniqueItems() ICollection<T>.ItemMultiplicities() ICollection<T>.ContainsAll(System.Collections.Generic.IEnumerable<T>) ICollection<T>.Find(T) ICollection<T>.FindOrAdd(T) ICollection<T>.Update(T) ICollection<T>.Update(T, T) ICollection<T>.UpdateOrAdd(T) ICollection<T>.UpdateOrAdd(T, T) ICollection<T>.Remove(T, T) ICollection<T>.RemoveAllCopies(T) ICollection<T>.RemoveAll(System.Collections.Generic.IEnumerable<T>) ICollection<T>.RetainAll(System.Collections.Generic.IEnumerable<T>) IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.AddAll(System.Collections.Generic.IEnumerable<T>) IExtensible<T>.Check() IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.CountSpeed ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) IDirectedEnumerable<T>.Direction Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IList<T> : IIndexed<T>, ISequenced<T>, ICollection<T>, IExtensible<T>, System.Collections.Generic.ICollection<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IReadOnlyList<T>, IReadOnlyCollection<T>, System.Collections.Generic.IEnumerable<T>, System.Collections.IEnumerable, IDisposable, System.Collections.Generic.IList<T>, System.Collections.IList Type Parameters Name Description T Properties | Improve this Doc View Source Count Declaration int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source FIFO Since Add(T item) always add at the end of the list, this describes if list has FIFO or LIFO semantics. Declaration bool FIFO { get; set; } Property Value Type Description System.Boolean True if the Remove() operation removes from the start of the list, false if it removes from the end. | Improve this Doc View Source First Declaration T First { get; } Property Value Type Description T The first item in this list. Exceptions Type Condition NoSuchItemException if this list is empty. | Improve this Doc View Source IsReadOnly Declaration bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsValid Declaration bool IsValid { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[Int32] On this list, this indexer is read/write. Declaration T this[int index] { get; set; } Parameters Type Name Description System.Int32 index The index of the item to fetch or store. Property Value Type Description T The index'th item of this list. | Improve this Doc View Source Last Declaration T Last { get; } Property Value Type Description T The last item in this list. Exceptions Type Condition NoSuchItemException if this list is empty. | Improve this Doc View Source Offset Declaration int Offset { get; } Property Value Type Description System.Int32 Offset for this list view or 0 for an underlying list. | Improve this Doc View Source Underlying Null if this list is not a view. Declaration IList<T> Underlying { get; } Property Value Type Description IList <T> Underlying list for view. Methods | Improve this Doc View Source Add(T) Declaration bool Add(T item) Parameters Type Name Description T item Returns Type Description System.Boolean | Improve this Doc View Source Clear() Declaration void Clear() | Improve this Doc View Source Contains(T) Declaration bool Contains(T item) Parameters Type Name Description T item Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(T[], Int32) Declaration void CopyTo(T[] array, int index) Parameters Type Name Description T[] array System.Int32 index | Improve this Doc View Source FindAll(Func<T, Boolean>) Create a new list consisting of the items of this list satisfying a certain predicate. Declaration IList<T> FindAll(Func<T, bool> filter) Parameters Type Name Description Func <T, System.Boolean > filter The filter delegate defining the predicate. Returns Type Description IList <T> The new list. | Improve this Doc View Source IndexOf(T) Searches for an item in the list going forwards from the start. Declaration int IndexOf(T item) Parameters Type Name Description T item Item to search for. Returns Type Description System.Int32 Index of item from start. A negative number if item not found, namely the one's complement of the index at which the Add operation would put the item. | Improve this Doc View Source Insert(IList<T>, T) Insert an item at the end of a compatible view, used as a pointer. The pointer must be a view on the same list as this and the endpoint of pointer must be a valid insertion point of this Declaration void Insert(IList<T> pointer, T item) Parameters Type Name Description IList <T> pointer T item Exceptions Type Condition IncompatibleViewException If pointer is not a view on the same list as this DuplicateNotAllowedException if the list has AllowsDuplicates==false and the item is already in the list. | Improve this Doc View Source InsertAll(Int32, System.Collections.Generic.IEnumerable<T>) Insert into this list all items from an enumerable collection starting at a particular index. Declaration void InsertAll(int index, System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Int32 index Index to start inserting at System.Collections.Generic.IEnumerable <T> items Items to insert Exceptions Type Condition DuplicateNotAllowedException if the list has AllowsDuplicates==false and one of the items to insert is already in the list. | Improve this Doc View Source InsertFirst(T) Insert an item at the front of this list. DuplicateNotAllowedException if the list has AllowsDuplicates==false and the item is already in the list. Declaration void InsertFirst(T item) Parameters Type Name Description T item The item to insert. | Improve this Doc View Source InsertLast(T) Insert an item at the back of this list. DuplicateNotAllowedException if the list has AllowsDuplicates==false and the item is already in the list. Declaration void InsertLast(T item) Parameters Type Name Description T item The item to insert. | Improve this Doc View Source IsSorted() Check if this list is sorted according to the default sorting order for the item type T, as defined by the C5.Comparer`1 class Declaration bool IsSorted() Returns Type Description System.Boolean True if the list is sorted, else false. Exceptions Type Condition NotComparableException if T is not comparable | Improve this Doc View Source IsSorted(System.Collections.Generic.IComparer<T>) Check if this list is sorted according to a specific sorting order. Declaration bool IsSorted(System.Collections.Generic.IComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IComparer <T> comparer The comparer defining the sorting order. Returns Type Description System.Boolean True if the list is sorted, else false. | Improve this Doc View Source LastViewOf(T) Create a list view on this list containing the last occurrence of a particular item. NoSuchItemException if the item is not in this list. Declaration IList<T> LastViewOf(T item) Parameters Type Name Description T item The item to find. Returns Type Description IList <T> The new list view. | Improve this Doc View Source Map<V>(Func<T, V>) Create a new list consisting of the results of mapping all items of this list. The new list will use the default equalityComparer for the item type V. Declaration IList<V> Map<V>(Func<T, V> mapper) Parameters Type Name Description Func <T, V> mapper The delegate defining the map. Returns Type Description IList <V> The new list. Type Parameters Name Description V The type of items of the new list | Improve this Doc View Source Map<V>(Func<T, V>, System.Collections.Generic.IEqualityComparer<V>) Create a new list consisting of the results of mapping all items of this list. The new list will use a specified equalityComparer for the item type. Declaration IList<V> Map<V>(Func<T, V> mapper, System.Collections.Generic.IEqualityComparer<V> equalityComparer) Parameters Type Name Description Func <T, V> mapper The delegate defining the map. System.Collections.Generic.IEqualityComparer <V> equalityComparer The equalityComparer to use for the new list Returns Type Description IList <V> The new list. Type Parameters Name Description V The type of items of the new list | Improve this Doc View Source Remove() Remove one item from the list: from the front if FIFO is true, else from the back. NoSuchItemException if this list is empty. Declaration T Remove() Returns Type Description T The removed item. | Improve this Doc View Source Remove(T) Declaration bool Remove(T item) Parameters Type Name Description T item Returns Type Description System.Boolean | Improve this Doc View Source RemoveAt(Int32) Remove the item at a specific position of the list. Declaration T RemoveAt(int index) Parameters Type Name Description System.Int32 index The index of the item to remove. Returns Type Description T The removed item. | Improve this Doc View Source RemoveFirst() Remove one item from the front of the list. NoSuchItemException if this list is empty. Declaration T RemoveFirst() Returns Type Description T The removed item. | Improve this Doc View Source RemoveLast() Remove one item from the back of the list. NoSuchItemException if this list is empty. Declaration T RemoveLast() Returns Type Description T The removed item. | Improve this Doc View Source Reverse() Reverse the list so the items are in the opposite sequence order. Declaration void Reverse() | Improve this Doc View Source Shuffle() Randomly shuffle the items of this list. Declaration void Shuffle() | Improve this Doc View Source Shuffle(Random) Shuffle the items of this list according to a specific random source. Declaration void Shuffle(Random rnd) Parameters Type Name Description Random rnd The random source. | Improve this Doc View Source Slide(Int32) Slide this list view along the underlying list. Declaration IList<T> Slide(int offset) Parameters Type Name Description System.Int32 offset The signed amount to slide: positive to slide towards the end. Returns Type Description IList <T> Exceptions Type Condition NotAViewException if this list is not a view. | Improve this Doc View Source Slide(Int32, Int32) Slide this list view along the underlying list, changing its size. Declaration IList<T> Slide(int offset, int size) Parameters Type Name Description System.Int32 offset The signed amount to slide: positive to slide towards the end. System.Int32 size The new size of the view. Returns Type Description IList <T> Exceptions Type Condition NotAViewException if this list is not a view. | Improve this Doc View Source Sort() Sort the items of the list according to the default sorting order for the item type T, as defined by the C5.Comparer`1 class Declaration void Sort() Exceptions Type Condition NotComparableException if T is not comparable | Improve this Doc View Source Sort(System.Collections.Generic.IComparer<T>) Sort the items of the list according to a specified sorting order. The sorting does not perform duplicate elimination or identify items according to the comparer or itemequalityComparer. I.e. the list as an unsequenced collection with binary equality, will not change. Declaration void Sort(System.Collections.Generic.IComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IComparer <T> comparer The comparer defining the sorting order. | Improve this Doc View Source Span(IList<T>) Returns null if otherView is strictly to the left of this view Declaration IList<T> Span(IList<T> otherView) Parameters Type Name Description IList <T> otherView Returns Type Description IList <T> Exceptions Type Condition IncompatibleViewException If otherView does not have the same underlying list as this | Improve this Doc View Source TrySlide(Int32) Declaration bool TrySlide(int offset) Parameters Type Name Description System.Int32 offset Returns Type Description System.Boolean | Improve this Doc View Source TrySlide(Int32, Int32) Declaration bool TrySlide(int offset, int size) Parameters Type Name Description System.Int32 offset System.Int32 size Returns Type Description System.Boolean | Improve this Doc View Source View(Int32, Int32) Create a list view on this list. if the view would not fit into this list. Declaration IList<T> View(int start, int count) Parameters Type Name Description System.Int32 start The index in this list of the start of the view. System.Int32 count The size of the view. Returns Type Description IList <T> The new list view. | Improve this Doc View Source ViewOf(T) Create a list view on this list containing the (first) occurrence of a particular item. NoSuchItemException if the item is not in this list. Declaration IList<T> ViewOf(T item) Parameters Type Name Description T item The item to find. Returns Type Description IList <T> The new list view."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IncompatibleViewException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IncompatibleViewException.html",
    "title": "Class IncompatibleViewException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IncompatibleViewException An exception thrown by operations on a list that expects an argument that is a view on the same underlying list. Inheritance System.Object IncompatibleViewException Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class IncompatibleViewException : Exception Constructors | Improve this Doc View Source IncompatibleViewException() Create a simple exception with no further explanation. Declaration public IncompatibleViewException() | Improve this Doc View Source IncompatibleViewException(String) Create the exception with an explanation of the reason. Declaration public IncompatibleViewException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.InternalException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.InternalException.html",
    "title": "Class InternalException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InternalException An exception to throw from library code when an internal inconsistency is encountered. Inheritance System.Object InternalException Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class InternalException : Exception"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.InvalidPriorityQueueHandleException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.InvalidPriorityQueueHandleException.html",
    "title": "Class InvalidPriorityQueueHandleException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InvalidPriorityQueueHandleException Inheritance System.Object InvalidPriorityQueueHandleException Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class InvalidPriorityQueueHandleException : Exception Constructors | Improve this Doc View Source InvalidPriorityQueueHandleException() Create a simple exception with no further explanation. Declaration public InvalidPriorityQueueHandleException() | Improve this Doc View Source InvalidPriorityQueueHandleException(String) Create the exception with an explanation of the reason. Declaration public InvalidPriorityQueueHandleException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IPersistentSorted-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IPersistentSorted-1.html",
    "title": "Interface IPersistentSorted<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPersistentSorted<T> The type of a sorted collection with persistence Inherited Members ISorted<T>.FindMin() ISorted<T>.DeleteMin() ISorted<T>.FindMax() ISorted<T>.DeleteMax() ISorted<T>.Comparer ISorted<T>.TryPredecessor(T, T) ISorted<T>.TrySuccessor(T, T) ISorted<T>.TryWeakPredecessor(T, T) ISorted<T>.TryWeakSuccessor(T, T) ISorted<T>.Predecessor(T) ISorted<T>.Successor(T) ISorted<T>.WeakPredecessor(T) ISorted<T>.WeakSuccessor(T) ISorted<T>.Cut(IComparable<T>, T, Boolean, T, Boolean) ISorted<T>.RangeFrom(T) ISorted<T>.RangeFromTo(T, T) ISorted<T>.RangeTo(T) ISorted<T>.RangeAll() ISorted<T>.AddSorted(System.Collections.Generic.IEnumerable<T>) ISorted<T>.RemoveRangeFrom(T) ISorted<T>.RemoveRangeFromTo(T, T) ISorted<T>.RemoveRangeTo(T) ISequenced<T>.GetSequencedHashCode() ISequenced<T>.SequencedEquals(ISequenced<T>) ICollection<T>.ContainsSpeed ICollection<T>.Count ICollection<T>.IsReadOnly ICollection<T>.Add(T) ICollection<T>.CopyTo(T[], Int32) ICollection<T>.GetUnsequencedHashCode() ICollection<T>.UnsequencedEquals(ICollection<T>) ICollection<T>.Contains(T) ICollection<T>.ContainsCount(T) ICollection<T>.UniqueItems() ICollection<T>.ItemMultiplicities() ICollection<T>.ContainsAll(System.Collections.Generic.IEnumerable<T>) ICollection<T>.Find(T) ICollection<T>.FindOrAdd(T) ICollection<T>.Update(T) ICollection<T>.Update(T, T) ICollection<T>.UpdateOrAdd(T) ICollection<T>.UpdateOrAdd(T, T) ICollection<T>.Remove(T) ICollection<T>.Remove(T, T) ICollection<T>.RemoveAllCopies(T) ICollection<T>.RemoveAll(System.Collections.Generic.IEnumerable<T>) ICollection<T>.Clear() ICollection<T>.RetainAll(System.Collections.Generic.IEnumerable<T>) IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.AddAll(System.Collections.Generic.IEnumerable<T>) IExtensible<T>.Check() IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.CountSpeed ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) IDirectedEnumerable<T>.Direction Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IPersistentSorted<T> : ISorted<T>, ISequenced<T>, ICollection<T>, IExtensible<T>, System.Collections.Generic.ICollection<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, System.Collections.Generic.IEnumerable<T>, IDisposable Type Parameters Name Description T Methods | Improve this Doc View Source Snapshot() Make a (read-only) snap shot of this collection. Declaration ISorted<T> Snapshot() Returns Type Description ISorted <T> The snap shot."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IPriorityQueue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IPriorityQueue-1.html",
    "title": "Interface IPriorityQueue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPriorityQueue<T> A generic collection of items prioritized by a comparison (order) relation. Supports adding items and reporting or removing extremal elements. When adding an item, the user may choose to have a handle allocated for this item in the queue. The resulting handle may be used for deleting the item even if not extremal, and for replacing the item. A priority queue typically only holds numeric priorities associated with some objects maintained separately in other collection objects. Inherited Members IExtensible<T>.IsReadOnly IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.Add(T) IExtensible<T>.AddAll(System.Collections.Generic.IEnumerable<T>) IExtensible<T>.Check() ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.Count ICollectionValue<T>.CountSpeed ICollectionValue<T>.CopyTo(T[], Int32) ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IPriorityQueue<T> : IExtensible<T>, ICollectionValue<T>, System.Collections.Generic.IEnumerable<T>, IShowable, IFormattable Type Parameters Name Description T Properties | Improve this Doc View Source Comparer The comparer object supplied at creation time for this collection Declaration System.Collections.Generic.IComparer<T> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer <T> The comparer | Improve this Doc View Source Item[IPriorityQueueHandle<T>] Get or set the item corresponding to a handle. Throws exceptions on invalid handles. Declaration T this[IPriorityQueueHandle<T> handle] { get; set; } Parameters Type Name Description IPriorityQueueHandle <T> handle Property Value Type Description T Methods | Improve this Doc View Source Add(ref IPriorityQueueHandle<T>, T) Add an item to the priority queue, receiving a handle for the item in the queue, or reusing an existing unused handle. Declaration bool Add(ref IPriorityQueueHandle<T> handle, T item) Parameters Type Name Description IPriorityQueueHandle <T> handle On output: a handle for the added item. On input: null for allocating a new handle, or a currently unused handle for reuse. A handle for reuse must be compatible with this priority queue, by being created by a priority queue of the same runtime type, but not necessarily the same priority queue object. T item Returns Type Description System.Boolean | Improve this Doc View Source Delete(IPriorityQueueHandle<T>) Delete an item with a handle from a priority queue Declaration T Delete(IPriorityQueueHandle<T> handle) Parameters Type Name Description IPriorityQueueHandle <T> handle The handle for the item. The handle will be invalidated, but reusable. Returns Type Description T The deleted item | Improve this Doc View Source DeleteMax() Remove the largest item from this priority queue. Declaration T DeleteMax() Returns Type Description T The removed item. | Improve this Doc View Source DeleteMax(out IPriorityQueueHandle<T>) Remove the largest item from this priority queue. Declaration T DeleteMax(out IPriorityQueueHandle<T> handle) Parameters Type Name Description IPriorityQueueHandle <T> handle On return: the handle of the removed item. Returns Type Description T The removed item. | Improve this Doc View Source DeleteMin() Remove the least item from this priority queue. Declaration T DeleteMin() Returns Type Description T The removed item. | Improve this Doc View Source DeleteMin(out IPriorityQueueHandle<T>) Remove the least item from this priority queue. Declaration T DeleteMin(out IPriorityQueueHandle<T> handle) Parameters Type Name Description IPriorityQueueHandle <T> handle On return: the handle of the removed item. Returns Type Description T The removed item. | Improve this Doc View Source Find(IPriorityQueueHandle<T>, out T) Check if the entry corresponding to a handle is in the priority queue. Declaration bool Find(IPriorityQueueHandle<T> handle, out T item) Parameters Type Name Description IPriorityQueueHandle <T> handle T item Returns Type Description System.Boolean | Improve this Doc View Source FindMax() Find the current largest item of this priority queue. Declaration T FindMax() Returns Type Description T The largest item. | Improve this Doc View Source FindMax(out IPriorityQueueHandle<T>) Find the current largest item of this priority queue. Declaration T FindMax(out IPriorityQueueHandle<T> handle) Parameters Type Name Description IPriorityQueueHandle <T> handle On return: the handle of the item. Returns Type Description T The largest item. | Improve this Doc View Source FindMin() Find the current least item of this priority queue. Declaration T FindMin() Returns Type Description T The least item. | Improve this Doc View Source FindMin(out IPriorityQueueHandle<T>) Find the current least item of this priority queue. Declaration T FindMin(out IPriorityQueueHandle<T> handle) Parameters Type Name Description IPriorityQueueHandle <T> handle On return: the handle of the item. Returns Type Description T The least item. | Improve this Doc View Source Replace(IPriorityQueueHandle<T>, T) Replace an item with a handle in a priority queue with a new item. Typically used for changing the priority of some queued object. Declaration T Replace(IPriorityQueueHandle<T> handle, T item) Parameters Type Name Description IPriorityQueueHandle <T> handle The handle for the old item T item The new item Returns Type Description T The old item"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IPriorityQueueHandle-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IPriorityQueueHandle-1.html",
    "title": "Interface IPriorityQueueHandle<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPriorityQueueHandle<T> The base type of a priority queue handle Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IPriorityQueueHandle<T> Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IQueue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IQueue-1.html",
    "title": "Interface IQueue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IQueue<T> The interface describing the operations of a FIFO queue data structure. Inherited Members IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.Count ICollectionValue<T>.CountSpeed ICollectionValue<T>.CopyTo(T[], Int32) ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) IDirectedEnumerable<T>.Direction Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IQueue<T> : IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, System.Collections.Generic.IEnumerable<T> Type Parameters Name Description T The item type Properties | Improve this Doc View Source AllowsDuplicates Declaration bool AllowsDuplicates { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[Int32] Get the index 'th element of the queue. The front of the queue has index 0. Declaration T this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description T Methods | Improve this Doc View Source Dequeue() Dequeue an item from the front of the queue. Declaration T Dequeue() Returns Type Description T The item | Improve this Doc View Source Enqueue(T) Enqueue an item at the back of the queue. Declaration void Enqueue(T item) Parameters Type Name Description T item The item"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IReadOnlyCollection-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IReadOnlyCollection-1.html",
    "title": "Interface IReadOnlyCollection<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReadOnlyCollection<T> Represents a strongly-typed, read-only collection of elements. Enables System.Collections.Generic.IReadOnlyCollection to be used in .NET 4.5 projects Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IReadOnlyCollection<out T> : System.Collections.Generic.IEnumerable<T>, System.Collections.IEnumerable Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IReadOnlyList-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IReadOnlyList-1.html",
    "title": "Interface IReadOnlyList<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReadOnlyList<T> Represents a read-only collection of elements that can be accessed by index. Enables System.Collections.Generic.IReadOnlyList to be used in .NET 4.5 projects Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IReadOnlyList<out T> : IReadOnlyCollection<T>, System.Collections.Generic.IEnumerable<T>, System.Collections.IEnumerable Type Parameters Name Description T Properties | Improve this Doc View Source Item[Int32] Gets the element at the specified index in the read-only list. Declaration T this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ISequenced-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ISequenced-1.html",
    "title": "Interface ISequenced<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISequenced<T> An editable collection maintaining a definite sequence order of the items. Implementations of this interface must compute the hash code and equality exactly as prescribed in the method definitions in order to be consistent with other collection classes implementing this interface. This interface is usually implemented by explicit interface implementation, not as ordinary virtual methods. Inherited Members ICollection<T>.ContainsSpeed ICollection<T>.Count ICollection<T>.IsReadOnly ICollection<T>.Add(T) ICollection<T>.CopyTo(T[], Int32) ICollection<T>.GetUnsequencedHashCode() ICollection<T>.UnsequencedEquals(ICollection<T>) ICollection<T>.Contains(T) ICollection<T>.ContainsCount(T) ICollection<T>.UniqueItems() ICollection<T>.ItemMultiplicities() ICollection<T>.ContainsAll(System.Collections.Generic.IEnumerable<T>) ICollection<T>.Find(T) ICollection<T>.FindOrAdd(T) ICollection<T>.Update(T) ICollection<T>.Update(T, T) ICollection<T>.UpdateOrAdd(T) ICollection<T>.UpdateOrAdd(T, T) ICollection<T>.Remove(T) ICollection<T>.Remove(T, T) ICollection<T>.RemoveAllCopies(T) ICollection<T>.RemoveAll(System.Collections.Generic.IEnumerable<T>) ICollection<T>.Clear() ICollection<T>.RetainAll(System.Collections.Generic.IEnumerable<T>) IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.AddAll(System.Collections.Generic.IEnumerable<T>) IExtensible<T>.Check() IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.CountSpeed ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) IDirectedEnumerable<T>.Direction Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface ISequenced<T> : ICollection<T>, IExtensible<T>, System.Collections.Generic.ICollection<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, System.Collections.Generic.IEnumerable<T> Type Parameters Name Description T Methods | Improve this Doc View Source GetSequencedHashCode() The hashcode is defined as h(...h(h(h(x1),x2),x3),...,xn) for h(a,b)=CONSTANT*a+b and the x's the hash codes of the items of this collection. Declaration int GetSequencedHashCode() Returns Type Description System.Int32 The sequence order hashcode of this collection. | Improve this Doc View Source SequencedEquals(ISequenced<T>) Compare this sequenced collection to another one in sequence order. Declaration bool SequencedEquals(ISequenced<T> otherCollection) Parameters Type Name Description ISequenced <T> otherCollection The sequenced collection to compare to. Returns Type Description System.Boolean True if this collection and that contains equal (according to this collection's itemequalityComparer) in the same sequence order."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IShowable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IShowable.html",
    "title": "Interface IShowable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IShowable (Describe usage of \"L:300\" format string.) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IShowable : IFormattable Methods | Improve this Doc View Source Show(System.Text.StringBuilder, ref Int32, IFormatProvider) Format this using at most approximately rest chars and append the result, possibly truncated, to stringbuilder. Subtract the actual number of used chars from rest . Declaration bool Show(System.Text.StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description System.Text.StringBuilder stringbuilder System.Int32 rest IFormatProvider formatProvider Returns Type Description System.Boolean True if the appended formatted string was complete (not truncated)."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ISorted-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ISorted-1.html",
    "title": "Interface ISorted<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISorted<T> A sorted collection, i.e. a collection where items are maintained and can be searched for in sorted order. Thus the sequence order is given as a sorting order. The sorting order is defined by a comparer, an object of type IComparer<T> ( C5.IComparer`1 ). Implementors of this interface will normally let the user define the comparer as an argument to a constructor. Usually there will also be constructors without a comparer argument, in which case the comparer should be the defalt comparer for the item type, C5.Comparer`1.Default . The comparer of the sorted collection is available as the System.Collections.Generic.Comparer property ( C5.ISorted`1.Comparer ). The methods are grouped according to Since this interface extends ISequenced<T>, sorted collections will also have an item equalityComparer ( C5.IExtensible`1.EqualityComparer ). This equalityComparer will not be used in connection with the inner workings of the sorted collection, but will be used if the sorted collection is used as an item in a collection of unsequenced or sequenced collections, ( C5.ICollection`1 and C5.ISequenced`1 ) Note that code may check if two sorted collections has the same sorting order by checking if the Comparer properties are equal. This is done a few places in this library for optimization purposes. Inherited Members ISequenced<T>.GetSequencedHashCode() ISequenced<T>.SequencedEquals(ISequenced<T>) ICollection<T>.ContainsSpeed ICollection<T>.Count ICollection<T>.IsReadOnly ICollection<T>.Add(T) ICollection<T>.CopyTo(T[], Int32) ICollection<T>.GetUnsequencedHashCode() ICollection<T>.UnsequencedEquals(ICollection<T>) ICollection<T>.Contains(T) ICollection<T>.ContainsCount(T) ICollection<T>.UniqueItems() ICollection<T>.ItemMultiplicities() ICollection<T>.ContainsAll(System.Collections.Generic.IEnumerable<T>) ICollection<T>.Find(T) ICollection<T>.FindOrAdd(T) ICollection<T>.Update(T) ICollection<T>.Update(T, T) ICollection<T>.UpdateOrAdd(T) ICollection<T>.UpdateOrAdd(T, T) ICollection<T>.Remove(T) ICollection<T>.Remove(T, T) ICollection<T>.RemoveAllCopies(T) ICollection<T>.RemoveAll(System.Collections.Generic.IEnumerable<T>) ICollection<T>.Clear() ICollection<T>.RetainAll(System.Collections.Generic.IEnumerable<T>) IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.AddAll(System.Collections.Generic.IEnumerable<T>) IExtensible<T>.Check() IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.CountSpeed ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) IDirectedEnumerable<T>.Direction Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface ISorted<T> : ISequenced<T>, ICollection<T>, IExtensible<T>, System.Collections.Generic.ICollection<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, System.Collections.Generic.IEnumerable<T> Type Parameters Name Description T Properties | Improve this Doc View Source Comparer The comparer object supplied at creation time for this sorted collection. Declaration System.Collections.Generic.IComparer<T> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer <T> The comparer Methods | Improve this Doc View Source AddSorted(System.Collections.Generic.IEnumerable<T>) Add all the items from another collection with an enumeration order that is increasing in the items. Declaration void AddSorted(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The collection to add. | Improve this Doc View Source Cut(IComparable<T>, out T, out Boolean, out T, out Boolean) Given a \"cut\" function from the items of the sorted collection to int whose only sign changes when going through items in increasing order can be The \"cut\" function is supplied as the CompareTo method of an object c implementing IComparable<T> . A typical example is the case where T is comparable and cutFunction is itself of type T . This method performs a search in the sorted collection for the ranges in which the \"cut\" function is negative, zero respectively positive. If T is comparable and c is of type T , this is a safe way (no exceptions thrown) to find predecessor and successor of c . If the supplied cut function does not satisfy the sign-change condition, the result of this call is undefined. Declaration bool Cut(IComparable<T> cutFunction, out T low, out bool lowIsValid, out T high, out bool highIsValid) Parameters Type Name Description IComparable <T> cutFunction The cut function T to int , given by the CompareTo method of an object implementing IComparable<T> . T low Returns the largest item in the collection, where the cut function is positive (if any). System.Boolean lowIsValid Returns true if the cut function is positive somewhere on this collection. T high Returns the least item in the collection, where the cut function is negative (if any). System.Boolean highIsValid Returns true if the cut function is negative somewhere on this collection. Returns Type Description System.Boolean True if the cut function is zero somewhere on this collection. | Improve this Doc View Source DeleteMax() Remove the largest item from this sorted collection. Declaration T DeleteMax() Returns Type Description T The removed item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source DeleteMin() Remove the least item from this sorted collection. Declaration T DeleteMin() Returns Type Description T The removed item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source FindMax() Find the current largest item of this sorted collection. Declaration T FindMax() Returns Type Description T The largest item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source FindMin() Find the current least item of this sorted collection. Declaration T FindMin() Returns Type Description T The least item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source Predecessor(T) Find the strict predecessor in the sorted collection of a particular value, that is, the largest item in the collection less than the supplied value. Declaration T Predecessor(T item) Parameters Type Name Description T item The item to find the predecessor for. Returns Type Description T The predecessor. Exceptions Type Condition NoSuchItemException if no such element exists (the supplied value is less than or equal to the minimum of this collection.) | Improve this Doc View Source RangeAll() Create a directed collection with the same items as this collection. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedCollectionValue<T> RangeAll() Returns Type Description IDirectedCollectionValue <T> The result directed collection. | Improve this Doc View Source RangeFrom(T) Query this sorted collection for items greater than or equal to a supplied value. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedEnumerable<T> RangeFrom(T bot) Parameters Type Name Description T bot The lower bound (inclusive). Returns Type Description IDirectedEnumerable <T> The result directed collection. | Improve this Doc View Source RangeFromTo(T, T) Query this sorted collection for items between two supplied values. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedEnumerable<T> RangeFromTo(T bot, T top) Parameters Type Name Description T bot The lower bound (inclusive). T top The upper bound (exclusive). Returns Type Description IDirectedEnumerable <T> The result directed collection. | Improve this Doc View Source RangeTo(T) Query this sorted collection for items less than a supplied value. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedEnumerable<T> RangeTo(T top) Parameters Type Name Description T top The upper bound (exclusive). Returns Type Description IDirectedEnumerable <T> The result directed collection. | Improve this Doc View Source RemoveRangeFrom(T) Remove all items of this collection above or at a supplied threshold. Declaration void RemoveRangeFrom(T low) Parameters Type Name Description T low The lower threshold (inclusive). | Improve this Doc View Source RemoveRangeFromTo(T, T) Remove all items of this collection between two supplied thresholds. Declaration void RemoveRangeFromTo(T low, T hi) Parameters Type Name Description T low The lower threshold (inclusive). T hi The upper threshold (exclusive). | Improve this Doc View Source RemoveRangeTo(T) Remove all items of this collection below a supplied threshold. Declaration void RemoveRangeTo(T hi) Parameters Type Name Description T hi The upper threshold (exclusive). | Improve this Doc View Source Successor(T) Find the strict successor in the sorted collection of a particular value, that is, the least item in the collection greater than the supplied value. Declaration T Successor(T item) Parameters Type Name Description T item The item to find the successor for. Returns Type Description T The successor. Exceptions Type Condition NoSuchItemException if no such element exists (the supplied value is greater than or equal to the maximum of this collection.) | Improve this Doc View Source TryPredecessor(T, out T) Find the strict predecessor of item in the sorted collection, that is, the greatest item in the collection smaller than the item. Declaration bool TryPredecessor(T item, out T res) Parameters Type Name Description T item The item to find the predecessor for. T res The predecessor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a predecessor; otherwise false. | Improve this Doc View Source TrySuccessor(T, out T) Find the strict successor of item in the sorted collection, that is, the least item in the collection greater than the supplied value. Declaration bool TrySuccessor(T item, out T res) Parameters Type Name Description T item The item to find the successor for. T res The successor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a successor; otherwise false. | Improve this Doc View Source TryWeakPredecessor(T, out T) Find the weak predecessor of item in the sorted collection, that is, the greatest item in the collection smaller than or equal to the item. Declaration bool TryWeakPredecessor(T item, out T res) Parameters Type Name Description T item The item to find the weak predecessor for. T res The weak predecessor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a weak predecessor; otherwise false. | Improve this Doc View Source TryWeakSuccessor(T, out T) Find the weak successor of item in the sorted collection, that is, the least item in the collection greater than or equal to the supplied value. Declaration bool TryWeakSuccessor(T item, out T res) Parameters Type Name Description T item The item to find the weak successor for. T res The weak successor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a weak successor; otherwise false. | Improve this Doc View Source WeakPredecessor(T) Find the weak predecessor in the sorted collection of a particular value, that is, the largest item in the collection less than or equal to the supplied value. Declaration T WeakPredecessor(T item) Parameters Type Name Description T item The item to find the weak predecessor for. Returns Type Description T The weak predecessor. Exceptions Type Condition NoSuchItemException if no such element exists (the supplied value is less than the minimum of this collection.) | Improve this Doc View Source WeakSuccessor(T) Find the weak successor in the sorted collection of a particular value, that is, the least item in the collection greater than or equal to the supplied value. Declaration T WeakSuccessor(T item) Parameters Type Name Description T item The item to find the weak successor for. Returns Type Description T The weak successor. Exceptions Type Condition NoSuchItemException if no such element exists (the supplied value is greater than the maximum of this collection.)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ISortedDictionary-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ISortedDictionary-2.html",
    "title": "Interface ISortedDictionary<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISortedDictionary<K, V> A dictionary with sorted keys. Inherited Members IDictionary<K, V>.EqualityComparer IDictionary<K, V>.Item[K] IDictionary<K, V>.IsReadOnly IDictionary<K, V>.Keys IDictionary<K, V>.Values IDictionary<K, V>.Func IDictionary<K, V>.Add(K, V) IDictionary<K, V>.AddAll<U, W>(System.Collections.Generic.IEnumerable<KeyValuePair<U, W>>) IDictionary<K, V>.ContainsSpeed IDictionary<K, V>.ContainsAll<H>(System.Collections.Generic.IEnumerable<H>) IDictionary<K, V>.Remove(K) IDictionary<K, V>.Remove(K, V) IDictionary<K, V>.Clear() IDictionary<K, V>.Contains(K) IDictionary<K, V>.Find(K, V) IDictionary<K, V>.Update(K, V) IDictionary<K, V>.Update(K, V, V) IDictionary<K, V>.FindOrAdd(K, V) IDictionary<K, V>.UpdateOrAdd(K, V) IDictionary<K, V>.UpdateOrAdd(K, V, V) IDictionary<K, V>.Check() ICollectionValue<KeyValuePair<K, V>>.ListenableEvents ICollectionValue<KeyValuePair<K, V>>.ActiveEvents ICollectionValue<KeyValuePair<K, V>>.CollectionChanged ICollectionValue<KeyValuePair<K, V>>.CollectionCleared ICollectionValue<KeyValuePair<K, V>>.ItemsAdded ICollectionValue<KeyValuePair<K, V>>.ItemInserted ICollectionValue<KeyValuePair<K, V>>.ItemsRemoved ICollectionValue<KeyValuePair<K, V>>.ItemRemovedAt ICollectionValue<KeyValuePair<K, V>>.IsEmpty ICollectionValue<KeyValuePair<K, V>>.Count ICollectionValue<KeyValuePair<K, V>>.CountSpeed ICollectionValue<KeyValuePair<K, V>>.CopyTo(KeyValuePair<K, V>[], Int32) ICollectionValue<KeyValuePair<K, V>>.ToArray() ICollectionValue<KeyValuePair<K, V>>.Apply(Action<KeyValuePair<K, V>>) ICollectionValue<KeyValuePair<K, V>>.Exists(Func<KeyValuePair<K, V>, Boolean>) ICollectionValue<KeyValuePair<K, V>>.Find(Func<KeyValuePair<K, V>, Boolean>, KeyValuePair<K, V>) ICollectionValue<KeyValuePair<K, V>>.All(Func<KeyValuePair<K, V>, Boolean>) ICollectionValue<KeyValuePair<K, V>>.Choose() ICollectionValue<KeyValuePair<K, V>>.Filter(Func<KeyValuePair<K, V>, Boolean>) IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface ISortedDictionary<K, V> : IDictionary<K, V>, ICollectionValue<KeyValuePair<K, V>>, System.Collections.Generic.IEnumerable<KeyValuePair<K, V>>, IShowable, IFormattable Type Parameters Name Description K V Properties | Improve this Doc View Source Comparer The key comparer used by this dictionary. Declaration System.Collections.Generic.IComparer<K> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer <K> | Improve this Doc View Source Keys Declaration ISorted<K> Keys { get; } Property Value Type Description ISorted <K> Methods | Improve this Doc View Source AddSorted(System.Collections.Generic.IEnumerable<KeyValuePair<K, V>>) Add all the items from another collection with an enumeration order that is increasing in the items. Declaration void AddSorted(System.Collections.Generic.IEnumerable<KeyValuePair<K, V>> items) Parameters Type Name Description System.Collections.Generic.IEnumerable < KeyValuePair <K, V>> items The collection to add. | Improve this Doc View Source Cut(IComparable<K>, out KeyValuePair<K, V>, out Boolean, out KeyValuePair<K, V>, out Boolean) Given a \"cut\" function from the items of the sorted collection to int whose only sign changes when going through items in increasing order can be The \"cut\" function is supplied as the CompareTo method of an object c implementing IComparable<K> . A typical example is the case where K is comparable and c is itself of type K . This method performs a search in the sorted collection for the ranges in which the \"cut\" function is negative, zero respectively positive. If K is comparable and c is of type K , this is a safe way (no exceptions thrown) to find predecessor and successor of c . If the supplied cut function does not satisfy the sign-change condition, the result of this call is undefined. Declaration bool Cut(IComparable<K> cutFunction, out KeyValuePair<K, V> lowEntry, out bool lowIsValid, out KeyValuePair<K, V> highEntry, out bool highIsValid) Parameters Type Name Description IComparable <K> cutFunction The cut function K to int , given by the CompareTo method of an object implementing IComparable<K> . KeyValuePair <K, V> lowEntry Returns the largest item in the collection, where the cut function is positive (if any). System.Boolean lowIsValid Returns true if the cut function is positive somewhere on this collection. KeyValuePair <K, V> highEntry Returns the least item in the collection, where the cut function is negative (if any). System.Boolean highIsValid Returns true if the cut function is negative somewhere on this collection. Returns Type Description System.Boolean True if the cut function is zero somewhere on this collection. | Improve this Doc View Source DeleteMax() Remove the largest item from this sorted collection. Declaration KeyValuePair<K, V> DeleteMax() Returns Type Description KeyValuePair <K, V> The removed item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source DeleteMin() Remove the least item from this sorted collection. Declaration KeyValuePair<K, V> DeleteMin() Returns Type Description KeyValuePair <K, V> The removed item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source FindMax() Find the current largest item of this sorted collection. Declaration KeyValuePair<K, V> FindMax() Returns Type Description KeyValuePair <K, V> The largest item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source FindMin() Find the current least item of this sorted collection. Declaration KeyValuePair<K, V> FindMin() Returns Type Description KeyValuePair <K, V> The least item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source Predecessor(K) Find the entry with the largest key less than a given key. Declaration KeyValuePair<K, V> Predecessor(K key) Parameters Type Name Description K key The key to compare to Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException if there is no such entry. | Improve this Doc View Source RangeAll() Create a directed collection with the same items as this collection. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedCollectionValue<KeyValuePair<K, V>> RangeAll() Returns Type Description IDirectedCollectionValue < KeyValuePair <K, V>> The result directed collection. | Improve this Doc View Source RangeFrom(K) Query this sorted collection for items greater than or equal to a supplied value. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedEnumerable<KeyValuePair<K, V>> RangeFrom(K bot) Parameters Type Name Description K bot The lower bound (inclusive). Returns Type Description IDirectedEnumerable < KeyValuePair <K, V>> The result directed collection. | Improve this Doc View Source RangeFromTo(K, K) Query this sorted collection for items between two supplied values. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedEnumerable<KeyValuePair<K, V>> RangeFromTo(K lowerBound, K upperBound) Parameters Type Name Description K lowerBound The lower bound (inclusive). K upperBound The upper bound (exclusive). Returns Type Description IDirectedEnumerable < KeyValuePair <K, V>> The result directed collection. | Improve this Doc View Source RangeTo(K) Query this sorted collection for items less than a supplied value. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedEnumerable<KeyValuePair<K, V>> RangeTo(K top) Parameters Type Name Description K top The upper bound (exclusive). Returns Type Description IDirectedEnumerable < KeyValuePair <K, V>> The result directed collection. | Improve this Doc View Source RemoveRangeFrom(K) Remove all items of this collection above or at a supplied threshold. Declaration void RemoveRangeFrom(K low) Parameters Type Name Description K low The lower threshold (inclusive). | Improve this Doc View Source RemoveRangeFromTo(K, K) Remove all items of this collection between two supplied thresholds. Declaration void RemoveRangeFromTo(K low, K hi) Parameters Type Name Description K low The lower threshold (inclusive). K hi The upper threshold (exclusive). | Improve this Doc View Source RemoveRangeTo(K) Remove all items of this collection below a supplied threshold. Declaration void RemoveRangeTo(K hi) Parameters Type Name Description K hi The upper threshold (exclusive). | Improve this Doc View Source Successor(K) Find the entry with the least key greater than a given key. Declaration KeyValuePair<K, V> Successor(K key) Parameters Type Name Description K key The key to compare to Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException if there is no such entry. | Improve this Doc View Source TryPredecessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the predecessor of the specified key. Declaration bool TryPredecessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The predecessor, if any Returns Type Description System.Boolean True if key has a predecessor | Improve this Doc View Source TrySuccessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the successor of the specified key. Declaration bool TrySuccessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The successor, if any Returns Type Description System.Boolean True if the key has a successor | Improve this Doc View Source TryWeakPredecessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the weak predecessor of the specified key. Declaration bool TryWeakPredecessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The predecessor, if any Returns Type Description System.Boolean True if key has a weak predecessor | Improve this Doc View Source TryWeakSuccessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the weak successor of the specified key. Declaration bool TryWeakSuccessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The weak successor, if any Returns Type Description System.Boolean True if the key has a weak successor | Improve this Doc View Source WeakPredecessor(K) Find the entry with the largest key less than or equal to a given key. Declaration KeyValuePair<K, V> WeakPredecessor(K key) Parameters Type Name Description K key The key to compare to Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException if there is no such entry. | Improve this Doc View Source WeakSuccessor(K) Find the entry with the least key greater than or equal to a given key. Declaration KeyValuePair<K, V> WeakSuccessor(K key) Parameters Type Name Description K key The key to compare to Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException if there is no such entry."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IStack-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IStack-1.html",
    "title": "Interface IStack<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IStack<T> The interface describing the operations of a LIFO stack data structure. Inherited Members IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.Count ICollectionValue<T>.CountSpeed ICollectionValue<T>.CopyTo(T[], Int32) ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(System.Text.StringBuilder, Int32, IFormatProvider) IDirectedEnumerable<T>.Direction Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IStack<T> : IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, System.Collections.Generic.IEnumerable<T> Type Parameters Name Description T The item type Properties | Improve this Doc View Source AllowsDuplicates Declaration bool AllowsDuplicates { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[Int32] Get the index 'th element of the stack. The bottom of the stack has index 0. Declaration T this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description T Methods | Improve this Doc View Source Pop() Pop the item at the top of the stack from the stack. Declaration T Pop() Returns Type Description T The popped item. | Improve this Doc View Source Push(T) Push an item to the top of the stack. Declaration void Push(T item) Parameters Type Name Description T item The item"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ItemAtEventArgs-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ItemAtEventArgs-1.html",
    "title": "Class ItemAtEventArgs<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ItemAtEventArgs<T> Inheritance System.Object ItemAtEventArgs<T> Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class ItemAtEventArgs<T> : EventArgs Type Parameters Name Description T Constructors | Improve this Doc View Source ItemAtEventArgs(T, Int32) Declaration public ItemAtEventArgs(T item, int index) Parameters Type Name Description T item System.Int32 index Fields | Improve this Doc View Source Index Declaration public readonly int Index Field Value Type Description System.Int32 | Improve this Doc View Source Item Declaration public readonly T Item Field Value Type Description T Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ItemCountEventArgs-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ItemCountEventArgs-1.html",
    "title": "Class ItemCountEventArgs<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ItemCountEventArgs<T> Inheritance System.Object ItemCountEventArgs<T> Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class ItemCountEventArgs<T> : EventArgs Type Parameters Name Description T Constructors | Improve this Doc View Source ItemCountEventArgs(T, Int32) Declaration public ItemCountEventArgs(T item, int count) Parameters Type Name Description T item System.Int32 count Fields | Improve this Doc View Source Count Declaration public readonly int Count Field Value Type Description System.Int32 | Improve this Doc View Source Item Declaration public readonly T Item Field Value Type Description T Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ItemInsertedHandler-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ItemInsertedHandler-1.html",
    "title": "Delegate ItemInsertedHandler<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate ItemInsertedHandler<T> The type of event raised after an item has been inserted into a list by an Insert, InsertFirst or InsertLast operation. The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: an ItemsAdded event will also be fired. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public delegate void ItemInsertedHandler<T>(object sender, ItemAtEventArgs<T> eventArgs); Parameters Type Name Description System.Object sender ItemAtEventArgs <T> eventArgs Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ItemRemovedAtHandler-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ItemRemovedAtHandler-1.html",
    "title": "Delegate ItemRemovedAtHandler<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate ItemRemovedAtHandler<T> The type of event raised after an item has been removed from a list by a RemoveAt(int i) operation (or RemoveFirst(), RemoveLast(), Remove() operation). The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: an ItemRemoved event will also be fired. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public delegate void ItemRemovedAtHandler<T>(object sender, ItemAtEventArgs<T> eventArgs); Parameters Type Name Description System.Object sender ItemAtEventArgs <T> eventArgs Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ItemsAddedHandler-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ItemsAddedHandler-1.html",
    "title": "Delegate ItemsAddedHandler<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate ItemsAddedHandler<T> The type of event raised after an item has been added to a collection. The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: an Update operation will fire an ItemsRemoved and an ItemsAdded event. Note: When an item is inserted into a list ( C5.IList`1 ), both ItemInserted and ItemsAdded events will be fired. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public delegate void ItemsAddedHandler<T>(object sender, ItemCountEventArgs<T> eventArgs); Parameters Type Name Description System.Object sender ItemCountEventArgs <T> eventArgs An object with the item that was added Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ItemsRemovedHandler-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ItemsRemovedHandler-1.html",
    "title": "Delegate ItemsRemovedHandler<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate ItemsRemovedHandler<T> The type of event raised after an item has been removed from a collection. The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: The Clear() operation will not fire ItemsRemoved events. Note: an Update operation will fire an ItemsRemoved and an ItemsAdded event. Note: When an item is removed from a list by the RemoveAt operation, both an ItemsRemoved and an ItemRemovedAt event will be fired. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public delegate void ItemsRemovedHandler<T>(object sender, ItemCountEventArgs<T> eventArgs); Parameters Type Name Description System.Object sender ItemCountEventArgs <T> eventArgs An object with the item that was removed Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.KeyValuePair-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.KeyValuePair-2.html",
    "title": "Struct KeyValuePair<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Struct KeyValuePair<K, V> An entry in a dictionary from K to V. Implements IEquatable < KeyValuePair <K, V>> IShowable IFormattable Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public struct KeyValuePair<K, V> : IEquatable<KeyValuePair<K, V>>, IShowable, IFormattable Type Parameters Name Description K V Constructors | Improve this Doc View Source KeyValuePair(K) Create an entry with a specified key. The value will be the default value of type V . Declaration public KeyValuePair(K key) Parameters Type Name Description K key The key | Improve this Doc View Source KeyValuePair(K, V) Create an entry with specified key and value Declaration public KeyValuePair(K key, V value) Parameters Type Name Description K key The key V value The value Fields | Improve this Doc View Source Key The key field of the entry Declaration public K Key Field Value Type Description K | Improve this Doc View Source Value The value field of the entry Declaration public V Value Field Value Type Description V Methods | Improve this Doc View Source Equals(KeyValuePair<K, V>) Declaration public bool Equals(KeyValuePair<K, V> other) Parameters Type Name Description KeyValuePair <K, V> other Returns Type Description System.Boolean | Improve this Doc View Source Equals(Object) Check equality of entries. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The other object Returns Type Description System.Boolean True if obj is an entry of the same type and has the same key and value | Improve this Doc View Source GetHashCode() Get the hash code of the pair. Declaration public override int GetHashCode() Returns Type Description System.Int32 The hash code | Improve this Doc View Source Show(System.Text.StringBuilder, ref Int32, IFormatProvider) Declaration public bool Show(System.Text.StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description System.Text.StringBuilder stringbuilder System.Int32 rest IFormatProvider formatProvider Returns Type Description System.Boolean | Improve this Doc View Source ToString() Pretty print an entry Declaration public override string ToString() Returns Type Description System.String (key, value) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public string ToString(string format, IFormatProvider formatProvider) Parameters Type Name Description System.String format IFormatProvider formatProvider Returns Type Description System.String Operators | Improve this Doc View Source Equality(KeyValuePair<K, V>, KeyValuePair<K, V>) Declaration public static bool operator ==(KeyValuePair<K, V> pair1, KeyValuePair<K, V> pair2) Parameters Type Name Description KeyValuePair <K, V> pair1 KeyValuePair <K, V> pair2 Returns Type Description System.Boolean | Improve this Doc View Source Inequality(KeyValuePair<K, V>, KeyValuePair<K, V>) Declaration public static bool operator !=(KeyValuePair<K, V> pair1, KeyValuePair<K, V> pair2) Parameters Type Name Description KeyValuePair <K, V> pair1 KeyValuePair <K, V> pair2 Returns Type Description System.Boolean Implements IEquatable<> IShowable IFormattable"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.KeyValuePairComparer-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.KeyValuePairComparer-2.html",
    "title": "Class KeyValuePairComparer<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeyValuePairComparer<K, V> Default comparer for dictionary entries in a sorted dictionary. Entry comparisons only look at keys and uses an externally defined comparer for that. Inheritance System.Object KeyValuePairComparer<K, V> Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class KeyValuePairComparer<K, V> : System.Collections.Generic.IComparer<KeyValuePair<K, V>> Type Parameters Name Description K V Constructors | Improve this Doc View Source KeyValuePairComparer(System.Collections.Generic.IComparer<K>) Create an entry comparer for a item comparer of the keys Declaration public KeyValuePairComparer(System.Collections.Generic.IComparer<K> comparer) Parameters Type Name Description System.Collections.Generic.IComparer <K> comparer Comparer of keys Methods | Improve this Doc View Source Compare(KeyValuePair<K, V>, KeyValuePair<K, V>) Compare two entries Declaration public int Compare(KeyValuePair<K, V> entry1, KeyValuePair<K, V> entry2) Parameters Type Name Description KeyValuePair <K, V> entry1 First entry KeyValuePair <K, V> entry2 Second entry Returns Type Description System.Int32 The result of comparing the keys"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.KeyValuePairEqualityComparer-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.KeyValuePairEqualityComparer-2.html",
    "title": "Class KeyValuePairEqualityComparer<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeyValuePairEqualityComparer<K, V> Default equalityComparer for dictionary entries. Operations only look at keys and uses an externally defined equalityComparer for that. Inheritance System.Object KeyValuePairEqualityComparer<K, V> Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public sealed class KeyValuePairEqualityComparer<K, V> : System.Collections.Generic.IEqualityComparer<KeyValuePair<K, V>> Type Parameters Name Description K V Constructors | Improve this Doc View Source KeyValuePairEqualityComparer() Create an entry equalityComparer using the default equalityComparer for keys Declaration public KeyValuePairEqualityComparer() | Improve this Doc View Source KeyValuePairEqualityComparer(System.Collections.Generic.IEqualityComparer<K>) Create an entry equalityComparer from a specified item equalityComparer for the keys Declaration public KeyValuePairEqualityComparer(System.Collections.Generic.IEqualityComparer<K> keyequalityComparer) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <K> keyequalityComparer The key equalitySCG.Comparer Methods | Improve this Doc View Source Equals(KeyValuePair<K, V>, KeyValuePair<K, V>) Test two entries for equality Declaration public bool Equals(KeyValuePair<K, V> entry1, KeyValuePair<K, V> entry2) Parameters Type Name Description KeyValuePair <K, V> entry1 First entry KeyValuePair <K, V> entry2 Second entry Returns Type Description System.Boolean True if keys are equal | Improve this Doc View Source GetHashCode(KeyValuePair<K, V>) Get the hash code of the entry Declaration public int GetHashCode(KeyValuePair<K, V> entry) Parameters Type Name Description KeyValuePair <K, V> entry The entry Returns Type Description System.Int32 The hash code of the key"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.Logger.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.Logger.html",
    "title": "Class Logger | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Logger Logging module Inheritance System.Object Logger Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public static class Logger : object Properties | Improve this Doc View Source Log Gets or sets the log. Declaration public static Action<string> Log { get; set; } Property Value Type Description Action < System.String > The log. Remarks If Log is not set it will return a dummy action x => { return; }) eliminating the need for null-reference checks. Examples The following is an example of assigning a observer to the logging module: Logger.Log = x => Console.WriteLine(x);"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.MemoryType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.MemoryType.html",
    "title": "Enum MemoryType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum MemoryType It specifies the memory type strategy of the internal enumerator implemented to iterate over the collection. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public enum MemoryType : int Fields Name Description Normal Normal is the usual operator type. A new instance of an enumerator is always returned for multithread safety purposes. Safe Safe returns the same enumerator instance and updates references or a new instance in case of multiple enumeration and multithread access Strict Strict always returns the same enumerator instance. An exception is raised if the collection is enumerated more than once or if the collection is accessed by multiple threads concurrently."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.MultipleEnumerationException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.MultipleEnumerationException.html",
    "title": "Class MultipleEnumerationException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultipleEnumerationException An exception thrown by the MemorySafeEnumerator if the collection is enumerated multiple times when the memory mode is set to Strict Inheritance System.Object MultipleEnumerationException Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class MultipleEnumerationException : Exception Constructors | Improve this Doc View Source MultipleEnumerationException() Create a simple exception with no further explanation. Declaration public MultipleEnumerationException() | Improve this Doc View Source MultipleEnumerationException(String) Create a simple exception with the an explanation contained in the error message. Declaration public MultipleEnumerationException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.NoSuchItemException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.NoSuchItemException.html",
    "title": "Class NoSuchItemException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoSuchItemException An exception thrown by a lookup or lookup with update operation that does not find the lookup item and has no other means to communicate failure. The typical scenario is a lookup by key in a dictionary with an indexer, see e.g. C5.IDictionary`2.Item(`0) Inheritance System.Object NoSuchItemException Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class NoSuchItemException : Exception Constructors | Improve this Doc View Source NoSuchItemException() Create a simple exception with no further explanation. Declaration public NoSuchItemException() | Improve this Doc View Source NoSuchItemException(String) Create the exception with an explanation of the reason. Declaration public NoSuchItemException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.NotAViewException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.NotAViewException.html",
    "title": "Class NotAViewException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NotAViewException An exception thrown by an operation on a list ( C5.IList`1 ) that only makes sense for a view, not for an underlying list. Inheritance System.Object NotAViewException Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class NotAViewException : Exception Constructors | Improve this Doc View Source NotAViewException() Create a simple exception with no further explanation. Declaration public NotAViewException() | Improve this Doc View Source NotAViewException(String) Create the exception with an explanation of the reason. Declaration public NotAViewException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.NotComparableException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.NotComparableException.html",
    "title": "Class NotComparableException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NotComparableException An exception thrown by an operation that need to construct a natural comparer for a type. Inheritance System.Object NotComparableException Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class NotComparableException : Exception Constructors | Improve this Doc View Source NotComparableException() Create a simple exception with no further explanation. Declaration public NotComparableException() | Improve this Doc View Source NotComparableException(String) Create the exception with an explanation of the reason. Declaration public NotComparableException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ReadOnlyCollectionException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ReadOnlyCollectionException.html",
    "title": "Class ReadOnlyCollectionException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReadOnlyCollectionException An exception thrown by an update operation on a Read-Only collection or dictionary. This exception will be thrown unconditionally when an update operation (method or set property) is called. No check is made to see if the update operation, if allowed, would actually change the collection. Inheritance System.Object ReadOnlyCollectionException Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class ReadOnlyCollectionException : Exception Constructors | Improve this Doc View Source ReadOnlyCollectionException() Create a simple exception with no further explanation. Declaration public ReadOnlyCollectionException() | Improve this Doc View Source ReadOnlyCollectionException(String) Create the exception with an explanation of the reason. Declaration public ReadOnlyCollectionException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.SequencedBase-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.SequencedBase-1.html",
    "title": "Class SequencedBase<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SequencedBase<T> Base class (abstract) for sequenced collection implementations. Inheritance System.Object EnumerableBase <T> CollectionValueBase <T> CollectionBase <T> DirectedCollectionBase <T> SequencedBase<T> CircularQueue<T> TreeSet<T> Implements IDirectedCollectionValue <T> ICollectionValue <T> IShowable IFormattable IDirectedEnumerable <T> System.Collections.Generic.IEnumerable <T> Inherited Members DirectedCollectionBase<T>.Backwards() DirectedCollectionBase<T>.IDirectedEnumerable<T>.Backwards() DirectedCollectionBase<T>.FindLast(Func<T, Boolean>, T) CollectionBase<T>.isReadOnlyBase CollectionBase<T>.stamp CollectionBase<T>.size CollectionBase<T>.itemequalityComparer CollectionBase<T>.checkRange(Int32, Int32) CollectionBase<T>.ComputeHashCode(ICollectionValue<T>, System.Collections.Generic.IEqualityComparer<T>) CollectionBase<T>.StaticEquals(ICollection<T>, ICollection<T>, System.Collections.Generic.IEqualityComparer<T>) CollectionBase<T>.GetUnsequencedHashCode() CollectionBase<T>.UnsequencedEquals(ICollection<T>) CollectionBase<T>.modifycheck(Int32) CollectionBase<T>.updatecheck() CollectionBase<T>.IsReadOnly CollectionBase<T>.Count CollectionBase<T>.CountSpeed CollectionBase<T>.EqualityComparer CollectionBase<T>.IsEmpty CollectionValueBase<T>.ListenableEvents CollectionValueBase<T>.ActiveEvents CollectionValueBase<T>.CollectionChanged CollectionValueBase<T>.raiseCollectionChanged() CollectionValueBase<T>.CollectionCleared CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<T>.ItemsAdded CollectionValueBase<T>.raiseItemsAdded(T, Int32) CollectionValueBase<T>.ItemsRemoved CollectionValueBase<T>.raiseItemsRemoved(T, Int32) CollectionValueBase<T>.ItemInserted CollectionValueBase<T>.raiseItemInserted(T, Int32) CollectionValueBase<T>.ItemRemovedAt CollectionValueBase<T>.raiseItemRemovedAt(T, Int32) CollectionValueBase<T>.raiseForSetThis(Int32, T, T) CollectionValueBase<T>.raiseForInsert(Int32, T) CollectionValueBase<T>.raiseForRemove(T) CollectionValueBase<T>.raiseForRemove(T, Int32) CollectionValueBase<T>.raiseForRemoveAt(Int32, T) CollectionValueBase<T>.raiseForUpdate(T, T) CollectionValueBase<T>.raiseForUpdate(T, T, Int32) CollectionValueBase<T>.raiseForAdd(T) CollectionValueBase<T>.raiseForRemoveAll(ICollectionValue<T>) CollectionValueBase<T>.CopyTo(T[], Int32) CollectionValueBase<T>.ToArray() CollectionValueBase<T>.Apply(Action<T>) CollectionValueBase<T>.Exists(Func<T, Boolean>) CollectionValueBase<T>.Find(Func<T, Boolean>, T) CollectionValueBase<T>.All(Func<T, Boolean>) CollectionValueBase<T>.Filter(Func<T, Boolean>) CollectionValueBase<T>.Choose() CollectionValueBase<T>.Show(System.Text.StringBuilder, Int32, IFormatProvider) CollectionValueBase<T>.ToString(String, IFormatProvider) CollectionValueBase<T>.ToString() EnumerableBase<T>.GetEnumerator() EnumerableBase<T>.countItems(System.Collections.Generic.IEnumerable<T>) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class SequencedBase<T> : DirectedCollectionBase<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, System.Collections.Generic.IEnumerable<T> Type Parameters Name Description T Constructors | Improve this Doc View Source SequencedBase(System.Collections.Generic.IEqualityComparer<T>, MemoryType) Declaration protected SequencedBase(System.Collections.Generic.IEqualityComparer<T> itemequalityComparer, MemoryType memoryType) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <T> itemequalityComparer MemoryType memoryType The type of memory for the enumerator used to iterate the collection Properties | Improve this Doc View Source Direction Forwards if same, else Backwards Declaration public override EnumerationDirection Direction { get; } Property Value Type Description EnumerationDirection The enumeration direction relative to the original collection. Overrides Lucene.Net.Support.C5.DirectedCollectionBase<T>.Direction Methods | Improve this Doc View Source ComputeHashCode(ISequenced<T>, System.Collections.Generic.IEqualityComparer<T>) Compute the unsequenced hash code of a collection Declaration public static int ComputeHashCode(ISequenced<T> items, System.Collections.Generic.IEqualityComparer<T> itemequalityComparer) Parameters Type Name Description ISequenced <T> items The collection to compute hash code for System.Collections.Generic.IEqualityComparer <T> itemequalityComparer The item equalitySCG.Comparer Returns Type Description System.Int32 The hash code | Improve this Doc View Source FindIndex(Func<T, Boolean>) Check if there exists an item that satisfies a specific predicate in this collection and return the index of the first one. Declaration public int FindIndex(Func<T, bool> predicate) Parameters Type Name Description Func <T, System.Boolean > predicate A delegate defining the predicate Returns Type Description System.Int32 the index, if found, a negative value else | Improve this Doc View Source FindLastIndex(Func<T, Boolean>) Check if there exists an item that satisfies a specific predicate in this collection and return the index of the last one. Declaration public int FindLastIndex(Func<T, bool> predicate) Parameters Type Name Description Func <T, System.Boolean > predicate A delegate defining the predicate Returns Type Description System.Int32 the index, if found, a negative value else | Improve this Doc View Source GetSequencedHashCode() Get the sequenced collection hash code of this collection: from the cached value if present and up to date, else (re)compute. Declaration public virtual int GetSequencedHashCode() Returns Type Description System.Int32 The hash code | Improve this Doc View Source SequencedEquals(ISequenced<T>) Check if the contents of that is equal to the contents of this in the sequenced sense. Using the item equalityComparer of this collection. Declaration public virtual bool SequencedEquals(ISequenced<T> otherCollection) Parameters Type Name Description ISequenced <T> otherCollection The collection to compare to. Returns Type Description System.Boolean True if equal | Improve this Doc View Source StaticEquals(ISequenced<T>, ISequenced<T>, System.Collections.Generic.IEqualityComparer<T>) Examine if tit and tat are equal as sequenced collections using the specified item equalityComparer (assumed compatible with the two collections). Declaration public static bool StaticEquals(ISequenced<T> collection1, ISequenced<T> collection2, System.Collections.Generic.IEqualityComparer<T> itemequalityComparer) Parameters Type Name Description ISequenced <T> collection1 The first collection ISequenced <T> collection2 The second collection System.Collections.Generic.IEqualityComparer <T> itemequalityComparer The item equalityComparer to use for comparison Returns Type Description System.Boolean True if equal Implements IDirectedCollectionValue<T> ICollectionValue<T> IShowable IFormattable IDirectedEnumerable<T> System.Collections.Generic.IEnumerable<>"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.SequencedCollectionEqualityComparer-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.SequencedCollectionEqualityComparer-2.html",
    "title": "Class SequencedCollectionEqualityComparer<T, W> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SequencedCollectionEqualityComparer<T, W> Prototype for a sequenced equalityComparer for something (T) that implements ISequenced[W]. This will use ISequenced[W] specific implementations of the equality comparer operations. Inheritance System.Object SequencedCollectionEqualityComparer<T, W> Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class SequencedCollectionEqualityComparer<T, W> : System.Collections.Generic.IEqualityComparer<T> where T : ISequenced<W> Type Parameters Name Description T W Properties | Improve this Doc View Source Default Declaration public static SequencedCollectionEqualityComparer<T, W> Default { get; } Property Value Type Description SequencedCollectionEqualityComparer <T, W> Methods | Improve this Doc View Source Equals(T, T) Check if two items are equal with respect to this sequenced equalityComparer Declaration public bool Equals(T collection1, T collection2) Parameters Type Name Description T collection1 first collection T collection2 second collection Returns Type Description System.Boolean True if equal | Improve this Doc View Source GetHashCode(T) Get the hash code with respect to this sequenced equalityComparer Declaration public int GetHashCode(T collection) Parameters Type Name Description T collection The collection Returns Type Description System.Int32 The hash code"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.Showing.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.Showing.html",
    "title": "Class Showing | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Showing Inheritance System.Object Showing Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public static class Showing : object Methods | Improve this Doc View Source Show(Object, System.Text.StringBuilder, ref Int32, IFormatProvider) Show Object obj by appending it to stringbuilder Declaration public static bool Show(Object obj, System.Text.StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description Object obj System.Text.StringBuilder stringbuilder System.Int32 rest IFormatProvider formatProvider Returns Type Description System.Boolean True if obj was shown completely. | Improve this Doc View Source ShowCollectionValue<T>(ICollectionValue<T>, System.Text.StringBuilder, ref Int32, IFormatProvider) Declaration public static bool ShowCollectionValue<T>(ICollectionValue<T> items, System.Text.StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description ICollectionValue <T> items System.Text.StringBuilder stringbuilder System.Int32 rest IFormatProvider formatProvider Returns Type Description System.Boolean True if collection was shown completely Type Parameters Name Description T | Improve this Doc View Source ShowDictionary<K, V>(IDictionary<K, V>, System.Text.StringBuilder, ref Int32, IFormatProvider) Declaration public static bool ShowDictionary<K, V>(IDictionary<K, V> dictionary, System.Text.StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description IDictionary <K, V> dictionary System.Text.StringBuilder stringbuilder System.Int32 rest IFormatProvider formatProvider Returns Type Description System.Boolean Type Parameters Name Description K V | Improve this Doc View Source ShowString(IShowable, String, IFormatProvider) Declaration public static String ShowString(IShowable showable, String format, IFormatProvider formatProvider) Parameters Type Name Description IShowable showable String format IFormatProvider formatProvider Returns Type Description String"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.SortedDictionaryBase-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.SortedDictionaryBase-2.html",
    "title": "Class SortedDictionaryBase<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedDictionaryBase<K, V> A base class for implementing a sorted dictionary based on a sorted set collection implementation. See the source code for C5.TreeDictionary`2 for an example Inheritance System.Object EnumerableBase < KeyValuePair <K, V>> CollectionValueBase < KeyValuePair <K, V>> DictionaryBase <K, V> SortedDictionaryBase<K, V> TreeDictionary<K, V> Implements ISortedDictionary <K, V> IDictionary <K, V> ICollectionValue < KeyValuePair <K, V>> System.Collections.Generic.IEnumerable < KeyValuePair <K, V>> IShowable IFormattable Inherited Members DictionaryBase<K, V>.pairs DictionaryBase<K, V>.CollectionChanged DictionaryBase<K, V>.CollectionCleared DictionaryBase<K, V>.ItemsAdded DictionaryBase<K, V>.ItemsRemoved DictionaryBase<K, V>.ListenableEvents DictionaryBase<K, V>.ActiveEvents DictionaryBase<K, V>.EqualityComparer DictionaryBase<K, V>.Add(K, V) DictionaryBase<K, V>.AddAll<L, W>(System.Collections.Generic.IEnumerable<KeyValuePair<L, W>>) DictionaryBase<K, V>.Remove(K) DictionaryBase<K, V>.Remove(K, V) DictionaryBase<K, V>.Clear() DictionaryBase<K, V>.ContainsSpeed DictionaryBase<K, V>.Contains(K) DictionaryBase<K, V>.ContainsAll<H>(System.Collections.Generic.IEnumerable<H>) DictionaryBase<K, V>.Find(K, V) DictionaryBase<K, V>.Update(K, V) DictionaryBase<K, V>.Update(K, V, V) DictionaryBase<K, V>.FindOrAdd(K, V) DictionaryBase<K, V>.UpdateOrAdd(K, V) DictionaryBase<K, V>.UpdateOrAdd(K, V, V) DictionaryBase<K, V>.Keys DictionaryBase<K, V>.Values DictionaryBase<K, V>.Func DictionaryBase<K, V>.Item[K] DictionaryBase<K, V>.IsReadOnly DictionaryBase<K, V>.Check() DictionaryBase<K, V>.IsEmpty DictionaryBase<K, V>.Count DictionaryBase<K, V>.CountSpeed DictionaryBase<K, V>.Choose() DictionaryBase<K, V>.GetEnumerator() DictionaryBase<K, V>.Show(System.Text.StringBuilder, Int32, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ListenableEvents CollectionValueBase<KeyValuePair<K, V>>.ActiveEvents CollectionValueBase<KeyValuePair<K, V>>.CollectionChanged CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionChanged() CollectionValueBase<KeyValuePair<K, V>>.CollectionCleared CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<KeyValuePair<K, V>>.ItemsAdded CollectionValueBase<KeyValuePair<K, V>>.raiseItemsAdded(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemsRemoved CollectionValueBase<KeyValuePair<K, V>>.raiseItemsRemoved(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemInserted CollectionValueBase<KeyValuePair<K, V>>.raiseItemInserted(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemRemovedAt CollectionValueBase<KeyValuePair<K, V>>.raiseItemRemovedAt(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForSetThis(Int32, KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForInsert(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAt(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForAdd(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAll(ICollectionValue<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.IsEmpty CollectionValueBase<KeyValuePair<K, V>>.Count CollectionValueBase<KeyValuePair<K, V>>.CountSpeed CollectionValueBase<KeyValuePair<K, V>>.CopyTo(KeyValuePair<K, V>[], Int32) CollectionValueBase<KeyValuePair<K, V>>.ToArray() CollectionValueBase<KeyValuePair<K, V>>.Apply(Action<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.Exists(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Find(Func<KeyValuePair<K, V>, Boolean>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.All(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Filter(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Choose() CollectionValueBase<KeyValuePair<K, V>>.Show(System.Text.StringBuilder, Int32, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString(String, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString() EnumerableBase<KeyValuePair<K, V>>.GetEnumerator() EnumerableBase<KeyValuePair<K, V>>.countItems(System.Collections.Generic.IEnumerable<KeyValuePair<K, V>>) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class SortedDictionaryBase<K, V> : DictionaryBase<K, V>, ISortedDictionary<K, V>, IDictionary<K, V>, ICollectionValue<KeyValuePair<K, V>>, System.Collections.Generic.IEnumerable<KeyValuePair<K, V>>, IShowable, IFormattable Type Parameters Name Description K V Constructors | Improve this Doc View Source SortedDictionaryBase(System.Collections.Generic.IComparer<K>, System.Collections.Generic.IEqualityComparer<K>, MemoryType) Declaration protected SortedDictionaryBase(System.Collections.Generic.IComparer<K> keycomparer, System.Collections.Generic.IEqualityComparer<K> keyequalityComparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Collections.Generic.IComparer <K> keycomparer System.Collections.Generic.IEqualityComparer <K> keyequalityComparer MemoryType memoryType The memory type of the enumerator used to iterate the collection. Fields | Improve this Doc View Source sortedpairs Declaration protected ISorted<KeyValuePair<K, V>> sortedpairs Field Value Type Description ISorted < KeyValuePair <K, V>> Properties | Improve this Doc View Source Comparer The key comparer used by this dictionary. Declaration public System.Collections.Generic.IComparer<K> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer <K> | Improve this Doc View Source Keys Declaration public ISorted<K> Keys { get; } Property Value Type Description ISorted <K> Methods | Improve this Doc View Source AddSorted(System.Collections.Generic.IEnumerable<KeyValuePair<K, V>>) Declaration public void AddSorted(System.Collections.Generic.IEnumerable<KeyValuePair<K, V>> items) Parameters Type Name Description System.Collections.Generic.IEnumerable < KeyValuePair <K, V>> items | Improve this Doc View Source Cut(IComparable<K>, out KeyValuePair<K, V>, out Boolean, out KeyValuePair<K, V>, out Boolean) Declaration public bool Cut(IComparable<K> cutter, out KeyValuePair<K, V> lowEntry, out bool lowIsValid, out KeyValuePair<K, V> highEntry, out bool highIsValid) Parameters Type Name Description IComparable <K> cutter KeyValuePair <K, V> lowEntry System.Boolean lowIsValid KeyValuePair <K, V> highEntry System.Boolean highIsValid Returns Type Description System.Boolean | Improve this Doc View Source DeleteMax() Declaration public KeyValuePair<K, V> DeleteMax() Returns Type Description KeyValuePair <K, V> | Improve this Doc View Source DeleteMin() Declaration public KeyValuePair<K, V> DeleteMin() Returns Type Description KeyValuePair <K, V> | Improve this Doc View Source FindMax() Declaration public KeyValuePair<K, V> FindMax() Returns Type Description KeyValuePair <K, V> | Improve this Doc View Source FindMin() Declaration public KeyValuePair<K, V> FindMin() Returns Type Description KeyValuePair <K, V> | Improve this Doc View Source Predecessor(K) Get the entry in the dictionary whose key is the predecessor of the specified key. Declaration public KeyValuePair<K, V> Predecessor(K key) Parameters Type Name Description K key The key Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException | Improve this Doc View Source RangeAll() Declaration public IDirectedCollectionValue<KeyValuePair<K, V>> RangeAll() Returns Type Description IDirectedCollectionValue < KeyValuePair <K, V>> | Improve this Doc View Source RangeFrom(K) Declaration public IDirectedEnumerable<KeyValuePair<K, V>> RangeFrom(K bot) Parameters Type Name Description K bot Returns Type Description IDirectedEnumerable < KeyValuePair <K, V>> | Improve this Doc View Source RangeFromTo(K, K) Declaration public IDirectedEnumerable<KeyValuePair<K, V>> RangeFromTo(K bot, K top) Parameters Type Name Description K bot K top Returns Type Description IDirectedEnumerable < KeyValuePair <K, V>> | Improve this Doc View Source RangeTo(K) Declaration public IDirectedEnumerable<KeyValuePair<K, V>> RangeTo(K top) Parameters Type Name Description K top Returns Type Description IDirectedEnumerable < KeyValuePair <K, V>> | Improve this Doc View Source RemoveRangeFrom(K) Declaration public void RemoveRangeFrom(K lowKey) Parameters Type Name Description K lowKey | Improve this Doc View Source RemoveRangeFromTo(K, K) Declaration public void RemoveRangeFromTo(K lowKey, K highKey) Parameters Type Name Description K lowKey K highKey | Improve this Doc View Source RemoveRangeTo(K) Declaration public void RemoveRangeTo(K highKey) Parameters Type Name Description K highKey | Improve this Doc View Source Show(System.Text.StringBuilder, ref Int32, IFormatProvider) Declaration public override bool Show(System.Text.StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description System.Text.StringBuilder stringbuilder System.Int32 rest IFormatProvider formatProvider Returns Type Description System.Boolean Overrides Lucene.Net.Support.C5.DictionaryBase<K, V>.Show(System.Text.StringBuilder, System.Int32, IFormatProvider) | Improve this Doc View Source Successor(K) Get the entry in the dictionary whose key is the successor of the specified key. Declaration public KeyValuePair<K, V> Successor(K key) Parameters Type Name Description K key The key Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException | Improve this Doc View Source TryPredecessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the predecessor of the specified key. Declaration public bool TryPredecessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The predecessor, if any Returns Type Description System.Boolean True if key has a predecessor | Improve this Doc View Source TrySuccessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the successor of the specified key. Declaration public bool TrySuccessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The successor, if any Returns Type Description System.Boolean True if the key has a successor | Improve this Doc View Source TryWeakPredecessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the weak predecessor of the specified key. Declaration public bool TryWeakPredecessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The predecessor, if any Returns Type Description System.Boolean True if key has a weak predecessor | Improve this Doc View Source TryWeakSuccessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the weak successor of the specified key. Declaration public bool TryWeakSuccessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The weak successor, if any Returns Type Description System.Boolean True if the key has a weak successor | Improve this Doc View Source WeakPredecessor(K) Get the entry in the dictionary whose key is the weak predecessor of the specified key. Declaration public KeyValuePair<K, V> WeakPredecessor(K key) Parameters Type Name Description K key The key Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException | Improve this Doc View Source WeakSuccessor(K) Get the entry in the dictionary whose key is the weak successor of the specified key. Declaration public KeyValuePair<K, V> WeakSuccessor(K key) Parameters Type Name Description K key The key Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException Implements ISortedDictionary<K, V> IDictionary<K, V> ICollectionValue<T> System.Collections.Generic.IEnumerable<> IShowable IFormattable"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.Speed.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.Speed.html",
    "title": "Enum Speed | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Speed The symbolic characterization of the speed of lookups for a collection. The values may refer to worst-case, amortized and/or expected asymtotic complexity wrt. the collection size. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public enum Speed : short Fields Name Description Constant Lookup operations like Contains(T item) or the Count property takes time O(1), where n is the size of the collection. Linear Lookup operations like Contains(T item) or the Count property may take time O(n), where n is the size of the collection. Log Lookup operations like Contains(T item) or the Count property takes time O(log n), where n is the size of the collection. PotentiallyInfinite Counting the collection with the Count property may not return (for a synthetic and potentially infinite collection)."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.TreeDictionary-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.TreeDictionary-2.html",
    "title": "Class TreeDictionary<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TreeDictionary<K, V> A sorted generic dictionary based on a red-black tree set. Inheritance System.Object EnumerableBase < KeyValuePair <K, V>> CollectionValueBase < KeyValuePair <K, V>> DictionaryBase <K, V> SortedDictionaryBase <K, V> TreeDictionary<K, V> Implements ISortedDictionary <K, V> IDictionary <K, V> ICollectionValue < KeyValuePair <K, V>> System.Collections.Generic.IEnumerable < KeyValuePair <K, V>> IShowable IFormattable Inherited Members SortedDictionaryBase<K, V>.sortedpairs SortedDictionaryBase<K, V>.Comparer SortedDictionaryBase<K, V>.Keys SortedDictionaryBase<K, V>.TryPredecessor(K, KeyValuePair<K, V>) SortedDictionaryBase<K, V>.TrySuccessor(K, KeyValuePair<K, V>) SortedDictionaryBase<K, V>.TryWeakPredecessor(K, KeyValuePair<K, V>) SortedDictionaryBase<K, V>.TryWeakSuccessor(K, KeyValuePair<K, V>) SortedDictionaryBase<K, V>.Predecessor(K) SortedDictionaryBase<K, V>.Successor(K) SortedDictionaryBase<K, V>.WeakPredecessor(K) SortedDictionaryBase<K, V>.WeakSuccessor(K) SortedDictionaryBase<K, V>.FindMin() SortedDictionaryBase<K, V>.DeleteMin() SortedDictionaryBase<K, V>.FindMax() SortedDictionaryBase<K, V>.DeleteMax() SortedDictionaryBase<K, V>.Cut(IComparable<K>, KeyValuePair<K, V>, Boolean, KeyValuePair<K, V>, Boolean) SortedDictionaryBase<K, V>.RangeFrom(K) SortedDictionaryBase<K, V>.RangeFromTo(K, K) SortedDictionaryBase<K, V>.RangeTo(K) SortedDictionaryBase<K, V>.RangeAll() SortedDictionaryBase<K, V>.AddSorted(System.Collections.Generic.IEnumerable<KeyValuePair<K, V>>) SortedDictionaryBase<K, V>.RemoveRangeFrom(K) SortedDictionaryBase<K, V>.RemoveRangeFromTo(K, K) SortedDictionaryBase<K, V>.RemoveRangeTo(K) SortedDictionaryBase<K, V>.Show(System.Text.StringBuilder, Int32, IFormatProvider) DictionaryBase<K, V>.pairs DictionaryBase<K, V>.CollectionChanged DictionaryBase<K, V>.CollectionCleared DictionaryBase<K, V>.ItemsAdded DictionaryBase<K, V>.ItemsRemoved DictionaryBase<K, V>.ListenableEvents DictionaryBase<K, V>.ActiveEvents DictionaryBase<K, V>.EqualityComparer DictionaryBase<K, V>.Add(K, V) DictionaryBase<K, V>.AddAll<L, W>(System.Collections.Generic.IEnumerable<KeyValuePair<L, W>>) DictionaryBase<K, V>.Remove(K) DictionaryBase<K, V>.Remove(K, V) DictionaryBase<K, V>.Clear() DictionaryBase<K, V>.ContainsSpeed DictionaryBase<K, V>.Contains(K) DictionaryBase<K, V>.ContainsAll<H>(System.Collections.Generic.IEnumerable<H>) DictionaryBase<K, V>.Find(K, V) DictionaryBase<K, V>.Update(K, V) DictionaryBase<K, V>.Update(K, V, V) DictionaryBase<K, V>.FindOrAdd(K, V) DictionaryBase<K, V>.UpdateOrAdd(K, V) DictionaryBase<K, V>.UpdateOrAdd(K, V, V) DictionaryBase<K, V>.Keys DictionaryBase<K, V>.Values DictionaryBase<K, V>.Func DictionaryBase<K, V>.Item[K] DictionaryBase<K, V>.IsReadOnly DictionaryBase<K, V>.Check() DictionaryBase<K, V>.IsEmpty DictionaryBase<K, V>.Count DictionaryBase<K, V>.CountSpeed DictionaryBase<K, V>.Choose() DictionaryBase<K, V>.GetEnumerator() DictionaryBase<K, V>.Show(System.Text.StringBuilder, Int32, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ListenableEvents CollectionValueBase<KeyValuePair<K, V>>.ActiveEvents CollectionValueBase<KeyValuePair<K, V>>.CollectionChanged CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionChanged() CollectionValueBase<KeyValuePair<K, V>>.CollectionCleared CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<KeyValuePair<K, V>>.ItemsAdded CollectionValueBase<KeyValuePair<K, V>>.raiseItemsAdded(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemsRemoved CollectionValueBase<KeyValuePair<K, V>>.raiseItemsRemoved(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemInserted CollectionValueBase<KeyValuePair<K, V>>.raiseItemInserted(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemRemovedAt CollectionValueBase<KeyValuePair<K, V>>.raiseItemRemovedAt(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForSetThis(Int32, KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForInsert(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAt(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForAdd(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAll(ICollectionValue<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.IsEmpty CollectionValueBase<KeyValuePair<K, V>>.Count CollectionValueBase<KeyValuePair<K, V>>.CountSpeed CollectionValueBase<KeyValuePair<K, V>>.CopyTo(KeyValuePair<K, V>[], Int32) CollectionValueBase<KeyValuePair<K, V>>.ToArray() CollectionValueBase<KeyValuePair<K, V>>.Apply(Action<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.Exists(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Find(Func<KeyValuePair<K, V>, Boolean>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.All(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Filter(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Choose() CollectionValueBase<KeyValuePair<K, V>>.Show(System.Text.StringBuilder, Int32, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString(String, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString() EnumerableBase<KeyValuePair<K, V>>.GetEnumerator() EnumerableBase<KeyValuePair<K, V>>.countItems(System.Collections.Generic.IEnumerable<KeyValuePair<K, V>>) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class TreeDictionary<K, V> : SortedDictionaryBase<K, V>, ISortedDictionary<K, V>, IDictionary<K, V>, ICollectionValue<KeyValuePair<K, V>>, System.Collections.Generic.IEnumerable<KeyValuePair<K, V>>, IShowable, IFormattable Type Parameters Name Description K V Constructors | Improve this Doc View Source TreeDictionary(MemoryType) Create a red-black tree dictionary using the natural comparer for keys. if the key type K is not comparable. Declaration public TreeDictionary(MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description MemoryType memoryType | Improve this Doc View Source TreeDictionary(System.Collections.Generic.IComparer<K>, MemoryType) Create a red-black tree dictionary using an external comparer for keys. Declaration public TreeDictionary(System.Collections.Generic.IComparer<K> comparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Collections.Generic.IComparer <K> comparer The external comparer MemoryType memoryType Methods | Improve this Doc View Source Snapshot() Make a snapshot of the current state of this dictionary Declaration public System.Collections.Generic.IEnumerable<KeyValuePair<K, V>> Snapshot() Returns Type Description System.Collections.Generic.IEnumerable < KeyValuePair <K, V>> The snapshot Implements ISortedDictionary<K, V> IDictionary<K, V> ICollectionValue<T> System.Collections.Generic.IEnumerable<> IShowable IFormattable"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.UnlistenableEventException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.UnlistenableEventException.html",
    "title": "Class UnlistenableEventException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnlistenableEventException Inheritance System.Object UnlistenableEventException Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class UnlistenableEventException : Exception Constructors | Improve this Doc View Source UnlistenableEventException() Create a simple exception with no further explanation. Declaration public UnlistenableEventException() | Improve this Doc View Source UnlistenableEventException(String) Create the exception with an explanation of the reason. Declaration public UnlistenableEventException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.UnsequencedCollectionEqualityComparer-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.UnsequencedCollectionEqualityComparer-2.html",
    "title": "Class UnsequencedCollectionEqualityComparer<T, W> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnsequencedCollectionEqualityComparer<T, W> Prototype for an unsequenced equalityComparer for something (T) that implements ICollection[W] This will use ICollection[W] specific implementations of the equalityComparer operations Inheritance System.Object UnsequencedCollectionEqualityComparer<T, W> Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class UnsequencedCollectionEqualityComparer<T, W> : System.Collections.Generic.IEqualityComparer<T> where T : ICollection<W> Type Parameters Name Description T W Properties | Improve this Doc View Source Default Declaration public static UnsequencedCollectionEqualityComparer<T, W> Default { get; } Property Value Type Description UnsequencedCollectionEqualityComparer <T, W> Methods | Improve this Doc View Source Equals(T, T) Check if two collections are equal with respect to this unsequenced equalityComparer Declaration public bool Equals(T collection1, T collection2) Parameters Type Name Description T collection1 first collection T collection2 second collection Returns Type Description System.Boolean True if equal | Improve this Doc View Source GetHashCode(T) Get the hash code with respect to this unsequenced equalityComparer Declaration public int GetHashCode(T collection) Parameters Type Name Description T collection The collection Returns Type Description System.Int32 The hash code"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ViewDisposedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ViewDisposedException.html",
    "title": "Class ViewDisposedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ViewDisposedException An exception thrown when trying to access a view (a list view on a C5.IList`1 or a snapshot on a C5.IPersistentSorted`1 ) that has been invalidated by some earlier operation. The typical scenario is a view on a list that hash been invalidated by a call to Sort, Reverse or Shuffle on some other, overlapping view or the whole list. Inheritance System.Object ViewDisposedException Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class ViewDisposedException : Exception Constructors | Improve this Doc View Source ViewDisposedException() Create a simple exception with no further explanation. Declaration public ViewDisposedException() | Improve this Doc View Source ViewDisposedException(String) Create the exception with an explanation of the reason. Declaration public ViewDisposedException(string message) Parameters Type Name Description System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Support.Character.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Character.html",
    "title": "Class Character | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Character Mimics Java's Character class. Inheritance System.Object Character Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class Character : object Fields | Improve this Doc View Source MAX_CODE_POINT Declaration public const int MAX_CODE_POINT = null Field Value Type Description System.Int32 | Improve this Doc View Source MAX_HIGH_SURROGATE Declaration public const char MAX_HIGH_SURROGATE = null Field Value Type Description System.Char | Improve this Doc View Source MAX_LOW_SURROGATE Declaration public const char MAX_LOW_SURROGATE = null Field Value Type Description System.Char | Improve this Doc View Source MAX_RADIX Declaration public const int MAX_RADIX = null Field Value Type Description System.Int32 | Improve this Doc View Source MAX_SURROGATE Declaration public const char MAX_SURROGATE = null Field Value Type Description System.Char | Improve this Doc View Source MIN_CODE_POINT Declaration public const int MIN_CODE_POINT = null Field Value Type Description System.Int32 | Improve this Doc View Source MIN_HIGH_SURROGATE Declaration public const char MIN_HIGH_SURROGATE = null Field Value Type Description System.Char | Improve this Doc View Source MIN_LOW_SURROGATE Declaration public const char MIN_LOW_SURROGATE = null Field Value Type Description System.Char | Improve this Doc View Source MIN_RADIX Declaration public const int MIN_RADIX = null Field Value Type Description System.Int32 | Improve this Doc View Source MIN_SUPPLEMENTARY_CODE_POINT Declaration public const int MIN_SUPPLEMENTARY_CODE_POINT = null Field Value Type Description System.Int32 | Improve this Doc View Source MIN_SURROGATE Declaration public const char MIN_SURROGATE = null Field Value Type Description System.Char Methods | Improve this Doc View Source CharCount(Int32) Declaration public static int CharCount(int codePoint) Parameters Type Name Description System.Int32 codePoint Returns Type Description System.Int32 | Improve this Doc View Source CodePointAt(ICharSequence, Int32) Declaration public static int CodePointAt(ICharSequence seq, int index) Parameters Type Name Description ICharSequence seq System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source CodePointAt(StringBuilder, Int32) Declaration public static int CodePointAt(StringBuilder seq, int index) Parameters Type Name Description StringBuilder seq System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source CodePointAt(Char, Char) Declaration public static int CodePointAt(char high, char low) Parameters Type Name Description System.Char high System.Char low Returns Type Description System.Int32 | Improve this Doc View Source CodePointAt(Char[], Int32, Int32) Declaration public static int CodePointAt(char[] a, int index, int limit) Parameters Type Name Description System.Char [] a System.Int32 index System.Int32 limit Returns Type Description System.Int32 | Improve this Doc View Source CodePointAt(String, Int32) Declaration public static int CodePointAt(string seq, int index) Parameters Type Name Description System.String seq System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source CodePointBefore(Char[], Int32) Declaration public static int CodePointBefore(char[] seq, int index) Parameters Type Name Description System.Char [] seq System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source CodePointCount(Char[], Int32, Int32) Declaration public static int CodePointCount(char[] a, int offset, int count) Parameters Type Name Description System.Char [] a System.Int32 offset System.Int32 count Returns Type Description System.Int32 | Improve this Doc View Source CodePointCount(String, Int32, Int32) Returns the number of Unicode code points in the text range of the specified char sequence. The text range begins at the specified beginIndex and extends to the char at index endIndex - 1 . Thus the length (in s) of the text range is endIndex-beginIndex . Unpaired surrogates within the text range count as one code point each. Declaration public static int CodePointCount(string seq, int beginIndex, int endIndex) Parameters Type Name Description System.String seq the char sequence System.Int32 beginIndex the index to the first char of the text range. System.Int32 endIndex the index after the last char of the text range. Returns Type Description System.Int32 the number of Unicode code points in the specified text range | Improve this Doc View Source GetType(Int32) LUCENENET safe way to get unicode category. The .NET method should be used first to be safe for surrogate pairs. However, if the value falls between 0x00d800 and 0x00dfff, that method throws an exception. So this is a wrapper that converts the codepoint to a char in those cases. This mimics the behavior of the Java Character.GetType class, but returns the .NET UnicodeCategory enumeration for easy consumption. Declaration public static UnicodeCategory GetType(int codePoint) Parameters Type Name Description System.Int32 codePoint Returns Type Description UnicodeCategory A representing the codePoint . | Improve this Doc View Source IsLetter(Int32) Declaration public static bool IsLetter(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean | Improve this Doc View Source OffsetByCodePoints(Char[], Int32, Int32, Int32, Int32) Copy of the implementation from Character class in Java http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/java/lang/Character.java Declaration public static int OffsetByCodePoints(char[] a, int start, int count, int index, int codePointOffset) Parameters Type Name Description System.Char [] a System.Int32 start System.Int32 count System.Int32 index System.Int32 codePointOffset Returns Type Description System.Int32 | Improve this Doc View Source OffsetByCodePoints(String, Int32, Int32) Copy of the implementation from Character class in Java http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/java/lang/Character.java Declaration public static int OffsetByCodePoints(string seq, int index, int codePointOffset) Parameters Type Name Description System.String seq System.Int32 index System.Int32 codePointOffset Returns Type Description System.Int32 | Improve this Doc View Source ToChars(Int32) Declaration public static char[] ToChars(int codePoint) Parameters Type Name Description System.Int32 codePoint Returns Type Description System.Char [] | Improve this Doc View Source ToChars(Int32, Char[], Int32) Declaration public static int ToChars(int codePoint, char[] dst, int dstIndex) Parameters Type Name Description System.Int32 codePoint System.Char [] dst System.Int32 dstIndex Returns Type Description System.Int32 | Improve this Doc View Source ToCodePoint(Char, Char) Declaration public static int ToCodePoint(char high, char low) Parameters Type Name Description System.Char high System.Char low Returns Type Description System.Int32 | Improve this Doc View Source ToLower(Int32) Declaration public static int ToLower(int codePoint) Parameters Type Name Description System.Int32 codePoint Returns Type Description System.Int32 | Improve this Doc View Source ToUpper(Int32) Declaration public static int ToUpper(int codePoint) Parameters Type Name Description System.Int32 codePoint Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Support.Collections.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Collections.html",
    "title": "Class Collections | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Collections Inheritance System.Object Collections Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class Collections : object Methods | Improve this Doc View Source EmptyList<T>() Declaration public static IList<T> EmptyList<T>() Returns Type Description IList <T> Type Parameters Name Description T | Improve this Doc View Source EmptyMap<TKey, TValue>() Declaration public static IDictionary<TKey, TValue> EmptyMap<TKey, TValue>() Returns Type Description IDictionary <TKey, TValue> Type Parameters Name Description TKey TValue | Improve this Doc View Source Equals(Object, Object) A helper method to recursively determine equality based on the values of the collection and all nested collections. Note this operation currently only supports , , and . Declaration public static bool Equals(object objA, object objB) Parameters Type Name Description System.Object objA System.Object objB Returns Type Description System.Boolean | Improve this Doc View Source Equals<T>(IList<T>, IList<T>) The same implementation of Equals from Java's AbstractList (the default implementation for all lists) This algorithm depends on the order of the items in the list. It is recursive and will determine equality based on the values of all nested collections. Note this operation currently only supports , , and . Declaration public static bool Equals<T>(IList<T> listA, IList<T> listB) Parameters Type Name Description IList <T> listA IList <T> listB Returns Type Description System.Boolean Type Parameters Name Description T | Improve this Doc View Source Equals<T>(ISet<T>, ISet<T>) The same implementation of Equals from Java's AbstractSet (the default implementation for all sets) This algoritm does not depend on the order of the items in the set. It is recursive and will determine equality based on the values of all nested collections. Note this operation currently only supports , , and . Declaration public static bool Equals<T>(ISet<T> setA, ISet<T> setB) Parameters Type Name Description ISet <T> setA ISet <T> setB Returns Type Description System.Boolean Type Parameters Name Description T | Improve this Doc View Source Equals<TKey, TValue>(IDictionary<TKey, TValue>, IDictionary<TKey, TValue>) This is the same implemenation of Equals from Java's AbstractMap (the default implementation of all dictionaries) This algoritm does not depend on the order of the items in the dictionary. It is recursive and will determine equality based on the values of all nested collections. Note this operation currently only supports , , and . Declaration public static bool Equals<TKey, TValue>(IDictionary<TKey, TValue> dictionaryA, IDictionary<TKey, TValue> dictionaryB) Parameters Type Name Description IDictionary <TKey, TValue> dictionaryA IDictionary <TKey, TValue> dictionaryB Returns Type Description System.Boolean Type Parameters Name Description TKey TValue | Improve this Doc View Source GetHashCode(Object) This method generally assists with the recursive GetHashCode() that builds a hash code based on all of the values in a collection including any nested collections (lists, sets, arrays, and dictionaries). Note this currently only supports , , and . Declaration public static int GetHashCode(object obj) Parameters Type Name Description System.Object obj the object to build the hash code for Returns Type Description System.Int32 a value that represents the unique state of all of the values and nested collection values in the object, provided the main object itself is a collection, otherwise calls on the object that is passed. | Improve this Doc View Source GetHashCode<T>(IList<T>) The same implementation of GetHashCode from Java's AbstractList (the default implementation for all lists). This algorithm depends on the order of the items in the list. It is recursive and will build the hash code based on the values of all nested collections. Note this operation currently only supports , , and . Declaration public static int GetHashCode<T>(IList<T> list) Parameters Type Name Description IList <T> list Returns Type Description System.Int32 Type Parameters Name Description T | Improve this Doc View Source GetHashCode<T>(ISet<T>) The same implementation of GetHashCode from Java's AbstractSet (the default implementation for all sets) This algorithm does not depend on the order of the items in the set. It is recursive and will build the hash code based on the values of all nested collections. Note this operation currently only supports , , and . Declaration public static int GetHashCode<T>(ISet<T> set) Parameters Type Name Description ISet <T> set Returns Type Description System.Int32 Type Parameters Name Description T | Improve this Doc View Source GetHashCode<TKey, TValue>(IDictionary<TKey, TValue>) The same implementation of GetHashCode from Java's AbstractMap (the default implementation for all dictionaries) This algoritm does not depend on the order of the items in the dictionary. It is recursive and will build the hash code based on the values of all nested collections. Note this operation currently only supports , , and . Declaration public static int GetHashCode<TKey, TValue>(IDictionary<TKey, TValue> dictionary) Parameters Type Name Description IDictionary <TKey, TValue> dictionary Returns Type Description System.Int32 Type Parameters Name Description TKey TValue | Improve this Doc View Source NewSetFromMap<T, S>(IDictionary<T, Nullable<Boolean>>) Declaration public static ISet<T> NewSetFromMap<T, S>(IDictionary<T, bool?> map) Parameters Type Name Description IDictionary <T, System.Nullable < System.Boolean >> map Returns Type Description ISet <T> Type Parameters Name Description T S | Improve this Doc View Source Reverse<T>(IList<T>) Declaration public static void Reverse<T>(IList<T> list) Parameters Type Name Description IList <T> list Type Parameters Name Description T | Improve this Doc View Source ReverseOrder<T>() Declaration public static IComparer<T> ReverseOrder<T>() Returns Type Description IComparer <T> Type Parameters Name Description T | Improve this Doc View Source ReverseOrder<T>(IComparer<T>) Declaration public static IComparer<T> ReverseOrder<T>(IComparer<T> cmp) Parameters Type Name Description IComparer <T> cmp Returns Type Description IComparer <T> Type Parameters Name Description T | Improve this Doc View Source Shuffle<T>(IList<T>) Declaration public static void Shuffle<T>(IList<T> list) Parameters Type Name Description IList <T> list Type Parameters Name Description T | Improve this Doc View Source Shuffle<T>(IList<T>, Random) Declaration public static void Shuffle<T>(IList<T> list, Random random) Parameters Type Name Description IList <T> list Random random Type Parameters Name Description T | Improve this Doc View Source Singleton<T>(T) Declaration public static ISet<T> Singleton<T>(T o) Parameters Type Name Description T o Returns Type Description ISet <T> Type Parameters Name Description T | Improve this Doc View Source SingletonMap<TKey, TValue>(TKey, TValue) Declaration public static IDictionary<TKey, TValue> SingletonMap<TKey, TValue>(TKey key, TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description IDictionary <TKey, TValue> Type Parameters Name Description TKey TValue | Improve this Doc View Source Swap<T>(IList<T>, Int32, Int32) Declaration public static void Swap<T>(IList<T> list, int index1, int index2) Parameters Type Name Description IList <T> list System.Int32 index1 System.Int32 index2 Type Parameters Name Description T | Improve this Doc View Source ToString(Object) This is a helper method that assists with recursively building a string of the current collection and all nested collections. Declaration public static string ToString(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.String | Improve this Doc View Source ToString(Object, CultureInfo) This is a helper method that assists with recursively building a string of the current collection and all nested collections, plus the ability to specify culture for formatting of nested numbers and dates. Note that this overload will change the culture of the current thread. Declaration public static string ToString(object obj, CultureInfo culture) Parameters Type Name Description System.Object obj CultureInfo culture Returns Type Description System.String | Improve this Doc View Source ToString<T>(ICollection<T>) This is the same implementation of ToString from Java's AbstractCollection (the default implementation for all sets and lists) Declaration public static string ToString<T>(ICollection<T> collection) Parameters Type Name Description ICollection <T> collection Returns Type Description System.String Type Parameters Name Description T | Improve this Doc View Source ToString<T>(ICollection<T>, CultureInfo) This is the same implementation of ToString from Java's AbstractCollection (the default implementation for all sets and lists), plus the ability to specify culture for formatting of nested numbers and dates. Note that this overload will change the culture of the current thread. Declaration public static string ToString<T>(ICollection<T> collection, CultureInfo culture) Parameters Type Name Description ICollection <T> collection CultureInfo culture Returns Type Description System.String Type Parameters Name Description T | Improve this Doc View Source ToString<TKey, TValue>(IDictionary<TKey, TValue>) This is the same implementation of ToString from Java's AbstractMap (the default implementation for all dictionaries) Declaration public static string ToString<TKey, TValue>(IDictionary<TKey, TValue> dictionary) Parameters Type Name Description IDictionary <TKey, TValue> dictionary Returns Type Description System.String Type Parameters Name Description TKey TValue | Improve this Doc View Source ToString<TKey, TValue>(IDictionary<TKey, TValue>, CultureInfo) This is the same implementation of ToString from Java's AbstractMap (the default implementation for all dictionaries), plus the ability to specify culture for formatting of nested numbers and dates. Note that this overload will change the culture of the current thread. Declaration public static string ToString<TKey, TValue>(IDictionary<TKey, TValue> dictionary, CultureInfo culture) Parameters Type Name Description IDictionary <TKey, TValue> dictionary CultureInfo culture Returns Type Description System.String Type Parameters Name Description TKey TValue | Improve this Doc View Source UnmodifiableList<T>(IList<T>) Declaration public static IList<T> UnmodifiableList<T>(IList<T> list) Parameters Type Name Description IList <T> list Returns Type Description IList <T> Type Parameters Name Description T | Improve this Doc View Source UnmodifiableMap<TKey, TValue>(IDictionary<TKey, TValue>) Declaration public static IDictionary<TKey, TValue> UnmodifiableMap<TKey, TValue>(IDictionary<TKey, TValue> d) Parameters Type Name Description IDictionary <TKey, TValue> d Returns Type Description IDictionary <TKey, TValue> Type Parameters Name Description TKey TValue | Improve this Doc View Source UnmodifiableSet<T>(ISet<T>) Declaration public static ISet<T> UnmodifiableSet<T>(ISet<T> list) Parameters Type Name Description ISet <T> list Returns Type Description ISet <T> Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.ConcurrentHashMapWrapper-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ConcurrentHashMapWrapper-2.html",
    "title": "Class ConcurrentHashMapWrapper<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConcurrentHashMapWrapper<TKey, TValue> Inheritance System.Object ConcurrentHashMapWrapper<TKey, TValue> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class ConcurrentHashMapWrapper<TKey, TValue> : IDictionary<TKey, TValue> Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source ConcurrentHashMapWrapper(IDictionary<TKey, TValue>) Declaration public ConcurrentHashMapWrapper(IDictionary<TKey, TValue> wrapped) Parameters Type Name Description IDictionary <TKey, TValue> wrapped Properties | Improve this Doc View Source Count Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[TKey] Declaration public TValue this[TKey key] { get; set; } Parameters Type Name Description TKey key Property Value Type Description TValue | Improve this Doc View Source Keys Declaration public ICollection<TKey> Keys { get; } Property Value Type Description ICollection <TKey> | Improve this Doc View Source Values Declaration public ICollection<TValue> Values { get; } Property Value Type Description ICollection <TValue> Methods | Improve this Doc View Source Add(TKey, TValue) Declaration public void Add(TKey key, TValue value) Parameters Type Name Description TKey key TValue value | Improve this Doc View Source Add(KeyValuePair<TKey, TValue>) Declaration public void Add(KeyValuePair<TKey, TValue> item) Parameters Type Name Description KeyValuePair <TKey, TValue> item | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Contains(KeyValuePair<TKey, TValue>) Declaration public bool Contains(KeyValuePair<TKey, TValue> item) Parameters Type Name Description KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(TKey) Declaration public bool ContainsKey(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(KeyValuePair<TKey, TValue>[], Int32) Declaration public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex) Parameters Type Name Description KeyValuePair <TKey, TValue>[] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() Returns Type Description IEnumerator < KeyValuePair <TKey, TValue>> | Improve this Doc View Source Remove(TKey) Declaration public bool Remove(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source Remove(KeyValuePair<TKey, TValue>) Declaration public bool Remove(KeyValuePair<TKey, TValue> item) Parameters Type Name Description KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source TryGetValue(TKey, out TValue) Declaration public bool TryGetValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Support.ConcurrentHashSet-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ConcurrentHashSet-1.html",
    "title": "Class ConcurrentHashSet<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConcurrentHashSet<T> Inheritance System.Object ConcurrentHashSet<T> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public sealed class ConcurrentHashSet<T> : ISet<T> Type Parameters Name Description T Constructors | Improve this Doc View Source ConcurrentHashSet() Declaration public ConcurrentHashSet() | Improve this Doc View Source ConcurrentHashSet(IEnumerable<T>) Declaration public ConcurrentHashSet(IEnumerable<T> collection) Parameters Type Name Description IEnumerable <T> collection | Improve this Doc View Source ConcurrentHashSet(IEnumerable<T>, IEqualityComparer<T>) Declaration public ConcurrentHashSet(IEnumerable<T> collection, IEqualityComparer<T> comparer) Parameters Type Name Description IEnumerable <T> collection IEqualityComparer <T> comparer | Improve this Doc View Source ConcurrentHashSet(IEqualityComparer<T>) Declaration public ConcurrentHashSet(IEqualityComparer<T> comparer) Parameters Type Name Description IEqualityComparer <T> comparer 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(T) Declaration public bool Add(T item) Parameters Type Name Description T item Returns Type Description System.Boolean | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Contains(T) Declaration public bool Contains(T item) Parameters Type Name Description T item Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(T[], Int32) Declaration public void CopyTo(T[] array, int arrayIndex) Parameters Type Name Description T[] array System.Int32 arrayIndex | Improve this Doc View Source ExceptWith(IEnumerable<T>) Declaration public void ExceptWith(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<T> GetEnumerator() Returns Type Description IEnumerator <T> | Improve this Doc View Source IntersectWith(IEnumerable<T>) Declaration public void IntersectWith(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other | Improve this Doc View Source IsProperSubsetOf(IEnumerable<T>) Declaration public bool IsProperSubsetOf(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other Returns Type Description System.Boolean | Improve this Doc View Source IsProperSupersetOf(IEnumerable<T>) Declaration public bool IsProperSupersetOf(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other Returns Type Description System.Boolean | Improve this Doc View Source IsSubsetOf(IEnumerable<T>) Declaration public bool IsSubsetOf(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other Returns Type Description System.Boolean | Improve this Doc View Source IsSupersetOf(IEnumerable<T>) Declaration public bool IsSupersetOf(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other Returns Type Description System.Boolean | Improve this Doc View Source Overlaps(IEnumerable<T>) Declaration public bool Overlaps(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other Returns Type Description System.Boolean | Improve this Doc View Source Remove(T) Declaration public bool Remove(T item) Parameters Type Name Description T item Returns Type Description System.Boolean | Improve this Doc View Source SetEquals(IEnumerable<T>) Declaration public bool SetEquals(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other Returns Type Description System.Boolean | Improve this Doc View Source SymmetricExceptWith(IEnumerable<T>) Declaration public void SymmetricExceptWith(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other | Improve this Doc View Source UnionWith(IEnumerable<T>) Declaration public void UnionWith(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other"
  },
  "api/Lucene.Net/Lucene.Net.Support.CRC32.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.CRC32.html",
    "title": "Class CRC32 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CRC32 Inheritance System.Object CRC32 Implements IChecksum Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class CRC32 : object, IChecksum Properties | Improve this Doc View Source Value Declaration public long Value { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Reset() Declaration public void Reset() | Improve this Doc View Source Update(Byte[]) Declaration public void Update(byte[] buf) Parameters Type Name Description System.Byte [] buf | Improve this Doc View Source Update(Byte[], Int32, Int32) Declaration public void Update(byte[] buf, int off, int len) Parameters Type Name Description System.Byte [] buf System.Int32 off System.Int32 len | Improve this Doc View Source Update(Int32) Declaration public void Update(int bval) Parameters Type Name Description System.Int32 bval Implements IChecksum"
  },
  "api/Lucene.Net/Lucene.Net.Support.DictionaryExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.DictionaryExtensions.html",
    "title": "Class DictionaryExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DictionaryExtensions Inheritance System.Object DictionaryExtensions Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class DictionaryExtensions : object Methods | Improve this Doc View Source Load(IDictionary<String, String>, Stream) Loads properties from the specified . The encoding is ISO8859-1. Declaration public static void Load(this IDictionary<string, string> dict, Stream input) Parameters Type Name Description IDictionary < System.String , System.String > dict This dictionary. Stream input The . Remarks The Properties file is interpreted according to the following rules: Empty lines are ignored. Lines starting with either a \"#\" or a \"!\" are comment lines and are ignored. A backslash at the end of the line escapes the following newline character (\"\\r\", \"\\n\", \"\\r\\n\"). If there's a whitespace after the backslash it will just escape that whitespace instead of concatenating the lines. This does not apply to comment lines. A property line consists of the key, the space between the key and the value, and the value. The key goes up to the first whitespace, \"=\" or \":\" that is not escaped. The space between the key and the value contains either one whitespace, one \"=\" or one \":\" and any number of additional whitespaces before and after that character. The value starts with the first character after the space between the key and the value. Following escape sequences are recognized: \"\\ \", \"\\\", \"\\r\", \"\\n\", \"!\", \"#\", \"\\t\", \"\\b\", \"\\f\", and \"\\uXXXX\" (unicode character). This method is to mimic and interoperate with the Properties class in Java, which is essentially a string dictionary that natively supports importing and exporting to this format. | Improve this Doc View Source Put<TKey, TValue>(IDictionary<TKey, TValue>, TKey, TValue) Declaration public static TValue Put<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key, TValue value) Parameters Type Name Description IDictionary <TKey, TValue> dict TKey key TValue value Returns Type Description TValue Type Parameters Name Description TKey TValue | Improve this Doc View Source PutAll<TKey, TValue>(IDictionary<TKey, TValue>, IEnumerable<KeyValuePair<TKey, TValue>>) Declaration public static void PutAll<TKey, TValue>(this IDictionary<TKey, TValue> dict, IEnumerable<KeyValuePair<TKey, TValue>> kvps) Parameters Type Name Description IDictionary <TKey, TValue> dict IEnumerable < KeyValuePair <TKey, TValue>> kvps Type Parameters Name Description TKey TValue | Improve this Doc View Source Store(IDictionary<String, String>, Stream, String) Stores the mappings in this Properties to the specified , putting the specified comment at the beginning. The output from this method is suitable for being read by the Load(IDictionary<String, String>, Stream) method. Declaration public static void Store(this IDictionary<string, string> dict, Stream output, string comments) Parameters Type Name Description IDictionary < System.String , System.String > dict This dictionary. Stream output The output to write to. System.String comments The comments to put at the beginning."
  },
  "api/Lucene.Net/Lucene.Net.Support.EnumerableExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.EnumerableExtensions.html",
    "title": "Class EnumerableExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnumerableExtensions .NET Specific Helper Extensions for IEnumerable Inheritance System.Object EnumerableExtensions Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class EnumerableExtensions : object Methods | Improve this Doc View Source InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Enumerates a sequence in pairs Declaration public static IEnumerable<TOut> InPairs<T, TOut>(this IEnumerable<T> source, Func<T, T, TOut> join) Parameters Type Name Description IEnumerable <T> source An System.Collections.Generic.IEnumerable<> to enumerate in pairs. Func <T, T, TOut> join A function that is invoked for each pair of elements. Returns Type Description IEnumerable <TOut> A new System.Collections.Generic.IEnumerable<> containing the results from each pair. Type Parameters Name Description T The type of the elements of source . TOut The type of the elements returned from join . Remarks In the case of an uneven amount of elements, the list call to join pases default(T) as the second parameter. Exceptions Type Condition System.ArgumentNullException source or join is null . | Improve this Doc View Source TakeAllButLast<T>(IEnumerable<T>) Take all but the last element of the sequence. Declaration public static IEnumerable<T> TakeAllButLast<T>(this IEnumerable<T> source) Parameters Type Name Description IEnumerable <T> source This . Returns Type Description IEnumerable <T> The resulting . Type Parameters Name Description T The type of the elements of source . | Improve this Doc View Source TakeAllButLast<T>(IEnumerable<T>, Int32) Take all but the last n elements of the sequence. Declaration public static IEnumerable<T> TakeAllButLast<T>(this IEnumerable<T> source, int n) Parameters Type Name Description IEnumerable <T> source This . System.Int32 n The number of elements at the end of the sequence to exclude. Returns Type Description IEnumerable <T> The resulting . Type Parameters Name Description T The type of the elements of source ."
  },
  "api/Lucene.Net/Lucene.Net.Support.Equatable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Equatable.html",
    "title": "Class Equatable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Equatable A set of utilities uses for easily wrapping .NET collections so they can be used with , and behavior similar to that in Java. The equality checking of collections will recursively compare the values of all elements and any nested collections. The same goes for using - the string is based on the values in the collection and any nested collections. Do note this has a side-effect that any custom , and implementations for types that implement (including arrays), , or will be ignored. Inheritance System.Object Equatable Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class Equatable : object Methods | Improve this Doc View Source Wrap<T>(IList<T>) Wraps any (including T[] ) with a lightweight EquatableList<T> class that changes the behavior of , and so they consider all values in the or any nested collections when comparing or making strings to represent them. No other behavior is changed - only these 3 methods. Note that if the list is already an EquatableList<T> or a subclass of it, this method simply returns the provided list . Declaration public static IList<T> Wrap<T>(IList<T> list) Parameters Type Name Description IList <T> list Any (including T[] ) Returns Type Description IList <T> An EquatableList<T> that wraps the provided list , or the value of list unmodified if it already is an EquatableList<T> Type Parameters Name Description T the type of element | Improve this Doc View Source Wrap<T>(ISet<T>) Wraps any with a lightweight EquatableSet<T> class that changes the behavior of , and so they consider all values in the or any nested collections when comparing or making strings to represent them. No other behavior is changed - only these 3 methods. Note that if the set is already an EquatableSet<T> or a subclass of it, this method simply returns the provided set . Declaration public static ISet<T> Wrap<T>(ISet<T> set) Parameters Type Name Description ISet <T> set Any (including T[] ) Returns Type Description ISet <T> An EquatableSet<T> that wraps the provided set , or the value of set unmodified if it already is an EquatableSet<T> Type Parameters Name Description T the type of element"
  },
  "api/Lucene.Net/Lucene.Net.Support.EquatableList-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.EquatableList-1.html",
    "title": "Class EquatableList<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EquatableList<T> Represents a strongly typed list of objects that can be accessed by index. Provides methods to manipulate lists. Also provides functionality to compare lists against each other through an implementations of , or to wrap an existing list to use the same comparison logic as this one while not affecting any of its other functionality. Inheritance System.Object EquatableList<T> Implements IEquatable < IList <T>> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class EquatableList<T> : IList<T>, IEquatable<IList<T>> Type Parameters Name Description T The type of elements in the list. Constructors | Improve this Doc View Source EquatableList() Initializes a new instance of the EquatableList<T> class that is empty and has the default initial capacity. Declaration public EquatableList() | Improve this Doc View Source EquatableList(IEnumerable<T>) Initializes a new instance of the EquatableList<T> class that contains elements copied from the specified collection and has sufficient capacity to accommodate the number of elements copied. Declaration public EquatableList(IEnumerable<T> collection) Parameters Type Name Description IEnumerable <T> collection The collection whose elements are copied to the new list. | Improve this Doc View Source EquatableList(IList<T>, Boolean) Initializes a new instance of EquatableList<T> . If the wrap parameter is true , the collection is used as is without doing a copy operation. Otherwise, the collection is copied (which is the same operation as the EquatableList(IEnumerable<T>) overload). The internal collection is used for all operations except for Equals(Object) , GetHashCode() , and ToString() , which are all based on deep analysis of this collection and any nested collections. Declaration public EquatableList(IList<T> collection, bool wrap) Parameters Type Name Description IList <T> collection The collection that will either be wrapped or copied depending on the value of wrap . System.Boolean wrap true to wrap an existing without copying, or false to copy the collection into a new . | Improve this Doc View Source EquatableList(Int32) Initializes a new instance of the EquatableList<T> class that is empty and has the specified initial capacity. Declaration public EquatableList(int capacity) Parameters Type Name Description System.Int32 capacity The number of elements that the new list can initially store. Properties | Improve this Doc View Source Count Gets the number of elements contained in the EquatableList<T> . Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Gets a value indicating whether the EquatableList<T> is read-only. Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[Int32] Gets or sets the element at the specified index. Declaration public virtual T this[int index] { get; set; } Parameters Type Name Description System.Int32 index The zero-based index of the element to get or set. Property Value Type Description T Methods | Improve this Doc View Source Add(T) Adds an object to the end of the EquatableList<T> . Declaration public virtual void Add(T item) Parameters Type Name Description T item The object to be added to the end of the EquatableList<T> . The value can be null for reference types. | Improve this Doc View Source Clear() Removes all items from the EquatableList<T> . Declaration public virtual void Clear() | Improve this Doc View Source Clone() Clones the EquatableList<T> . Declaration public virtual object Clone() Returns Type Description System.Object A new shallow clone of this EquatableList<T> . Remarks This is a shallow clone. | Improve this Doc View Source Contains(T) Determines whether the EquatableList<T> contains a specific value. Declaration public virtual bool Contains(T item) Parameters Type Name Description T item The object to locate in the EquatableList<T> . Returns Type Description System.Boolean true if the Object is found in the EquatableList<T> ; otherwise, false . | Improve this Doc View Source CopyTo(T[], Int32) Copies the entire EquatableList<T> to a compatible one-dimensional array, starting at the specified index of the target array. Declaration public virtual void CopyTo(T[] array, int arrayIndex) Parameters Type Name Description T[] array The one-dimensional that is the destination of the elements copied from EquatableList<T> . 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(IList<T>) Compares this sequence to another implementation, returning true if they are equal, false otherwise. The comparison takes into consideration any values in this collection and values of any nested collections, but does not take into consideration the data type. Therefore, EquatableList<T> can equal any with the exact same values in the same order. Declaration public virtual bool Equals(IList<T> other) Parameters Type Name Description IList <T> other The other implementation to compare against. Returns Type Description System.Boolean true if the sequence in other is the same as this one. | Improve this Doc View Source Equals(Object) If the object passed implements , compares this sequence to other , returning true if they are equal, false otherwise. The comparison takes into consideration any values in this collection and values of any nested collections, but does not take into consideration the data type. Therefore, EquatableList<T> can equal any with the exact same values in the same order. Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other The other object to compare against. Returns Type Description System.Boolean true if the sequence in other is the same as this one. | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the EquatableList<T> . Declaration public virtual IEnumerator<T> GetEnumerator() Returns Type Description IEnumerator <T> An for the EquatableList<T> . | Improve this Doc View Source GetHashCode() Returns the hash code value for this list. The hash code determination takes into consideration any values in this collection and values of any nested collections, but does not take into consideration the data type. Therefore, the hash codes will be exactly the same for this EquatableList<T> and another (including arrays) with the same values in the same order. Declaration public override int GetHashCode() Returns Type Description System.Int32 the hash code value for this list | Improve this Doc View Source IndexOf(T) Determines the index of a specific item in the EquatableList<T> . Declaration public virtual int IndexOf(T item) Parameters Type Name Description T item The object to locate in the EquatableList<T> . Returns Type Description System.Int32 The index of item if found in the list; otherwise, -1. | Improve this Doc View Source Insert(Int32, T) Inserts an item to the EquatableList<T> at the specified index. Declaration public virtual void Insert(int index, T item) Parameters Type Name Description System.Int32 index The zero-based index at which item should be inserted. T item The object to insert into the EquatableList<T> . | Improve this Doc View Source Remove(T) Removes the first occurrence of a specific object from the EquatableList<T> . Declaration public virtual bool Remove(T item) Parameters Type Name Description T item The object to remove from the EquatableList<T> . Returns Type Description System.Boolean true if item was successfully removed from the EquatableList<T> ; otherwise, false . This method also returns false if item is not found in the original EquatableList<T> . | Improve this Doc View Source RemoveAt(Int32) Removes the EquatableList<T> item at the specified index. Declaration public virtual void RemoveAt(int index) Parameters Type Name Description System.Int32 index The zero-based index of the item to remove. | Improve this Doc View Source ToString() Returns a string representation of this collection (and any nested collections). The string representation consists of a list of the collection's elements in the order they are returned by its enumerator, enclosed in square brackets (\"[]\"). Adjacent elements are separated by the characters \", \" (comma and space). Declaration public override string ToString() Returns Type Description System.String a string representation of this collection Implements IEquatable<>"
  },
  "api/Lucene.Net/Lucene.Net.Support.EquatableSet-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.EquatableSet-1.html",
    "title": "Class EquatableSet<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EquatableSet<T> Represents a strongly typed set of objects. Provides methods to manipulate the set. Also provides functionality to compare sets against each other through an implementations of , or to wrap an existing set to use the same comparison logic as this one while not affecting any of its other functionality. Inheritance System.Object EquatableSet<T> Implements IEquatable < ISet <T>> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class EquatableSet<T> : ISet<T>, IEquatable<ISet<T>> Type Parameters Name Description T The type of elements in the list. Constructors | Improve this Doc View Source EquatableSet() Initializes a new instance of the EquatableSet<T> class that is empty and has the default initial capacity. Declaration public EquatableSet() | Improve this Doc View Source EquatableSet(ICollection<T>) Initializes a new instance of the EquatableSet<T> class that contains elements copied from the specified collection and has sufficient capacity to accommodate the number of elements copied. Declaration public EquatableSet(ICollection<T> collection) Parameters Type Name Description ICollection <T> collection The collection whose elements are copied to the new set. | Improve this Doc View Source EquatableSet(IEnumerable<T>, IEqualityComparer<T>) Initializes a new instance of the EquatableSet<T> class that uses the specified equality comparer for the set type, contains elements copied from the specified collection, and has sufficient capacity to accommodate the number of elements copied. Declaration public EquatableSet(IEnumerable<T> collection, IEqualityComparer<T> comparer) Parameters Type Name Description IEnumerable <T> collection The collection whose elements are copied to the new set. IEqualityComparer <T> comparer The implementation to use when comparing values in the set, or null to use the default implementation for the set type. | Improve this Doc View Source EquatableSet(IEqualityComparer<T>) Initializes a new instance of the EquatableSet<T> class that is empty and uses the specified equality comparer for the set type. Declaration public EquatableSet(IEqualityComparer<T> comparer) Parameters Type Name Description IEqualityComparer <T> comparer The implementation to use when comparing values in the set, or null to use the default implementation for the set type. | Improve this Doc View Source EquatableSet(ISet<T>, Boolean) Initializes a new instance of EquatableSet<T> . If the wrap parameter is true , the collection is used as is without doing a copy operation. Otherwise, the collection is copied (which is the same operation as the EquatableSet(ICollection<T>) overload). The internal collection is used for all operations except for Equals(Object) , GetHashCode() , and ToString() , which are all based on deep analysis of this collection and any nested collections. Declaration public EquatableSet(ISet<T> collection, bool wrap) Parameters Type Name Description ISet <T> collection The collection that will either be wrapped or copied depending on the value of wrap . System.Boolean wrap true to wrap an existing without copying, or false to copy the collection into a new . Properties | Improve this Doc View Source Count Gets the number of elements contained in the EquatableSet<T> . Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Gets a value indicating whether the EquatableSet<T> is read-only. Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Add(T) Adds an element to the current set and returns a value to indicate if the element was successfully added. Declaration public virtual bool Add(T item) Parameters Type Name Description T item The element to add to the set. Returns Type Description System.Boolean true if the element is added to the set; false if the element is already in the set. | Improve this Doc View Source Clear() Removes all items from the EquatableSet<T> . Declaration public virtual void Clear() | Improve this Doc View Source Clone() Clones the EquatableSet<T> . Declaration public virtual object Clone() Returns Type Description System.Object A new shallow clone of this EquatableSet<T> . Remarks This is a shallow clone. | Improve this Doc View Source Contains(T) Determines whether the EquatableSet<T> contains a specific value. Declaration public virtual bool Contains(T item) Parameters Type Name Description T item The object to locate in the EquatableSet<T> . Returns Type Description System.Boolean true if item is found in the EquatableSet<T> ; otherwise, false . | Improve this Doc View Source CopyTo(T[], Int32) Copies the elements of the EquatableSet<T> to an , starting at a particular index. Declaration public virtual void CopyTo(T[] array, int arrayIndex) Parameters Type Name Description T[] array The one-dimensional that is the destination of the elements copied from EquatableSet<T> . The must have zero-based indexing. System.Int32 arrayIndex The zero-based index in array at which copying begins. | Improve this Doc View Source Equals(ISet<T>) Compares this sequence to other , returning true if they are equal, false otherwise. The comparison takes into consideration any values in this collection and values of any nested collections, but does not take into consideration the data type. Therefore, EquatableSet<T> can equal any with the exact same values (in any order). Declaration public virtual bool Equals(ISet<T> other) Parameters Type Name Description ISet <T> other The other object to compare against. Returns Type Description System.Boolean true if the sequence in other is the same as this one. | Improve this Doc View Source Equals(Object) If the object passed implements , compares this sequence to other , returning true if they are equal, false otherwise. The comparison takes into consideration any values in this collection and values of any nested collections, but does not take into consideration the data type. Therefore, EquatableSet<T> can equal any with the exact same values (in any order). Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other The other object to compare against. Returns Type Description System.Boolean true if the sequence in other is the same as this one. | Improve this Doc View Source ExceptWith(IEnumerable<T>) Removes all elements in the specified collection from the current set. Declaration public virtual void ExceptWith(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other The collection of items to remove from the set. | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the collection. Declaration public virtual IEnumerator<T> GetEnumerator() Returns Type Description IEnumerator <T> An enumerator that can be used to iterate through the collection. | Improve this Doc View Source GetHashCode() Returns the hash code value for this list. The hash code determination takes into consideration any values in this collection and values of any nested collections, but does not take into consideration the data type. Therefore, the hash codes will be exactly the same for this EquatableSet<T> and another with the same values (in any order). Declaration public override int GetHashCode() Returns Type Description System.Int32 the hash code value for this list | Improve this Doc View Source IntersectWith(IEnumerable<T>) Modifies the current set so that it contains only elements that are also in a specified collection. Declaration public virtual void IntersectWith(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other The collection to compare to the current set. | Improve this Doc View Source IsProperSubsetOf(IEnumerable<T>) Determines whether the current set is a proper (strict) subset of a specified collection. Declaration public virtual bool IsProperSubsetOf(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other The collection to compare to the current set. Returns Type Description System.Boolean true if the current set is a proper subset of other; otherwise, false . | Improve this Doc View Source IsProperSupersetOf(IEnumerable<T>) Determines whether the current set is a proper (strict) superset of a specified collection. Declaration public virtual bool IsProperSupersetOf(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other The collection to compare to the current set. Returns Type Description System.Boolean true if the current set is a proper superset of other; otherwise, false . | Improve this Doc View Source IsSubsetOf(IEnumerable<T>) Determines whether a set is a subset of a specified collection. Declaration public virtual bool IsSubsetOf(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other The collection to compare to the current set. Returns Type Description System.Boolean true if the current set is a subset of other; otherwise, false . | Improve this Doc View Source IsSupersetOf(IEnumerable<T>) Determines whether the current set is a superset of a specified collection. Declaration public virtual bool IsSupersetOf(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other The collection to compare to the current set. Returns Type Description System.Boolean true if the current set is a superset of other; otherwise, false . | Improve this Doc View Source Overlaps(IEnumerable<T>) Determines whether the current set overlaps with the specified collection. Declaration public virtual bool Overlaps(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other The collection to compare to the current set. Returns Type Description System.Boolean true if the current set and other share at least one common element; otherwise, false . | Improve this Doc View Source Remove(T) Removes the first occurrence of a specific object from the EquatableSet<T> . Declaration public virtual bool Remove(T item) Parameters Type Name Description T item The object to remove from the EquatableSet<T> . Returns Type Description System.Boolean true if item was successfully removed from the EquatableSet<T> ; otherwise, false . This method also returns false if item is not found in the original EquatableSet<T> . | Improve this Doc View Source SetEquals(IEnumerable<T>) Determines whether the current set and the specified collection contain the same elements. Declaration public virtual bool SetEquals(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> 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 SymmetricExceptWith(IEnumerable<T>) Modifies the current set so that it contains only elements that are present either in the current set or in the specified collection, but not both. Declaration public virtual void SymmetricExceptWith(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other The collection to compare to the current set. | Improve this Doc View Source ToString() Returns a string representation of this collection (and any nested collections). The string representation consists of a list of the collection's elements in the order they are returned by its enumerator, enclosed in square brackets (\"[]\"). Adjacent elements are separated by the characters \", \" (comma and space). Declaration public override string ToString() Returns Type Description System.String a string representation of this collection | Improve this Doc View Source UnionWith(IEnumerable<T>) Modifies the current set so that it contains all elements that are present in the current set, in the specified collection, or in both. Declaration public virtual void UnionWith(IEnumerable<T> other) Parameters Type Name Description IEnumerable <T> other The collection to compare to the current set. Implements IEquatable<>"
  },
  "api/Lucene.Net/Lucene.Net.Support.ExceptionExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ExceptionExtensions.html",
    "title": "Class ExceptionExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExceptionExtensions Extensions to the class to allow for adding and retrieving suppressed exceptions, like you can do in Java. Inheritance System.Object ExceptionExtensions Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class ExceptionExtensions : object Fields | Improve this Doc View Source SUPPRESSED_EXCEPTIONS_KEY Declaration public static readonly string SUPPRESSED_EXCEPTIONS_KEY Field Value Type Description System.String Methods | Improve this Doc View Source AddSuppressed(Exception, Exception) Declaration public static void AddSuppressed(this Exception e, Exception exception) Parameters Type Name Description Exception e Exception exception | Improve this Doc View Source GetSuppressed(Exception) Declaration public static Exception[] GetSuppressed(this Exception e) Parameters Type Name Description Exception e Returns Type Description Exception [] | Improve this Doc View Source GetSuppressedAsList(Exception) Declaration public static IList<Exception> GetSuppressedAsList(this Exception e) Parameters Type Name Description Exception e Returns Type Description IList < Exception >"
  },
  "api/Lucene.Net/Lucene.Net.Support.ExceptionToClassNameConventionAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ExceptionToClassNameConventionAttribute.html",
    "title": "Class ExceptionToClassNameConventionAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExceptionToClassNameConventionAttribute Use this attribute to make an exception to the class naming rules (which should not be named like Interfaces). Inheritance System.Object ExceptionToClassNameConventionAttribute Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class ExceptionToClassNameConventionAttribute : Attribute"
  },
  "api/Lucene.Net/Lucene.Net.Support.ExceptionToNetNumericConventionAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ExceptionToNetNumericConventionAttribute.html",
    "title": "Class ExceptionToNetNumericConventionAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExceptionToNetNumericConventionAttribute Properties, methods, or events marked with this attribute can ignore the numeric naming conventions of \"Int16\", \"Int32\", \"Int64\", and \"Single\" that are commonly used in .NET method and property names. Inheritance System.Object ExceptionToNetNumericConventionAttribute Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class ExceptionToNetNumericConventionAttribute : Attribute"
  },
  "api/Lucene.Net/Lucene.Net.Support.ExceptionToNullableEnumConvention.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ExceptionToNullableEnumConvention.html",
    "title": "Class ExceptionToNullableEnumConvention | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExceptionToNullableEnumConvention Use this attribute to make an exception to the nullable enum rule. Some of these cannot be avoided. Inheritance System.Object ExceptionToNullableEnumConvention Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class ExceptionToNullableEnumConvention : Attribute"
  },
  "api/Lucene.Net/Lucene.Net.Support.HashMap-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.HashMap-2.html",
    "title": "Class HashMap<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HashMap<TKey, TValue> A C# emulation of the Java Hashmap A is a close equivalent to the Java Hashmap. One difference java implementation of the class is that the Hashmap supports both null keys and values, where the C# Dictionary only supports null values not keys. Also, V Get(TKey) method in Java returns null if the key doesn't exist, instead of throwing an exception. In .NET, using TryGetValue(TKey, out TValue) will provide similar behavior as V Get(TKey) This class is slower than using a , because of extra checks that have to be done on each access, to check for null. Consider also implementing IDictionary, IEnumerable, and ICollection like does, so HashMap can be used in substituted in place for the same interfaces it implements. Inheritance System.Object HashMap<TKey, TValue> IdentityHashMap<TKey, TValue> LinkedHashMap <TKey, TValue> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class HashMap<TKey, TValue> : IDictionary<TKey, TValue> Type Parameters Name Description TKey The type of keys in the dictionary TValue The type of values in the dictionary Remarks Unordered Dictionaries - use when order is not important and all keys are non-null. HashMap<TKey, TValue> - use when order is not important and support for a null key is required. Ordered Dictionaries LinkedHashMap<TKey, TValue> - use when you need to preserve entry insertion order. Keys are nullable. - use when you need natural sort order. Null keys are not supported. TreeDictionary<TKey, TValue> - use when you need natural sort order. Keys are nullable. LurchTable<TKey, TValue> - use when you need to sort by most recent access or most recent update. Works well for LRU caching. Constructors | Improve this Doc View Source HashMap() Declaration public HashMap() | Improve this Doc View Source HashMap(IEnumerable<KeyValuePair<TKey, TValue>>) Declaration public HashMap(IEnumerable<KeyValuePair<TKey, TValue>> other) Parameters Type Name Description IEnumerable < KeyValuePair <TKey, TValue>> other | Improve this Doc View Source HashMap(IEqualityComparer<TKey>) Declaration public HashMap(IEqualityComparer<TKey> comparer) Parameters Type Name Description IEqualityComparer <TKey> comparer | Improve this Doc View Source HashMap(Int32) Declaration public HashMap(int initialCapacity) Parameters Type Name Description System.Int32 initialCapacity | Improve this Doc View Source HashMap(Int32, IEqualityComparer<TKey>) Declaration public HashMap(int initialCapacity, IEqualityComparer<TKey> comparer) Parameters Type Name Description System.Int32 initialCapacity IEqualityComparer <TKey> comparer Properties | Improve this Doc View Source Count Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[TKey] Declaration public virtual TValue this[TKey key] { get; set; } Parameters Type Name Description TKey key Property Value Type Description TValue | Improve this Doc View Source Keys Declaration public virtual ICollection<TKey> Keys { get; } Property Value Type Description ICollection <TKey> | Improve this Doc View Source Values Declaration public virtual ICollection<TValue> Values { get; } Property Value Type Description ICollection <TValue> Methods | Improve this Doc View Source Add(TKey, TValue) Declaration public virtual void Add(TKey key, TValue value) Parameters Type Name Description TKey key TValue value | Improve this Doc View Source Add(KeyValuePair<TKey, TValue>) Declaration public virtual void Add(KeyValuePair<TKey, TValue> item) Parameters Type Name Description KeyValuePair <TKey, TValue> item | Improve this Doc View Source AddIfAbsent(TKey, TValue) Declaration public TValue AddIfAbsent(TKey key, TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description TValue | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source Contains(KeyValuePair<TKey, TValue>) Declaration public virtual bool Contains(KeyValuePair<TKey, TValue> item) Parameters Type Name Description KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(TKey) Declaration public virtual bool ContainsKey(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source ContainsValue(TValue) Declaration public bool ContainsValue(TValue value) Parameters Type Name Description TValue value Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(KeyValuePair<TKey, TValue>[], Int32) Declaration public virtual void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex) Parameters Type Name Description KeyValuePair <TKey, TValue>[] array System.Int32 arrayIndex | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetEnumerator() Declaration public virtual IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() Returns Type Description IEnumerator < KeyValuePair <TKey, TValue>> | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Remove(TKey) Declaration public virtual bool Remove(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source Remove(KeyValuePair<TKey, TValue>) Declaration public virtual bool Remove(KeyValuePair<TKey, TValue> item) Parameters Type Name Description KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source TryGetValue(TKey, out TValue) Declaration public virtual bool TryGetValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Support.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.html",
    "title": "Namespace Lucene.Net.Support | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Support Classes Arrays AssemblyExtensions AssemblyUtils Methods for working with Assemblies. AssemblyUtils.DotNetFrameworkFilter Assembly filter logic from: https://raw.githubusercontent.com/Microsoft/dotnet-apiport/master/src/Microsoft.Fx.Portability/Analyzer/DotNetFrameworkFilter.cs BitArrayExtensions This class provides supporting methods of java.util.BitSet that are not present in System.Collections.BitArray. Character Mimics Java's Character class. Collections ConcurrentHashMapWrapper<TKey, TValue> ConcurrentHashSet<T> CRC32 DictionaryExtensions EnumerableExtensions .NET Specific Helper Extensions for IEnumerable Equatable A set of utilities uses for easily wrapping .NET collections so they can be used with , and behavior similar to that in Java. The equality checking of collections will recursively compare the values of all elements and any nested collections. The same goes for using - the string is based on the values in the collection and any nested collections. Do note this has a side-effect that any custom , and implementations for types that implement (including arrays), , or will be ignored. EquatableList<T> Represents a strongly typed list of objects that can be accessed by index. Provides methods to manipulate lists. Also provides functionality to compare lists against each other through an implementations of , or to wrap an existing list to use the same comparison logic as this one while not affecting any of its other functionality. EquatableSet<T> Represents a strongly typed set of objects. Provides methods to manipulate the set. Also provides functionality to compare sets against each other through an implementations of , or to wrap an existing set to use the same comparison logic as this one while not affecting any of its other functionality. ExceptionExtensions Extensions to the class to allow for adding and retrieving suppressed exceptions, like you can do in Java. ExceptionToClassNameConventionAttribute Use this attribute to make an exception to the class naming rules (which should not be named like Interfaces). ExceptionToNetNumericConventionAttribute Properties, methods, or events marked with this attribute can ignore the numeric naming conventions of \"Int16\", \"Int32\", \"Int64\", and \"Single\" that are commonly used in .NET method and property names. ExceptionToNullableEnumConvention Use this attribute to make an exception to the nullable enum rule. Some of these cannot be avoided. HashMap<TKey, TValue> A C# emulation of the Java Hashmap A is a close equivalent to the Java Hashmap. One difference java implementation of the class is that the Hashmap supports both null keys and values, where the C# Dictionary only supports null values not keys. Also, V Get(TKey) method in Java returns null if the key doesn't exist, instead of throwing an exception. In .NET, using TryGetValue(TKey, out TValue) will provide similar behavior as V Get(TKey) This class is slower than using a , because of extra checks that have to be done on each access, to check for null. Consider also implementing IDictionary, IEnumerable, and ICollection like does, so HashMap can be used in substituted in place for the same interfaces it implements. IdentityComparer Represents a comparison operation that tests equality by reference instead of equality by value. Basically, the comparison is done by checking if returns true rather than by calling the \"Equals\" function. Note that the assumption is that the object is passed will be a reference type, although it is not strictly enforced. IdentityComparer<T> Represents a comparison operation that tests equality by reference instead of equality by value. Basically, the comparison is done by checking if returns true rather than by calling the \"Equals\" function. IdentityHashMap<TKey, TValue> IdentityHashSet<T> IdentityWeakReference<T> LinkedHashMap<TKey, TValue> LinkedHashMap is a specialized dictionary that preserves the entry order of elements. Like a HashMap, there can be a null key, but it also guarantees that the enumeration order of the elements are the same as insertion order, regardless of the number of add/remove/update operations that are performed on it. ListExtensions LurchTable<TKey, TValue> LurchTable stands for \"Least Used Recently Concurrent Hash Table\" and has definate similarities to both the .NET 4 ConcurrentDictionary as well as Java's LinkedHashMap. This gives you a thread-safe dictionary/hashtable that stores element ordering by insertion, updates, or access. In addition it can be configured to use a 'hard-limit' count of items that will automatically 'pop' the oldest item in the collection. LurchTable<TKey, TValue>.KeyCollection Provides the collection of Keys for the LurchTable LurchTable<TKey, TValue>.ValueCollection Provides the collection of Values for the LurchTable LurchTableCorruptionException Exception class: LurchTableCorruptionException The LurchTable internal datastructure appears to be corrupted. Number A simple class for number conversions. NumberFormat PriorityQueue<T> A PriorityQueue<T> holds elements on a priority heap, which orders the elements according to their natural order or according to the comparator specified at construction time. If the queue uses natural ordering, only elements that are comparable are permitted to be inserted into the queue. The least element of the specified ordering is stored at the head of the queue and the greatest element is stored at the tail of the queue. A PriorityQueue<T> is not synchronized. RectangularArrays SetExtensions SignedZeroComparer LUCENENET specific comparer to handle the special case of comparing negative zero with positive zero. For IEEE floating-point numbers, there is a distinction of negative and positive zero. Reference: http://stackoverflow.com/a/3139636 StringBuilderCharSequenceWrapper An adapter for that implements ICharSequence StringBuilderExtensions StringCharSequenceWrapper An adapter for that implements ICharSequence StringExtensions SystemConsole Mimics , but allows for swapping the of Out and Error , or the of In with user-defined implementations. SystemProperties Helper for environment variables. This class helps to convert the environment variables to int or bool data types and also silently handles read permission errors. For instructions how to set environment variables for your OS, see https://www.schrodinger.com/kb/1842 . Note that if you want to load any of these settings for your application from a configuration file, it is recommended your application load them at startup and call SetProperty(String, String) to set them. Set the environment variable lucene.ignoreSecurityExceptions to false to change the read behavior of these methods to throw the underlying exception instead of returning the default value. Time TreeDictionary<TKey, TValue> A sorted generic dictionary based on a red-black tree set. A TreeDictionary<TKey, TValue> provides similar behavior to a , except that TreeDictionary<TKey, TValue> allows elements with null or duplicate keys to be created, where a does not. TreeDictionary<TKey, TValue>.KeyCollection TreeDictionary<TKey, TValue>.ValueCollection TreeSet<T> An implementation of Red-Black trees as an indexed, sorted collection with set semantics, cf. CLRS . C5.TreeBag`1 for a version with bag semantics. C5.TreeDictionary`2 for a sorted dictionary based on this tree implementation. The comparer (sorting order) may be either natural, because the item type is comparable (generic: C5.IComparable`1 or non-generic: System.IComparable) or it can be external and supplied by the user in the constructor. TODO: describe performance here TODO: discuss persistence and its useful usage modes. Warn about the space leak possible with other usage modes. WeakDictionary<TKey, TValue> WritableArrayAttribute Attribute to define a property or method as a writable array. Per MSDN, members should never return arrays because the array contents can be updated, which makes the behavior confusing. However, Lucene's design sometimes relies on other classes to update arrays - both as array fields and as methods that return arrays. So, in these cases we are making an exception to this rule and marking them with WritableArrayAttribute to signify that this is intentional. For properties that violate this rule, you should also use the : [WritableArray, SuppressMessage(\"Microsoft.Performance\", \"CA1819\", Justification = \"Lucene's design requires some writable array properties\")] Structs LurchTable<TKey, TValue>.Enumerator Provides an enumerator that iterates through the collection. LurchTable<TKey, TValue>.KeyCollection.Enumerator Provides an enumerator that iterates through the collection. LurchTable<TKey, TValue>.ValueCollection.Enumerator Provides an enumerator that iterates through the collection. TreeDictionary<TKey, TValue>.Enumerator Interfaces ICallable<V> ICharSequence This interface represents an ordered set of characters and defines the methods to probe them. IChecksum Contains conversion support elements such as classes, interfaces and static methods. ICreateOrUpdateValue<TKey, TValue> An interface to provide conditional or custom creation or update logic to a concurrent dictionary. ICreateValue<TKey, TValue> An interface to provide conditional or custom creation logic to a concurrent dictionary. IRemoveValue<TKey, TValue> An interface to provide conditional removal of an item from a concurrent dictionary. IUpdateValue<TKey, TValue> An interface to provide conditional or custom update logic to a concurrent dictionary. Enums LurchTableOrder Defines if and how items added to a LurchTable are linked together, this defines the value returned from Peek/Dequeue as the oldest entry of the specified operation. Delegates KeyValuePredicate<TKey, TValue> Provides a delegate that performs a test on key/value pair KeyValueUpdate<TKey, TValue> Provides a delegate that performs an atomic update of a key/value pair LurchTable<TKey, TValue>.ItemUpdatedMethod Method signature for the ItemUpdated event"
  },
  "api/Lucene.Net/Lucene.Net.Support.ICallable-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ICallable-1.html",
    "title": "Interface ICallable<V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICallable<V> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface ICallable<V> Type Parameters Name Description V Methods | Improve this Doc View Source Call() Declaration V Call() Returns Type Description V"
  },
  "api/Lucene.Net/Lucene.Net.Support.ICharSequence.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ICharSequence.html",
    "title": "Interface ICharSequence | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICharSequence This interface represents an ordered set of characters and defines the methods to probe them. Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface ICharSequence Properties | Improve this Doc View Source Item[Int32] Returns the character at the specified index, with the first character having index zero. Declaration char this[int index] { get; } Parameters Type Name Description System.Int32 index the index of the character to return. Property Value Type Description System.Char the requested character. | Improve this Doc View Source Length Returns the number of characters in this sequence. Declaration int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source SubSequence(Int32, Int32) Returns a ICharSequence from the start index (inclusive) to the end index (exclusive) of this sequence. Declaration ICharSequence SubSequence(int start, int end) Parameters Type Name Description System.Int32 start the start offset of the sub-sequence. It is inclusive, that is, the index of the first character that is included in the sub-sequence. System.Int32 end the end offset of the sub-sequence. It is exclusive, that is, the index of the first character after those that are included in the sub-sequence Returns Type Description ICharSequence the requested sub-sequence. | Improve this Doc View Source ToString() Returns a string with the same characters in the same order as in this sequence. Declaration string ToString() Returns Type Description System.String a string based on this sequence."
  },
  "api/Lucene.Net/Lucene.Net.Support.IChecksum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IChecksum.html",
    "title": "Interface IChecksum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IChecksum Contains conversion support elements such as classes, interfaces and static methods. Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface IChecksum Properties | Improve this Doc View Source Value Declaration long Value { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Reset() Declaration void Reset() | Improve this Doc View Source Update(Byte[]) Declaration void Update(byte[] b) Parameters Type Name Description System.Byte [] b | Improve this Doc View Source Update(Byte[], Int32, Int32) Declaration void Update(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length | Improve this Doc View Source Update(Int32) Declaration void Update(int b) Parameters Type Name Description System.Int32 b"
  },
  "api/Lucene.Net/Lucene.Net.Support.ICreateOrUpdateValue-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ICreateOrUpdateValue-2.html",
    "title": "Interface ICreateOrUpdateValue<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICreateOrUpdateValue<TKey, TValue> An interface to provide conditional or custom creation or update logic to a concurrent dictionary. Inherited Members ICreateValue<TKey, TValue>.CreateValue(TKey, TValue) IUpdateValue<TKey, TValue>.UpdateValue(TKey, TValue) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface ICreateOrUpdateValue<TKey, TValue> : ICreateValue<TKey, TValue>, IUpdateValue<TKey, TValue> Type Parameters Name Description TKey TValue Remarks Generally implemented as a struct and passed by ref to save stack space and to retrieve the values that where inserted or updated."
  },
  "api/Lucene.Net/Lucene.Net.Support.ICreateValue-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ICreateValue-2.html",
    "title": "Interface ICreateValue<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICreateValue<TKey, TValue> An interface to provide conditional or custom creation logic to a concurrent dictionary. Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface ICreateValue<TKey, TValue> Type Parameters Name Description TKey TValue Methods | Improve this Doc View Source CreateValue(TKey, out TValue) Called when the key was not found within the dictionary to produce a new value that can be added. Return true to continue with the insertion, or false to prevent the key/value from being inserted. Declaration bool CreateValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Support.IdentityComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IdentityComparer.html",
    "title": "Class IdentityComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IdentityComparer Represents a comparison operation that tests equality by reference instead of equality by value. Basically, the comparison is done by checking if returns true rather than by calling the \"Equals\" function. Note that the assumption is that the object is passed will be a reference type, although it is not strictly enforced. Inheritance System.Object IdentityComparer Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class IdentityComparer : IEqualityComparer Properties | Improve this Doc View Source Default Gets an IdentityComparer<T> object that tests equality by reference instead of equality by value. Basically, the comparison is done by checking if returns true rather than by calling the \"Equals\" function. Declaration public static IdentityComparer Default { get; } Property Value Type Description IdentityComparer Methods | Improve this Doc View Source Equals(Object, Object) Declaration public bool Equals(object x, object y) Parameters Type Name Description System.Object x System.Object y Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode(Object) Declaration public int GetHashCode(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Support.IdentityComparer-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IdentityComparer-1.html",
    "title": "Class IdentityComparer<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IdentityComparer<T> Represents a comparison operation that tests equality by reference instead of equality by value. Basically, the comparison is done by checking if returns true rather than by calling the \"Equals\" function. Inheritance System.Object IdentityComparer<T> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class IdentityComparer<T> : IEqualityComparer<T> where T : class Type Parameters Name Description T The type of object to test for reference equality. Must be a class, not a struct. Properties | Improve this Doc View Source Default Gets an IdentityComparer<T> object that tests equality by reference instead of equality by value. Basically, the comparison is done by checking if returns true rather than by calling the \"Equals\" function. Declaration public static IdentityComparer<T> Default { get; } Property Value Type Description IdentityComparer <T> Methods | Improve this Doc View Source Equals(T, T) Declaration public bool Equals(T x, T y) Parameters Type Name Description T x T y Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode(T) Declaration public int GetHashCode(T obj) Parameters Type Name Description T obj Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Support.IdentityHashMap-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IdentityHashMap-2.html",
    "title": "Class IdentityHashMap<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IdentityHashMap<TKey, TValue> Inheritance System.Object HashMap <TKey, TValue> IdentityHashMap<TKey, TValue> Inherited Members HashMap<TKey, TValue>.ContainsValue(TValue) HashMap<TKey, TValue>.AddIfAbsent(TKey, TValue) HashMap<TKey, TValue>.Equals(Object) HashMap<TKey, TValue>.GetHashCode() HashMap<TKey, TValue>.ToString() HashMap<TKey, TValue>.GetEnumerator() HashMap<TKey, TValue>.Add(KeyValuePair<TKey, TValue>) HashMap<TKey, TValue>.Clear() HashMap<TKey, TValue>.Contains(KeyValuePair<TKey, TValue>) HashMap<TKey, TValue>.CopyTo(KeyValuePair<TKey, TValue>[], Int32) HashMap<TKey, TValue>.Remove(KeyValuePair<TKey, TValue>) HashMap<TKey, TValue>.Count HashMap<TKey, TValue>.IsReadOnly HashMap<TKey, TValue>.ContainsKey(TKey) HashMap<TKey, TValue>.Add(TKey, TValue) HashMap<TKey, TValue>.Remove(TKey) HashMap<TKey, TValue>.TryGetValue(TKey, TValue) HashMap<TKey, TValue>.Item[TKey] HashMap<TKey, TValue>.Keys HashMap<TKey, TValue>.Values Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class IdentityHashMap<TKey, TValue> : HashMap<TKey, TValue> where TKey : class Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source IdentityHashMap() Declaration public IdentityHashMap() | Improve this Doc View Source IdentityHashMap(IDictionary<TKey, TValue>) Declaration public IdentityHashMap(IDictionary<TKey, TValue> wrappedDictionary) Parameters Type Name Description IDictionary <TKey, TValue> wrappedDictionary | Improve this Doc View Source IdentityHashMap(Int32) Declaration public IdentityHashMap(int initialCapacity) Parameters Type Name Description System.Int32 initialCapacity"
  },
  "api/Lucene.Net/Lucene.Net.Support.IdentityHashSet-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IdentityHashSet-1.html",
    "title": "Class IdentityHashSet<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IdentityHashSet<T> Inheritance System.Object IdentityHashSet<T> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class IdentityHashSet<T> : HashSet<T> where T : class Type Parameters Name Description T Constructors | Improve this Doc View Source IdentityHashSet() Declaration public IdentityHashSet() | Improve this Doc View Source IdentityHashSet(IEnumerable<T>) Declaration public IdentityHashSet(IEnumerable<T> collection) Parameters Type Name Description IEnumerable <T> collection"
  },
  "api/Lucene.Net/Lucene.Net.Support.IdentityWeakReference-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IdentityWeakReference-1.html",
    "title": "Class IdentityWeakReference<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IdentityWeakReference<T> Inheritance System.Object IdentityWeakReference<T> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class IdentityWeakReference<T> : WeakReference where T : class Type Parameters Name Description T Constructors | Improve this Doc View Source IdentityWeakReference(T) Declaration public IdentityWeakReference(T target) Parameters Type Name Description T target Properties | Improve this Doc View Source Target Declaration public T Target { get; set; } Property Value Type Description T 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 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.BinaryReaderDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.BinaryReaderDataInput.html",
    "title": "Class BinaryReaderDataInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryReaderDataInput Inheritance System.Object DataInput BinaryReaderDataInput Implements IDisposable Inherited Members DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.Clone() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public class BinaryReaderDataInput : DataInput, IDisposable Constructors | Improve this Doc View Source BinaryReaderDataInput(BinaryReader) Declaration public BinaryReaderDataInput(BinaryReader br) Parameters Type Name Description BinaryReader br Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.BinaryWriterDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.BinaryWriterDataOutput.html",
    "title": "Class BinaryWriterDataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryWriterDataOutput Inheritance System.Object DataOutput BinaryWriterDataOutput Implements IDisposable Inherited Members DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public class BinaryWriterDataOutput : DataOutput, IDisposable Constructors | Improve this Doc View Source BinaryWriterDataOutput(BinaryWriter) Declaration public BinaryWriterDataOutput(BinaryWriter bw) Parameters Type Name Description BinaryWriter bw Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.ByteArrayOutputStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.ByteArrayOutputStream.html",
    "title": "Class ByteArrayOutputStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteArrayOutputStream Inheritance System.Object ByteArrayOutputStream Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public class ByteArrayOutputStream : MemoryStream Constructors | Improve this Doc View Source ByteArrayOutputStream() Declaration public ByteArrayOutputStream() | Improve this Doc View Source ByteArrayOutputStream(Int32) Declaration public ByteArrayOutputStream(int size) Parameters Type Name Description System.Int32 size Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.FileStreamExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.FileStreamExtensions.html",
    "title": "Class FileStreamExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FileStreamExtensions Inheritance System.Object FileStreamExtensions Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public static class FileStreamExtensions : object Methods | Improve this Doc View Source Read(FileStream, ByteBuffer, Int64) Declaration public static int Read(this FileStream file, ByteBuffer dst, long position) Parameters Type Name Description FileStream file ByteBuffer dst System.Int64 position Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.FileSupport.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.FileSupport.html",
    "title": "Class FileSupport | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FileSupport Represents the methods to support some operations over files. Inheritance System.Object FileSupport Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public static class FileSupport : object Methods | Improve this Doc View Source CreateTempFile(String, String) Creates a new empty file in a random subdirectory of , using the given prefix and suffix strings to generate its name. Declaration public static FileInfo CreateTempFile(string prefix, string suffix) Parameters Type Name Description System.String prefix The prefix string to be used in generating the file's name; must be at least three characters long System.String suffix The suffix string to be used in generating the file's name; may be null, in which case a random suffix will be generated Returns Type Description FileInfo A instance representing the temp file that was created. Remarks If this method returns successfully then it is guaranteed that: The file denoted by the returned abstract pathname did not exist before this method was invoked, and Neither this method nor any of its variants will return the same abstract pathname again in the current invocation of the virtual machine. This method provides only part of a temporary-file facility. However, the file will not be deleted automatically, it must be deleted by the caller. The prefix argument must be at least three characters long. It is recommended that the prefix be a short, meaningful string such as \"hjb\" or \"mail\". The suffix argument may be null, in which case a random suffix will be used. Both prefix and suffix must be provided with valid characters for the underlying system, as specified by . If the directory argument is null then the system-dependent default temporary-file directory will be used, with a random subdirectory name. The default temporary-file directory is specified by the method. On UNIX systems the default value of this property is typically \"/tmp\" or \"/var/tmp\"; on Microsoft Windows systems it is typically \"C:\\Users\\[UserName]\\AppData\\Local\\Temp\". | Improve this Doc View Source CreateTempFile(String, String, DirectoryInfo) Creates a new empty file in the specified directory, using the given prefix and suffix strings to generate its name. Declaration public static FileInfo CreateTempFile(string prefix, string suffix, DirectoryInfo directory) Parameters Type Name Description System.String prefix The prefix string to be used in generating the file's name; must be at least three characters long System.String suffix The suffix string to be used in generating the file's name; may be null, in which case a random suffix will be generated DirectoryInfo directory The directory in which the file is to be created, or null if the default temporary-file directory is to be used Returns Type Description FileInfo A instance representing the temp file that was created. Remarks If this method returns successfully then it is guaranteed that: The file denoted by the returned abstract pathname did not exist before this method was invoked, and Neither this method nor any of its variants will return the same abstract pathname again in the current invocation of the virtual machine. This method provides only part of a temporary-file facility. However, the file will not be deleted automatically, it must be deleted by the caller. The prefix argument must be at least three characters long. It is recommended that the prefix be a short, meaningful string such as \"hjb\" or \"mail\". The suffix argument may be null, in which case a random suffix will be used. Both prefix and suffix must be provided with valid characters for the underlying system, as specified by . If the directory argument is null then the system-dependent default temporary-file directory will be used, with a random subdirectory name. The default temporary-file directory is specified by the method. On UNIX systems the default value of this property is typically \"/tmp\" or \"/var/tmp\"; on Microsoft Windows systems it is typically \"C:\\Users\\[UserName]\\AppData\\Local\\Temp\". | Improve this Doc View Source GetCanonicalPath(FileSystemInfo) Returns the absolute path of this with all references resolved and any drive letters normalized to upper case on Windows. An absolute path is one that begins at the root of the file system. The canonical path is one in which all references have been resolved. For the cases of '..' and '.', where the file system supports parent and working directory respectively, these are removed and replaced with a direct directory reference. Declaration public static string GetCanonicalPath(this FileSystemInfo path) Parameters Type Name Description FileSystemInfo path This instance. Returns Type Description System.String The canonical path of this file. | Improve this Doc View Source IsFileAlreadyExistsException(Exception, String) Tests whether the passed in is an corresponding to the underlying operating system's \"File Already Exists\" violation. This works by forcing the exception to occur during initialization and caching the value for the current OS. Declaration public static bool IsFileAlreadyExistsException(Exception ex, string filePath) Parameters Type Name Description Exception ex An exception, for comparison. System.String filePath The path of the file to check. This is used as a fallback in case the current OS doesn't have an HResult (an edge case). Returns Type Description System.Boolean true if the exception passed is an with an corresponding to the operating system's \"File Already Exists\" violation, which occurs when an attempt is made to create a file that already exists."
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.html",
    "title": "Namespace Lucene.Net.Support.IO | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Support.IO Classes BinaryReaderDataInput BinaryWriterDataOutput ByteArrayOutputStream FileStreamExtensions FileSupport Represents the methods to support some operations over files. SafeTextWriterWrapper Decorates a instance and makes no assumptions about whether has been called on the inner instance or not. Acts like a circuit breaker - the first caught turns it off and the rest of the calls are ignored after that point until Reset() is called. The primary purpose is for using a instance within a non-disposable parent object. Since the creator of the ultimately is responsible for disposing it, our non-disposable object has no way of knowing whether it is safe to use the . Wraping the within a SafeTextWriterWrapper ensures the non-disposable object can continue to make calls to the without raising exceptions (it is presumed that the functionality is optional). StreamExtensions Extension methods that make a effectively into a binary serializer with no encoding. We simply convert types into bytes and write them without any concern whether surrogate pairs are respected, similar to what BinaryFormatter does. This makes it possible to serialize/deserialize raw character arrays and get the data back in the same order without any exceptions warning that the order is not valid and without the need for BinaryFormatter. Byte order is little-endian (same as and )."
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.SafeTextWriterWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.SafeTextWriterWrapper.html",
    "title": "Class SafeTextWriterWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SafeTextWriterWrapper Decorates a instance and makes no assumptions about whether has been called on the inner instance or not. Acts like a circuit breaker - the first caught turns it off and the rest of the calls are ignored after that point until Reset() is called. The primary purpose is for using a instance within a non-disposable parent object. Since the creator of the ultimately is responsible for disposing it, our non-disposable object has no way of knowing whether it is safe to use the . Wraping the within a SafeTextWriterWrapper ensures the non-disposable object can continue to make calls to the without raising exceptions (it is presumed that the functionality is optional). Inheritance System.Object SafeTextWriterWrapper Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public class SafeTextWriterWrapper : TextWriter Constructors | Improve this Doc View Source SafeTextWriterWrapper(TextWriter) Declaration public SafeTextWriterWrapper(TextWriter textWriter) Parameters Type Name Description TextWriter textWriter Properties | Improve this Doc View Source Encoding Declaration public override Encoding Encoding { get; } Property Value Type Description Encoding | Improve this Doc View Source FormatProvider Declaration public override IFormatProvider FormatProvider { get; } Property Value Type Description IFormatProvider | Improve this Doc View Source NewLine Declaration public override string NewLine { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source Close() Declaration public override void Close() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source Flush() Declaration public override void Flush() | Improve this Doc View Source FlushAsync() Declaration public override Task FlushAsync() Returns Type Description Task | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source InitializeLifetimeService() Declaration public override object InitializeLifetimeService() Returns Type Description System.Object | Improve this Doc View Source Reset() Declaration public virtual void Reset() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source Write(Boolean) Declaration public override void Write(bool value) Parameters Type Name Description System.Boolean value | Improve this Doc View Source Write(Char) Declaration public override void Write(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source Write(Char[]) Declaration public override void Write(char[] buffer) Parameters Type Name Description System.Char [] buffer | Improve this Doc View Source Write(Char[], Int32, Int32) Declaration public override void Write(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count | Improve this Doc View Source Write(Decimal) Declaration public override void Write(decimal value) Parameters Type Name Description System.Decimal value | Improve this Doc View Source Write(Double) Declaration public override void Write(double value) Parameters Type Name Description System.Double value | Improve this Doc View Source Write(Int32) Declaration public override void Write(int value) Parameters Type Name Description System.Int32 value | Improve this Doc View Source Write(Int64) Declaration public override void Write(long value) Parameters Type Name Description System.Int64 value | Improve this Doc View Source Write(Object) Declaration public override void Write(object value) Parameters Type Name Description System.Object value | Improve this Doc View Source Write(Single) Declaration public override void Write(float value) Parameters Type Name Description System.Single value | Improve this Doc View Source Write(String) Declaration public override void Write(string value) Parameters Type Name Description System.String value | Improve this Doc View Source Write(String, Object) Declaration public override void Write(string format, object arg0) Parameters Type Name Description System.String format System.Object arg0 | Improve this Doc View Source Write(String, Object, Object) Declaration public override void Write(string format, object arg0, object arg1) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 | Improve this Doc View Source Write(String, Object, Object, Object) Declaration public override void Write(string format, object arg0, object arg1, object arg2) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 System.Object arg2 | Improve this Doc View Source Write(String, Object[]) Declaration public override void Write(string format, params object[] arg) Parameters Type Name Description System.String format System.Object [] arg | Improve this Doc View Source Write(UInt32) Declaration public override void Write(uint value) Parameters Type Name Description System.UInt32 value | Improve this Doc View Source Write(UInt64) Declaration public override void Write(ulong value) Parameters Type Name Description System.UInt64 value | Improve this Doc View Source WriteAsync(Char) Declaration public override Task WriteAsync(char value) Parameters Type Name Description System.Char value Returns Type Description Task | Improve this Doc View Source WriteAsync(Char[], Int32, Int32) Declaration public override Task WriteAsync(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Returns Type Description Task | Improve this Doc View Source WriteAsync(String) Declaration public override Task WriteAsync(string value) Parameters Type Name Description System.String value Returns Type Description Task | Improve this Doc View Source WriteLine() Declaration public override void WriteLine() | Improve this Doc View Source WriteLine(Boolean) Declaration public override void WriteLine(bool value) Parameters Type Name Description System.Boolean value | Improve this Doc View Source WriteLine(Char) Declaration public override void WriteLine(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source WriteLine(Char[]) Declaration public override void WriteLine(char[] buffer) Parameters Type Name Description System.Char [] buffer | Improve this Doc View Source WriteLine(Char[], Int32, Int32) Declaration public override void WriteLine(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count | Improve this Doc View Source WriteLine(Decimal) Declaration public override void WriteLine(decimal value) Parameters Type Name Description System.Decimal value | Improve this Doc View Source WriteLine(Double) Declaration public override void WriteLine(double value) Parameters Type Name Description System.Double value | Improve this Doc View Source WriteLine(Int32) Declaration public override void WriteLine(int value) Parameters Type Name Description System.Int32 value | Improve this Doc View Source WriteLine(Int64) Declaration public override void WriteLine(long value) Parameters Type Name Description System.Int64 value | Improve this Doc View Source WriteLine(Object) Declaration public override void WriteLine(object value) Parameters Type Name Description System.Object value | Improve this Doc View Source WriteLine(Single) Declaration public override void WriteLine(float value) Parameters Type Name Description System.Single value | Improve this Doc View Source WriteLine(String) Declaration public override void WriteLine(string value) Parameters Type Name Description System.String value | Improve this Doc View Source WriteLine(String, Object) Declaration public override void WriteLine(string format, object arg0) Parameters Type Name Description System.String format System.Object arg0 | Improve this Doc View Source WriteLine(String, Object, Object) Declaration public override void WriteLine(string format, object arg0, object arg1) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 | Improve this Doc View Source WriteLine(String, Object, Object, Object) Declaration public override void WriteLine(string format, object arg0, object arg1, object arg2) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 System.Object arg2 | Improve this Doc View Source WriteLine(String, Object[]) Declaration public override void WriteLine(string format, params object[] arg) Parameters Type Name Description System.String format System.Object [] arg | Improve this Doc View Source WriteLine(UInt32) Declaration public override void WriteLine(uint value) Parameters Type Name Description System.UInt32 value | Improve this Doc View Source WriteLine(UInt64) Declaration public override void WriteLine(ulong value) Parameters Type Name Description System.UInt64 value | Improve this Doc View Source WriteLineAsync() Declaration public override Task WriteLineAsync() Returns Type Description Task | Improve this Doc View Source WriteLineAsync(Char) Declaration public override Task WriteLineAsync(char value) Parameters Type Name Description System.Char value Returns Type Description Task | Improve this Doc View Source WriteLineAsync(Char[], Int32, Int32) Declaration public override Task WriteLineAsync(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Returns Type Description Task | Improve this Doc View Source WriteLineAsync(String) Declaration public override Task WriteLineAsync(string value) Parameters Type Name Description System.String value Returns Type Description Task"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.StreamExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.StreamExtensions.html",
    "title": "Class StreamExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StreamExtensions Extension methods that make a effectively into a binary serializer with no encoding. We simply convert types into bytes and write them without any concern whether surrogate pairs are respected, similar to what BinaryFormatter does. This makes it possible to serialize/deserialize raw character arrays and get the data back in the same order without any exceptions warning that the order is not valid and without the need for BinaryFormatter. Byte order is little-endian (same as and ). Inheritance System.Object StreamExtensions Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public static class StreamExtensions : object Methods | Improve this Doc View Source ReadChars(Stream, Int32) Declaration public static char[] ReadChars(this Stream stream, int count) Parameters Type Name Description Stream stream System.Int32 count Returns Type Description System.Char [] | Improve this Doc View Source ReadInt32(Stream) Declaration public static int ReadInt32(this Stream stream) Parameters Type Name Description Stream stream Returns Type Description System.Int32 | Improve this Doc View Source ReadInt64(Stream) Declaration public static long ReadInt64(this Stream stream) Parameters Type Name Description Stream stream Returns Type Description System.Int64 | Improve this Doc View Source Write(Stream, Char[]) Declaration public static void Write(this Stream stream, char[] chars) Parameters Type Name Description Stream stream System.Char [] chars | Improve this Doc View Source Write(Stream, Int32) Declaration public static void Write(this Stream stream, int value) Parameters Type Name Description Stream stream System.Int32 value | Improve this Doc View Source Write(Stream, Int64) Declaration public static void Write(this Stream stream, long value) Parameters Type Name Description Stream stream System.Int64 value"
  },
  "api/Lucene.Net/Lucene.Net.Support.IRemoveValue-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IRemoveValue-2.html",
    "title": "Interface IRemoveValue<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IRemoveValue<TKey, TValue> An interface to provide conditional removal of an item from a concurrent dictionary. Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface IRemoveValue<TKey, TValue> Type Parameters Name Description TKey TValue Remarks Generally implemented as a struct and passed by ref to save stack space and to retrieve the values that where inserted or updated. Methods | Improve this Doc View Source RemoveValue(TKey, TValue) Called when the dictionary is about to remove the key/value pair provided, return true to allow it's removal, or false to prevent it from being removed. Declaration bool RemoveValue(TKey key, TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Support.IUpdateValue-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IUpdateValue-2.html",
    "title": "Interface IUpdateValue<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IUpdateValue<TKey, TValue> An interface to provide conditional or custom update logic to a concurrent dictionary. Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface IUpdateValue<TKey, TValue> Type Parameters Name Description TKey TValue Methods | Improve this Doc View Source UpdateValue(TKey, ref TValue) Called when the key was found within the dictionary to produce a modified value to update the item to. Return true to continue with the update, or false to prevent the key/value from being updated. Declaration bool UpdateValue(TKey key, ref TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Support.KeyValuePredicate-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.KeyValuePredicate-2.html",
    "title": "Delegate KeyValuePredicate<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate KeyValuePredicate<TKey, TValue> Provides a delegate that performs a test on key/value pair Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public delegate bool KeyValuePredicate<TKey, TValue>(TKey key, TValue original); Parameters Type Name Description TKey key TValue original Returns Type Description System.Boolean Type Parameters Name Description TKey TValue"
  },
  "api/Lucene.Net/Lucene.Net.Support.KeyValueUpdate-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.KeyValueUpdate-2.html",
    "title": "Delegate KeyValueUpdate<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate KeyValueUpdate<TKey, TValue> Provides a delegate that performs an atomic update of a key/value pair Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public delegate TValue KeyValueUpdate<TKey, TValue>(TKey key, TValue original); Parameters Type Name Description TKey key TValue original Returns Type Description TValue Type Parameters Name Description TKey TValue"
  },
  "api/Lucene.Net/Lucene.Net.Support.LinkedHashMap-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LinkedHashMap-2.html",
    "title": "Class LinkedHashMap<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LinkedHashMap<TKey, TValue> LinkedHashMap is a specialized dictionary that preserves the entry order of elements. Like a HashMap, there can be a null key, but it also guarantees that the enumeration order of the elements are the same as insertion order, regardless of the number of add/remove/update operations that are performed on it. Inheritance System.Object HashMap <TKey, TValue> LinkedHashMap<TKey, TValue> Implements IDictionary <TKey, TValue> Inherited Members HashMap<TKey, TValue>.ContainsValue(TValue) HashMap<TKey, TValue>.AddIfAbsent(TKey, TValue) HashMap<TKey, TValue>.Equals(Object) HashMap<TKey, TValue>.GetHashCode() HashMap<TKey, TValue>.ToString() HashMap<TKey, TValue>.GetEnumerator() HashMap<TKey, TValue>.Add(KeyValuePair<TKey, TValue>) HashMap<TKey, TValue>.Clear() HashMap<TKey, TValue>.Contains(KeyValuePair<TKey, TValue>) HashMap<TKey, TValue>.CopyTo(KeyValuePair<TKey, TValue>[], Int32) HashMap<TKey, TValue>.Remove(KeyValuePair<TKey, TValue>) HashMap<TKey, TValue>.Count HashMap<TKey, TValue>.IsReadOnly HashMap<TKey, TValue>.ContainsKey(TKey) HashMap<TKey, TValue>.Add(TKey, TValue) HashMap<TKey, TValue>.Remove(TKey) HashMap<TKey, TValue>.TryGetValue(TKey, TValue) HashMap<TKey, TValue>.Item[TKey] HashMap<TKey, TValue>.Keys HashMap<TKey, TValue>.Values Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class LinkedHashMap<TKey, TValue> : HashMap<TKey, TValue>, IDictionary<TKey, TValue> Type Parameters Name Description TKey The type of keys in the dictionary TValue The type of values in the dictionary Remarks Unordered Dictionaries - use when order is not important and all keys are non-null. HashMap<TKey, TValue> - use when order is not important and support for a null key is required. Ordered Dictionaries LinkedHashMap<TKey, TValue> - use when you need to preserve entry insertion order. Keys are nullable. - use when you need natural sort order. Keys must be unique. TreeDictionary<TKey, TValue> - use when you need natural sort order. Keys are nullable. LurchTable<TKey, TValue> - use when you need to sort by most recent access or most recent update. Works well for LRU caching. Constructors | Improve this Doc View Source LinkedHashMap() Declaration public LinkedHashMap() | Improve this Doc View Source LinkedHashMap(IEnumerable<KeyValuePair<TKey, TValue>>) Declaration public LinkedHashMap(IEnumerable<KeyValuePair<TKey, TValue>> source) Parameters Type Name Description IEnumerable < KeyValuePair <TKey, TValue>> source | Improve this Doc View Source LinkedHashMap(IEnumerable<KeyValuePair<TKey, TValue>>, IEqualityComparer<TKey>) Declaration public LinkedHashMap(IEnumerable<KeyValuePair<TKey, TValue>> source, IEqualityComparer<TKey> comparer) Parameters Type Name Description IEnumerable < KeyValuePair <TKey, TValue>> source IEqualityComparer <TKey> comparer | Improve this Doc View Source LinkedHashMap(IEqualityComparer<TKey>) Declaration public LinkedHashMap(IEqualityComparer<TKey> comparer) Parameters Type Name Description IEqualityComparer <TKey> comparer | Improve this Doc View Source LinkedHashMap(Int32) Declaration public LinkedHashMap(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source LinkedHashMap(Int32, IEqualityComparer<TKey>) Declaration public LinkedHashMap(int capacity, IEqualityComparer<TKey> comparer) Parameters Type Name Description System.Int32 capacity IEqualityComparer <TKey> comparer Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Count | Improve this Doc View Source IsReadOnly Declaration public override bool IsReadOnly { get; } Property Value Type Description System.Boolean Overrides Lucene.Net.Support.HashMap<TKey, TValue>.IsReadOnly | Improve this Doc View Source Item[TKey] Declaration public override TValue this[TKey key] { get; set; } Parameters Type Name Description TKey key Property Value Type Description TValue Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Item[TKey] | Improve this Doc View Source Keys Declaration public override ICollection<TKey> Keys { get; } Property Value Type Description ICollection <TKey> Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Keys | Improve this Doc View Source Values Declaration public override ICollection<TValue> Values { get; } Property Value Type Description ICollection <TValue> Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Values Methods | Improve this Doc View Source Add(TKey, TValue) Declaration public override void Add(TKey key, TValue value) Parameters Type Name Description TKey key TValue value Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Add(TKey, TValue) | Improve this Doc View Source Add(KeyValuePair<TKey, TValue>) Declaration public override void Add(KeyValuePair<TKey, TValue> item) Parameters Type Name Description KeyValuePair <TKey, TValue> item Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Add(KeyValuePair<TKey, TValue>) | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Clear() | Improve this Doc View Source Contains(KeyValuePair<TKey, TValue>) Declaration public override bool Contains(KeyValuePair<TKey, TValue> item) Parameters Type Name Description KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Contains(KeyValuePair<TKey, TValue>) | Improve this Doc View Source ContainsKey(TKey) Declaration public override bool ContainsKey(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean Overrides Lucene.Net.Support.HashMap<TKey, TValue>.ContainsKey(TKey) | Improve this Doc View Source CopyTo(KeyValuePair<TKey, TValue>[], Int32) Declaration public override void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex) Parameters Type Name Description KeyValuePair <TKey, TValue>[] array System.Int32 arrayIndex Overrides Lucene.Net.Support.HashMap<TKey, TValue>.CopyTo(KeyValuePair<TKey, TValue>[], System.Int32) | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() Returns Type Description IEnumerator < KeyValuePair <TKey, TValue>> Overrides Lucene.Net.Support.HashMap<TKey, TValue>.GetEnumerator() | Improve this Doc View Source Remove(TKey) Declaration public override bool Remove(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Remove(TKey) | Improve this Doc View Source Remove(KeyValuePair<TKey, TValue>) Declaration public override bool Remove(KeyValuePair<TKey, TValue> item) Parameters Type Name Description KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Remove(KeyValuePair<TKey, TValue>) | Improve this Doc View Source TryGetValue(TKey, out TValue) Declaration public override bool TryGetValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean Overrides Lucene.Net.Support.HashMap<TKey, TValue>.TryGetValue(TKey, TValue) Implements IDictionary<, >"
  },
  "api/Lucene.Net/Lucene.Net.Support.ListExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ListExtensions.html",
    "title": "Class ListExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ListExtensions Inheritance System.Object ListExtensions Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class ListExtensions : object Methods | Improve this Doc View Source AddRange<T>(IList<T>, IEnumerable<T>) Declaration public static void AddRange<T>(this IList<T> list, IEnumerable<T> values) Parameters Type Name Description IList <T> list IEnumerable <T> values Type Parameters Name Description T | Improve this Doc View Source BinarySearch<T>(IList<T>, T) Performs a binary search for the specified element in the specified sorted list. The list needs to be already sorted in natural sorting order. Searching in an unsorted array has an undefined result. It's also undefined which element is found if there are multiple occurrences of the same element. Declaration public static int BinarySearch<T>(this IList<T> list, T item) where T : IComparable<T> Parameters Type Name Description IList <T> list The sorted list to search. T item The element to find. Returns Type Description System.Int32 The non-negative index of the element, or a negative index which is the -index - 1 where the element would be inserted. Type Parameters Name Description T The element type. | Improve this Doc View Source BinarySearch<T>(IList<T>, T, IComparer<T>) Performs a binary search for the specified element in the specified sorted list using the specified comparator. The list needs to be already sorted according to the comparer passed. Searching in an unsorted array has an undefined result. It's also undefined which element is found if there are multiple occurrences of the same element. Declaration public static int BinarySearch<T>(this IList<T> list, T item, IComparer<T> comparer) where T : IComparable<T> Parameters Type Name Description IList <T> list The sorted to search. T item The element to find. IComparer <T> comparer The comparer. If the comparer is null then the search uses the objects' natural ordering. Returns Type Description System.Int32 the non-negative index of the element, or a negative index which is the -index - 1 where the element would be inserted. Type Parameters Name Description T The element type. | Improve this Doc View Source IntroSort<T>(IList<T>) Sorts the given using the . This method uses the intro sort algorithm, but falls back to insertion sort for small lists. Declaration public static void IntroSort<T>(this IList<T> list) Parameters Type Name Description IList <T> list this Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(IList<T>, IComparer<T>) Sorts the given using the . This method uses the intro sort algorithm, but falls back to insertion sort for small lists. Declaration public static void IntroSort<T>(this IList<T> list, IComparer<T> comparer) Parameters Type Name Description IList <T> list this IComparer <T> comparer The to use for the sort. Type Parameters Name Description T | Improve this Doc View Source Shuffle<T>(IList<T>) Shuffles an in place using a new instance. Declaration public static void Shuffle<T>(this IList<T> list) Parameters Type Name Description IList <T> list This . Type Parameters Name Description T | Improve this Doc View Source Shuffle<T>(IList<T>, Random) Shuffles an in place using the specified random instance. Declaration public static void Shuffle<T>(this IList<T> list, Random random) Parameters Type Name Description IList <T> list This . Random random Type Parameters Name Description T | Improve this Doc View Source Sort<T>(IList<T>) If the underlying type is , calls . If not, uses TimSort<T>(IList<T>) Declaration public static void Sort<T>(this IList<T> list) Parameters Type Name Description IList <T> list this Type Parameters Name Description T | Improve this Doc View Source Sort<T>(IList<T>, Comparison<T>) If the underlying type is , calls . If not, uses TimSort<T>(IList<T>, IComparer<T>) Declaration public static void Sort<T>(this IList<T> list, Comparison<T> comparison) Parameters Type Name Description IList <T> list this Comparison <T> comparison the comparison function to use for the sort Type Parameters Name Description T | Improve this Doc View Source Sort<T>(IList<T>, IComparer<T>) If the underlying type is , calls . If not, uses TimSort<T>(IList<T>, IComparer<T>) Declaration public static void Sort<T>(this IList<T> list, IComparer<T> comparer) Parameters Type Name Description IList <T> list this IComparer <T> comparer the comparer to use for the sort Type Parameters Name Description T | Improve this Doc View Source SubList<T>(IList<T>, Int32, Int32) Declaration public static IList<T> SubList<T>(this IList<T> list, int fromIndex, int toIndex) Parameters Type Name Description IList <T> list System.Int32 fromIndex System.Int32 toIndex Returns Type Description IList <T> Type Parameters Name Description T | Improve this Doc View Source Swap<T>(IList<T>, Int32, Int32) Declaration public static void Swap<T>(this IList<T> list, int indexA, int indexB) Parameters Type Name Description IList <T> list System.Int32 indexA System.Int32 indexB Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(IList<T>) Sorts the given using the . This method uses the Tim sort algorithm, but falls back to binary sort for small lists. Declaration public static void TimSort<T>(this IList<T> list) Parameters Type Name Description IList <T> list this Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(IList<T>, IComparer<T>) Sorts the given using the . This method uses the Tim sort algorithm, but falls back to binary sort for small lists. Declaration public static void TimSort<T>(this IList<T> list, IComparer<T> comparer) Parameters Type Name Description IList <T> list this IComparer <T> comparer The to use for the sort. Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.Enumerator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.Enumerator.html",
    "title": "Struct LurchTable<TKey, TValue>.Enumerator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Struct LurchTable<TKey, TValue>.Enumerator Provides an enumerator that iterates through the collection. Implements IEnumerator < KeyValuePair <TKey, TValue>> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public struct Enumerator : IEnumerator<KeyValuePair<TKey, TValue>> Properties | Improve this Doc View Source Current Gets the element in the collection at the current position of the enumerator. Declaration public KeyValuePair<TKey, TValue> Current { get; } Property Value Type Description KeyValuePair <TKey, TValue> Methods | Improve this Doc View Source Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. Declaration public void Dispose() | Improve this Doc View Source MoveNext() Advances the enumerator to the next element of the collection. Declaration public bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Sets the enumerator to its initial position, which is before the first element in the collection. Declaration public void Reset() Implements IEnumerator<>"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.html",
    "title": "Class LurchTable<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LurchTable<TKey, TValue> LurchTable stands for \"Least Used Recently Concurrent Hash Table\" and has definate similarities to both the .NET 4 ConcurrentDictionary as well as Java's LinkedHashMap. This gives you a thread-safe dictionary/hashtable that stores element ordering by insertion, updates, or access. In addition it can be configured to use a 'hard-limit' count of items that will automatically 'pop' the oldest item in the collection. Inheritance System.Object LurchTable<TKey, TValue> Implements IDisposable Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class LurchTable<TKey, TValue> : IDictionary<TKey, TValue>, IDisposable Type Parameters Name Description TKey The type of keys in the dictionary. TValue The type of values in the dictionary. Constructors | Improve this Doc View Source LurchTable(LurchTableOrder, Int32) Creates a LurchTable that orders items by ordering and removes items once the specified limit is reached. Declaration public LurchTable(LurchTableOrder ordering, int limit) Parameters Type Name Description LurchTableOrder ordering The type of linking for the items System.Int32 limit The maximum allowable number of items, or int.MaxValue for unlimited | Improve this Doc View Source LurchTable(LurchTableOrder, Int32, IEqualityComparer<TKey>) Creates a LurchTable that orders items by ordering and removes items once the specified limit is reached. Declaration public LurchTable(LurchTableOrder ordering, int limit, IEqualityComparer<TKey> comparer) Parameters Type Name Description LurchTableOrder ordering The type of linking for the items System.Int32 limit The maximum allowable number of items, or int.MaxValue for unlimited IEqualityComparer <TKey> comparer The element hash generator for keys, or null to use | Improve this Doc View Source LurchTable(LurchTableOrder, Int32, Int32, Int32, Int32, IEqualityComparer<TKey>) Creates a LurchTable that orders items by ordering and removes items once the specified limit is reached. Declaration public LurchTable(LurchTableOrder ordering, int limit, int hashSize, int allocSize, int lockSize, IEqualityComparer<TKey> comparer) Parameters Type Name Description LurchTableOrder ordering The type of linking for the items System.Int32 limit The maximum allowable number of items, or int.MaxValue for unlimited System.Int32 hashSize The number of hash buckets to use for the collection, usually 1/2 estimated capacity System.Int32 allocSize The number of entries to allocate at a time, usually 1/16 estimated capacity System.Int32 lockSize The number of concurrency locks to preallocate, usually 1/256 estimated capacity IEqualityComparer <TKey> comparer The element hash generator for keys, or null to use | Improve this Doc View Source LurchTable(Int32) Creates a LurchTable that can store up to capacity items efficiently. Declaration public LurchTable(int capacity) Parameters Type Name Description System.Int32 capacity The initial allowable number of items before allocation of more memory | Improve this Doc View Source LurchTable(Int32, LurchTableOrder) Creates a LurchTable that can store up to capacity items efficiently. Declaration public LurchTable(int capacity, LurchTableOrder ordering) Parameters Type Name Description System.Int32 capacity The initial allowable number of items before allocation of more memory LurchTableOrder ordering The type of linking for the items | Improve this Doc View Source LurchTable(Int32, LurchTableOrder, IEqualityComparer<TKey>) Creates a LurchTable that can store up to capacity items efficiently. Declaration public LurchTable(int capacity, LurchTableOrder ordering, IEqualityComparer<TKey> comparer) Parameters Type Name Description System.Int32 capacity The initial allowable number of items before allocation of more memory LurchTableOrder ordering The type of linking for the items IEqualityComparer <TKey> comparer The element hash generator for keys, or null to use Properties | Improve this Doc View Source Comparer Retrives the key comparer being used by this instance. Declaration public IEqualityComparer<TKey> Comparer { get; } Property Value Type Description IEqualityComparer <TKey> | Improve this Doc View Source Count Gets the number of elements contained in the System.Collections.Generic.ICollection<> . Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Item[TKey] Gets or sets the element with the specified key. Declaration public TValue this[TKey key] { get; set; } Parameters Type Name Description TKey key Property Value Type Description TValue | Improve this Doc View Source Keys Gets an System.Collections.Generic.ICollection<> containing the keys of the System.Collections.Generic.IDictionary<, > . Declaration public LurchTable<TKey, TValue>.KeyCollection Keys { get; } Property Value Type Description LurchTable.KeyCollection <> | Improve this Doc View Source Limit Gets or Sets the record limit allowed in this instance. Declaration public int Limit { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Ordering Retrieves the LurchTableOrder Ordering enumeration this instance was created with. Declaration public LurchTableOrder Ordering { get; } Property Value Type Description LurchTableOrder | Improve this Doc View Source Values Gets an System.Collections.Generic.ICollection<> containing the values in the System.Collections.Generic.IDictionary<, > . Declaration public LurchTable<TKey, TValue>.ValueCollection Values { get; } Property Value Type Description LurchTable.ValueCollection <> Methods | Improve this Doc View Source Add(TKey, TValue) Adds an element with the provided key and value to the System.Collections.Generic.IDictionary<, > . Declaration public void Add(TKey key, TValue value) Parameters Type Name Description TKey key TValue value | Improve this Doc View Source AddOrUpdate(TKey, TValue, KeyValueUpdate<TKey, TValue>) Adds a key/value pair to the System.Collections.Generic.IDictionary<, > if the key does not already exist, or updates a key/value pair if the key already exists. Declaration public TValue AddOrUpdate(TKey key, TValue addValue, KeyValueUpdate<TKey, TValue> fnUpdate) Parameters Type Name Description TKey key TValue addValue KeyValueUpdate <TKey, TValue> fnUpdate Returns Type Description TValue | Improve this Doc View Source AddOrUpdate(TKey, Func<TKey, TValue>, KeyValueUpdate<TKey, TValue>) Adds a key/value pair to the System.Collections.Generic.IDictionary<, > if the key does not already exist, or updates a key/value pair if the key already exists. Declaration public TValue AddOrUpdate(TKey key, Func<TKey, TValue> fnCreate, KeyValueUpdate<TKey, TValue> fnUpdate) Parameters Type Name Description TKey key Func <TKey, TValue> fnCreate KeyValueUpdate <TKey, TValue> fnUpdate Returns Type Description TValue Remarks Adds or modifies an element with the provided key and value. If the key does not exist in the collection, the factory method fnCreate will be called to produce the new value, if the key exists, the converter method fnUpdate will be called to create an updated value. | Improve this Doc View Source AddOrUpdate<T>(TKey, ref T) Add, update, or fetche a key/value pair from the dictionary via an implementation of the CSharpTest.Net.Collections.ICreateOrUpdateValue`2 interface. Declaration public bool AddOrUpdate<T>(TKey key, ref T createOrUpdateValue) where T : ICreateOrUpdateValue<TKey, TValue> Parameters Type Name Description TKey key T createOrUpdateValue Returns Type Description System.Boolean Type Parameters Name Description T | Improve this Doc View Source Clear() Removes all items from the System.Collections.Generic.ICollection<> . Declaration public void Clear() | Improve this Doc View Source ContainsKey(TKey) Determines whether the System.Collections.Generic.IDictionary<, > contains an element with the specified key. Declaration public bool ContainsKey(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source Dequeue() Removes the oldest entry in the collection based on the ordering supplied to the constructor. If an item is not available a busy-wait loop is used to wait for for an item. Declaration public KeyValuePair<TKey, TValue> Dequeue() Returns Type Description KeyValuePair <TKey, TValue> The Key/Value pair removed. | Improve this Doc View Source Dispose() Clears references to all objects and invalidates the collection Declaration public void Dispose() | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the collection. Declaration public LurchTable<TKey, TValue>.Enumerator GetEnumerator() Returns Type Description LurchTable.Enumerator <> | Improve this Doc View Source GetOrAdd(TKey, TValue) Adds a key/value pair to the System.Collections.Generic.IDictionary<, > if the key does not already exist. Declaration public TValue GetOrAdd(TKey key, TValue value) Parameters Type Name Description TKey key The key of the element to add. TValue value The value to be added, if the key does not already exist. Returns Type Description TValue | Improve this Doc View Source GetOrAdd(TKey, Func<TKey, TValue>) Adds a key/value pair to the System.Collections.Generic.IDictionary<, > if the key does not already exist. Declaration public TValue GetOrAdd(TKey key, Func<TKey, TValue> fnCreate) Parameters Type Name Description TKey key The key of the element to add. Func <TKey, TValue> fnCreate Constructs a new value for the key. Returns Type Description TValue | Improve this Doc View Source Initialize() WARNING: not thread-safe, reinitializes all internal structures. Use Clear() for a thread-safe delete all. If you have externally provided exclusive access this method may be used to more efficiently clear the collection. Declaration public void Initialize() | Improve this Doc View Source Peek(out KeyValuePair<TKey, TValue>) Retrieves the oldest entry in the collection based on the ordering supplied to the constructor. Declaration public bool Peek(out KeyValuePair<TKey, TValue> value) Parameters Type Name Description KeyValuePair <TKey, TValue> value Returns Type Description System.Boolean True if the out parameter value was set. | Improve this Doc View Source Remove(TKey) Removes the element with the specified key from the System.Collections.Generic.IDictionary<, > . Declaration public bool Remove(TKey key) Parameters Type Name Description TKey key The key of the element to remove. Returns Type Description System.Boolean true if the element is successfully removed; otherwise, false. This method also returns false if key was not found in the original System.Collections.Generic.IDictionary<, > . | Improve this Doc View Source TryAdd(TKey, TValue) Adds an element with the provided key and value to the System.Collections.Generic.IDictionary<, > . Declaration public bool TryAdd(TKey key, TValue value) Parameters Type Name Description TKey key The object to use as the key of the element to add. TValue value The object to use as the value of the element to add. Returns Type Description System.Boolean | Improve this Doc View Source TryAdd(TKey, Func<TKey, TValue>) Adds an element with the provided key and value to the System.Collections.Generic.IDictionary<, > by calling the provided factory method to construct the value if the key is not already present in the collection. Declaration public bool TryAdd(TKey key, Func<TKey, TValue> fnCreate) Parameters Type Name Description TKey key Func <TKey, TValue> fnCreate Returns Type Description System.Boolean | Improve this Doc View Source TryDequeue(out KeyValuePair<TKey, TValue>) Removes the oldest entry in the collection based on the ordering supplied to the constructor. Declaration public bool TryDequeue(out KeyValuePair<TKey, TValue> value) Parameters Type Name Description KeyValuePair <TKey, TValue> value Returns Type Description System.Boolean False if no item was available | Improve this Doc View Source TryDequeue(Predicate<KeyValuePair<TKey, TValue>>, out KeyValuePair<TKey, TValue>) Removes the oldest entry in the collection based on the ordering supplied to the constructor. Declaration public bool TryDequeue(Predicate<KeyValuePair<TKey, TValue>> predicate, out KeyValuePair<TKey, TValue> value) Parameters Type Name Description Predicate < KeyValuePair <TKey, TValue>> predicate KeyValuePair <TKey, TValue> value Returns Type Description System.Boolean False if no item was available | Improve this Doc View Source TryGetValue(TKey, out TValue) Gets the value associated with the specified key. Declaration public bool TryGetValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean true if the object that implements System.Collections.Generic.IDictionary<, > contains an element with the specified key; otherwise, false. | Improve this Doc View Source TryRemove(TKey, out TValue) Removes the element with the specified key from the System.Collections.Generic.IDictionary<, > . Declaration public bool TryRemove(TKey key, out TValue value) Parameters Type Name Description TKey key The key of the element to remove. TValue value The value that was removed. Returns Type Description System.Boolean true if the element is successfully removed; otherwise, false. This method also returns false if key was not found in the original System.Collections.Generic.IDictionary<, > . | Improve this Doc View Source TryRemove(TKey, KeyValuePredicate<TKey, TValue>) Removes the element with the specified key from the System.Collections.Generic.IDictionary<, > if the fnCondition predicate is null or returns true. Declaration public bool TryRemove(TKey key, KeyValuePredicate<TKey, TValue> fnCondition) Parameters Type Name Description TKey key KeyValuePredicate <TKey, TValue> fnCondition Returns Type Description System.Boolean | Improve this Doc View Source TryRemove<T>(TKey, ref T) Conditionally removes a key/value pair from the dictionary via an implementation of the CSharpTest.Net.Collections.IRemoveValue`2 interface. Declaration public bool TryRemove<T>(TKey key, ref T removeValue) where T : IRemoveValue<TKey, TValue> Parameters Type Name Description TKey key T removeValue Returns Type Description System.Boolean Type Parameters Name Description T | Improve this Doc View Source TryUpdate(TKey, TValue) Updates an element with the provided key to the value if it exists. Declaration public bool TryUpdate(TKey key, TValue value) Parameters Type Name Description TKey key The object to use as the key of the element to update. TValue value The new value for the key if found. Returns Type Description System.Boolean Returns true if the key provided was found and updated to the value. | Improve this Doc View Source TryUpdate(TKey, TValue, TValue) Updates an element with the provided key to the value if it exists. Declaration public bool TryUpdate(TKey key, TValue value, TValue comparisonValue) Parameters Type Name Description TKey key The object to use as the key of the element to update. TValue value The new value for the key if found. TValue comparisonValue The value that is compared to the value of the element with key. Returns Type Description System.Boolean Returns true if the key provided was found and updated to the value. | Improve this Doc View Source TryUpdate(TKey, KeyValueUpdate<TKey, TValue>) Modify the value associated with the result of the provided update method as an atomic operation, Allows for reading/writing a single record within the syncronization lock. Declaration public bool TryUpdate(TKey key, KeyValueUpdate<TKey, TValue> fnUpdate) Parameters Type Name Description TKey key KeyValueUpdate <TKey, TValue> fnUpdate Returns Type Description System.Boolean Events | Improve this Doc View Source ItemAdded Event raised after an item is added to the collection Declaration public event Action<KeyValuePair<TKey, TValue>> ItemAdded Event Type Type Description Action < KeyValuePair <TKey, TValue>> | Improve this Doc View Source ItemRemoved Event raised after an item is removed from the collection Declaration public event Action<KeyValuePair<TKey, TValue>> ItemRemoved Event Type Type Description Action < KeyValuePair <TKey, TValue>> | Improve this Doc View Source ItemUpdated Event raised after an item is updated in the collection Declaration public event LurchTable<TKey, TValue>.ItemUpdatedMethod ItemUpdated Event Type Type Description LurchTable.ItemUpdatedMethod <> Implements IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.ItemUpdatedMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.ItemUpdatedMethod.html",
    "title": "Delegate LurchTable<TKey, TValue>.ItemUpdatedMethod | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate LurchTable<TKey, TValue>.ItemUpdatedMethod Method signature for the ItemUpdated event Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public delegate void ItemUpdatedMethod(KeyValuePair<TKey, TValue> previous, KeyValuePair<TKey, TValue> next); Parameters Type Name Description KeyValuePair <TKey, TValue> previous KeyValuePair <TKey, TValue> next"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.KeyCollection.Enumerator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.KeyCollection.Enumerator.html",
    "title": "Struct LurchTable<TKey, TValue>.KeyCollection.Enumerator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Struct LurchTable<TKey, TValue>.KeyCollection.Enumerator Provides an enumerator that iterates through the collection. Implements IEnumerator <TKey> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public struct Enumerator : IEnumerator<TKey> Properties | Improve this Doc View Source Current Gets the element in the collection at the current position of the enumerator. Declaration public TKey Current { get; } Property Value Type Description TKey Methods | Improve this Doc View Source Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. Declaration public void Dispose() | Improve this Doc View Source MoveNext() Advances the enumerator to the next element of the collection. Declaration public bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Sets the enumerator to its initial position, which is before the first element in the collection. Declaration public void Reset() Implements IEnumerator<>"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.KeyCollection.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.KeyCollection.html",
    "title": "Class LurchTable<TKey, TValue>.KeyCollection | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LurchTable<TKey, TValue>.KeyCollection Provides the collection of Keys for the LurchTable Inheritance System.Object LurchTable<TKey, TValue>.KeyCollection Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class KeyCollection : ICollection<TKey> Properties | Improve this Doc View Source Count Gets the number of elements contained in the System.Collections.Generic.ICollection<> . Declaration public int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Contains(TKey) Determines whether the System.Collections.Generic.ICollection<> contains a specific value. Declaration public bool Contains(TKey item) Parameters Type Name Description TKey item Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(TKey[], Int32) Copies the elements of the System.Collections.Generic.ICollection<> to an System.Array , starting at a particular System.Array index. Declaration public void CopyTo(TKey[] array, int arrayIndex) Parameters Type Name Description TKey[] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the collection. Declaration public LurchTable<TKey, TValue>.KeyCollection.Enumerator GetEnumerator() Returns Type Description LurchTable.KeyCollection.Enumerator <>"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.ValueCollection.Enumerator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.ValueCollection.Enumerator.html",
    "title": "Struct LurchTable<TKey, TValue>.ValueCollection.Enumerator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Struct LurchTable<TKey, TValue>.ValueCollection.Enumerator Provides an enumerator that iterates through the collection. Implements IEnumerator <TValue> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public struct Enumerator : IEnumerator<TValue> Properties | Improve this Doc View Source Current Gets the element in the collection at the current position of the enumerator. Declaration public TValue Current { get; } Property Value Type Description TValue Methods | Improve this Doc View Source Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. Declaration public void Dispose() | Improve this Doc View Source MoveNext() Advances the enumerator to the next element of the collection. Declaration public bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Sets the enumerator to its initial position, which is before the first element in the collection. Declaration public void Reset() Implements IEnumerator<>"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.ValueCollection.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.ValueCollection.html",
    "title": "Class LurchTable<TKey, TValue>.ValueCollection | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LurchTable<TKey, TValue>.ValueCollection Provides the collection of Values for the LurchTable Inheritance System.Object LurchTable<TKey, TValue>.ValueCollection Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class ValueCollection : ICollection<TValue> Properties | Improve this Doc View Source Count Gets the number of elements contained in the System.Collections.Generic.ICollection<> . Declaration public int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Contains(TValue) Determines whether the System.Collections.Generic.ICollection<> contains a specific value. Declaration public bool Contains(TValue value) Parameters Type Name Description TValue value Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(TValue[], Int32) Copies the elements of the System.Collections.Generic.ICollection<> to an System.Array , starting at a particular System.Array index. Declaration public void CopyTo(TValue[] array, int arrayIndex) Parameters Type Name Description TValue[] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the collection. Declaration public LurchTable<TKey, TValue>.ValueCollection.Enumerator GetEnumerator() Returns Type Description LurchTable.ValueCollection.Enumerator <>"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTableCorruptionException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTableCorruptionException.html",
    "title": "Class LurchTableCorruptionException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LurchTableCorruptionException Exception class: LurchTableCorruptionException The LurchTable internal datastructure appears to be corrupted. Inheritance System.Object LurchTableCorruptionException Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class LurchTableCorruptionException : Exception Constructors | Improve this Doc View Source LurchTableCorruptionException() The LurchTable internal datastructure appears to be corrupted. Declaration public LurchTableCorruptionException() | Improve this Doc View Source LurchTableCorruptionException(System.Exception) The LurchTable internal datastructure appears to be corrupted. Declaration public LurchTableCorruptionException(System.Exception innerException) Parameters Type Name Description System.Exception innerException | Improve this Doc View Source LurchTableCorruptionException(System.Exception, Int32, String) Constructs the exception from an hresult and message bypassing the message formatting Declaration protected LurchTableCorruptionException(System.Exception innerException, int hResult, string message) Parameters Type Name Description System.Exception innerException System.Int32 hResult System.String message | Improve this Doc View Source LurchTableCorruptionException(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Serialization constructor Declaration protected LurchTableCorruptionException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info System.Runtime.Serialization.StreamingContext context Methods | Improve this Doc View Source Assert(Boolean) if(condition == false) throws The LurchTable internal datastructure appears to be corrupted. Declaration public static void Assert(bool condition) Parameters Type Name Description System.Boolean condition"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTableOrder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTableOrder.html",
    "title": "Enum LurchTableOrder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum LurchTableOrder Defines if and how items added to a LurchTable are linked together, this defines the value returned from Peek/Dequeue as the oldest entry of the specified operation. Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public enum LurchTableOrder : int Fields Name Description Access Linked by most recently inserted, updated, or fetched Insertion Linked in insertion order Modified Linked by most recently inserted or updated None No linking"
  },
  "api/Lucene.Net/Lucene.Net.Support.Number.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Number.html",
    "title": "Class Number | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Number A simple class for number conversions. Inheritance System.Object Number Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class Number : object Fields | Improve this Doc View Source MAX_RADIX Max radix value. Declaration public const int MAX_RADIX = null Field Value Type Description System.Int32 | Improve this Doc View Source MIN_RADIX Min radix value. Declaration public const int MIN_RADIX = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source Parse(System.String, Int32) Parses a number in the specified radix. Declaration public static long Parse(System.String s, int radix) Parameters Type Name Description System.String s An input System.String. System.Int32 radix A radix. Returns Type Description System.Int64 The parsed number in the specified radix. | Improve this Doc View Source ToString(Single) Converts a number to System.String. Declaration public static System.String ToString(float f) Parameters Type Name Description System.Single f Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Support.NumberFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.NumberFormat.html",
    "title": "Class NumberFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumberFormat Inheritance System.Object NumberFormat Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class NumberFormat : object Constructors | Improve this Doc View Source NumberFormat(CultureInfo) Declaration public NumberFormat(CultureInfo locale) Parameters Type Name Description CultureInfo locale Fields | Improve this Doc View Source locale Declaration protected readonly CultureInfo locale Field Value Type Description CultureInfo Methods | Improve this Doc View Source Format(Double) Declaration public virtual string Format(double number) Parameters Type Name Description System.Double number Returns Type Description System.String | Improve this Doc View Source Format(Int64) Declaration public virtual string Format(long number) Parameters Type Name Description System.Int64 number Returns Type Description System.String | Improve this Doc View Source Format(Object) Declaration public virtual string Format(object number) Parameters Type Name Description System.Object number Returns Type Description System.String | Improve this Doc View Source GetNumberFormat() Declaration protected virtual string GetNumberFormat() Returns Type Description System.String | Improve this Doc View Source Parse(String) Declaration public virtual object Parse(string source) Parameters Type Name Description System.String source Returns Type Description System.Object | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Support.PriorityQueue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.PriorityQueue-1.html",
    "title": "Class PriorityQueue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PriorityQueue<T> A PriorityQueue<T> holds elements on a priority heap, which orders the elements according to their natural order or according to the comparator specified at construction time. If the queue uses natural ordering, only elements that are comparable are permitted to be inserted into the queue. The least element of the specified ordering is stored at the head of the queue and the greatest element is stored at the tail of the queue. A PriorityQueue<T> is not synchronized. Inheritance System.Object PriorityQueue<T> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class PriorityQueue<T> : ICollection<T> where T : class Type Parameters Name Description T Type of elements Constructors | Improve this Doc View Source PriorityQueue() Constructs a priority queue with an initial capacity of 11 and natural ordering. Declaration public PriorityQueue() | Improve this Doc View Source PriorityQueue(ICollection<T>) Creates a PriorityQueue<T> containing the elements in the specified collection. If the specified collection is an instance of a , TreeSet<T> , or is another PriorityQueue<T> , this priority queue will be ordered according to the same ordering. Otherwise, this priority queue will be ordered according to the natural ordering of its elements. Declaration public PriorityQueue(ICollection<T> collection) Parameters Type Name Description ICollection <T> collection collection to be inserted into priority queue | Improve this Doc View Source PriorityQueue(IComparer<T>) Constructs a priority queue with the specified capacity and comparer. Declaration public PriorityQueue(IComparer<T> comparer) Parameters Type Name Description IComparer <T> comparer The that will be used to order this priority queue. If null , the natural ordering of the elements will be used. | Improve this Doc View Source PriorityQueue(PriorityQueue<T>) Creates a PriorityQueue<T> containing the elements in the specified priority queue. This priority queue will be ordered according to the same ordering as the given priority queue. Declaration public PriorityQueue(PriorityQueue<T> collection) Parameters Type Name Description PriorityQueue <T> collection the priority queue whose elements are to be placed into this priority queue | Improve this Doc View Source PriorityQueue(TreeSet<T>) Creates a PriorityQueue<T> containing the elements in the specified TreeSet<T> . This priority queue will be ordered according to the same ordering as the given TreeSet<T> . The constructed priority queue has the initial capacity of 110% of the size of the sorted set. The priority queue will have the same comparator as the sorted set. Declaration public PriorityQueue(TreeSet<T> collection) Parameters Type Name Description TreeSet <T> collection the sorted set whose elements are to be placed into this priority queue | Improve this Doc View Source PriorityQueue(SortedSet<T>) Creates a PriorityQueue<T> containing the elements in the specified . This priority queue will be ordered according to the same ordering as the given . The constructed priority queue has the initial capacity of 110% of the size of the sorted set. The priority queue will have the same comparator as the sorted set. Declaration public PriorityQueue(SortedSet<T> collection) Parameters Type Name Description SortedSet <T> collection the sorted set whose elements are to be placed into this priority queue | Improve this Doc View Source PriorityQueue(Int32) Constructs a priority queue with the specified capacity and natural ordering. Declaration public PriorityQueue(int initialCapacity) Parameters Type Name Description System.Int32 initialCapacity initial capacity | Improve this Doc View Source PriorityQueue(Int32, IComparer<T>) Creates a PriorityQueue<T> with the specified initial capacity that orders its elements according to the specified comparer. Declaration public PriorityQueue(int initialCapacity, IComparer<T> comparer) Parameters Type Name Description System.Int32 initialCapacity the initial capacity for this priority queue IComparer <T> comparer The that will be used to order this priority queue. If null , the natural ordering of the elements will be used. Properties | Improve this Doc View Source Comparer Gets the used to order the elements in this queue, or Lucene.Net.Util.ArrayUtil.NaturalComparer`1 if this queue is sorted according to the natural ordering of its elements. Declaration public virtual IComparer<T> Comparer { get; } Property Value Type Description IComparer <T> | Improve this Doc View Source Count Gets the size of the priority queue. If the size of the queue is greater than the , then it returns . Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Gets a value indicating whether the collection is read-only. Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean Remarks For priority queue this property returns false . Methods | Improve this Doc View Source Add(T) Adds the specified object to the priority queue. Declaration public virtual void Add(T item) Parameters Type Name Description T item the object to be added. | Improve this Doc View Source AddAll(ICollection<T>) Declaration public virtual bool AddAll(ICollection<T> collection) Parameters Type Name Description ICollection <T> collection Returns Type Description System.Boolean | Improve this Doc View Source Clear() Removes all of the elements from this priority queue. Declaration public virtual void Clear() | Improve this Doc View Source Contains(T) Returns true if this queue contains the specified element. More formally, returns true if and only if this queue contains at least one element item such that o.Equals(item) . Declaration public virtual bool Contains(T item) Parameters Type Name Description T item The object to locate in the priority queue Returns Type Description System.Boolean true if item is found in the priority queue; otherwise, false. | Improve this Doc View Source CopyTo(T[], Int32) Copies the elements of the priority queue to an Array, starting at a particular Array index. Declaration public virtual void CopyTo(T[] array, int arrayIndex) Parameters Type Name Description T[] array The one-dimensional Array that is the destination of the elements copied from the priority queue. The Array must have zero-based indexing. System.Int32 arrayIndex The zero-based index in array at which copying begins. Remarks It is not guaranteed that items will be copied in the sorted order. | Improve this Doc View Source Element() Retrieves, but does not remove, the head of this queue. This method differs from Peek() only in that it throws an exception if this queue is empty. This implementation returns the result of Peek() unless the queue is empty. Declaration public virtual T Element() Returns Type Description T the head of this queue | Improve this Doc View Source GetEnumerator() Gets the enumerator of the priority queue, which will not return elements in any specified ordering. Declaration public virtual IEnumerator<T> GetEnumerator() Returns Type Description IEnumerator <T> The enumerator of the priority queue. Remarks Returned enumerator does not iterate elements in sorted order. | Improve this Doc View Source Offer(T) Inserts the specified element into this priority queue. Declaration public virtual bool Offer(T item) Parameters Type Name Description T item the element to add to the priority queue. Returns Type Description System.Boolean always true | Improve this Doc View Source Peek() Gets but does not remove the head of the queue. Declaration public virtual T Peek() Returns Type Description T the head of the queue or null if the queue is empty. | Improve this Doc View Source Poll() Gets and removes the head of the queue. Declaration public virtual T Poll() Returns Type Description T the head of the queue or null if the queue is empty. | Improve this Doc View Source Remove() Retrieves and removes the head of this queue. This method differs from Poll() only in that it throws an exception if this queue is empty. This implementation returns the result of Poll() unless the queue is empty. Declaration public virtual T Remove() Returns Type Description T the head of this queue | Improve this Doc View Source Remove(T) Removes the specified object from the priority queue. Declaration public virtual bool Remove(T item) Parameters Type Name Description T item the object to be removed. Returns Type Description System.Boolean true if the object was in the priority queue, false if the object"
  },
  "api/Lucene.Net/Lucene.Net.Support.RectangularArrays.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.RectangularArrays.html",
    "title": "Class RectangularArrays | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RectangularArrays Inheritance System.Object RectangularArrays Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class RectangularArrays : object Methods | Improve this Doc View Source ReturnRectangularArray<T>(Int32, Int32) Declaration public static T[][] ReturnRectangularArray<T>(int size1, int size2) Parameters Type Name Description System.Int32 size1 System.Int32 size2 Returns Type Description T[][] Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.SetExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.SetExtensions.html",
    "title": "Class SetExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SetExtensions Inheritance System.Object SetExtensions Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class SetExtensions : object Methods | Improve this Doc View Source RemoveAll<T>(ICollection<T>, IEnumerable<T>) Declaration public static void RemoveAll<T>(this ICollection<T> theSet, IEnumerable<T> removeList) Parameters Type Name Description ICollection <T> theSet IEnumerable <T> removeList Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.SignedZeroComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.SignedZeroComparer.html",
    "title": "Class SignedZeroComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SignedZeroComparer LUCENENET specific comparer to handle the special case of comparing negative zero with positive zero. For IEEE floating-point numbers, there is a distinction of negative and positive zero. Reference: http://stackoverflow.com/a/3139636 Inheritance System.Object SignedZeroComparer Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class SignedZeroComparer : IComparer<double> Methods | Improve this Doc View Source Compare(Double, Double) Declaration public int Compare(double v1, double v2) Parameters Type Name Description System.Double v1 System.Double v2 Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Support.StringBuilderCharSequenceWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.StringBuilderCharSequenceWrapper.html",
    "title": "Class StringBuilderCharSequenceWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringBuilderCharSequenceWrapper An adapter for that implements ICharSequence Inheritance System.Object StringBuilderCharSequenceWrapper Implements ICharSequence Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class StringBuilderCharSequenceWrapper : object, ICharSequence Constructors | Improve this Doc View Source StringBuilderCharSequenceWrapper(StringBuilder) Declaration public StringBuilderCharSequenceWrapper(StringBuilder wrappedValue) Parameters Type Name Description StringBuilder wrappedValue Properties | Improve this Doc View Source Item[Int32] Declaration public char this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source SubSequence(Int32, Int32) Declaration public ICharSequence SubSequence(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Returns Type Description ICharSequence | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Implements ICharSequence"
  },
  "api/Lucene.Net/Lucene.Net.Support.StringBuilderExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.StringBuilderExtensions.html",
    "title": "Class StringBuilderExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringBuilderExtensions Inheritance System.Object StringBuilderExtensions Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class StringBuilderExtensions : object Methods | Improve this Doc View Source AppendCodePoint(StringBuilder, Int32) Appends the string representation of the codePoint argument to this sequence. The argument is appended to the contents of this sequence. The length of this sequence increases by CharCount(Int32) . The overall effect is exactly as if the argument were converted to a array by the method ToChars(Int32) and the character in that array were then appended to this . Declaration public static StringBuilder AppendCodePoint(this StringBuilder text, int codePoint) Parameters Type Name Description StringBuilder text This . System.Int32 codePoint a Unicode code point Returns Type Description StringBuilder a reference to this object. | Improve this Doc View Source CodePointAt(StringBuilder, Int32) Returns the character (Unicode code point) at the specified index. The index refers to char values (Unicode code units) and ranges from 0 to Length - 1. If the char value specified at the given index is in the high-surrogate range, the following index is less than the length of this sequence, and the char value at the following index is in the low-surrogate range, then the supplementary code point corresponding to this surrogate pair is returned. Otherwise, the char value at the given index is returned. Declaration public static int CodePointAt(this StringBuilder text, int index) Parameters Type Name Description StringBuilder text this System.Int32 index the index to the char values Returns Type Description System.Int32 the code point value of the character at the index | Improve this Doc View Source CodePointCount(StringBuilder, Int32, Int32) Returns the number of Unicode code points in the specified text range of this . The text range begins at the specified beginIndex and extends to the at index endIndex - 1 . Thus the length (in s) of the text range is endIndex-beginIndex . Unpaired surrogates within this sequence count as one code point each. Declaration public static int CodePointCount(this StringBuilder text, int beginIndex, int endIndex) Parameters Type Name Description StringBuilder text this System.Int32 beginIndex the index to the first of the text range. System.Int32 endIndex the index after the last of the text range. Returns Type Description System.Int32 the number of Unicode code points in the specified text range. | Improve this Doc View Source GetChars(StringBuilder) Copies the array from the into a new array and returns it. Declaration public static char[] GetChars(this StringBuilder text) Parameters Type Name Description StringBuilder text this Returns Type Description System.Char [] | Improve this Doc View Source IndexOf(StringBuilder, String) Searches for the first index of the specified character. The search for the character starts at the beginning and moves towards the end. Declaration public static int IndexOf(this StringBuilder text, string value) Parameters Type Name Description StringBuilder text This . System.String value The string to find. Returns Type Description System.Int32 The index of the specified character, or -1 if the character isn't found. | Improve this Doc View Source IndexOf(StringBuilder, String, Int32) Searches for the index of the specified character. The search for the character starts at the specified offset and moves towards the end. Declaration public static int IndexOf(this StringBuilder text, string value, int startIndex) Parameters Type Name Description StringBuilder text This . System.String value The string to find. System.Int32 startIndex The starting offset. Returns Type Description System.Int32 The index of the specified character, or -1 if the character isn't found. | Improve this Doc View Source Reverse(StringBuilder) Causes this character sequence to be replaced by the reverse of the sequence. If there are any surrogate pairs included in the sequence, these are treated as single characters for the reverse operation. Thus, the order of the high-low surrogates is never reversed. Let n be the character length of this character sequence (not the length in values) just prior to execution of the Reverse(StringBuilder) method. Then the character at index k in the new character sequence is equal to the character at index n-k-1 in the old character sequence. Note that the reverse operation may result in producing surrogate pairs that were unpaired low-surrogates and high-surrogates before the operation. For example, reversing \"\\uDC00\\uD800\" produces \"\\uD800\\uDC00\" which is a valid surrogate pair. Declaration public static StringBuilder Reverse(this StringBuilder text) Parameters Type Name Description StringBuilder text this Returns Type Description StringBuilder a reference to this . | Improve this Doc View Source ToCharSequence(StringBuilder) Convenience method to wrap a string in a StringBuilderCharSequenceWrapper so a can be used as ICharSequence in .NET. Declaration public static ICharSequence ToCharSequence(this StringBuilder text) Parameters Type Name Description StringBuilder text Returns Type Description ICharSequence"
  },
  "api/Lucene.Net/Lucene.Net.Support.StringCharSequenceWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.StringCharSequenceWrapper.html",
    "title": "Class StringCharSequenceWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringCharSequenceWrapper An adapter for that implements ICharSequence Inheritance System.Object StringCharSequenceWrapper Implements ICharSequence Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class StringCharSequenceWrapper : object, ICharSequence Constructors | Improve this Doc View Source StringCharSequenceWrapper(String) Declaration public StringCharSequenceWrapper(string wrappedValue) Parameters Type Name Description System.String wrappedValue Fields | Improve this Doc View Source Empty Declaration public static readonly StringCharSequenceWrapper Empty Field Value Type Description StringCharSequenceWrapper Properties | Improve this Doc View Source Item[Int32] Declaration public char this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source SubSequence(Int32, Int32) Declaration public ICharSequence SubSequence(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Returns Type Description ICharSequence | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Implements ICharSequence"
  },
  "api/Lucene.Net/Lucene.Net.Support.StringExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.StringExtensions.html",
    "title": "Class StringExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringExtensions Inheritance System.Object StringExtensions Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class StringExtensions : object Methods | Improve this Doc View Source CodePointAt(String, Int32) Declaration public static int CodePointAt(this string str, int index) Parameters Type Name Description System.String str System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source CodePointCount(String, Int32, Int32) Returns the number of Unicode code points in the specified text range of this . The text range begins at the specified beginIndex and extends to the at index endIndex - 1 . Thus the length (in s) of the text range is endIndex-beginIndex . Unpaired surrogates within the text range count as one code point each. Declaration public static int CodePointCount(this string str, int beginIndex, int endIndex) Parameters Type Name Description System.String str System.Int32 beginIndex the index to the first of the text range. System.Int32 endIndex the index after the last of the text range. Returns Type Description System.Int32 the number of Unicode code points in the specified text range | Improve this Doc View Source CompareToOrdinal(String, String) This method mimics the Java String.compareTo(String) method in that it Compares the strings using lexographic sorting rules Performs a culture-insensitive comparison This method is a convenience to replace the .NET CompareTo method on all strings, provided the logic does not expect specific values but is simply comparing them with > or < . Declaration public static int CompareToOrdinal(this string str, string value) Parameters Type Name Description System.String str System.String value The string to compare with. Returns Type Description System.Int32 An integer that indicates the lexical relationship between the two comparands. Less than zero indicates the comparison value is greater than the current string. Zero indicates the strings are equal. Greater than zero indicates the comparison value is less than the current string. | Improve this Doc View Source GetBytes(String, Encoding) Declaration public static byte[] GetBytes(this string str, Encoding enc) Parameters Type Name Description System.String str Encoding enc Returns Type Description System.Byte [] | Improve this Doc View Source IndexOf(String, Int32) Returns the index within this string of the first occurrence of the specified codePoint . Declaration public static int IndexOf(this string str, int codePoint) Parameters Type Name Description System.String str this string System.Int32 codePoint a codePoint representing a single character or surrogate pair Returns Type Description System.Int32 the index of the first occurrence of the character (or surrogate pair) in the string, or -1 if the character (or surrogate pair) doesn't occur. | Improve this Doc View Source Intern(String) Searches an internal table of strings for a string equal to this string. If the string is not in the table, it is added. Returns the string contained in the table which is equal to this string. The same string object is always returned for strings which are equal. Declaration public static string Intern(this string s) Parameters Type Name Description System.String s Returns Type Description System.String The interned string equal to this string. | Improve this Doc View Source OffsetByCodePoints(String, Int32, Int32) Declaration public static int OffsetByCodePoints(this string seq, int index, int codePointOffset) Parameters Type Name Description System.String seq System.Int32 index System.Int32 codePointOffset Returns Type Description System.Int32 | Improve this Doc View Source ToBytesRefArray(String, Encoding) Declaration public static BytesRef ToBytesRefArray(this string str, Encoding enc) Parameters Type Name Description System.String str Encoding enc Returns Type Description BytesRef | Improve this Doc View Source ToCharSequence(String) Convenience method to wrap a string in a StringCharSequenceWrapper so a can be used as ICharSequence in .NET. Declaration public static ICharSequence ToCharSequence(this string str) Parameters Type Name Description System.String str Returns Type Description ICharSequence | Improve this Doc View Source TrimEnd(String[]) Removes null or empty elements from the end of a string array. Declaration public static string[] TrimEnd(this string[] input) Parameters Type Name Description System.String [] input This string array. Returns Type Description System.String [] The array with any null or empty elements removed from the end."
  },
  "api/Lucene.Net/Lucene.Net.Support.SystemConsole.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.SystemConsole.html",
    "title": "Class SystemConsole | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SystemConsole Mimics , but allows for swapping the of Out and Error , or the of In with user-defined implementations. Inheritance System.Object SystemConsole Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class SystemConsole : object Properties | Improve this Doc View Source Error Declaration public static TextWriter Error { get; set; } Property Value Type Description TextWriter | Improve this Doc View Source In Declaration public static TextReader In { get; set; } Property Value Type Description TextReader | Improve this Doc View Source Out Declaration public static TextWriter Out { get; set; } Property Value Type Description TextWriter Methods | Improve this Doc View Source Write(Boolean) Declaration public static void Write(bool value) Parameters Type Name Description System.Boolean value | Improve this Doc View Source Write(Char) Declaration public static void Write(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source Write(Char[]) Declaration public static void Write(char[] buffer) Parameters Type Name Description System.Char [] buffer | Improve this Doc View Source Write(Char[], Int32, Int32) Declaration public static void Write(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count | Improve this Doc View Source Write(Decimal) Declaration public static void Write(decimal value) Parameters Type Name Description System.Decimal value | Improve this Doc View Source Write(Double) Declaration public static void Write(double value) Parameters Type Name Description System.Double value | Improve this Doc View Source Write(Int32) Declaration public static void Write(int value) Parameters Type Name Description System.Int32 value | Improve this Doc View Source Write(Int64) Declaration public static void Write(long value) Parameters Type Name Description System.Int64 value | Improve this Doc View Source Write(Object) Declaration public static void Write(object value) Parameters Type Name Description System.Object value | Improve this Doc View Source Write(Single) Declaration public static void Write(float value) Parameters Type Name Description System.Single value | Improve this Doc View Source Write(String) Declaration public static void Write(string value) Parameters Type Name Description System.String value | Improve this Doc View Source Write(String, Object) Declaration public static void Write(string format, object arg0) Parameters Type Name Description System.String format System.Object arg0 | Improve this Doc View Source Write(String, Object, Object) Declaration public static void Write(string format, object arg0, object arg1) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 | Improve this Doc View Source Write(String, Object, Object, Object) Declaration public static void Write(string format, object arg0, object arg1, object arg2) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 System.Object arg2 | Improve this Doc View Source Write(String, Object[]) Declaration public static void Write(string format, params object[] arg) Parameters Type Name Description System.String format System.Object [] arg | Improve this Doc View Source Write(UInt32) Declaration public static void Write(uint value) Parameters Type Name Description System.UInt32 value | Improve this Doc View Source Write(UInt64) Declaration public static void Write(ulong value) Parameters Type Name Description System.UInt64 value | Improve this Doc View Source WriteLine() Declaration public static void WriteLine() | Improve this Doc View Source WriteLine(Boolean) Declaration public static void WriteLine(bool value) Parameters Type Name Description System.Boolean value | Improve this Doc View Source WriteLine(Char) Declaration public static void WriteLine(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source WriteLine(Char[]) Declaration public static void WriteLine(char[] buffer) Parameters Type Name Description System.Char [] buffer | Improve this Doc View Source WriteLine(Char[], Int32, Int32) Declaration public static void WriteLine(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count | Improve this Doc View Source WriteLine(Decimal) Declaration public static void WriteLine(decimal value) Parameters Type Name Description System.Decimal value | Improve this Doc View Source WriteLine(Double) Declaration public static void WriteLine(double value) Parameters Type Name Description System.Double value | Improve this Doc View Source WriteLine(Int32) Declaration public static void WriteLine(int value) Parameters Type Name Description System.Int32 value | Improve this Doc View Source WriteLine(Int64) Declaration public static void WriteLine(long value) Parameters Type Name Description System.Int64 value | Improve this Doc View Source WriteLine(Object) Declaration public static void WriteLine(object value) Parameters Type Name Description System.Object value | Improve this Doc View Source WriteLine(Single) Declaration public static void WriteLine(float value) Parameters Type Name Description System.Single value | Improve this Doc View Source WriteLine(String) Declaration public static void WriteLine(string value) Parameters Type Name Description System.String value | Improve this Doc View Source WriteLine(String, Object) Declaration public static void WriteLine(string format, object arg0) Parameters Type Name Description System.String format System.Object arg0 | Improve this Doc View Source WriteLine(String, Object, Object) Declaration public static void WriteLine(string format, object arg0, object arg1) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 | Improve this Doc View Source WriteLine(String, Object, Object, Object) Declaration public static void WriteLine(string format, object arg0, object arg1, object arg2) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 System.Object arg2 | Improve this Doc View Source WriteLine(String, Object[]) Declaration public static void WriteLine(string format, params object[] arg) Parameters Type Name Description System.String format System.Object [] arg | Improve this Doc View Source WriteLine(UInt32) Declaration public static void WriteLine(uint value) Parameters Type Name Description System.UInt32 value | Improve this Doc View Source WriteLine(UInt64) Declaration public static void WriteLine(ulong value) Parameters Type Name Description System.UInt64 value"
  },
  "api/Lucene.Net/Lucene.Net.Support.SystemProperties.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.SystemProperties.html",
    "title": "Class SystemProperties | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SystemProperties Helper for environment variables. This class helps to convert the environment variables to int or bool data types and also silently handles read permission errors. For instructions how to set environment variables for your OS, see https://www.schrodinger.com/kb/1842 . Note that if you want to load any of these settings for your application from a configuration file, it is recommended your application load them at startup and call SetProperty(String, String) to set them. Set the environment variable lucene.ignoreSecurityExceptions to false to change the read behavior of these methods to throw the underlying exception instead of returning the default value. Inheritance System.Object SystemProperties Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class SystemProperties : object Methods | Improve this Doc View Source GetProperty(String) Retrieves the value of an environment variable from the current process. Declaration public static string GetProperty(string key) Parameters Type Name Description System.String key The name of the environment variable. Returns Type Description System.String The environment variable value. | Improve this Doc View Source GetProperty(String, String) Retrieves the value of an environment variable from the current process, with a default value if it doens't exist or the caller doesn't have permission to read the value. Declaration public static string GetProperty(string key, string defaultValue) Parameters Type Name Description System.String key The name of the environment variable. System.String defaultValue The value to use if the environment variable does not exist or the caller doesn't have permission to read the value. Returns Type Description System.String The environment variable value. | Improve this Doc View Source GetPropertyAsBoolean(String) Retrieves the value of an environment variable from the current process as . If the value cannot be cast to , returns false . Declaration public static bool GetPropertyAsBoolean(string key) Parameters Type Name Description System.String key The name of the environment variable. Returns Type Description System.Boolean The environment variable value. | Improve this Doc View Source GetPropertyAsBoolean(String, Boolean) Retrieves the value of an environment variable from the current process as , with a default value if it doens't exist, the caller doesn't have permission to read the value, or the value cannot be cast to a . Declaration public static bool GetPropertyAsBoolean(string key, bool defaultValue) Parameters Type Name Description System.String key The name of the environment variable. System.Boolean defaultValue The value to use if the environment variable does not exist, the caller doesn't have permission to read the value, or the value cannot be cast to . Returns Type Description System.Boolean The environment variable value. | Improve this Doc View Source GetPropertyAsInt32(String) Retrieves the value of an environment variable from the current process as . If the value cannot be cast to , returns 0 . Declaration public static int GetPropertyAsInt32(string key) Parameters Type Name Description System.String key The name of the environment variable. Returns Type Description System.Int32 The environment variable value. | Improve this Doc View Source GetPropertyAsInt32(String, Int32) Retrieves the value of an environment variable from the current process as , with a default value if it doens't exist, the caller doesn't have permission to read the value, or the value cannot be cast to a . Declaration public static int GetPropertyAsInt32(string key, int defaultValue) Parameters Type Name Description System.String key The name of the environment variable. System.Int32 defaultValue The value to use if the environment variable does not exist, the caller doesn't have permission to read the value, or the value cannot be cast to . Returns Type Description System.Int32 The environment variable value. | Improve this Doc View Source SetProperty(String, String) Creates, modifies, or deletes an environment variable stored in the current process. Declaration public static void SetProperty(string key, string value) Parameters Type Name Description System.String key The name of the environment variable. System.String value The new environment variable value."
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.DisposableThreadLocalProfiler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.DisposableThreadLocalProfiler.html",
    "title": "Class DisposableThreadLocalProfiler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DisposableThreadLocalProfiler For Debuging purposes. Inheritance System.Object DisposableThreadLocalProfiler Namespace : Lucene.Net.Support.Threading Assembly : Lucene.Net.dll Syntax public class DisposableThreadLocalProfiler : object Fields | Improve this Doc View Source Instances Declaration public static System.Collections.Generic.List<WeakReference> Instances Field Value Type Description System.Collections.Generic.List < WeakReference > Properties | Improve this Doc View Source EnableIDisposableThreadLocalProfiler Declaration public static bool EnableIDisposableThreadLocalProfiler { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.html",
    "title": "Namespace Lucene.Net.Support.Threading | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Support.Threading Classes DisposableThreadLocalProfiler For Debuging purposes. LimitedConcurrencyLevelTaskScheduler Provides a task scheduler that ensures a maximum concurrency level while running on top of the thread pool. Source: https://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler(v=vs.110).aspx ReentrantLock TaskSchedulerCompletionService<T> ThreadLock Abstract base class that provides a synchronization interface for derived lock types Interfaces ICompletionService<V>"
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.ICompletionService-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.ICompletionService-1.html",
    "title": "Interface ICompletionService<V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICompletionService<V> Namespace : Lucene.Net.Support.Threading Assembly : Lucene.Net.dll Syntax public interface ICompletionService<V> Type Parameters Name Description V Methods | Improve this Doc View Source Submit(ICallable<V>) Declaration Task<V> Submit(ICallable<V> task) Parameters Type Name Description ICallable <V> task Returns Type Description Task <V> | Improve this Doc View Source Take() Declaration Task<V> Take() Returns Type Description Task <V>"
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.LimitedConcurrencyLevelTaskScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.LimitedConcurrencyLevelTaskScheduler.html",
    "title": "Class LimitedConcurrencyLevelTaskScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LimitedConcurrencyLevelTaskScheduler Provides a task scheduler that ensures a maximum concurrency level while running on top of the thread pool. Source: https://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler(v=vs.110).aspx Inheritance System.Object LimitedConcurrencyLevelTaskScheduler Namespace : Lucene.Net.Support.Threading Assembly : Lucene.Net.dll Syntax public class LimitedConcurrencyLevelTaskScheduler : TaskScheduler Constructors | Improve this Doc View Source LimitedConcurrencyLevelTaskScheduler(Int32) Declaration public LimitedConcurrencyLevelTaskScheduler(int maxDegreeOfParallelism) Parameters Type Name Description System.Int32 maxDegreeOfParallelism Properties | Improve this Doc View Source MaximumConcurrencyLevel Declaration public override sealed int MaximumConcurrencyLevel { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetScheduledTasks() Declaration protected override sealed IEnumerable<Task> GetScheduledTasks() Returns Type Description IEnumerable < Task > | Improve this Doc View Source QueueTask(Task) Declaration protected override sealed void QueueTask(Task task) Parameters Type Name Description Task task | Improve this Doc View Source TryDequeue(Task) Declaration protected override sealed bool TryDequeue(Task task) Parameters Type Name Description Task task Returns Type Description System.Boolean | Improve this Doc View Source TryExecuteTaskInline(Task, Boolean) Declaration protected override sealed bool TryExecuteTaskInline(Task task, bool taskWasPreviouslyQueued) Parameters Type Name Description Task task System.Boolean taskWasPreviouslyQueued Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.ReentrantLock.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.ReentrantLock.html",
    "title": "Class ReentrantLock | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReentrantLock Inheritance System.Object ReentrantLock Namespace : Lucene.Net.Support.Threading Assembly : Lucene.Net.dll Syntax public class ReentrantLock : object Properties | Improve this Doc View Source HasQueuedThreads Declaration public bool HasQueuedThreads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source QueueLength Declaration public int QueueLength { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Lock() Declaration public void Lock() | Improve this Doc View Source TryLock() Declaration public bool TryLock() Returns Type Description System.Boolean | Improve this Doc View Source Unlock() Declaration public void Unlock()"
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.TaskSchedulerCompletionService-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.TaskSchedulerCompletionService-1.html",
    "title": "Class TaskSchedulerCompletionService<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaskSchedulerCompletionService<T> Inheritance System.Object TaskSchedulerCompletionService<T> Implements ICompletionService <T> Namespace : Lucene.Net.Support.Threading Assembly : Lucene.Net.dll Syntax public class TaskSchedulerCompletionService<T> : object, ICompletionService<T> Type Parameters Name Description T Constructors | Improve this Doc View Source TaskSchedulerCompletionService(TaskScheduler) Declaration public TaskSchedulerCompletionService(TaskScheduler scheduler) Parameters Type Name Description TaskScheduler scheduler Methods | Improve this Doc View Source Submit(ICallable<T>) Declaration public Task<T> Submit(ICallable<T> task) Parameters Type Name Description ICallable <T> task Returns Type Description Task <T> | Improve this Doc View Source Take() Declaration public Task<T> Take() Returns Type Description Task <T> Implements ICompletionService<V>"
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.ThreadLock.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.ThreadLock.html",
    "title": "Class ThreadLock | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThreadLock Abstract base class that provides a synchronization interface for derived lock types Inheritance System.Object ThreadLock Namespace : Lucene.Net.Support.Threading Assembly : Lucene.Net.dll Syntax public abstract class ThreadLock : object Properties | Improve this Doc View Source MonitorLock Wrapper class for the Monitor Enter/Exit methods using the ThreadLock interface Declaration public static ThreadLock MonitorLock { get; } Property Value Type Description ThreadLock | Improve this Doc View Source NullLock A ThreadLock class that actually does no locking Used in ParallelMultiSearcher/MultiSearcher Declaration public static ThreadLock NullLock { get; } Property Value Type Description ThreadLock Methods | Improve this Doc View Source Enter(Object) Declaration public abstract void Enter(object obj) Parameters Type Name Description System.Object obj | Improve this Doc View Source Exit(Object) Declaration public abstract void Exit(object obj) Parameters Type Name Description System.Object obj"
  },
  "api/Lucene.Net/Lucene.Net.Support.Time.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Time.html",
    "title": "Class Time | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Time Inheritance System.Object Time Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class Time : object Fields | Improve this Doc View Source MILLISECONDS_PER_NANOSECOND Declaration public const long MILLISECONDS_PER_NANOSECOND = null Field Value Type Description System.Int64 | Improve this Doc View Source TICKS_PER_NANOSECOND Declaration public const long TICKS_PER_NANOSECOND = null Field Value Type Description System.Int64 Methods | Improve this Doc View Source CurrentTimeMilliseconds() Declaration public static long CurrentTimeMilliseconds() Returns Type Description System.Int64 | Improve this Doc View Source NanoTime() Declaration public static long NanoTime() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Support.TreeDictionary-2.Enumerator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.TreeDictionary-2.Enumerator.html",
    "title": "Struct TreeDictionary<TKey, TValue>.Enumerator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Struct TreeDictionary<TKey, TValue>.Enumerator Implements System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair <TKey, TValue>> IDictionaryEnumerator Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public struct Enumerator : System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<TKey, TValue>>, IDictionaryEnumerator Properties | Improve this Doc View Source Current Declaration public System.Collections.Generic.KeyValuePair<TKey, TValue> Current { get; } Property Value Type Description System.Collections.Generic.KeyValuePair <TKey, TValue> 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 Implements System.Collections.Generic.IEnumerator<> IDictionaryEnumerator"
  },
  "api/Lucene.Net/Lucene.Net.Support.TreeDictionary-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.TreeDictionary-2.html",
    "title": "Class TreeDictionary<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TreeDictionary<TKey, TValue> A sorted generic dictionary based on a red-black tree set. A TreeDictionary<TKey, TValue> provides similar behavior to a , except that TreeDictionary<TKey, TValue> allows elements with null or duplicate keys to be created, where a does not. Inheritance System.Object TreeDictionary<TKey, TValue> Implements Lucene.Net.Support.C5.IDictionary System.Collections.Generic.IReadOnlyCollection < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.Generic.IReadOnlyDictionary <TKey, TValue> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public sealed class TreeDictionary<TKey, TValue> : System.Collections.Generic.IDictionary<TKey, TValue>, IDictionary, System.Collections.Generic.IReadOnlyCollection<System.Collections.Generic.KeyValuePair<TKey, TValue>>, System.Collections.Generic.IReadOnlyDictionary<TKey, TValue> Type Parameters Name Description TKey The type of keys in the dictionary TValue The type of values in the dictionary Remarks Unordered Dictionaries - use when order is not important and all keys are non-null. HashMap<TKey, TValue> - use when order is not important and support for a null key is required. Ordered Dictionaries LinkedHashMap<TKey, TValue> - use when you need to preserve entry insertion order. Keys are nullable. - use when you need natural sort order. Keys must be unique. TreeDictionary<TKey, TValue> - use when you need natural sort order. Keys are nullable. LurchTable<TKey, TValue> - use when you need to sort by most recent access or most recent update. Works well for LRU caching. Constructors | Improve this Doc View Source TreeDictionary() Create a red-black tree dictionary using the default for the key type. if the key type K is not comparable. Declaration public TreeDictionary() | Improve this Doc View Source TreeDictionary(System.Collections.Generic.IComparer<TKey>) Create a red-black tree dictionary using the specified for the key type. Declaration public TreeDictionary(System.Collections.Generic.IComparer<TKey> comparer) Parameters Type Name Description System.Collections.Generic.IComparer <TKey> comparer The implementation to use when comparing keys, or null to use the default for the type of the key. | Improve this Doc View Source TreeDictionary(System.Collections.Generic.IDictionary<TKey, TValue>) Create a red-black tree dictionary that contains the elements copied from the specified IDictionary<K, V> and uses the default for the key type. Declaration public TreeDictionary(System.Collections.Generic.IDictionary<TKey, TValue> dictionary) Parameters Type Name Description System.Collections.Generic.IDictionary <TKey, TValue> dictionary | Improve this Doc View Source TreeDictionary(System.Collections.Generic.IDictionary<TKey, TValue>, System.Collections.Generic.IComparer<TKey>) Create a red-black tree dictionary that contains the elements copied from the specified IDictionary<K, V> and uses the specified for the key type. Declaration public TreeDictionary(System.Collections.Generic.IDictionary<TKey, TValue> dictionary, System.Collections.Generic.IComparer<TKey> comparer) Parameters Type Name Description System.Collections.Generic.IDictionary <TKey, TValue> dictionary System.Collections.Generic.IComparer <TKey> comparer The implementation to use when comparing keys, or null to use the default for the type of the key. Properties | Improve this Doc View Source Comparer Gets the used to order the elements of the TreeDictionary<TKey, TValue> . Declaration public System.Collections.Generic.IComparer<TKey> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer <TKey> | Improve this Doc View Source Count Gets the number of key/value pairs contained in the TreeDictionary<TKey, TValue> . Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Gets a value indicating whether the is read-only. Declaration public bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[TKey] Gets or sets the value associated with the specified key. Declaration public TValue this[TKey key] { get; set; } Parameters Type Name Description TKey key The key of the value to get or set. Property Value Type Description TValue The value associated with the specified key. If the specified key is not found, a get operation throws a , and a set operation creates a new element with the specified key. | Improve this Doc View Source Keys Gets a collection containing the keys in the TreeDictionary<TKey, TValue> . Declaration public System.Collections.Generic.ICollection<TKey> Keys { get; } Property Value Type Description System.Collections.Generic.ICollection <TKey> | Improve this Doc View Source Values Gets a collection containing the values in the TreeDictionary<TKey, TValue> . Declaration public System.Collections.Generic.ICollection<TValue> Values { get; } Property Value Type Description System.Collections.Generic.ICollection <TValue> Methods | Improve this Doc View Source Add(TKey, TValue) Adds an element with the specified key and value into the TreeDictionary<TKey, TValue> . Declaration public void Add(TKey key, TValue value) Parameters Type Name Description TKey key The key of the element to add. TValue value The value of the element to add. The value can be null for reference types. | Improve this Doc View Source Clear() Removes all elements from the TreeDictionary<TKey, TValue> . Declaration public void Clear() | Improve this Doc View Source ContainsKey(TKey) Determines whether the TreeDictionary<TKey, TValue> contains an element with the specified key. Declaration public bool ContainsKey(TKey key) Parameters Type Name Description TKey key The key to locate in the TreeDictionary<TKey, TValue> . Returns Type Description System.Boolean true if the TreeDictionary<TKey, TValue> contains an element with the specified key; otherwise, false . | Improve this Doc View Source ContainsValue(TValue) Determines whether the TreeDictionary<TKey, TValue> contains an element with the specified value. Declaration public bool ContainsValue(TValue value) Parameters Type Name Description TValue value The value to locate in the TreeDictionary<TKey, TValue> . The value can be null for reference types. Returns Type Description System.Boolean true if the TreeDictionary<TKey, TValue> contains an element with the specified value; otherwise, false . | Improve this Doc View Source CopyTo(System.Collections.Generic.KeyValuePair<TKey, TValue>[], Int32) Copies the elements of the TreeDictionary<TKey, TValue> to the specified array of structures, starting at the specified index . Declaration public void CopyTo(System.Collections.Generic.KeyValuePair<TKey, TValue>[] array, int index) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue>[] array The one-dimensional array of structures that is the destination of the elements copied from the current TreeDictionary<TKey, TValue> . The array must have zero-based indexing. System.Int32 index The zero-based index in array at which copying begins. | Improve this Doc View Source Equals(Object) Compares the specified object with this dictionary for equality. Returns true if the given object is also a map and the two maps represent the same mappings. More formally, two dictionaries m1 and m2 represent the same mappings if the values of obj match the values of this dictionary (without regard to order, but with regard to any nested collections). Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Object to be compared for equality with this dictionary. Returns Type Description System.Boolean true if the specified object's values are equal to this dictionary. | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the TreeDictionary<TKey, TValue> . Declaration public TreeDictionary<TKey, TValue>.Enumerator GetEnumerator() Returns Type Description TreeDictionary.Enumerator <> An enumerator for the TreeDictionary<TKey, TValue> . | Improve this Doc View Source GetHashCode() Returns the hash code value for this dictionary. The hash code of a dictionary is defined to be the sum of the hash codes of each entry in the dictionary. This ensures that m1.Equals(m2) implies that m1.GetHashCode() == m2.GetHashCode() for any two dictionaries m1 and m2 . Declaration public override int GetHashCode() Returns Type Description System.Int32 The hash code value for this dictionary. | Improve this Doc View Source Remove(TKey) Removes the element with the specified key from the TreeDictionary<TKey, TValue> . Declaration public bool Remove(TKey key) Parameters Type Name Description TKey key The key of the element to remove. Returns Type Description System.Boolean true if the element is successfully removed; otherwise, false . This method also returns false if key is not found in the TreeDictionary<TKey, TValue> . | Improve this Doc View Source ToString() Returns a string representation of this dictionary. The string representation consists of a list of key-value mappings in the order returned by the dictionary's iterator, enclosed in braces (\"{}\"). Adjacent mappings are separated by the characters \", \" (comma and space). Each key-value mapping is rendered as the key followed by an equals sign (\"=\") followed by the associated value. Declaration public override string ToString() Returns Type Description System.String A string representation of this dictionary. | Improve this Doc View Source TryGetValue(TKey, out TValue) Gets the value associated with the specified key. Declaration public bool TryGetValue(TKey key, out TValue value) Parameters Type Name Description TKey key The key of the value to get. TValue value When this method returns, the value associated with the specified key , if the key is found; otherwise, the default value for the type of the value parameter. Returns Type Description System.Boolean Implements Lucene.Net.Support.C5.IDictionary System.Collections.Generic.IReadOnlyCollection<> System.Collections.Generic.IReadOnlyDictionary<, >"
  },
  "api/Lucene.Net/Lucene.Net.Support.TreeDictionary-2.KeyCollection.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.TreeDictionary-2.KeyCollection.html",
    "title": "Class TreeDictionary<TKey, TValue>.KeyCollection | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TreeDictionary<TKey, TValue>.KeyCollection Inheritance System.Object TreeDictionary<TKey, TValue>.KeyCollection Implements Lucene.Net.Support.C5.ICollection System.Collections.Generic.IReadOnlyCollection <TKey> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public sealed class KeyCollection : System.Collections.Generic.ICollection<TKey>, ICollection, System.Collections.Generic.IReadOnlyCollection<TKey> Constructors | Improve this Doc View Source KeyCollection(TreeDictionary<TKey, TValue>) Declaration public KeyCollection(TreeDictionary<TKey, TValue> dictionary) Parameters Type Name Description TreeDictionary <TKey, TValue> dictionary 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 CopyTo(TKey[], Int32) Declaration public void CopyTo(TKey[] array, int index) Parameters Type Name Description TKey[] array System.Int32 index | Improve this Doc View Source GetEnumerator() Declaration public System.Collections.Generic.IEnumerator<TKey> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <TKey> Implements Lucene.Net.Support.C5.ICollection System.Collections.Generic.IReadOnlyCollection<>"
  },
  "api/Lucene.Net/Lucene.Net.Support.TreeDictionary-2.ValueCollection.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.TreeDictionary-2.ValueCollection.html",
    "title": "Class TreeDictionary<TKey, TValue>.ValueCollection | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TreeDictionary<TKey, TValue>.ValueCollection Inheritance System.Object TreeDictionary<TKey, TValue>.ValueCollection Implements Lucene.Net.Support.C5.ICollection System.Collections.Generic.IReadOnlyCollection <TValue> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public sealed class ValueCollection : System.Collections.Generic.ICollection<TValue>, ICollection, System.Collections.Generic.IReadOnlyCollection<TValue> Constructors | Improve this Doc View Source ValueCollection(TreeDictionary<TKey, TValue>) Declaration public ValueCollection(TreeDictionary<TKey, TValue> dictionary) Parameters Type Name Description TreeDictionary <TKey, TValue> dictionary Properties | Improve this Doc View Source Count Declaration public int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CopyTo(TValue[], Int32) Declaration public void CopyTo(TValue[] array, int index) Parameters Type Name Description TValue[] array System.Int32 index | Improve this Doc View Source GetEnumerator() Declaration public System.Collections.Generic.IEnumerator<TValue> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <TValue> Implements Lucene.Net.Support.C5.ICollection System.Collections.Generic.IReadOnlyCollection<>"
  },
  "api/Lucene.Net/Lucene.Net.Support.TreeSet-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.TreeSet-1.html",
    "title": "Class TreeSet<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TreeSet<T> An implementation of Red-Black trees as an indexed, sorted collection with set semantics, cf. CLRS . C5.TreeBag`1 for a version with bag semantics. C5.TreeDictionary`2 for a sorted dictionary based on this tree implementation. The comparer (sorting order) may be either natural, because the item type is comparable (generic: C5.IComparable`1 or non-generic: System.IComparable) or it can be external and supplied by the user in the constructor. TODO: describe performance here TODO: discuss persistence and its useful usage modes. Warn about the space leak possible with other usage modes. Inheritance System.Object EnumerableBase <T> CollectionValueBase <T> CollectionBase <T> DirectedCollectionBase <T> SequencedBase <T> TreeSet<T> Implements IIndexedSorted <T> IIndexed <T> IReadOnlyList <T> IReadOnlyCollection <T> System.Collections.IEnumerable IPersistentSorted <T> ISorted <T> ISequenced <T> ICollection <T> IExtensible <T> System.Collections.Generic.ICollection <T> IDirectedCollectionValue <T> ICollectionValue <T> IShowable IFormattable IDirectedEnumerable <T> System.Collections.Generic.IEnumerable <T> IDisposable System.Collections.Generic.ISet <T> Inherited Members SequencedBase<T>.ComputeHashCode(ISequenced<T>, System.Collections.Generic.IEqualityComparer<T>) SequencedBase<T>.StaticEquals(ISequenced<T>, ISequenced<T>, System.Collections.Generic.IEqualityComparer<T>) SequencedBase<T>.GetSequencedHashCode() SequencedBase<T>.SequencedEquals(ISequenced<T>) SequencedBase<T>.Direction SequencedBase<T>.FindIndex(Func<T, Boolean>) SequencedBase<T>.FindLastIndex(Func<T, Boolean>) DirectedCollectionBase<T>.FindLast(Func<T, Boolean>, T) CollectionBase<T>.isReadOnlyBase CollectionBase<T>.stamp CollectionBase<T>.size CollectionBase<T>.itemequalityComparer CollectionBase<T>.checkRange(Int32, Int32) CollectionBase<T>.ComputeHashCode(ICollectionValue<T>, System.Collections.Generic.IEqualityComparer<T>) CollectionBase<T>.StaticEquals(ICollection<T>, ICollection<T>, System.Collections.Generic.IEqualityComparer<T>) CollectionBase<T>.GetUnsequencedHashCode() CollectionBase<T>.UnsequencedEquals(ICollection<T>) CollectionBase<T>.modifycheck(Int32) CollectionBase<T>.updatecheck() CollectionBase<T>.IsReadOnly CollectionBase<T>.Count CollectionBase<T>.CountSpeed CollectionBase<T>.EqualityComparer CollectionBase<T>.IsEmpty CollectionValueBase<T>.ActiveEvents CollectionValueBase<T>.CollectionChanged CollectionValueBase<T>.raiseCollectionChanged() CollectionValueBase<T>.CollectionCleared CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<T>.ItemsAdded CollectionValueBase<T>.raiseItemsAdded(T, Int32) CollectionValueBase<T>.ItemsRemoved CollectionValueBase<T>.raiseItemsRemoved(T, Int32) CollectionValueBase<T>.ItemInserted CollectionValueBase<T>.raiseItemInserted(T, Int32) CollectionValueBase<T>.ItemRemovedAt CollectionValueBase<T>.raiseItemRemovedAt(T, Int32) CollectionValueBase<T>.raiseForSetThis(Int32, T, T) CollectionValueBase<T>.raiseForInsert(Int32, T) CollectionValueBase<T>.raiseForRemove(T) CollectionValueBase<T>.raiseForRemove(T, Int32) CollectionValueBase<T>.raiseForRemoveAt(Int32, T) CollectionValueBase<T>.raiseForUpdate(T, T) CollectionValueBase<T>.raiseForUpdate(T, T, Int32) CollectionValueBase<T>.raiseForAdd(T) CollectionValueBase<T>.raiseForRemoveAll(ICollectionValue<T>) CollectionValueBase<T>.CopyTo(T[], Int32) CollectionValueBase<T>.ToArray() CollectionValueBase<T>.Apply(Action<T>) CollectionValueBase<T>.Exists(Func<T, Boolean>) CollectionValueBase<T>.Find(Func<T, Boolean>, T) CollectionValueBase<T>.All(Func<T, Boolean>) CollectionValueBase<T>.Filter(Func<T, Boolean>) CollectionValueBase<T>.Show(System.Text.StringBuilder, Int32, IFormatProvider) CollectionValueBase<T>.ToString(String, IFormatProvider) CollectionValueBase<T>.ToString() EnumerableBase<T>.countItems(System.Collections.Generic.IEnumerable<T>) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class TreeSet<T> : SequencedBase<T>, IIndexedSorted<T>, IIndexed<T>, IReadOnlyList<T>, IReadOnlyCollection<T>, System.Collections.IEnumerable, IPersistentSorted<T>, ISorted<T>, ISequenced<T>, ICollection<T>, IExtensible<T>, System.Collections.Generic.ICollection<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, System.Collections.Generic.IEnumerable<T>, IDisposable, System.Collections.Generic.ISet<T> Type Parameters Name Description T Constructors | Improve this Doc View Source TreeSet(MemoryType) Create a red-black tree collection with natural comparer and item equalityComparer. We assume that if T is comparable, its default equalityComparer will be compatible with the comparer. Declaration public TreeSet(MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description MemoryType memoryType Exceptions Type Condition NotComparableException If T is not comparable. | Improve this Doc View Source TreeSet(System.Collections.Generic.IComparer<T>, MemoryType) Create a red-black tree collection with an external comparer. The itemequalityComparer will be a compatible C5.ComparerZeroHashCodeEqualityComparer`1 since the default equalityComparer for T ( C5.EqualityComparer`1.Default ) is unlikely to be compatible with the external comparer. This makes the tree inadequate for use as item in a collection of unsequenced or sequenced sets or bags ( C5.ICollection`1 and C5.ISequenced`1 ) Declaration public TreeSet(System.Collections.Generic.IComparer<T> comparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Collections.Generic.IComparer <T> comparer The external comparer MemoryType memoryType | Improve this Doc View Source TreeSet(System.Collections.Generic.IComparer<T>, System.Collections.Generic.IEqualityComparer<T>, MemoryType) Create a red-black tree collection with an external comparer and an external item equalityComparer, assumed consistent. Declaration public TreeSet(System.Collections.Generic.IComparer<T> comparer, System.Collections.Generic.IEqualityComparer<T> equalityComparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Collections.Generic.IComparer <T> comparer The external comparer System.Collections.Generic.IEqualityComparer <T> equalityComparer The external item equalitySCG.Comparer MemoryType memoryType Properties | Improve this Doc View Source AllowsDuplicates Declaration public bool AllowsDuplicates { get; } Property Value Type Description System.Boolean False since this tree has set semantics. | Improve this Doc View Source Comparer The comparer object supplied at creation time for this collection Declaration public System.Collections.Generic.IComparer<T> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer <T> The comparer | Improve this Doc View Source ContainsSpeed The value is symbolic indicating the type of asymptotic complexity in terms of the size of this collection (worst-case or amortized as relevant). Declaration public Speed ContainsSpeed { get; } Property Value Type Description Speed Speed.Log | Improve this Doc View Source DuplicatesByCounting By convention this is true for any collection with set semantics. Declaration public virtual bool DuplicatesByCounting { get; } Property Value Type Description System.Boolean True if only one representative of a group of equal items is kept in the collection together with the total count. | Improve this Doc View Source IndexingSpeed Declaration public virtual Speed IndexingSpeed { get; } Property Value Type Description Speed | Improve this Doc View Source Item[Int32] if i is negative or = the size of the collection. Declaration public T this[int i] { get; } Parameters Type Name Description System.Int32 i the index to lookup Property Value Type Description T The i'th item of this list. | Improve this Doc View Source Item[Int32, Int32] . Declaration public IDirectedCollectionValue<T> this[int start, int count] { get; } Parameters Type Name Description System.Int32 start The starting index of the interval (inclusive). System.Int32 count The length of the interval. Property Value Type Description IDirectedCollectionValue <T> The directed collection of items in a specific index interval. | Improve this Doc View Source ListenableEvents Declaration public override EventTypeEnum ListenableEvents { get; } Property Value Type Description EventTypeEnum Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.ListenableEvents Methods | Improve this Doc View Source Add(T) Add an item to this collection if possible. If this collection has set semantics, the item will be added if not already in the collection. If bag semantics, the item will always be added. Declaration public bool Add(T item) Parameters Type Name Description T item The item to add. Returns Type Description System.Boolean True if item was added. | Improve this Doc View Source AddAll(System.Collections.Generic.IEnumerable<T>) Add the elements from another collection with a more specialized item type to this collection. If this collection has set semantics, only items not already in the collection will be added. Declaration public void AddAll(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to add | Improve this Doc View Source AddSorted(System.Collections.Generic.IEnumerable<T>) Add all the items from another collection with an enumeration order that is increasing in the items. The idea is that the implementation may use a faster algorithm to merge the two collections. if the enumerated items turns out not to be in increasing order. Declaration public void AddSorted(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The collection to add. | Improve this Doc View Source Backwards() Create a collection containing the same items as this collection, but whose enumerator will enumerate the items backwards. The new collection will become invalid if the original is modified. Method typically used as in foreach (T x in coll.Backwards()) {...} Declaration public override IDirectedCollectionValue<T> Backwards() Returns Type Description IDirectedCollectionValue <T> The backwards collection. Overrides Lucene.Net.Support.C5.DirectedCollectionBase<T>.Backwards() | Improve this Doc View Source Check() Checks red-black invariant. Dumps tree to console if bad Declaration public bool Check() Returns Type Description System.Boolean false if invariant violation | Improve this Doc View Source Check(String) Checks red-black invariant. Dumps tree to console if bad Declaration public bool Check(string name) Parameters Type Name Description System.String name Title of dump Returns Type Description System.Boolean false if invariant violation | Improve this Doc View Source Choose() Declaration public override T Choose() Returns Type Description T Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.Choose() Exceptions Type Condition NoSuchItemException If tree is empty | Improve this Doc View Source Clear() Remove all items from this collection. Declaration public void Clear() | Improve this Doc View Source Contains(T) Check if this collection contains (an item equivalent to according to the itemequalityComparer) a particular value. Declaration public bool Contains(T item) Parameters Type Name Description T item The value to check for. Returns Type Description System.Boolean True if the items is in this collection. | Improve this Doc View Source ContainsAll(System.Collections.Generic.IEnumerable<T>) Check if this collection contains all the values in another collection. If this collection has bag semantics ( AllowsDuplicates==true ) the check is made with respect to multiplicities, else multiplicities are not taken into account. Declaration public bool ContainsAll(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The Returns Type Description System.Boolean True if all values in items is in this collection. | Improve this Doc View Source ContainsCount(T) Count the number of items of the collection equal to a particular value. Returns 0 if and only if the value is not in the collection. Declaration public int ContainsCount(T item) Parameters Type Name Description T item The value to count. Returns Type Description System.Int32 The number of copies found. | Improve this Doc View Source CountFrom(T) Determine the number of items at or above a supplied threshold. Declaration public int CountFrom(T bot) Parameters Type Name Description T bot The lower bound (inclusive) Returns Type Description System.Int32 The number of matching items. | Improve this Doc View Source CountFromTo(T, T) Determine the number of items between two supplied thresholds. Declaration public int CountFromTo(T bot, T top) Parameters Type Name Description T bot The lower bound (inclusive) T top The upper bound (exclusive) Returns Type Description System.Int32 The number of matching items. | Improve this Doc View Source CountTo(T) Determine the number of items below a supplied threshold. Declaration public int CountTo(T top) Parameters Type Name Description T top The upper bound (exclusive) Returns Type Description System.Int32 The number of matching items. | Improve this Doc View Source Cut(IComparable<T>, out T, out Boolean, out T, out Boolean) Perform a search in the sorted collection for the ranges in which a non-increasing (i.e. weakly decreasing) function from the item type to int is negative, zero respectively positive. If the supplied cut function is not non-increasing, the result of this call is undefined. Declaration public bool Cut(IComparable<T> c, out T low, out bool lowIsValid, out T high, out bool highIsValid) Parameters Type Name Description IComparable <T> c The cut function T to int , given as an IComparable<T> object, where the cut function is the c.CompareTo(T that) method. T low Returns the largest item in the collection, where the cut function is positive (if any). System.Boolean lowIsValid True if the cut function is positive somewhere on this collection. T high Returns the least item in the collection, where the cut function is negative (if any). System.Boolean highIsValid True if the cut function is negative somewhere on this collection. Returns Type Description System.Boolean | Improve this Doc View Source DeleteMax() Remove the largest item from this priority queue. Declaration public T DeleteMax() Returns Type Description T The removed item. | Improve this Doc View Source DeleteMin() Remove the least item from this priority queue. Declaration public T DeleteMin() Returns Type Description T The removed item. | Improve this Doc View Source Dispose() If this tree is a snapshot, remove registration in base tree Declaration public void Dispose() | Improve this Doc View Source dump() Print the tree structure to the console stdout. Declaration public void dump() | Improve this Doc View Source dump(String) Print the tree structure to the console stdout. Declaration public void dump(string msg) Parameters Type Name Description System.String msg | Improve this Doc View Source ExceptWith(System.Collections.Generic.IEnumerable<T>) Removes all elements in the specified collection from the current TreeSet<T> object. Declaration public virtual void ExceptWith(System.Collections.Generic.IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection of items to remove from the set. | Improve this Doc View Source Find(ref T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, return in the ref argument (a binary copy of) the actual value found. Declaration public bool Find(ref T item) Parameters Type Name Description T item The value to look for. Returns Type Description System.Boolean True if the items is in this collection. | Improve this Doc View Source FindAll(Func<T, Boolean>) Create a new indexed sorted collection consisting of the items of this indexed sorted collection satisfying a certain predicate. Declaration public IIndexedSorted<T> FindAll(Func<T, bool> filter) Parameters Type Name Description Func <T, System.Boolean > filter The filter delegate defining the predicate. Returns Type Description IIndexedSorted <T> The new indexed sorted collection. | Improve this Doc View Source FindMax() Find the current largest item of this priority queue. Declaration public T FindMax() Returns Type Description T The largest item. | Improve this Doc View Source FindMin() Find the current least item of this priority queue. Declaration public T FindMin() Returns Type Description T The least item. | Improve this Doc View Source FindOrAdd(ref T) Find or add the item to the tree. If the tree does not contain an item equivalent to this item add it, else return the existing one in the ref argument. Declaration public bool FindOrAdd(ref T item) Parameters Type Name Description T item Returns Type Description System.Boolean True if item was found | Improve this Doc View Source GetEnumerator() Create an enumerator for this tree Declaration public override System.Collections.Generic.IEnumerator<T> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <T> The enumerator Overrides Lucene.Net.Support.C5.EnumerableBase<T>.GetEnumerator() | Improve this Doc View Source IndexOf(T) Searches for an item in this indexed collection going forwards from the start. Declaration public int IndexOf(T item) Parameters Type Name Description T item Item to search for. Returns Type Description System.Int32 Index of first occurrence from start of the item if found, else the two-complement (always negative) of the index at which the item would be put if it was added. | Improve this Doc View Source IntersectWith(System.Collections.Generic.IEnumerable<T>) Modifies the current TreeSet<T> object so that it contains only elements that are also in a specified collection. Declaration public virtual void IntersectWith(System.Collections.Generic.IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current set. | Improve this Doc View Source IsProperSubsetOf(System.Collections.Generic.IEnumerable<T>) Determines whether a TreeSet<T> object is a proper subset of the specified collection. Declaration public virtual bool IsProperSubsetOf(System.Collections.Generic.IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current TreeSet<T> object. Returns Type Description System.Boolean true if the TreeSet<T> object is a proper subset of other; otherwise, false . | Improve this Doc View Source IsProperSupersetOf(System.Collections.Generic.IEnumerable<T>) Determines whether a TreeSet<T> object is a proper superset of the specified collection. Declaration public virtual bool IsProperSupersetOf(System.Collections.Generic.IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current TreeSet<T> object. Returns Type Description System.Boolean true if the TreeSet<T> object is a proper superset of other; otherwise, false . | Improve this Doc View Source IsSubsetOf(System.Collections.Generic.IEnumerable<T>) Determines whether a TreeSet<T> object is a subset of the specified collection. Declaration public virtual bool IsSubsetOf(System.Collections.Generic.IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current TreeSet<T> object. Returns Type Description System.Boolean true if the TreeSet<T> object is a subset of other; otherwise, false . | Improve this Doc View Source IsSupersetOf(System.Collections.Generic.IEnumerable<T>) Determines whether a TreeSet<T> object is a superset of the specified collection. Declaration public virtual bool IsSupersetOf(System.Collections.Generic.IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current TreeSet<T> object. Returns Type Description System.Boolean true if the TreeSet<T> object is a superset of other; otherwise, false . | Improve this Doc View Source ItemMultiplicities() Declaration public virtual ICollectionValue<KeyValuePair<T, int>> ItemMultiplicities() Returns Type Description ICollectionValue < KeyValuePair <T, System.Int32 >> | Improve this Doc View Source LastIndexOf(T) Searches for an item in the tree going backwards from the end. Declaration public int LastIndexOf(T item) Parameters Type Name Description T item Item to search for. Returns Type Description System.Int32 Index of last occurrence from the end of item if found, else the two-complement (always negative) of the index at which the item would be put if it was added. | Improve this Doc View Source Map<V>(Func<T, V>, System.Collections.Generic.IComparer<V>) Create a new indexed sorted collection consisting of the results of mapping all items of this list. if the map is not increasing over the items of this collection (with respect to the two given comparison relations). Declaration public IIndexedSorted<V> Map<V>(Func<T, V> mapper, System.Collections.Generic.IComparer<V> c) Parameters Type Name Description Func <T, V> mapper The delegate definging the map. System.Collections.Generic.IComparer <V> c The comparion relation to use for the result. Returns Type Description IIndexedSorted <V> The new sorted collection. Type Parameters Name Description V | Improve this Doc View Source Overlaps(System.Collections.Generic.IEnumerable<T>) Determines whether the current TreeSet<T> object and a specified collection share common elements. Declaration public virtual bool Overlaps(System.Collections.Generic.IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current TreeSet<T> object. Returns Type Description System.Boolean true if the TreeSet<T> object and other share at least one common element; otherwise, false . | Improve this Doc View Source Predecessor(T) Find the strict predecessor in the sorted collection of a particular value, i.e. the largest item in the collection less than the supplied value. Declaration public T Predecessor(T item) Parameters Type Name Description T item The item to find the predecessor for. Returns Type Description T The predecessor. Exceptions Type Condition NoSuchItemException if no such element exists (the supplied value is less than or equal to the minimum of this collection.) | Improve this Doc View Source RangeAll() Create a directed collection with the same items as this collection. Declaration public IDirectedCollectionValue<T> RangeAll() Returns Type Description IDirectedCollectionValue <T> The result directed collection. | Improve this Doc View Source RangeFrom(T) Query this sorted collection for items greater than or equal to a supplied value. Declaration public IDirectedCollectionValue<T> RangeFrom(T bot) Parameters Type Name Description T bot The lower bound (inclusive). Returns Type Description IDirectedCollectionValue <T> The result directed collection. | Improve this Doc View Source RangeFromTo(T, T) Query this sorted collection for items between two supplied values. Declaration public IDirectedCollectionValue<T> RangeFromTo(T bot, T top) Parameters Type Name Description T bot The lower bound (inclusive). T top The upper bound (exclusive). Returns Type Description IDirectedCollectionValue <T> The result directed collection. | Improve this Doc View Source RangeTo(T) Query this sorted collection for items less than a supplied value. Declaration public IDirectedCollectionValue<T> RangeTo(T top) Parameters Type Name Description T top The upper bound (exclusive). Returns Type Description IDirectedCollectionValue <T> The result directed collection. | Improve this Doc View Source Remove(T) Remove a particular item from this collection. If the collection has bag semantics only one copy equivalent to the supplied item is removed. Declaration public bool Remove(T item) Parameters Type Name Description T item The value to remove. Returns Type Description System.Boolean True if the item was found (and removed). | Improve this Doc View Source Remove(T, out T) Remove a particular item from this collection if found. If the collection has bag semantics only one copy equivalent to the supplied item is removed, which one is implementation dependent. If an item was removed, report a binary copy of the actual item removed in the argument. Declaration public bool Remove(T item, out T removeditem) Parameters Type Name Description T item The value to remove. T removeditem The removed value. Returns Type Description System.Boolean True if the item was found (and removed). | Improve this Doc View Source RemoveAll(System.Collections.Generic.IEnumerable<T>) Remove all items in another collection from this one. If this collection has bag semantics, take multiplicities into account. Declaration public void RemoveAll(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to remove. | Improve this Doc View Source RemoveAllCopies(T) Remove all items equivalent to a given value. Declaration public void RemoveAllCopies(T item) Parameters Type Name Description T item The value to remove. | Improve this Doc View Source RemoveAt(Int32) Remove the item at a specific position of the list. if i is negative or = the size of the collection. Declaration public T RemoveAt(int i) Parameters Type Name Description System.Int32 i The index of the item to remove. Returns Type Description T The removed item. | Improve this Doc View Source RemoveInterval(Int32, Int32) Remove all items in an index interval. ???. Declaration public void RemoveInterval(int start, int count) Parameters Type Name Description System.Int32 start The index of the first item to remove. System.Int32 count The number of items to remove. | Improve this Doc View Source RemoveRangeFrom(T) Remove all items of this collection above or at a supplied threshold. Declaration public void RemoveRangeFrom(T low) Parameters Type Name Description T low The lower threshold (inclusive). | Improve this Doc View Source RemoveRangeFromTo(T, T) Remove all items of this collection between two supplied thresholds. Declaration public void RemoveRangeFromTo(T low, T hi) Parameters Type Name Description T low The lower threshold (inclusive). T hi The upper threshold (exclusive). | Improve this Doc View Source RemoveRangeTo(T) Remove all items of this collection below a supplied threshold. Declaration public void RemoveRangeTo(T hi) Parameters Type Name Description T hi The upper threshold (exclusive). | Improve this Doc View Source RetainAll(System.Collections.Generic.IEnumerable<T>) Remove all items not in some other collection from this one. If this collection has bag semantics, take multiplicities into account. Declaration public void RetainAll(System.Collections.Generic.IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to retain. | Improve this Doc View Source SetEquals(System.Collections.Generic.IEnumerable<T>) Determines whether the current TreeSet<T> and the specified collection contain the same elements. Declaration public virtual bool SetEquals(System.Collections.Generic.IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current TreeSet<T> . Returns Type Description System.Boolean true if the current TreeSet<T> is equal to other; otherwise, false . | Improve this Doc View Source Snapshot() Make a (read-only) snapshot of this collection. Declaration public ISorted<T> Snapshot() Returns Type Description ISorted <T> The snapshot. | Improve this Doc View Source Successor(T) Find the strict successor in the sorted collection of a particular value, i.e. the least item in the collection greater than the supplied value. Declaration public T Successor(T item) Parameters Type Name Description T item The item to find the successor for. Returns Type Description T The successor. Exceptions Type Condition NoSuchItemException if no such element exists (the supplied value is greater than or equal to the maximum of this collection.) | Improve this Doc View Source SymmetricExceptWith(System.Collections.Generic.IEnumerable<T>) Modifies the current set so that it contains only elements that are present either in the current TreeSet<T> object or in the specified collection, but not both. Declaration public virtual void SymmetricExceptWith(System.Collections.Generic.IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current TreeSet<T> object. | Improve this Doc View Source TryPredecessor(T, out T) Find the strict predecessor of item in the sorted collection, that is, the greatest item in the collection smaller than the item. Declaration public bool TryPredecessor(T item, out T res) Parameters Type Name Description T item The item to find the predecessor for. T res The predecessor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a predecessor; otherwise false. | Improve this Doc View Source TrySuccessor(T, out T) Find the strict successor of item in the sorted collection, that is, the least item in the collection greater than the supplied value. Declaration public bool TrySuccessor(T item, out T res) Parameters Type Name Description T item The item to find the successor for. T res The successor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a successor; otherwise false. | Improve this Doc View Source TryWeakPredecessor(T, out T) Find the weak predecessor of item in the sorted collection, that is, the greatest item in the collection smaller than or equal to the item. Declaration public bool TryWeakPredecessor(T item, out T res) Parameters Type Name Description T item The item to find the weak predecessor for. T res The weak predecessor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a weak predecessor; otherwise false. | Improve this Doc View Source TryWeakSuccessor(T, out T) Find the weak successor of item in the sorted collection, that is, the least item in the collection greater than or equal to the supplied value. Declaration public bool TryWeakSuccessor(T item, out T res) Parameters Type Name Description T item The item to find the weak successor for. T res The weak successor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a weak successor; otherwise false. | Improve this Doc View Source UnionWith(System.Collections.Generic.IEnumerable<T>) Modifies the current TreeSet<T> object to contain all elements that are present in itself, the specified collection, or both. Declaration public virtual void UnionWith(System.Collections.Generic.IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current set. | Improve this Doc View Source UniqueItems() Declaration public virtual ICollectionValue<T> UniqueItems() Returns Type Description ICollectionValue <T> | Improve this Doc View Source Update(T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, update the item in the collection to with a binary copy of the supplied value. If the collection has bag semantics, this updates all equivalent copies in the collection. Declaration public bool Update(T item) Parameters Type Name Description T item Value to update. Returns Type Description System.Boolean True if the item was found and hence updated. | Improve this Doc View Source Update(T, out T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, update the item in the collection with a binary copy of the supplied value. If the collection has bag semantics, this updates all equivalent copies in the collection. Declaration public bool Update(T item, out T olditem) Parameters Type Name Description T item T olditem Returns Type Description System.Boolean | Improve this Doc View Source UpdateOrAdd(T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, update the item in the collection with a binary copy of the supplied value; else add the value to the collection. NOTE: the bag implementation is currently wrong! ????? Declaration public bool UpdateOrAdd(T item) Parameters Type Name Description T item Value to add or update. Returns Type Description System.Boolean True if the item was found and updated (hence not added). | Improve this Doc View Source UpdateOrAdd(T, out T) Declaration public bool UpdateOrAdd(T item, out T olditem) Parameters Type Name Description T item T olditem Returns Type Description System.Boolean | Improve this Doc View Source WeakPredecessor(T) Find the weak predecessor in the sorted collection of a particular value, i.e. the largest item in the collection less than or equal to the supplied value. Declaration public T WeakPredecessor(T item) Parameters Type Name Description T item The item to find the weak predecessor for. Returns Type Description T The weak predecessor. Exceptions Type Condition NoSuchItemException if no such element exists (the supplied value is less than the minimum of this collection.) | Improve this Doc View Source WeakSuccessor(T) Find the weak successor in the sorted collection of a particular value, i.e. the least item in the collection greater than or equal to the supplied value. NoSuchItemException Declaration public T WeakSuccessor(T item) Parameters Type Name Description T item The item to find the weak successor for. Returns Type Description T The weak successor. Explicit Interface Implementations | Improve this Doc View Source IDirectedEnumerable<T>.Backwards() Declaration IDirectedEnumerable<T> IDirectedEnumerable<T>.Backwards() Returns Type Description IDirectedEnumerable <T> | Improve this Doc View Source ISorted<T>.RangeFrom(T) Declaration IDirectedEnumerable<T> ISorted<T>.RangeFrom(T bot) Parameters Type Name Description T bot Returns Type Description IDirectedEnumerable <T> | Improve this Doc View Source ISorted<T>.RangeFromTo(T, T) Declaration IDirectedEnumerable<T> ISorted<T>.RangeFromTo(T bot, T top) Parameters Type Name Description T bot T top Returns Type Description IDirectedEnumerable <T> | Improve this Doc View Source ISorted<T>.RangeTo(T) Declaration IDirectedEnumerable<T> ISorted<T>.RangeTo(T top) Parameters Type Name Description T top Returns Type Description IDirectedEnumerable <T> Implements IIndexedSorted<T> IIndexed<T> IReadOnlyList<T> IReadOnlyCollection<T> System.Collections.IEnumerable IPersistentSorted<T> ISorted<T> ISequenced<T> ICollection<T> IExtensible<T> System.Collections.Generic.ICollection<> IDirectedCollectionValue<T> ICollectionValue<T> IShowable IFormattable IDirectedEnumerable<T> System.Collections.Generic.IEnumerable<> IDisposable System.Collections.Generic.ISet<>"
  },
  "api/Lucene.Net/Lucene.Net.Support.WeakDictionary-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.WeakDictionary-2.html",
    "title": "Class WeakDictionary<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeakDictionary<TKey, TValue> Inheritance System.Object WeakDictionary<TKey, TValue> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public sealed class WeakDictionary<TKey, TValue> : IDictionary<TKey, TValue> where TKey : class Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source WeakDictionary() Declaration public WeakDictionary() | Improve this Doc View Source WeakDictionary(IEnumerable<KeyValuePair<TKey, TValue>>) Declaration public WeakDictionary(IEnumerable<KeyValuePair<TKey, TValue>> otherDictionary) Parameters Type Name Description IEnumerable < KeyValuePair <TKey, TValue>> otherDictionary | Improve this Doc View Source WeakDictionary(Int32) Declaration public WeakDictionary(int initialCapacity) Parameters Type Name Description System.Int32 initialCapacity Properties | Improve this Doc View Source Count Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[TKey] Declaration public TValue this[TKey key] { get; set; } Parameters Type Name Description TKey key Property Value Type Description TValue | Improve this Doc View Source Keys Declaration public ICollection<TKey> Keys { get; } Property Value Type Description ICollection <TKey> | Improve this Doc View Source Values Declaration public ICollection<TValue> Values { get; } Property Value Type Description ICollection <TValue> Methods | Improve this Doc View Source Add(TKey, TValue) Declaration public void Add(TKey key, TValue value) Parameters Type Name Description TKey key TValue value | Improve this Doc View Source AddOrUpdate(TKey, TValue) Declaration public void AddOrUpdate(TKey key, TValue value) Parameters Type Name Description TKey key TValue value | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source ContainsKey(TKey) Declaration public bool ContainsKey(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() Returns Type Description IEnumerator < KeyValuePair <TKey, TValue>> | Improve this Doc View Source Remove(TKey) Declaration public bool Remove(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source TryGetValue(TKey, out TValue) Declaration public bool TryGetValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Support.WritableArrayAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.WritableArrayAttribute.html",
    "title": "Class WritableArrayAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WritableArrayAttribute Attribute to define a property or method as a writable array. Per MSDN, members should never return arrays because the array contents can be updated, which makes the behavior confusing. However, Lucene's design sometimes relies on other classes to update arrays - both as array fields and as methods that return arrays. So, in these cases we are making an exception to this rule and marking them with WritableArrayAttribute to signify that this is intentional. For properties that violate this rule, you should also use the : [WritableArray, SuppressMessage(\"Microsoft.Performance\", \"CA1819\", Justification = \"Lucene's design requires some writable array properties\")] Inheritance System.Object WritableArrayAttribute Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class WritableArrayAttribute : Attribute"
  },
  "api/Lucene.Net/Lucene.Net.Util.AlreadySetException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.AlreadySetException.html",
    "title": "Class AlreadySetException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AlreadySetException Thrown when Set(T) is called more than once. Inheritance System.Object AlreadySetException Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class AlreadySetException : InvalidOperationException Constructors | Improve this Doc View Source AlreadySetException() Initializes a new instance of AlreadySetException . Declaration public AlreadySetException()"
  },
  "api/Lucene.Net/Lucene.Net.Util.ArrayUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ArrayUtil.html",
    "title": "Class ArrayUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArrayUtil Methods for manipulating arrays. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ArrayUtil Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class ArrayUtil : object Fields | Improve this Doc View Source MAX_ARRAY_LENGTH Maximum length for an array; we set this to \"a bit\" below because the exact max allowed byte[] is JVM dependent, so we want to avoid a case where a large value worked during indexing on one JVM but failed later at search time with a different JVM. Declaration public static readonly int MAX_ARRAY_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Byte[], Int32, Byte[], Int32, Int32) See if two array slices are the same. Declaration public static bool Equals(byte[] left, int offsetLeft, byte[] right, int offsetRight, int length) Parameters Type Name Description System.Byte [] left The left array to compare System.Int32 offsetLeft The offset into the array. Must be positive System.Byte [] right The right array to compare System.Int32 offsetRight the offset into the right array. Must be positive System.Int32 length The length of the section of the array to compare Returns Type Description System.Boolean true if the two arrays, starting at their respective offsets, are equal See Also Equals<T>(T[], T[]) | Improve this Doc View Source Equals(Char[], Int32, Char[], Int32, Int32) See if two array slices are the same. Declaration public static bool Equals(char[] left, int offsetLeft, char[] right, int offsetRight, int length) Parameters Type Name Description System.Char [] left The left array to compare System.Int32 offsetLeft The offset into the array. Must be positive System.Char [] right The right array to compare System.Int32 offsetRight the offset into the right array. Must be positive System.Int32 length The length of the section of the array to compare Returns Type Description System.Boolean true if the two arrays, starting at their respective offsets, are equal See Also Equals<T>(T[], T[]) | Improve this Doc View Source Equals(Int32[], Int32, Int32[], Int32, Int32) See if two array slices are the same. Declaration public static bool Equals(int[] left, int offsetLeft, int[] right, int offsetRight, int length) Parameters Type Name Description System.Int32 [] left The left array to compare System.Int32 offsetLeft The offset into the array. Must be positive System.Int32 [] right The right array to compare System.Int32 offsetRight the offset into the right array. Must be positive System.Int32 length The length of the section of the array to compare Returns Type Description System.Boolean true if the two arrays, starting at their respective offsets, are equal See Also Equals<T>(T[], T[]) | Improve this Doc View Source GetHashCode(Byte[], Int32, Int32) Returns hash of bytes in range start (inclusive) to end (inclusive) Declaration public static int GetHashCode(byte[] array, int start, int end) Parameters Type Name Description System.Byte [] array System.Int32 start System.Int32 end Returns Type Description System.Int32 | Improve this Doc View Source GetHashCode(Char[], Int32, Int32) Returns hash of chars in range start (inclusive) to end (inclusive) Declaration public static int GetHashCode(char[] array, int start, int end) Parameters Type Name Description System.Char [] array System.Int32 start System.Int32 end Returns Type Description System.Int32 | Improve this Doc View Source GetNaturalComparer<T>() Get the natural for the provided object class. The comparer returned depends on the argument: If the type is , the comparer returned uses the to make the comparison to ensure that the current culture doesn't affect the results. This is the default string comparison used in Java, and what Lucene's design depends on. If the type implements , the comparer uses for the comparison. This allows the use of types with custom comparison schemes. If neither of the above conditions are true, will default to . NOTE: This was naturalComparer() in Lucene Declaration public static IComparer<T> GetNaturalComparer<T>() Returns Type Description IComparer <T> Type Parameters Name Description T | Improve this Doc View Source GetShrinkSize(Int32, Int32, Int32) Declaration public static int GetShrinkSize(int currentSize, int targetSize, int bytesPerElement) Parameters Type Name Description System.Int32 currentSize System.Int32 targetSize System.Int32 bytesPerElement Returns Type Description System.Int32 | Improve this Doc View Source Grow(Boolean[]) Declaration public static bool[] Grow(bool[] array) Parameters Type Name Description System.Boolean [] array Returns Type Description System.Boolean [] | Improve this Doc View Source Grow(Boolean[], Int32) Declaration public static bool[] Grow(bool[] array, int minSize) Parameters Type Name Description System.Boolean [] array System.Int32 minSize Returns Type Description System.Boolean [] | Improve this Doc View Source Grow(Byte[]) Declaration public static byte[] Grow(byte[] array) Parameters Type Name Description System.Byte [] array Returns Type Description System.Byte [] | Improve this Doc View Source Grow(Byte[], Int32) Declaration public static byte[] Grow(byte[] array, int minSize) Parameters Type Name Description System.Byte [] array System.Int32 minSize Returns Type Description System.Byte [] | Improve this Doc View Source Grow(Char[]) Declaration public static char[] Grow(char[] array) Parameters Type Name Description System.Char [] array Returns Type Description System.Char [] | Improve this Doc View Source Grow(Char[], Int32) Declaration public static char[] Grow(char[] array, int minSize) Parameters Type Name Description System.Char [] array System.Int32 minSize Returns Type Description System.Char [] | Improve this Doc View Source Grow(Double[]) Declaration public static double[] Grow(double[] array) Parameters Type Name Description System.Double [] array Returns Type Description System.Double [] | Improve this Doc View Source Grow(Double[], Int32) Declaration public static double[] Grow(double[] array, int minSize) Parameters Type Name Description System.Double [] array System.Int32 minSize Returns Type Description System.Double [] | Improve this Doc View Source Grow(Int16[]) Declaration public static short[] Grow(short[] array) Parameters Type Name Description System.Int16 [] array Returns Type Description System.Int16 [] | Improve this Doc View Source Grow(Int16[], Int32) Declaration public static short[] Grow(short[] array, int minSize) Parameters Type Name Description System.Int16 [] array System.Int32 minSize Returns Type Description System.Int16 [] | Improve this Doc View Source Grow(Int32[]) Declaration public static int[] Grow(int[] array) Parameters Type Name Description System.Int32 [] array Returns Type Description System.Int32 [] | Improve this Doc View Source Grow(Int32[], Int32) Declaration public static int[] Grow(int[] array, int minSize) Parameters Type Name Description System.Int32 [] array System.Int32 minSize Returns Type Description System.Int32 [] | Improve this Doc View Source Grow(Int32[][]) Declaration public static int[][] Grow(int[][] array) Parameters Type Name Description System.Int32 [][] array Returns Type Description System.Int32 [][] | Improve this Doc View Source Grow(Int32[][], Int32) Declaration public static int[][] Grow(int[][] array, int minSize) Parameters Type Name Description System.Int32 [][] array System.Int32 minSize Returns Type Description System.Int32 [][] | Improve this Doc View Source Grow(Int64[]) Declaration public static long[] Grow(long[] array) Parameters Type Name Description System.Int64 [] array Returns Type Description System.Int64 [] | Improve this Doc View Source Grow(Int64[], Int32) Declaration public static long[] Grow(long[] array, int minSize) Parameters Type Name Description System.Int64 [] array System.Int32 minSize Returns Type Description System.Int64 [] | Improve this Doc View Source Grow(SByte[], Int32) Declaration public static sbyte[] Grow(sbyte[] array, int minSize) Parameters Type Name Description System.SByte [] array System.Int32 minSize Returns Type Description System.SByte [] | Improve this Doc View Source Grow(Single[]) Declaration public static float[] Grow(float[] array) Parameters Type Name Description System.Single [] array Returns Type Description System.Single [] | Improve this Doc View Source Grow(Single[], Int32) Declaration public static float[] Grow(float[] array, int minSize) Parameters Type Name Description System.Single [] array System.Int32 minSize Returns Type Description System.Single [] | Improve this Doc View Source Grow(Single[][]) Declaration public static float[][] Grow(float[][] array) Parameters Type Name Description System.Single [][] array Returns Type Description System.Single [][] | Improve this Doc View Source Grow(Single[][], Int32) Declaration public static float[][] Grow(float[][] array, int minSize) Parameters Type Name Description System.Single [][] array System.Int32 minSize Returns Type Description System.Single [][] | Improve this Doc View Source IntroSort<T>(T[]) Sorts the given array in natural order. This method uses the intro sort algorithm, but falls back to insertion sort for small arrays. Declaration public static void IntroSort<T>(T[] a) Parameters Type Name Description T[] a Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(T[], IComparer<T>) Sorts the given array using the . This method uses the intro sort algorithm, but falls back to insertion sort for small arrays. Declaration public static void IntroSort<T>(T[] a, IComparer<T> comp) Parameters Type Name Description T[] a IComparer <T> comp Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(T[], Int32, Int32) Sorts the given array slice in natural order. This method uses the intro sort algorithm, but falls back to insertion sort for small arrays. Declaration public static void IntroSort<T>(T[] a, int fromIndex, int toIndex) Parameters Type Name Description T[] a System.Int32 fromIndex Start index (inclusive) System.Int32 toIndex End index (exclusive) Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(T[], Int32, Int32, IComparer<T>) Sorts the given array slice using the . This method uses the intro sort algorithm, but falls back to insertion sort for small arrays. Declaration public static void IntroSort<T>(T[] a, int fromIndex, int toIndex, IComparer<T> comp) Parameters Type Name Description T[] a System.Int32 fromIndex Start index (inclusive) System.Int32 toIndex End index (exclusive) IComparer <T> comp Type Parameters Name Description T | Improve this Doc View Source Oversize(Int32, Int32) Returns an array size >= minTargetSize , generally over-allocating exponentially to achieve amortized linear-time cost as the array grows. NOTE: this was originally borrowed from Python 2.4.2 listobject.c sources (attribution in LICENSE.txt), but has now been substantially changed based on discussions from java-dev thread with subject \"Dynamic array reallocation algorithms\", started on Jan 12 2010. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static int Oversize(int minTargetSize, int bytesPerElement) Parameters Type Name Description System.Int32 minTargetSize Minimum required value to be returned. System.Int32 bytesPerElement Bytes used by each element of the array. See constants in RamUsageEstimator . Returns Type Description System.Int32 | Improve this Doc View Source ParseInt32(Char[]) Parses the string argument as if it was an value and returns the result. Throws if the string does not represent an int quantity. NOTE: This was parseInt() in Lucene Declaration public static int ParseInt32(char[] chars) Parameters Type Name Description System.Char [] chars A string representation of an int quantity. Returns Type Description System.Int32 The value represented by the argument | Improve this Doc View Source ParseInt32(Char[], Int32, Int32) Parses a char array into an . NOTE: This was parseInt() in Lucene Declaration public static int ParseInt32(char[] chars, int offset, int len) Parameters Type Name Description System.Char [] chars The character array System.Int32 offset The offset into the array System.Int32 len The length Returns Type Description System.Int32 the | Improve this Doc View Source ParseInt32(Char[], Int32, Int32, Int32) Parses the string argument as if it was an value and returns the result. Throws if the string does not represent an quantity. The second argument specifies the radix to use when parsing the value. NOTE: This was parseInt() in Lucene Declaration public static int ParseInt32(char[] chars, int offset, int len, int radix) Parameters Type Name Description System.Char [] chars A string representation of an int quantity. System.Int32 offset System.Int32 len System.Int32 radix The base to use for conversion. Returns Type Description System.Int32 The value represented by the argument | Improve this Doc View Source Shrink(Boolean[], Int32) Declaration public static bool[] Shrink(bool[] array, int targetSize) Parameters Type Name Description System.Boolean [] array System.Int32 targetSize Returns Type Description System.Boolean [] | Improve this Doc View Source Shrink(Byte[], Int32) Declaration public static byte[] Shrink(byte[] array, int targetSize) Parameters Type Name Description System.Byte [] array System.Int32 targetSize Returns Type Description System.Byte [] | Improve this Doc View Source Shrink(Char[], Int32) Declaration public static char[] Shrink(char[] array, int targetSize) Parameters Type Name Description System.Char [] array System.Int32 targetSize Returns Type Description System.Char [] | Improve this Doc View Source Shrink(Int16[], Int32) Declaration public static short[] Shrink(short[] array, int targetSize) Parameters Type Name Description System.Int16 [] array System.Int32 targetSize Returns Type Description System.Int16 [] | Improve this Doc View Source Shrink(Int32[], Int32) Declaration public static int[] Shrink(int[] array, int targetSize) Parameters Type Name Description System.Int32 [] array System.Int32 targetSize Returns Type Description System.Int32 [] | Improve this Doc View Source Shrink(Int32[][], Int32) Declaration public static int[][] Shrink(int[][] array, int targetSize) Parameters Type Name Description System.Int32 [][] array System.Int32 targetSize Returns Type Description System.Int32 [][] | Improve this Doc View Source Shrink(Int64[], Int32) Declaration public static long[] Shrink(long[] array, int targetSize) Parameters Type Name Description System.Int64 [] array System.Int32 targetSize Returns Type Description System.Int64 [] | Improve this Doc View Source Shrink(Single[][], Int32) Declaration public static float[][] Shrink(float[][] array, int targetSize) Parameters Type Name Description System.Single [][] array System.Int32 targetSize Returns Type Description System.Single [][] | Improve this Doc View Source Swap<T>(T[], Int32, Int32) Swap values stored in slots i and j Declaration public static void Swap<T>(T[] arr, int i, int j) Parameters Type Name Description T[] arr System.Int32 i System.Int32 j Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(T[]) Sorts the given array in natural order. this method uses the Tim sort algorithm, but falls back to binary sort for small arrays. Declaration public static void TimSort<T>(T[] a) Parameters Type Name Description T[] a Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(T[], IComparer<T>) Sorts the given array using the . this method uses the Tim sort algorithm, but falls back to binary sort for small arrays. Declaration public static void TimSort<T>(T[] a, IComparer<T> comp) Parameters Type Name Description T[] a IComparer <T> comp Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(T[], Int32, Int32) Sorts the given array slice in natural order. this method uses the Tim sort algorithm, but falls back to binary sort for small arrays. Declaration public static void TimSort<T>(T[] a, int fromIndex, int toIndex) Parameters Type Name Description T[] a System.Int32 fromIndex Start index (inclusive) System.Int32 toIndex End index (exclusive) Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(T[], Int32, Int32, IComparer<T>) Sorts the given array slice using the . This method uses the Tim sort algorithm, but falls back to binary sort for small arrays. Declaration public static void TimSort<T>(T[] a, int fromIndex, int toIndex, IComparer<T> comp) Parameters Type Name Description T[] a System.Int32 fromIndex Start index (inclusive) System.Int32 toIndex End index (exclusive) IComparer <T> comp Type Parameters Name Description T | Improve this Doc View Source ToInt32Array(ICollection<Nullable<Int32>>) NOTE: This was toIntArray() in Lucene Declaration public static int[] ToInt32Array(ICollection<int?> ints) Parameters Type Name Description ICollection < System.Nullable < System.Int32 >> ints Returns Type Description System.Int32 []"
  },
  "api/Lucene.Net/Lucene.Net.Util.Attribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Attribute.html",
    "title": "Class Attribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Attribute Base class for Attributes that can be added to a AttributeSource . Attributes are used to add data in a dynamic, yet type-safe way to a source of usually streamed objects, e. g. a TokenStream . Inheritance System.Object Attribute NumericTokenStream.NumericTermAttribute CharTermAttribute FlagsAttribute KeywordAttribute OffsetAttribute PayloadAttribute PositionIncrementAttribute PositionLengthAttribute TypeAttribute BoostAttribute FuzzyTermsEnum.LevenshteinAutomataAttribute MaxNonCompetitiveBoostAttribute Implements IAttribute Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Attribute : object, IAttribute Methods | Improve this Doc View Source Clear() Clears the values in this Attribute and resets it to its default value. If this implementation implements more than one Attribute interface it clears all. Declaration public abstract void Clear() | Improve this Doc View Source Clone() Shallow clone. Subclasses must override this if they need to clone any members deeply, Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source CopyTo(IAttribute) Copies the values from this Attribute into the passed-in target attribute. The target implementation must support all the IAttribute s this implementation supports. Declaration public abstract void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target | Improve this Doc View Source ReflectAsString(Boolean) This method returns the current attribute values as a string in the following format by calling the ReflectWith(IAttributeReflector) method: if prependAttClass =true: \"AttributeClass.Key=value,AttributeClass.Key=value\" if prependAttClass =false: \"key=value,key=value\" Declaration public string ReflectAsString(bool prependAttClass) Parameters Type Name Description System.Boolean prependAttClass Returns Type Description System.String See Also ReflectWith(IAttributeReflector) | Improve this Doc View Source ReflectWith(IAttributeReflector) This method is for introspection of attributes, it should simply add the key/values this attribute holds to the given IAttributeReflector . The default implementation calls Reflect(Type, String, Object) for all non-static fields from the implementing class, using the field name as key and the field value as value. The IAttribute class is also determined by Reflection. Please note that the default implementation can only handle single-Attribute implementations. Custom implementations look like this (e.g. for a combined attribute implementation): public void ReflectWith(IAttributeReflector reflector) { reflector.Reflect(typeof(ICharTermAttribute), \"term\", GetTerm()); reflector.Reflect(typeof(IPositionIncrementAttribute), \"positionIncrement\", GetPositionIncrement()); } If you implement this method, make sure that for each invocation, the same set of IAttribute interfaces and keys are passed to Reflect(Type, String, Object) in the same order, but possibly different values. So don't automatically exclude e.g. null properties! Declaration public virtual void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector See Also ReflectAsString(Boolean) | Improve this Doc View Source ToString() The default implementation of this method accesses all declared fields of this object and prints the values in the following syntax: public String ToString() { return \"start=\" + startOffset + \",end=\" + endOffset; } This method may be overridden by subclasses. Declaration public override string ToString() Returns Type Description System.String Implements IAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Util.AttributeSource.AttributeFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.AttributeSource.AttributeFactory.html",
    "title": "Class AttributeSource.AttributeFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AttributeSource.AttributeFactory An AttributeSource.AttributeFactory creates instances of Attribute s. Inheritance System.Object AttributeSource.AttributeFactory Token.TokenAttributeFactory Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class AttributeFactory : object Fields | Improve this Doc View Source DEFAULT_ATTRIBUTE_FACTORY This is the default factory that creates Attribute s using the of the supplied IAttribute interface by removing the I from the prefix. Declaration public static readonly AttributeSource.AttributeFactory DEFAULT_ATTRIBUTE_FACTORY Field Value Type Description AttributeSource.AttributeFactory Methods | Improve this Doc View Source CreateAttributeInstance<T>() returns an Attribute for the supplied IAttribute interface. Declaration public abstract Attribute CreateAttributeInstance<T>() where T : IAttribute Returns Type Description Attribute Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.AttributeSource.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.AttributeSource.html",
    "title": "Class AttributeSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AttributeSource An AttributeSource contains a list of different Attribute s, and methods to add and get them. There can only be a single instance of an attribute in the same AttributeSource instance. This is ensured by passing in the actual type of the IAttribute to the AddAttribute<T>() , which then checks if an instance of that type is already present. If yes, it returns the instance, otherwise it creates a new instance and returns it. Inheritance System.Object AttributeSource TokenStream Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class AttributeSource : object Constructors | Improve this Doc View Source AttributeSource() An AttributeSource using the default attribute factory DEFAULT_ATTRIBUTE_FACTORY . Declaration public AttributeSource() | Improve this Doc View Source AttributeSource(AttributeSource) An AttributeSource that uses the same attributes as the supplied one. Declaration public AttributeSource(AttributeSource input) Parameters Type Name Description AttributeSource input | Improve this Doc View Source AttributeSource(AttributeSource.AttributeFactory) An AttributeSource using the supplied AttributeSource.AttributeFactory for creating new IAttribute instances. Declaration public AttributeSource(AttributeSource.AttributeFactory factory) Parameters Type Name Description AttributeSource.AttributeFactory factory Properties | Improve this Doc View Source HasAttributes Returns true , if this AttributeSource has any attributes Declaration public bool HasAttributes { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source AddAttribute<T>() The caller must pass in an interface type that extends IAttribute . This method first checks if an instance of the corresponding class is already in this AttributeSource and returns it. Otherwise a new instance is created, added to this AttributeSource and returned. Declaration public T AddAttribute<T>() where T : IAttribute Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source AddAttributeImpl(Attribute) Expert: Adds a custom Attribute instance with one or more IAttribute interfaces. Please note: It is not guaranteed, that att is added to the AttributeSource , because the provided attributes may already exist. You should always retrieve the wanted attributes using GetAttribute<T>() after adding with this method and cast to your . The recommended way to use custom implementations is using an AttributeSource.AttributeFactory . Declaration public void AddAttributeImpl(Attribute att) Parameters Type Name Description Attribute att | Improve this Doc View Source CaptureState() Captures the state of all Attribute s. The return value can be passed to RestoreState(AttributeSource.State) to restore the state of this or another AttributeSource . Declaration public virtual AttributeSource.State CaptureState() Returns Type Description AttributeSource.State | Improve this Doc View Source ClearAttributes() Resets all Attribute s in this AttributeSource by calling Clear() on each IAttribute implementation. Declaration public void ClearAttributes() | Improve this Doc View Source CloneAttributes() Performs a clone of all Attribute instances returned in a new AttributeSource instance. This method can be used to e.g. create another TokenStream with exactly the same attributes (using AttributeSource(AttributeSource) ). You can also use it as a (non-performant) replacement for CaptureState() , if you need to look into / modify the captured state. Declaration public AttributeSource CloneAttributes() Returns Type Description AttributeSource | Improve this Doc View Source CopyTo(AttributeSource) Copies the contents of this AttributeSource to the given target AttributeSource . The given instance has to provide all IAttribute s this instance contains. The actual attribute implementations must be identical in both AttributeSource instances; ideally both AttributeSource instances should use the same AttributeSource.AttributeFactory . You can use this method as a replacement for RestoreState(AttributeSource.State) , if you use CloneAttributes() instead of CaptureState() . Declaration public void CopyTo(AttributeSource target) Parameters Type Name Description AttributeSource target | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetAttribute<T>() The caller must pass in an interface type that extends IAttribute . Returns the instance of the corresponding Attribute contained in this AttributeSource Declaration public virtual T GetAttribute<T>() where T : IAttribute Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source GetAttributeClassesEnumerator() Returns a new iterator that iterates the attribute classes in the same order they were added in. Declaration public IEnumerator<Type> GetAttributeClassesEnumerator() Returns Type Description IEnumerator < Type > | Improve this Doc View Source GetAttributeFactory() Returns the used AttributeSource.AttributeFactory . Declaration public AttributeSource.AttributeFactory GetAttributeFactory() Returns Type Description AttributeSource.AttributeFactory | Improve this Doc View Source GetAttributeImplsEnumerator() Returns a new iterator that iterates all unique IAttribute implementations. This iterator may contain less entries than GetAttributeClassesEnumerator() , if one instance implements more than one IAttribute interface. Declaration public IEnumerator<Attribute> GetAttributeImplsEnumerator() Returns Type Description IEnumerator < Attribute > | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source HasAttribute<T>() The caller must pass in an interface type that extends IAttribute . Returns true , if this AttributeSource contains the corrsponding Attribute . Declaration public bool HasAttribute<T>() where T : IAttribute Returns Type Description System.Boolean Type Parameters Name Description T | Improve this Doc View Source ReflectAsString(Boolean) This method returns the current attribute values as a string in the following format by calling the ReflectWith(IAttributeReflector) method: if prependAttClass =true: \"AttributeClass.Key=value,AttributeClass.Key=value\" if prependAttClass =false: \"key=value,key=value\" Declaration public string ReflectAsString(bool prependAttClass) Parameters Type Name Description System.Boolean prependAttClass Returns Type Description System.String See Also ReflectWith(IAttributeReflector) | Improve this Doc View Source ReflectWith(IAttributeReflector) This method is for introspection of attributes, it should simply add the key/values this AttributeSource holds to the given IAttributeReflector . This method iterates over all IAttribute implementations and calls the corresponding ReflectWith(IAttributeReflector) method. Declaration public void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector See Also ReflectWith ( IAttributeReflector ) | Improve this Doc View Source RestoreState(AttributeSource.State) Restores this state by copying the values of all attribute implementations that this state contains into the attributes implementations of the targetStream. The targetStream must contain a corresponding instance for each argument contained in this state (e.g. it is not possible to restore the state of an AttributeSource containing a ICharTermAttribute into a AttributeSource using a Token instance as implementation). Note that this method does not affect attributes of the targetStream that are not contained in this state. In other words, if for example the targetStream contains an IOffsetAttribute , but this state doesn't, then the value of the IOffsetAttribute remains unchanged. It might be desirable to reset its value to the default, in which case the caller should first call ClearAttributes() ( TokenStream.ClearAttributes() on the targetStream. Declaration public void RestoreState(AttributeSource.State state) Parameters Type Name Description AttributeSource.State state | Improve this Doc View Source ToString() Returns a string consisting of the class's simple name, the hex representation of the identity hash code, and the current reflection of all attributes. Declaration public override string ToString() Returns Type Description System.String See Also ReflectAsString(Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Util.AttributeSource.State.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.AttributeSource.State.html",
    "title": "Class AttributeSource.State | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AttributeSource.State This class holds the state of an AttributeSource . Inheritance System.Object AttributeSource.State Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class State : object Methods | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object See Also CaptureState () RestoreState ( AttributeSource.State )"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.Automaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.Automaton.html",
    "title": "Class Automaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Automaton Finite-state automaton with regular expression operations. Class invariants: An automaton is either represented explicitly (with State and Transition objects) or with a singleton string (see Singleton and ExpandSingleton() ) in case the automaton is known to accept exactly one string. (Implicitly, all states and transitions of an automaton are reachable from its initial state.) Automata are always reduced (see Reduce() ) and have no transitions to dead states (see RemoveDeadTransitions() ). If an automaton is nondeterministic, then IsDeterministic returns false (but the converse is not required). Automata provided as input to operations are generally assumed to be disjoint. If the states or transitions are manipulated manually, the RestoreInvariant() method and IsDeterministic setter should be used afterwards to restore representation invariants that are assumed by the built-in automata operations. Note: this class has internal mutable state and is not thread safe. It is the caller's responsibility to ensure any necessary synchronization if you wish to use the same Automaton from multiple threads. In general it is instead recommended to use a RunAutomaton for multithreaded matching: it is immutable, thread safe, and much faster. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Automaton Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class Automaton : object Constructors | Improve this Doc View Source Automaton() Declaration public Automaton() | Improve this Doc View Source Automaton(State) Constructs a new automaton that accepts the empty language. Using this constructor, automata can be constructed manually from State and Transition objects. Declaration public Automaton(State initial) Parameters Type Name Description State initial See Also State Transition Fields | Improve this Doc View Source MINIMIZE_HOPCROFT Minimize using Hopcroft's O(n log n) algorithm. this is regarded as one of the most generally efficient algorithms that exist. Declaration public const int MINIMIZE_HOPCROFT = null Field Value Type Description System.Int32 See Also SetMinimization(Int32) Properties | Improve this Doc View Source Info Associates extra information with this automaton. Declaration public virtual object Info { get; set; } Property Value Type Description System.Object | Improve this Doc View Source IsDeterministic Returns deterministic flag for this automaton. Declaration public virtual bool IsDeterministic { get; set; } Property Value Type Description System.Boolean true if the automaton is definitely deterministic, false if the automaton may be nondeterministic | Improve this Doc View Source IsEmptyString See IsEmptyString(Automaton) . Declaration public virtual bool IsEmptyString { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Singleton Returns the singleton string for this automaton. An automaton that accepts exactly one string may be represented in singleton mode. In that case, this method may be used to obtain the string. Declaration public virtual string Singleton { get; } Property Value Type Description System.String String, null if this automaton is not in singleton mode. Methods | Improve this Doc View Source ClearNumberedStates() Declaration public virtual void ClearNumberedStates() | Improve this Doc View Source Clone() Returns a clone of this automaton. Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Complement() See Complement(Automaton) . Declaration public virtual Automaton Complement() Returns Type Description Automaton | Improve this Doc View Source Concatenate(IList<Automaton>) See Concatenate(IList<Automaton>) . Declaration public static Automaton Concatenate(IList<Automaton> l) Parameters Type Name Description IList < Automaton > l Returns Type Description Automaton | Improve this Doc View Source Concatenate(Automaton) See Concatenate(Automaton, Automaton) . Declaration public virtual Automaton Concatenate(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Determinize() See Determinize(Automaton) . Declaration public virtual void Determinize() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source ExpandSingleton() Expands singleton representation to normal representation. Does nothing if not in singleton representation. Declaration public virtual void ExpandSingleton() | Improve this Doc View Source GetAcceptStates() Returns the set of reachable accept states. Declaration public virtual ISet<State> GetAcceptStates() Returns Type Description ISet < State > Set of State objects. | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source GetInitialState() Gets initial state. Declaration public virtual State GetInitialState() Returns Type Description State state | Improve this Doc View Source GetNumberedStates() Declaration public virtual State[] GetNumberedStates() Returns Type Description State [] | Improve this Doc View Source GetNumberOfStates() Returns the number of states in this automaton. Declaration public virtual int GetNumberOfStates() Returns Type Description System.Int32 | Improve this Doc View Source GetNumberOfTransitions() Returns the number of transitions in this automaton. This number is counted as the total number of edges, where one edge may be a character interval. Declaration public virtual int GetNumberOfTransitions() Returns Type Description System.Int32 | Improve this Doc View Source GetSortedTransitions() Returns a sorted array of transitions for each state (and sets state numbers). Declaration public virtual Transition[][] GetSortedTransitions() Returns Type Description Transition [][] | Improve this Doc View Source GetStartPoints() Returns sorted array of all interval start points. Declaration public virtual int[] GetStartPoints() Returns Type Description System.Int32 [] | Improve this Doc View Source Intersection(Automaton) See Intersection(Automaton, Automaton) . Declaration public virtual Automaton Intersection(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Minimize(Automaton) See Minimize(Automaton) . Returns the automaton being given as argument. Declaration public static Automaton Minimize(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Minus(Automaton) See Minus(Automaton, Automaton) . Declaration public virtual Automaton Minus(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Optional() See Optional(Automaton) . Declaration public virtual Automaton Optional() Returns Type Description Automaton | Improve this Doc View Source Reduce() Reduces this automaton. An automaton is \"reduced\" by combining overlapping and adjacent edge intervals with same destination. Declaration public virtual void Reduce() | Improve this Doc View Source RemoveDeadTransitions() Removes transitions to dead states and calls Reduce() . (A state is \"dead\" if no accept state is reachable from it.) Declaration public virtual void RemoveDeadTransitions() | Improve this Doc View Source Repeat() See Repeat(Automaton) . Declaration public virtual Automaton Repeat() Returns Type Description Automaton | Improve this Doc View Source Repeat(Int32) See Repeat(Automaton, Int32) . Declaration public virtual Automaton Repeat(int min) Parameters Type Name Description System.Int32 min Returns Type Description Automaton | Improve this Doc View Source Repeat(Int32, Int32) See Repeat(Automaton, Int32, Int32) . Declaration public virtual Automaton Repeat(int min, int max) Parameters Type Name Description System.Int32 min System.Int32 max Returns Type Description Automaton | Improve this Doc View Source RestoreInvariant() Restores representation invariant. This method must be invoked before any built-in automata operation is performed if automaton states or transitions are manipulated manually. Declaration public virtual void RestoreInvariant() See Also IsDeterministic | Improve this Doc View Source SetAllowMutate(Boolean) Sets or resets allow mutate flag. If this flag is set, then all automata operations may modify automata given as input; otherwise, operations will always leave input automata languages unmodified. By default, the flag is not set. Declaration public static bool SetAllowMutate(bool flag) Parameters Type Name Description System.Boolean flag if true , the flag is set Returns Type Description System.Boolean previous value of the flag | Improve this Doc View Source SetMinimization(Int32) Selects minimization algorithm (default: MINIMIZE_HOPCROFT ). Declaration public static void SetMinimization(int algorithm) Parameters Type Name Description System.Int32 algorithm minimization algorithm | Improve this Doc View Source SetMinimizeAlways(Boolean) Sets or resets minimize always flag. If this flag is set, then Minimize(Automaton) will automatically be invoked after all operations that otherwise may produce non-minimal automata. By default, the flag is not set. Declaration public static void SetMinimizeAlways(bool flag) Parameters Type Name Description System.Boolean flag if true , the flag is set | Improve this Doc View Source SetNumberedStates(State[]) Declaration public virtual void SetNumberedStates(State[] states) Parameters Type Name Description State [] states | Improve this Doc View Source SetNumberedStates(State[], Int32) Declaration public virtual void SetNumberedStates(State[] states, int count) Parameters Type Name Description State [] states System.Int32 count | Improve this Doc View Source SubsetOf(Automaton) See SubsetOf(Automaton, Automaton) . Declaration public virtual bool SubsetOf(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source ToDot() Returns Graphviz Dot representation of this automaton. Declaration public virtual string ToDot() Returns Type Description System.String | Improve this Doc View Source ToString() Returns a string representation of this automaton. Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source Union(ICollection<Automaton>) See Union(ICollection<Automaton>) . Declaration public static Automaton Union(ICollection<Automaton> l) Parameters Type Name Description ICollection < Automaton > l Returns Type Description Automaton | Improve this Doc View Source Union(Automaton) See Union(Automaton, Automaton) . Declaration public virtual Automaton Union(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.BasicAutomata.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.BasicAutomata.html",
    "title": "Class BasicAutomata | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicAutomata Construction of basic automata. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicAutomata Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public sealed class BasicAutomata : object Methods | Improve this Doc View Source MakeAnyChar() Returns a new (deterministic) automaton that accepts any single codepoint. Declaration public static Automaton MakeAnyChar() Returns Type Description Automaton | Improve this Doc View Source MakeAnyString() Returns a new (deterministic) automaton that accepts all strings. Declaration public static Automaton MakeAnyString() Returns Type Description Automaton | Improve this Doc View Source MakeChar(Int32) Returns a new (deterministic) automaton that accepts a single codepoint of the given value. Declaration public static Automaton MakeChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description Automaton | Improve this Doc View Source MakeCharRange(Int32, Int32) Returns a new (deterministic) automaton that accepts a single codepoint whose value is in the given interval (including both end points). Declaration public static Automaton MakeCharRange(int min, int max) Parameters Type Name Description System.Int32 min System.Int32 max Returns Type Description Automaton | Improve this Doc View Source MakeEmpty() Returns a new (deterministic) automaton with the empty language. Declaration public static Automaton MakeEmpty() Returns Type Description Automaton | Improve this Doc View Source MakeEmptyString() Returns a new (deterministic) automaton that accepts only the empty string. Declaration public static Automaton MakeEmptyString() Returns Type Description Automaton | Improve this Doc View Source MakeInterval(Int32, Int32, Int32) Returns a new automaton that accepts strings representing decimal non-negative integers in the given interval. Declaration public static Automaton MakeInterval(int min, int max, int digits) Parameters Type Name Description System.Int32 min Minimal value of interval. System.Int32 max Maximal value of interval (both end points are included in the interval). System.Int32 digits If > 0, use fixed number of digits (strings must be prefixed by 0's to obtain the right length) - otherwise, the number of digits is not fixed. Returns Type Description Automaton | Improve this Doc View Source MakeString(Int32[], Int32, Int32) Declaration public static Automaton MakeString(int[] word, int offset, int length) Parameters Type Name Description System.Int32 [] word System.Int32 offset System.Int32 length Returns Type Description Automaton | Improve this Doc View Source MakeString(String) Returns a new (deterministic) automaton that accepts the single given string. Declaration public static Automaton MakeString(string s) Parameters Type Name Description System.String s Returns Type Description Automaton | Improve this Doc View Source MakeStringUnion(ICollection<BytesRef>) Returns a new (deterministic and minimal) automaton that accepts the union of the given collection of BytesRef s representing UTF-8 encoded strings. Declaration public static Automaton MakeStringUnion(ICollection<BytesRef> utf8Strings) Parameters Type Name Description ICollection < BytesRef > utf8Strings The input strings, UTF-8 encoded. The collection must be in sorted order. Returns Type Description Automaton An Automaton accepting all input strings. The resulting automaton is codepoint based (full unicode codepoints on transitions)."
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.BasicOperations.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.BasicOperations.html",
    "title": "Class BasicOperations | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicOperations Basic automata operations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicOperations Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public static class BasicOperations : object Methods | Improve this Doc View Source AddEpsilons(Automaton, ICollection<StatePair>) Adds epsilon transitions to the given automaton. This method adds extra character interval transitions that are equivalent to the given set of epsilon transitions. Declaration public static void AddEpsilons(Automaton a, ICollection<StatePair> pairs) Parameters Type Name Description Automaton a Automaton. ICollection < StatePair > pairs Collection of StatePair objects representing pairs of source/destination states where epsilon transitions should be added. | Improve this Doc View Source Complement(Automaton) Returns a (deterministic) automaton that accepts the complement of the language of the given automaton. Complexity: linear in number of states (if already deterministic). Declaration public static Automaton Complement(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Concatenate(IList<Automaton>) Returns an automaton that accepts the concatenation of the languages of the given automata. Complexity: linear in total number of states. Declaration public static Automaton Concatenate(IList<Automaton> l) Parameters Type Name Description IList < Automaton > l Returns Type Description Automaton | Improve this Doc View Source Concatenate(Automaton, Automaton) Returns an automaton that accepts the concatenation of the languages of the given automata. Complexity: linear in number of states. Declaration public static Automaton Concatenate(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description Automaton | Improve this Doc View Source Determinize(Automaton) Determinizes the given automaton. Worst case complexity: exponential in number of states. Declaration public static void Determinize(Automaton a) Parameters Type Name Description Automaton a | Improve this Doc View Source Intersection(Automaton, Automaton) Returns an automaton that accepts the intersection of the languages of the given automata. Never modifies the input automata languages. Complexity: quadratic in number of states. Declaration public static Automaton Intersection(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description Automaton | Improve this Doc View Source IsEmpty(Automaton) Returns true if the given automaton accepts no strings. Declaration public static bool IsEmpty(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source IsEmptyString(Automaton) Returns true if the given automaton accepts the empty string and nothing else. Declaration public static bool IsEmptyString(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source IsTotal(Automaton) Returns true if the given automaton accepts all strings. Declaration public static bool IsTotal(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source Minus(Automaton, Automaton) Returns a (deterministic) automaton that accepts the intersection of the language of a1 and the complement of the language of a2 . As a side-effect, the automata may be determinized, if not already deterministic. Complexity: quadratic in number of states (if already deterministic). Declaration public static Automaton Minus(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description Automaton | Improve this Doc View Source Optional(Automaton) Returns an automaton that accepts the union of the empty string and the language of the given automaton. Complexity: linear in number of states. Declaration public static Automaton Optional(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Repeat(Automaton) Returns an automaton that accepts the Kleene star (zero or more concatenated repetitions) of the language of the given automaton. Never modifies the input automaton language. Complexity: linear in number of states. Declaration public static Automaton Repeat(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Repeat(Automaton, Int32) Returns an automaton that accepts min or more concatenated repetitions of the language of the given automaton. Complexity: linear in number of states and in min . Declaration public static Automaton Repeat(Automaton a, int min) Parameters Type Name Description Automaton a System.Int32 min Returns Type Description Automaton | Improve this Doc View Source Repeat(Automaton, Int32, Int32) Returns an automaton that accepts between min and max (including both) concatenated repetitions of the language of the given automaton. Complexity: linear in number of states and in min and max . Declaration public static Automaton Repeat(Automaton a, int min, int max) Parameters Type Name Description Automaton a System.Int32 min System.Int32 max Returns Type Description Automaton | Improve this Doc View Source Run(Automaton, String) Returns true if the given string is accepted by the automaton. Complexity: linear in the length of the string. Note: for full performance, use the RunAutomaton class. Declaration public static bool Run(Automaton a, string s) Parameters Type Name Description Automaton a System.String s Returns Type Description System.Boolean | Improve this Doc View Source SameLanguage(Automaton, Automaton) Returns true if these two automata accept exactly the same language. This is a costly computation! Note also that a1 and a2 will be determinized as a side effect. Declaration public static bool SameLanguage(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description System.Boolean | Improve this Doc View Source SubsetOf(Automaton, Automaton) Returns true if the language of a1 is a subset of the language of a2 . As a side-effect, a2 is determinized if not already marked as deterministic. Complexity: quadratic in number of states. Declaration public static bool SubsetOf(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description System.Boolean | Improve this Doc View Source Union(ICollection<Automaton>) Returns an automaton that accepts the union of the languages of the given automata. Complexity: linear in number of states. Declaration public static Automaton Union(ICollection<Automaton> l) Parameters Type Name Description ICollection < Automaton > l Returns Type Description Automaton | Improve this Doc View Source Union(Automaton, Automaton) Returns an automaton that accepts the union of the languages of the given automata. Complexity: linear in number of states. Declaration public static Automaton Union(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description Automaton"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.ByteRunAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.ByteRunAutomaton.html",
    "title": "Class ByteRunAutomaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteRunAutomaton Automaton representation for matching UTF-8 byte[] . Inheritance System.Object RunAutomaton ByteRunAutomaton Inherited Members RunAutomaton.m_accept RunAutomaton.m_initial RunAutomaton.m_transitions RunAutomaton.ToString() RunAutomaton.Count RunAutomaton.IsAccept(Int32) RunAutomaton.InitialState RunAutomaton.GetCharIntervals() RunAutomaton.Step(Int32, Int32) RunAutomaton.GetHashCode() RunAutomaton.Equals(Object) Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class ByteRunAutomaton : RunAutomaton Constructors | Improve this Doc View Source ByteRunAutomaton(Automaton) Declaration public ByteRunAutomaton(Automaton a) Parameters Type Name Description Automaton a | Improve this Doc View Source ByteRunAutomaton(Automaton, Boolean) Expert: if utf8 is true, the input is already byte-based Declaration public ByteRunAutomaton(Automaton a, bool utf8) Parameters Type Name Description Automaton a System.Boolean utf8 Methods | Improve this Doc View Source Run(Byte[], Int32, Int32) Returns true if the given byte array is accepted by this automaton. Declaration public virtual bool Run(byte[] s, int offset, int length) Parameters Type Name Description System.Byte [] s System.Int32 offset System.Int32 length Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.CharacterRunAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.CharacterRunAutomaton.html",
    "title": "Class CharacterRunAutomaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharacterRunAutomaton Automaton representation for matching char[] . Inheritance System.Object RunAutomaton CharacterRunAutomaton Inherited Members RunAutomaton.m_accept RunAutomaton.m_initial RunAutomaton.m_transitions RunAutomaton.ToString() RunAutomaton.Count RunAutomaton.IsAccept(Int32) RunAutomaton.InitialState RunAutomaton.GetCharIntervals() RunAutomaton.Step(Int32, Int32) RunAutomaton.GetHashCode() RunAutomaton.Equals(Object) Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class CharacterRunAutomaton : RunAutomaton Constructors | Improve this Doc View Source CharacterRunAutomaton(Automaton) Declaration public CharacterRunAutomaton(Automaton a) Parameters Type Name Description Automaton a Methods | Improve this Doc View Source Run(Char[], Int32, Int32) Returns true if the given string is accepted by this automaton. Declaration public virtual bool Run(char[] s, int offset, int length) Parameters Type Name Description System.Char [] s System.Int32 offset System.Int32 length Returns Type Description System.Boolean | Improve this Doc View Source Run(String) Returns true if the given string is accepted by this automaton. Declaration public virtual bool Run(string s) Parameters Type Name Description System.String s Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.CompiledAutomaton.AUTOMATON_TYPE.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.CompiledAutomaton.AUTOMATON_TYPE.html",
    "title": "Enum CompiledAutomaton.AUTOMATON_TYPE | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum CompiledAutomaton.AUTOMATON_TYPE Automata are compiled into different internal forms for the most efficient execution depending upon the language they accept. Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public enum AUTOMATON_TYPE : int Fields Name Description ALL Automaton that accepts all possible strings. NONE Automaton that accepts no strings. NORMAL Catch-all for any other automata. PREFIX Automaton that matches all strings with a constant prefix. SINGLE Automaton that accepts only a single fixed string."
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.CompiledAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.CompiledAutomaton.html",
    "title": "Class CompiledAutomaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompiledAutomaton Immutable class holding compiled details for a given Automaton . The Automaton is deterministic, must not have dead states but is not necessarily minimal. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CompiledAutomaton Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class CompiledAutomaton : object Constructors | Improve this Doc View Source CompiledAutomaton(Automaton) Declaration public CompiledAutomaton(Automaton automaton) Parameters Type Name Description Automaton automaton | Improve this Doc View Source CompiledAutomaton(Automaton, Nullable<Boolean>, Boolean) Declaration public CompiledAutomaton(Automaton automaton, bool? finite, bool simplify) Parameters Type Name Description Automaton automaton System.Nullable < System.Boolean > finite System.Boolean simplify Properties | Improve this Doc View Source CommonSuffixRef Shared common suffix accepted by the automaton. Only valid for NORMAL , and only when the automaton accepts an infinite language. Declaration public BytesRef CommonSuffixRef { get; } Property Value Type Description BytesRef | Improve this Doc View Source Finite Indicates if the automaton accepts a finite set of strings. Null if this was not computed. Only valid for NORMAL . Declaration public bool? Finite { get; } Property Value Type Description System.Nullable < System.Boolean > | Improve this Doc View Source RunAutomaton Matcher for quickly determining if a byte[] is accepted. only valid for NORMAL . Declaration public ByteRunAutomaton RunAutomaton { get; } Property Value Type Description ByteRunAutomaton | Improve this Doc View Source SortedTransitions Two dimensional array of transitions, indexed by state number for traversal. The state numbering is consistent with RunAutomaton . Only valid for NORMAL . Declaration public Transition[][] SortedTransitions { get; } Property Value Type Description Transition [][] | Improve this Doc View Source Term For PREFIX , this is the prefix term; for SINGLE this is the singleton term. Declaration public BytesRef Term { get; } Property Value Type Description BytesRef | Improve this Doc View Source Type Declaration public CompiledAutomaton.AUTOMATON_TYPE Type { get; } Property Value Type Description CompiledAutomaton.AUTOMATON_TYPE Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source Floor(BytesRef, BytesRef) Finds largest term accepted by this Automaton, that's <= the provided input term. The result is placed in output; it's fine for output and input to point to the same BytesRef . The returned result is either the provided output, or null if there is no floor term (ie, the provided input term is before the first term accepted by this Automaton ). Declaration public virtual BytesRef Floor(BytesRef input, BytesRef output) Parameters Type Name Description BytesRef input BytesRef output Returns Type Description BytesRef | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source GetTermsEnum(Terms) Declaration public virtual TermsEnum GetTermsEnum(Terms terms) Parameters Type Name Description Terms terms Returns Type Description TermsEnum | Improve this Doc View Source ToDot() Declaration public virtual string ToDot() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.html",
    "title": "Namespace Lucene.Net.Util.Automaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Automaton <!-- dk.brics.automaton Copyright (c) 2001-2009 Anders Moeller All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> Finite-state automaton for regular expressions. This package contains a full DFA/NFA implementation with Unicode alphabet and support for all standard (and a number of non-standard) regular expression operations. The most commonly used functionality is located in the classes Automaton and RegExp . For more information, go to the package home page at http://www.brics.dk/automaton/ . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Classes Automaton Finite-state automaton with regular expression operations. Class invariants: An automaton is either represented explicitly (with State and Transition objects) or with a singleton string (see Singleton and ExpandSingleton() ) in case the automaton is known to accept exactly one string. (Implicitly, all states and transitions of an automaton are reachable from its initial state.) Automata are always reduced (see Reduce() ) and have no transitions to dead states (see RemoveDeadTransitions() ). If an automaton is nondeterministic, then IsDeterministic returns false (but the converse is not required). Automata provided as input to operations are generally assumed to be disjoint. If the states or transitions are manipulated manually, the RestoreInvariant() method and IsDeterministic setter should be used afterwards to restore representation invariants that are assumed by the built-in automata operations. Note: this class has internal mutable state and is not thread safe. It is the caller's responsibility to ensure any necessary synchronization if you wish to use the same Automaton from multiple threads. In general it is instead recommended to use a RunAutomaton for multithreaded matching: it is immutable, thread safe, and much faster. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicAutomata Construction of basic automata. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicOperations Basic automata operations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ByteRunAutomaton Automaton representation for matching UTF-8 byte[] . CharacterRunAutomaton Automaton representation for matching char[] . CompiledAutomaton Immutable class holding compiled details for a given Automaton . The Automaton is deterministic, must not have dead states but is not necessarily minimal. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LevenshteinAutomata Class to construct DFAs that match a word within some edit distance. Implements the algorithm described in: Schulz and Mihov: Fast String Correction with Levenshtein Automata This is a Lucene.NET EXPERIMENTAL API, use at your own risk MinimizationOperations Operations for minimizing automata. This is a Lucene.NET EXPERIMENTAL API, use at your own risk RegExp Regular Expression extension to Automaton . Regular expressions are built from the following abstract syntax: regexp ::= unionexp | unionexp ::= interexp | unionexp (union) | interexp interexp ::= concatexp & interexp (intersection) [OPTIONAL] | concatexp concatexp ::= repeatexp concatexp (concatenation) | repeatexp repeatexp ::= repeatexp ? (zero or one occurrence) | repeatexp * (zero or more occurrences) | repeatexp + (one or more occurrences) | repeatexp { n } ( n occurrences) | repeatexp { n ,} ( n or more occurrences) | repeatexp { n , m } ( n to m occurrences, including both) | complexp complexp ::= ~ complexp (complement) [OPTIONAL] | charclassexp charclassexp ::= [ charclasses ] (character class) | [^ charclasses ] (negated character class) | simpleexp charclasses ::= charclass charclasses | charclass charclass ::= charexp - charexp (character range, including end-points) | charexp simpleexp ::= charexp | . (any single character) | # (the empty language) [OPTIONAL] | @ (any string) [OPTIONAL] | \" <Unicode string without double-quotes> \" (a string) | ( ) (the empty string) | ( unionexp ) (precedence override) | < <identifier> > (named automaton) [OPTIONAL] | < n - m > (numerical interval) [OPTIONAL] charexp ::=<Unicode character>(a single non-reserved character) | </strong> <Unicode character> (a single character) The productions marked [OPTIONAL] are only allowed if specified by the syntax flags passed to the RegExp constructor. The reserved characters used in the (enabled) syntax must be escaped with backslash ( </code>) or double-quotes ( \"...\" ). (In contrast to other regexp syntaxes, this is required also in character classes.) Be aware that dash ( - ) has a special meaning in charclass expressions. An identifier is a string not containing right angle bracket ( > ) or dash ( - ). Numerical intervals are specified by non-negative decimal integers and include both end points, and if n and m have the same number of digits, then the conforming strings must have that length (i.e. prefixed by 0's). This is a Lucene.NET EXPERIMENTAL API, use at your own risk RunAutomaton Finite-state automaton with fast run operation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SpecialOperations Special automata operations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk State Automaton state. This is a Lucene.NET EXPERIMENTAL API, use at your own risk StatePair Pair of states. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Transition Automaton transition. A transition, which belongs to a source state, consists of a Unicode codepoint interval and a destination state. This is a Lucene.NET EXPERIMENTAL API, use at your own risk UTF32ToUTF8 Converts UTF-32 automata to the equivalent UTF-8 representation. This is a Lucene.NET INTERNAL API, use at your own risk Interfaces IAutomatonProvider Automaton provider for RegExp . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums CompiledAutomaton.AUTOMATON_TYPE Automata are compiled into different internal forms for the most efficient execution depending upon the language they accept. RegExpSyntax"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.IAutomatonProvider.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.IAutomatonProvider.html",
    "title": "Interface IAutomatonProvider | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAutomatonProvider Automaton provider for RegExp . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public interface IAutomatonProvider Methods | Improve this Doc View Source GetAutomaton(String) Returns automaton of the given name. Declaration Automaton GetAutomaton(string name) Parameters Type Name Description System.String name Automaton name. Returns Type Description Automaton Automaton. See Also ToAutomaton(IAutomatonProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.LevenshteinAutomata.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.LevenshteinAutomata.html",
    "title": "Class LevenshteinAutomata | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LevenshteinAutomata Class to construct DFAs that match a word within some edit distance. Implements the algorithm described in: Schulz and Mihov: Fast String Correction with Levenshtein Automata This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LevenshteinAutomata Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class LevenshteinAutomata : object Constructors | Improve this Doc View Source LevenshteinAutomata(Int32[], Int32, Boolean) Expert: specify a custom maximum possible symbol (alphaMax); default is MAX_CODE_POINT . Declaration public LevenshteinAutomata(int[] word, int alphaMax, bool withTranspositions) Parameters Type Name Description System.Int32 [] word System.Int32 alphaMax System.Boolean withTranspositions | Improve this Doc View Source LevenshteinAutomata(String, Boolean) Create a new LevenshteinAutomata for some input string. Optionally count transpositions as a primitive edit. Declaration public LevenshteinAutomata(string input, bool withTranspositions) Parameters Type Name Description System.String input System.Boolean withTranspositions Fields | Improve this Doc View Source MAXIMUM_SUPPORTED_DISTANCE @lucene.internal Declaration public const int MAXIMUM_SUPPORTED_DISTANCE = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source ToAutomaton(Int32) Compute a DFA that accepts all strings within an edit distance of n . All automata have the following properties: They are deterministic (DFA). There are no transitions to dead states. They are not minimal (some transitions could be combined). Declaration public virtual Automaton ToAutomaton(int n) Parameters Type Name Description System.Int32 n Returns Type Description Automaton"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.MinimizationOperations.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.MinimizationOperations.html",
    "title": "Class MinimizationOperations | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MinimizationOperations Operations for minimizing automata. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MinimizationOperations Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public static class MinimizationOperations : object Methods | Improve this Doc View Source Minimize(Automaton) Minimizes (and determinizes if not already deterministic) the given automaton. Declaration public static void Minimize(Automaton a) Parameters Type Name Description Automaton a See Also SetMinimization(Int32) | Improve this Doc View Source MinimizeHopcroft(Automaton) Minimizes the given automaton using Hopcroft's algorithm. Declaration public static void MinimizeHopcroft(Automaton a) Parameters Type Name Description Automaton a"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.RegExp.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.RegExp.html",
    "title": "Class RegExp | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RegExp Regular Expression extension to Automaton . Regular expressions are built from the following abstract syntax: regexp ::= unionexp | unionexp ::= interexp | unionexp (union) | interexp interexp ::= concatexp & interexp (intersection) [OPTIONAL] | concatexp concatexp ::= repeatexp concatexp (concatenation) | repeatexp repeatexp ::= repeatexp ? (zero or one occurrence) | repeatexp * (zero or more occurrences) | repeatexp + (one or more occurrences) | repeatexp { n } ( n occurrences) | repeatexp { n ,} ( n or more occurrences) | repeatexp { n , m } ( n to m occurrences, including both) | complexp complexp ::= ~ complexp (complement) [OPTIONAL] | charclassexp charclassexp ::= [ charclasses ] (character class) | [^ charclasses ] (negated character class) | simpleexp charclasses ::= charclass charclasses | charclass charclass ::= charexp - charexp (character range, including end-points) | charexp simpleexp ::= charexp | . (any single character) | # (the empty language) [OPTIONAL] | @ (any string) [OPTIONAL] | \" <Unicode string without double-quotes> \" (a string) | ( ) (the empty string) | ( unionexp ) (precedence override) | < <identifier> > (named automaton) [OPTIONAL] | < n - m > (numerical interval) [OPTIONAL] charexp ::=<Unicode character>(a single non-reserved character) | </strong> <Unicode character> (a single character) The productions marked [OPTIONAL] are only allowed if specified by the syntax flags passed to the RegExp constructor. The reserved characters used in the (enabled) syntax must be escaped with backslash ( </code>) or double-quotes ( \"...\" ). (In contrast to other regexp syntaxes, this is required also in character classes.) Be aware that dash ( - ) has a special meaning in charclass expressions. An identifier is a string not containing right angle bracket ( > ) or dash ( - ). Numerical intervals are specified by non-negative decimal integers and include both end points, and if n and m have the same number of digits, then the conforming strings must have that length (i.e. prefixed by 0's). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object RegExp Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class RegExp : object Constructors | Improve this Doc View Source RegExp(String) Constructs new RegExp from a string. Same as RegExp(s, RegExpSyntax.ALL) . Declaration public RegExp(string s) Parameters Type Name Description System.String s Regexp string. | Improve this Doc View Source RegExp(String, RegExpSyntax) Constructs new RegExp from a string. Declaration public RegExp(string s, RegExpSyntax syntax_flags) Parameters Type Name Description System.String s Regexp string. RegExpSyntax syntax_flags Boolean 'or' of optional RegExpSyntax constructs to be enabled. Methods | Improve this Doc View Source GetIdentifiers() Returns set of automaton identifiers that occur in this regular expression. Declaration public virtual ISet<string> GetIdentifiers() Returns Type Description ISet < System.String > | Improve this Doc View Source SetAllowMutate(Boolean) Sets or resets allow mutate flag. If this flag is set, then automata construction uses mutable automata, which is slightly faster but not thread safe. By default, the flag is not set. Declaration public virtual bool SetAllowMutate(bool flag) Parameters Type Name Description System.Boolean flag If true , the flag is set Returns Type Description System.Boolean Previous value of the flag. | Improve this Doc View Source ToAutomaton() Constructs new Automaton from this RegExp . Same as ToAutomaton(null) (empty automaton map). Declaration public virtual Automaton ToAutomaton() Returns Type Description Automaton | Improve this Doc View Source ToAutomaton(IDictionary<String, Automaton>) Constructs new Automaton from this RegExp . The constructed automaton is minimal and deterministic and has no transitions to dead states. Declaration public virtual Automaton ToAutomaton(IDictionary<string, Automaton> automata) Parameters Type Name Description IDictionary < System.String , Automaton > automata A map from automaton identifiers to automata (of type Automaton ). Returns Type Description Automaton | Improve this Doc View Source ToAutomaton(IAutomatonProvider) Constructs new Automaton from this RegExp . The constructed automaton is minimal and deterministic and has no transitions to dead states. Declaration public virtual Automaton ToAutomaton(IAutomatonProvider automaton_provider) Parameters Type Name Description IAutomatonProvider automaton_provider Provider of automata for named identifiers. Returns Type Description Automaton | Improve this Doc View Source ToString() Constructs string from parsed regular expression. Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.RegExpSyntax.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.RegExpSyntax.html",
    "title": "Enum RegExpSyntax | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum RegExpSyntax Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public enum RegExpSyntax : int Fields Name Description ALL Syntax flag, enables all optional regexp syntax. ANYSTRING Syntax flag, enables anystring ( @ ). AUTOMATON Syntax flag, enables named automata ( < identifier > ). COMPLEMENT Syntax flag, enables complement ( ~ ). EMPTY Syntax flag, enables empty language ( # ). INTERSECTION Syntax flag, enables intersection ( & ). INTERVAL Syntax flag, enables numerical intervals ( < n - m > ). NONE Syntax flag, enables no optional regexp syntax."
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.RunAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.RunAutomaton.html",
    "title": "Class RunAutomaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RunAutomaton Finite-state automaton with fast run operation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object RunAutomaton ByteRunAutomaton CharacterRunAutomaton Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public abstract class RunAutomaton : object Constructors | Improve this Doc View Source RunAutomaton(Automaton, Int32, Boolean) Constructs a new RunAutomaton from a deterministic Automaton . Declaration public RunAutomaton(Automaton a, int maxInterval, bool tableize) Parameters Type Name Description Automaton a An automaton. System.Int32 maxInterval System.Boolean tableize Fields | Improve this Doc View Source m_accept Declaration protected readonly bool[] m_accept Field Value Type Description System.Boolean [] | Improve this Doc View Source m_initial Declaration protected readonly int m_initial Field Value Type Description System.Int32 | Improve this Doc View Source m_transitions Declaration protected readonly int[] m_transitions Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Count Returns number of states in automaton. NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source InitialState Returns initial state. Declaration public int InitialState { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean | Improve this Doc View Source GetCharIntervals() Returns array of codepoint class interval start points. The array should not be modified by the caller. Declaration public int[] GetCharIntervals() Returns Type Description System.Int32 [] | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source IsAccept(Int32) Returns acceptance status for given state. Declaration public bool IsAccept(int state) Parameters Type Name Description System.Int32 state Returns Type Description System.Boolean | Improve this Doc View Source Step(Int32, Int32) Returns the state obtained by reading the given char from the given state. Returns -1 if not obtaining any such state. (If the original Automaton had no dead states, -1 is returned here if and only if a dead state is entered in an equivalent automaton with a total transition function.) Declaration public int Step(int state, int c) Parameters Type Name Description System.Int32 state System.Int32 c Returns Type Description System.Int32 | Improve this Doc View Source ToString() Returns a string representation of this automaton. Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.SpecialOperations.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.SpecialOperations.html",
    "title": "Class SpecialOperations | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpecialOperations Special automata operations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpecialOperations Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public static class SpecialOperations : object Methods | Improve this Doc View Source GetCommonPrefix(Automaton) Returns the longest string that is a prefix of all accepted strings and visits each state at most once. Declaration public static string GetCommonPrefix(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.String Common prefix. | Improve this Doc View Source GetCommonPrefixBytesRef(Automaton) Declaration public static BytesRef GetCommonPrefixBytesRef(Automaton a) Parameters Type Name Description Automaton a Returns Type Description BytesRef | Improve this Doc View Source GetCommonSuffix(Automaton) Returns the longest string that is a suffix of all accepted strings and visits each state at most once. Declaration public static string GetCommonSuffix(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.String Common suffix. | Improve this Doc View Source GetCommonSuffixBytesRef(Automaton) Declaration public static BytesRef GetCommonSuffixBytesRef(Automaton a) Parameters Type Name Description Automaton a Returns Type Description BytesRef | Improve this Doc View Source GetFiniteStrings(Automaton, Int32) Returns the set of accepted strings, assuming that at most limit strings are accepted. If more than limit strings are accepted, the first limit strings found are returned. If limit <0, then the limit is infinite. Declaration public static ISet<Int32sRef> GetFiniteStrings(Automaton a, int limit) Parameters Type Name Description Automaton a System.Int32 limit Returns Type Description ISet < Int32sRef > | Improve this Doc View Source IsFinite(Automaton) Returns true if the language of this automaton is finite. Declaration public static bool IsFinite(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source Reverse(Automaton) Reverses the language of the given (non-singleton) automaton while returning the set of new initial states. Declaration public static ISet<State> Reverse(Automaton a) Parameters Type Name Description Automaton a Returns Type Description ISet < State >"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.State.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.State.html",
    "title": "Class State | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class State Automaton state. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object State Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class State : IComparable<State> Constructors | Improve this Doc View Source State() Constructs a new state. Initially, the new state is a reject state. Declaration public State() Properties | Improve this Doc View Source Accept Sets acceptance for this state. If true , this state is an accept state. Declaration public virtual bool Accept { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Number Return this state's number. Expert: Will be useless unless GetNumberedStates() has been called first to number the states. Declaration public virtual int Number { get; } Property Value Type Description System.Int32 The number. | Improve this Doc View Source NumTransitions Declaration public virtual int NumTransitions { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TransitionsArray Declaration public Transition[] TransitionsArray { get; } Property Value Type Description Transition [] Methods | Improve this Doc View Source AddTransition(Transition) Adds an outgoing transition. Declaration public virtual void AddTransition(Transition t) Parameters Type Name Description Transition t Transition. | Improve this Doc View Source CompareTo(State) Compares this object with the specified object for order. States are ordered by the time of construction. Declaration public virtual int CompareTo(State s) Parameters Type Name Description State s Returns Type Description System.Int32 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source GetTransitions() Returns the set of outgoing transitions. Subsequent changes are reflected in the automaton. Declaration public virtual IEnumerable<Transition> GetTransitions() Returns Type Description IEnumerable < Transition > Transition set. | Improve this Doc View Source Reduce() Reduces this state. A state is \"reduced\" by combining overlapping and adjacent edge intervals with same destination. Declaration public virtual void Reduce() | Improve this Doc View Source SetTransitions(Transition[]) Declaration public virtual void SetTransitions(Transition[] transitions) Parameters Type Name Description Transition [] transitions | Improve this Doc View Source SortTransitions(IComparer<Transition>) Returns sorted list of outgoing transitions. Declaration public virtual void SortTransitions(IComparer<Transition> comparer) Parameters Type Name Description IComparer < Transition > comparer Comparer to sort with. | Improve this Doc View Source Step(Int32) Performs lookup in transitions, assuming determinism. Declaration public virtual State Step(int c) Parameters Type Name Description System.Int32 c Codepoint to look up. Returns Type Description State Destination state, null if no matching outgoing transition. See Also Step(Int32, ICollection<State>) | Improve this Doc View Source Step(Int32, ICollection<State>) Performs lookup in transitions, allowing nondeterminism. Declaration public virtual void Step(int c, ICollection<State> dest) Parameters Type Name Description System.Int32 c Codepoint to look up. ICollection < State > dest Collection where destination states are stored. See Also Step(Int32) | Improve this Doc View Source ToString() Returns string describing this state. Normally invoked via ToString() . Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source TrimTransitionsArray() Downsizes transitionArray to numTransitions. Declaration public virtual void TrimTransitionsArray()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.StatePair.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.StatePair.html",
    "title": "Class StatePair | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StatePair Pair of states. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StatePair Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class StatePair : object Constructors | Improve this Doc View Source StatePair(State, State) Constructs a new state pair. Declaration public StatePair(State s1, State s2) Parameters Type Name Description State s1 First state. State s2 Second state. Properties | Improve this Doc View Source FirstState Returns first component of this pair. Declaration public virtual State FirstState { get; } Property Value Type Description State First state. | Improve this Doc View Source SecondState Returns second component of this pair. Declaration public virtual State SecondState { get; } Property Value Type Description State Second state. Methods | Improve this Doc View Source Equals(Object) Checks for equality. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Object to compare with. Returns Type Description System.Boolean true if obj represents the same pair of states as this pair. | Improve this Doc View Source GetHashCode() Returns hash code. Declaration public override int GetHashCode() Returns Type Description System.Int32 Hash code."
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.Transition.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.Transition.html",
    "title": "Class Transition | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Transition Automaton transition. A transition, which belongs to a source state, consists of a Unicode codepoint interval and a destination state. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Transition Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class Transition : object Constructors | Improve this Doc View Source Transition(Int32, State) Constructs a new singleton interval transition. Declaration public Transition(int c, State to) Parameters Type Name Description System.Int32 c Transition codepoint. State to Destination state. | Improve this Doc View Source Transition(Int32, Int32, State) Constructs a new transition. Both end points are included in the interval. Declaration public Transition(int min, int max, State to) Parameters Type Name Description System.Int32 min Transition interval minimum. System.Int32 max Transition interval maximum. State to Destination state. Fields | Improve this Doc View Source COMPARE_BY_DEST_THEN_MIN_MAX Declaration public static readonly IComparer<Transition> COMPARE_BY_DEST_THEN_MIN_MAX Field Value Type Description IComparer < Transition > | Improve this Doc View Source COMPARE_BY_MIN_MAX_THEN_DEST Declaration public static readonly IComparer<Transition> COMPARE_BY_MIN_MAX_THEN_DEST Field Value Type Description IComparer < Transition > Properties | Improve this Doc View Source Dest Returns destination of this transition. Declaration public virtual State Dest { get; } Property Value Type Description State | Improve this Doc View Source Max Returns maximum of this transition interval. Declaration public virtual int Max { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Min Returns minimum of this transition interval. Declaration public virtual int Min { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Clones this transition. Declaration public virtual object Clone() Returns Type Description System.Object Clone with same character interval and destination state. | Improve this Doc View Source Equals(Object) Checks for equality. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Object to compare with. Returns Type Description System.Boolean true if obj is a transition with same character interval and destination state as this transition. | Improve this Doc View Source GetHashCode() Returns hash code. The hash code is based on the character interval (not the destination state). Declaration public override int GetHashCode() Returns Type Description System.Int32 Hash code. | Improve this Doc View Source ToString() Returns a string describing this state. Normally invoked via ToString() . Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.UTF32ToUTF8.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.UTF32ToUTF8.html",
    "title": "Class UTF32ToUTF8 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UTF32ToUTF8 Converts UTF-32 automata to the equivalent UTF-8 representation. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object UTF32ToUTF8 Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public sealed class UTF32ToUTF8 : object Methods | Improve this Doc View Source Convert(Automaton) Converts an incoming utf32 Automaton to an equivalent utf8 one. The incoming automaton need not be deterministic. Note that the returned automaton will not in general be deterministic, so you must determinize it if that's needed. Declaration public Automaton Convert(Automaton utf32) Parameters Type Name Description Automaton utf32 Returns Type Description Automaton"
  },
  "api/Lucene.Net/Lucene.Net.Util.Bits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Bits.html",
    "title": "Class Bits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Bits Inheritance System.Object Bits Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public static class Bits : object Fields | Improve this Doc View Source EMPTY_ARRAY Declaration public static readonly IBits[] EMPTY_ARRAY Field Value Type Description IBits []"
  },
  "api/Lucene.Net/Lucene.Net.Util.Bits.MatchAllBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Bits.MatchAllBits.html",
    "title": "Class Bits.MatchAllBits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Bits.MatchAllBits Bits impl of the specified length with all bits set. Inheritance System.Object Bits.MatchAllBits Implements IBits Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class MatchAllBits : object, IBits Constructors | Improve this Doc View Source MatchAllBits(Int32) Declaration public MatchAllBits(int len) Parameters Type Name Description System.Int32 len Properties | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32) Declaration public bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Implements IBits"
  },
  "api/Lucene.Net/Lucene.Net.Util.Bits.MatchNoBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Bits.MatchNoBits.html",
    "title": "Class Bits.MatchNoBits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Bits.MatchNoBits Bits impl of the specified length with no bits set. Inheritance System.Object Bits.MatchNoBits Implements IBits Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class MatchNoBits : object, IBits Constructors | Improve this Doc View Source MatchNoBits(Int32) Declaration public MatchNoBits(int len) Parameters Type Name Description System.Int32 len Properties | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32) Declaration public bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Implements IBits"
  },
  "api/Lucene.Net/Lucene.Net.Util.BitUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BitUtil.html",
    "title": "Class BitUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BitUtil A variety of high efficiency bit twiddling routines. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BitUtil Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class BitUtil : object Methods | Improve this Doc View Source BitCount(Byte) Return the number of bits sets in b . Declaration public static int BitCount(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Int32 | Improve this Doc View Source BitList(Byte) Return the list of bits which are set in b encoded as followed: (i >>> (4 * n)) & 0x0F is the offset of the n-th set bit of the given byte plus one, or 0 if there are n or less bits set in the given byte. For example bitList(12) returns 0x43: 0x43 & 0x0F is 3, meaning the the first bit set is at offset 3-1 = 2, (0x43 >>> 4) & 0x0F is 4, meaning there is a second bit set at offset 4-1=3, (0x43 >>> 8) & 0x0F is 0, meaning there is no more bit set in this byte. Declaration public static int BitList(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Int32 | Improve this Doc View Source NextHighestPowerOfTwo(Int32) Returns the next highest power of two, or the current value if it's already a power of two or zero Declaration public static int NextHighestPowerOfTwo(int v) Parameters Type Name Description System.Int32 v Returns Type Description System.Int32 | Improve this Doc View Source NextHighestPowerOfTwo(Int64) Returns the next highest power of two, or the current value if it's already a power of two or zero Declaration public static long NextHighestPowerOfTwo(long v) Parameters Type Name Description System.Int64 v Returns Type Description System.Int64 | Improve this Doc View Source Pop_AndNot(Int64[], Int64[], Int32, Int32) Returns the popcount or cardinality of A & ~B. Neither array is modified. Declaration public static long Pop_AndNot(long[] arr1, long[] arr2, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr1 System.Int64 [] arr2 System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64 | Improve this Doc View Source Pop_Array(Int64[], Int32, Int32) Returns the number of set bits in an array of s. Declaration public static long Pop_Array(long[] arr, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64 | Improve this Doc View Source Pop_Intersect(Int64[], Int64[], Int32, Int32) Returns the popcount or cardinality of the two sets after an intersection. Neither array is modified. Declaration public static long Pop_Intersect(long[] arr1, long[] arr2, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr1 System.Int64 [] arr2 System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64 | Improve this Doc View Source Pop_Union(Int64[], Int64[], Int32, Int32) Returns the popcount or cardinality of the union of two sets. Neither array is modified. Declaration public static long Pop_Union(long[] arr1, long[] arr2, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr1 System.Int64 [] arr2 System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64 | Improve this Doc View Source Pop_Xor(Int64[], Int64[], Int32, Int32) Returns the popcount or cardinality of A ^ B Neither array is modified. Declaration public static long Pop_Xor(long[] arr1, long[] arr2, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr1 System.Int64 [] arr2 System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.BroadWord.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BroadWord.html",
    "title": "Class BroadWord | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BroadWord Methods and constants inspired by the article \"Broadword Implementation of Rank/Select Queries\" by Sebastiano Vigna, January 30, 2012: algorithm 1: Lucene.Net.Util.BroadWord.BitCount(System.Int64) , count of set bits in a algorithm 2: Select(Int64, Int32) , selection of a set bit in a , bytewise signed smaller < 8 operator: SmallerUpTo7_8(Int64, Int64) . shortwise signed smaller < 16 operator: SmallerUpto15_16(Int64, Int64) . some of the Lk and Hk constants that are used by the above: L8 L8_L , H8 H8_L , L9 L9_L , L16 L16_L and H16 H8_L . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BroadWord Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class BroadWord : object Fields | Improve this Doc View Source H16_L Declaration public static readonly long H16_L Field Value Type Description System.Int64 | Improve this Doc View Source H8_L Hk = Lk << (k-1) . These contain the high bit of each group of k bits. The suffix _L indicates the implementation. Declaration public static readonly long H8_L Field Value Type Description System.Int64 | Improve this Doc View Source L16_L Declaration public const long L16_L = null Field Value Type Description System.Int64 | Improve this Doc View Source L8_L Lk denotes the constant whose ones are in position 0, k, 2k, . . . These contain the low bit of each group of k bits. The suffix _L indicates the implementation. Declaration public const long L8_L = null Field Value Type Description System.Int64 | Improve this Doc View Source L9_L Declaration public const long L9_L = null Field Value Type Description System.Int64 Methods | Improve this Doc View Source NotEquals0_8(Int64) An unsigned bytewise not equals 0 operator. This uses the following numbers of basic operations: 2 or, 1 and, 1 minus. Declaration public static long NotEquals0_8(long x) Parameters Type Name Description System.Int64 x Returns Type Description System.Int64 A with bits set in the H8_L positions corresponding to each unsigned byte that does not equal 0. | Improve this Doc View Source Select(Int64, Int32) Select a 1-bit from a . Declaration public static int Select(long x, int r) Parameters Type Name Description System.Int64 x System.Int32 r Returns Type Description System.Int32 The index of the r-th 1 bit in x, or if no such bit exists, 72. | Improve this Doc View Source SelectNaive(Int64, Int32) Naive implementation of Select(Int64, Int32) , using repetitively. Works relatively fast for low ranks. Declaration public static int SelectNaive(long x, int r) Parameters Type Name Description System.Int64 x System.Int32 r Returns Type Description System.Int32 The index of the r-th 1 bit in x, or if no such bit exists, 72. | Improve this Doc View Source Smalleru_8(Int64, Int64) An unsigned bytewise smaller < 8 operator. This uses the following numbers of basic operations: 3 or, 2 and, 2 xor, 1 minus, 1 not. Declaration public static long Smalleru_8(long x, long y) Parameters Type Name Description System.Int64 x System.Int64 y Returns Type Description System.Int64 A with bits set in the H8_L positions corresponding to each input unsigned byte pair that compares smaller. | Improve this Doc View Source SmallerUpto15_16(Int64, Int64) A bytewise smaller < 16 operator. This uses the following numbers of basic operations: 1 or, 2 and, 2 xor, 1 minus, 1 not. Declaration public static long SmallerUpto15_16(long x, long y) Parameters Type Name Description System.Int64 x System.Int64 y Returns Type Description System.Int64 A with bits set in the H16_L positions corresponding to each input signed short pair that compares smaller. | Improve this Doc View Source SmallerUpTo7_8(Int64, Int64) A signed bytewise smaller < 8 operator, for operands 0L<= x, y <=0x7L. This uses the following numbers of basic operations: 1 or, 2 and, 2 xor, 1 minus, 1 not. Declaration public static long SmallerUpTo7_8(long x, long y) Parameters Type Name Description System.Int64 x System.Int64 y Returns Type Description System.Int64 A with bits set in the H8_L positions corresponding to each input signed byte pair that compares smaller."
  },
  "api/Lucene.Net/Lucene.Net.Util.BundleResourceManagerFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BundleResourceManagerFactory.html",
    "title": "Class BundleResourceManagerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BundleResourceManagerFactory This implementation of IResourceManagerFactory uses a convention to retrieve resources. In Java NLS, the convention is to use the same name for the resource key propeties and for the resource file names. This presents a problem for .NET because the resource generator already creates an internal class with the same name as the .resx file. To work around this, we use the convention of appending the suffix \"Bundle\" to the end of the type the resource key propeties are stored in. For example, if our constants are stored in a class named ErrorMessages, the type that will be looked up by this factory will be ErrorMessagesBundle (which is the name of the .resx file that should be added to your project). This implementation can be inherited to use a different convention or can be replaced to get the resources from an external source. Inheritance System.Object BundleResourceManagerFactory Implements IResourceManagerFactory Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class BundleResourceManagerFactory : object, IResourceManagerFactory Properties | Improve this Doc View Source ResourceSuffix The suffix to append to the resource key class name to locate the embedded resource. Declaration protected virtual string ResourceSuffix { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Create(Type) Creates a instance using the specified resourceSource . Declaration public virtual ResourceManager Create(Type resourceSource) Parameters Type Name Description Type resourceSource The type representing the resource to retrieve. Returns Type Description ResourceManager A new instance. | Improve this Doc View Source GetResourceName(Type) Gets the fully-qualified name of the bundle as it would appear using , without the .resources extension. This is the name that is passed to the baseName parameter of . Declaration protected virtual string GetResourceName(Type clazz) Parameters Type Name Description Type clazz The type of the NLS-derived class where the field strings are located that identify resources. Returns Type Description System.String The resource name. | Improve this Doc View Source Release(ResourceManager) Releases the instance including any disposable dependencies. Declaration public virtual void Release(ResourceManager manager) Parameters Type Name Description ResourceManager manager The to release. Implements IResourceManagerFactory"
  },
  "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.Allocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.Allocator.html",
    "title": "Class ByteBlockPool.Allocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteBlockPool.Allocator Abstract class for allocating and freeing byte blocks. Inheritance System.Object ByteBlockPool.Allocator ByteBlockPool.DirectAllocator ByteBlockPool.DirectTrackingAllocator RecyclingByteBlockAllocator Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Allocator : object Constructors | Improve this Doc View Source Allocator(Int32) Declaration protected Allocator(int blockSize) Parameters Type Name Description System.Int32 blockSize Fields | Improve this Doc View Source m_blockSize Declaration protected readonly int m_blockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetByteBlock() Declaration public virtual byte[] GetByteBlock() Returns Type Description System.Byte [] | Improve this Doc View Source RecycleByteBlocks(IList<Byte[]>) Declaration public virtual void RecycleByteBlocks(IList<byte[]> blocks) Parameters Type Name Description IList < System.Byte []> blocks | Improve this Doc View Source RecycleByteBlocks(Byte[][], Int32, Int32) Declaration public abstract void RecycleByteBlocks(byte[][] blocks, int start, int end) Parameters Type Name Description System.Byte [][] blocks System.Int32 start System.Int32 end"
  },
  "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.DirectAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.DirectAllocator.html",
    "title": "Class ByteBlockPool.DirectAllocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteBlockPool.DirectAllocator A simple ByteBlockPool.Allocator that never recycles. Inheritance System.Object ByteBlockPool.Allocator ByteBlockPool.DirectAllocator Inherited Members ByteBlockPool.Allocator.m_blockSize ByteBlockPool.Allocator.RecycleByteBlocks(IList<Byte[]>) ByteBlockPool.Allocator.GetByteBlock() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class DirectAllocator : ByteBlockPool.Allocator Constructors | Improve this Doc View Source DirectAllocator() Declaration public DirectAllocator() | Improve this Doc View Source DirectAllocator(Int32) Declaration public DirectAllocator(int blockSize) Parameters Type Name Description System.Int32 blockSize Methods | Improve this Doc View Source RecycleByteBlocks(Byte[][], Int32, Int32) Declaration public override void RecycleByteBlocks(byte[][] blocks, int start, int end) Parameters Type Name Description System.Byte [][] blocks System.Int32 start System.Int32 end Overrides ByteBlockPool.Allocator.RecycleByteBlocks(Byte[][], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.DirectTrackingAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.DirectTrackingAllocator.html",
    "title": "Class ByteBlockPool.DirectTrackingAllocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteBlockPool.DirectTrackingAllocator A simple ByteBlockPool.Allocator that never recycles, but tracks how much total RAM is in use. Inheritance System.Object ByteBlockPool.Allocator ByteBlockPool.DirectTrackingAllocator Inherited Members ByteBlockPool.Allocator.m_blockSize ByteBlockPool.Allocator.RecycleByteBlocks(IList<Byte[]>) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class DirectTrackingAllocator : ByteBlockPool.Allocator Constructors | Improve this Doc View Source DirectTrackingAllocator(Counter) Declaration public DirectTrackingAllocator(Counter bytesUsed) Parameters Type Name Description Counter bytesUsed | Improve this Doc View Source DirectTrackingAllocator(Int32, Counter) Declaration public DirectTrackingAllocator(int blockSize, Counter bytesUsed) Parameters Type Name Description System.Int32 blockSize Counter bytesUsed Methods | Improve this Doc View Source GetByteBlock() Declaration public override byte[] GetByteBlock() Returns Type Description System.Byte [] Overrides ByteBlockPool.Allocator.GetByteBlock() | Improve this Doc View Source RecycleByteBlocks(Byte[][], Int32, Int32) Declaration public override void RecycleByteBlocks(byte[][] blocks, int start, int end) Parameters Type Name Description System.Byte [][] blocks System.Int32 start System.Int32 end Overrides ByteBlockPool.Allocator.RecycleByteBlocks(Byte[][], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.html",
    "title": "Class ByteBlockPool | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteBlockPool Class that Posting and PostingVector use to write byte streams into shared fixed-size byte[] arrays. The idea is to allocate slices of increasing lengths. For example, the first slice is 5 bytes, the next slice is 14, etc. We start by writing our bytes into the first 5 bytes. When we hit the end of the slice, we allocate the next slice and then write the address of the new slice into the last 4 bytes of the previous slice (the \"forwarding address\"). Each slice is filled with 0's initially, and we mark the end with a non-zero byte. This way the methods that are writing into the slice don't need to record its length and instead allocate a new slice once they hit a non-zero byte. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ByteBlockPool Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class ByteBlockPool : object Constructors | Improve this Doc View Source ByteBlockPool(ByteBlockPool.Allocator) Declaration public ByteBlockPool(ByteBlockPool.Allocator allocator) Parameters Type Name Description ByteBlockPool.Allocator allocator Fields | Improve this Doc View Source BYTE_BLOCK_MASK Declaration public static readonly int BYTE_BLOCK_MASK Field Value Type Description System.Int32 | Improve this Doc View Source BYTE_BLOCK_SHIFT Declaration public static readonly int BYTE_BLOCK_SHIFT Field Value Type Description System.Int32 | Improve this Doc View Source BYTE_BLOCK_SIZE Declaration public static readonly int BYTE_BLOCK_SIZE Field Value Type Description System.Int32 | Improve this Doc View Source FIRST_LEVEL_SIZE The first level size for new slices Declaration public static readonly int FIRST_LEVEL_SIZE Field Value Type Description System.Int32 See Also NewSlice(Int32) | Improve this Doc View Source LEVEL_SIZE_ARRAY An array holding the level sizes for byte slices. Declaration public static readonly int[] LEVEL_SIZE_ARRAY Field Value Type Description System.Int32 [] | Improve this Doc View Source NEXT_LEVEL_ARRAY An array holding the offset into the LEVEL_SIZE_ARRAY to quickly navigate to the next slice level. Declaration public static readonly int[] NEXT_LEVEL_ARRAY Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Buffer Current head buffer Declaration public byte[] Buffer { get; set; } Property Value Type Description System.Byte [] | Improve this Doc View Source Buffers Array of buffers currently used in the pool. Buffers are allocated if needed don't modify this outside of this class. Declaration public byte[][] Buffers { get; set; } Property Value Type Description System.Byte [][] | Improve this Doc View Source ByteOffset Current head offset Declaration public int ByteOffset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source ByteUpto Where we are in head buffer Declaration public int ByteUpto { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AllocSlice(Byte[], Int32) Creates a new byte slice with the given starting size and returns the slices offset in the pool. Declaration public int AllocSlice(byte[] slice, int upto) Parameters Type Name Description System.Byte [] slice System.Int32 upto Returns Type Description System.Int32 | Improve this Doc View Source Append(BytesRef) Appends the bytes in the provided BytesRef at the current position. Declaration public void Append(BytesRef bytes) Parameters Type Name Description BytesRef bytes | Improve this Doc View Source NewSlice(Int32) Allocates a new slice with the given size. Declaration public int NewSlice(int size) Parameters Type Name Description System.Int32 size Returns Type Description System.Int32 See Also FIRST_LEVEL_SIZE | Improve this Doc View Source NextBuffer() Advances the pool to its next buffer. This method should be called once after the constructor to initialize the pool. In contrast to the constructor a Reset() call will advance the pool to its first buffer immediately. Declaration public void NextBuffer() | Improve this Doc View Source ReadBytes(Int64, Byte[], Int32, Int32) Reads bytes bytes out of the pool starting at the given offset with the given length into the given byte array at offset off . Note: this method allows to copy across block boundaries. Declaration public void ReadBytes(long offset, byte[] bytes, int off, int length) Parameters Type Name Description System.Int64 offset System.Byte [] bytes System.Int32 off System.Int32 length | Improve this Doc View Source Reset() Resets the pool to its initial state reusing the first buffer and fills all buffers with 0 bytes before they reused or passed to RecycleByteBlocks(Byte[][], Int32, Int32) . Calling NextBuffer() is not needed after reset. Declaration public void Reset() | Improve this Doc View Source Reset(Boolean, Boolean) Expert: Resets the pool to its initial state reusing the first buffer. Calling NextBuffer() is not needed after reset. Declaration public void Reset(bool zeroFillBuffers, bool reuseFirst) Parameters Type Name Description System.Boolean zeroFillBuffers if true the buffers are filled with 0 . this should be set to true if this pool is used with slices. System.Boolean reuseFirst if true the first buffer will be reused and calling NextBuffer() is not needed after reset if the block pool was used before ie. NextBuffer() was called before. | Improve this Doc View Source SetBytesRef(BytesRef, Int32) Declaration public void SetBytesRef(BytesRef term, int textStart) Parameters Type Name Description BytesRef term System.Int32 textStart"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRef.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRef.html",
    "title": "Class BytesRef | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRef Represents byte[] , as a slice (offset + length) into an existing byte[] . The Bytes property should never be null ; use EMPTY_BYTES if necessary. Important note: Unless otherwise noted, Lucene uses this class to represent terms that are encoded as UTF8 bytes in the index. To convert them to a .NET (which is UTF16), use Utf8ToString() . Using code like new String(bytes, offset, length) to do this is wrong , as it does not respect the correct character set and may return wrong results (depending on the platform's defaults)! Inheritance System.Object BytesRef Implements IComparable Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class BytesRef : IComparable<BytesRef>, IComparable Constructors | Improve this Doc View Source BytesRef() Create a BytesRef with EMPTY_BYTES Declaration public BytesRef() | Improve this Doc View Source BytesRef(ICharSequence) Initialize the byte[] from the UTF8 bytes for the provided ICharSequence . Declaration public BytesRef(ICharSequence text) Parameters Type Name Description ICharSequence text This must be well-formed unicode text, with no unpaired surrogates. | Improve this Doc View Source BytesRef(Byte[]) This instance will directly reference bytes w/o making a copy. bytes should not be null . Declaration public BytesRef(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source BytesRef(Byte[], Int32, Int32) This instance will directly reference bytes w/o making a copy. bytes should not be null . Declaration public BytesRef(byte[] bytes, int offset, int length) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 length | Improve this Doc View Source BytesRef(Int32) Create a BytesRef pointing to a new array of size capacity . Offset and length will both be zero. Declaration public BytesRef(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source BytesRef(String) Initialize the byte[] from the UTF8 bytes for the provided . Declaration public BytesRef(string text) Parameters Type Name Description System.String text This must be well-formed unicode text, with no unpaired surrogates. Fields | Improve this Doc View Source EMPTY_BYTES An empty byte array for convenience Declaration public static readonly byte[] EMPTY_BYTES Field Value Type Description System.Byte [] Properties | Improve this Doc View Source Bytes The contents of the BytesRef. Should never be null . Declaration public byte[] Bytes { get; set; } Property Value Type Description System.Byte [] | Improve this Doc View Source Length Length of used bytes. Declaration public int Length { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset Offset of first valid byte. Declaration public int Offset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source UTF8SortedAsUnicodeComparer Declaration public static IComparer<BytesRef> UTF8SortedAsUnicodeComparer { get; } Property Value Type Description IComparer < BytesRef > | Improve this Doc View Source UTF8SortedAsUTF16Comparer Declaration public static IComparer<BytesRef> UTF8SortedAsUTF16Comparer { get; } Property Value Type Description IComparer < BytesRef > Methods | Improve this Doc View Source Append(BytesRef) Appends the bytes from the given BytesRef NOTE: if this would exceed the array size, this method creates a new reference array. Declaration public void Append(BytesRef other) Parameters Type Name Description BytesRef other | Improve this Doc View Source BytesEquals(BytesRef) Expert: Compares the bytes against another BytesRef , returning true if the bytes are equal. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public bool BytesEquals(BytesRef other) Parameters Type Name Description BytesRef other Another BytesRef , should not be null . Returns Type Description System.Boolean | Improve this Doc View Source Clone() Returns a shallow clone of this instance (the underlying bytes are not copied and will be shared by both the returned object and this object. Declaration public object Clone() Returns Type Description System.Object See Also DeepCopyOf(BytesRef) | Improve this Doc View Source CompareTo(BytesRef) Unsigned byte order comparison Declaration public int CompareTo(BytesRef other) Parameters Type Name Description BytesRef other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(Object) Unsigned byte order comparison Declaration public int CompareTo(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 | Improve this Doc View Source CopyBytes(BytesRef) Copies the bytes from the given BytesRef NOTE: if this would exceed the array size, this method creates a new reference array. Declaration public void CopyBytes(BytesRef other) Parameters Type Name Description BytesRef other | Improve this Doc View Source CopyChars(ICharSequence) Copies the UTF8 bytes for this ICharSequence . Declaration public void CopyChars(ICharSequence text) Parameters Type Name Description ICharSequence text Must be well-formed unicode text, with no unpaired surrogates or invalid UTF16 code units. | Improve this Doc View Source CopyChars(String) Copies the UTF8 bytes for this . Declaration public void CopyChars(string text) Parameters Type Name Description System.String text Must be well-formed unicode text, with no unpaired surrogates or invalid UTF16 code units. | Improve this Doc View Source DeepCopyOf(BytesRef) Creates a new BytesRef that points to a copy of the bytes from other . The returned BytesRef will have a length of other.Length and an offset of zero. Declaration public static BytesRef DeepCopyOf(BytesRef other) Parameters Type Name Description BytesRef other Returns Type Description BytesRef | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Calculates the hash code as required by Lucene.Net.Index.TermsHash during indexing. This is currently implemented as MurmurHash3 (32 bit), using the seed from GOOD_FAST_HASH_SEED , but is subject to change from release to release. Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Grow(Int32) Used to grow the reference array. In general this should not be used as it does not take the offset into account. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Grow(int newLength) Parameters Type Name Description System.Int32 newLength | Improve this Doc View Source IsValid() Performs internal consistency checks. Always returns true (or throws ) Declaration public bool IsValid() Returns Type Description System.Boolean | Improve this Doc View Source ToString() Returns hex encoded bytes, eg [0x6c 0x75 0x63 0x65 0x6e 0x65] Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source Utf8ToString() Interprets stored bytes as UTF8 bytes, returning the resulting . Declaration public string Utf8ToString() Returns Type Description System.String Implements IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefArray.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefArray.html",
    "title": "Class BytesRefArray | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefArray A simple append only random-access BytesRef array that stores full copies of the appended bytes in a ByteBlockPool . Note: this class is not Thread-Safe! @lucene.internal This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BytesRefArray Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class BytesRefArray : object Constructors | Improve this Doc View Source BytesRefArray(Counter) Creates a new BytesRefArray with a counter to track allocated bytes Declaration public BytesRefArray(Counter bytesUsed) Parameters Type Name Description Counter bytesUsed Properties | Improve this Doc View Source Length Returns the current size of this BytesRefArray . NOTE: This was size() in Lucene. Declaration public int Length { get; } Property Value Type Description System.Int32 The current size of this BytesRefArray Methods | Improve this Doc View Source Append(BytesRef) Appends a copy of the given BytesRef to this BytesRefArray . Declaration public int Append(BytesRef bytes) Parameters Type Name Description BytesRef bytes The bytes to append Returns Type Description System.Int32 The index of the appended bytes | Improve this Doc View Source Clear() Clears this BytesRefArray Declaration public void Clear() | Improve this Doc View Source Get(BytesRef, Int32) Returns the n'th element of this BytesRefArray Declaration public BytesRef Get(BytesRef spare, int index) Parameters Type Name Description BytesRef spare A spare BytesRef instance System.Int32 index The elements index to retrieve Returns Type Description BytesRef The n'th element of this BytesRefArray | Improve this Doc View Source GetIterator() Sugar for GetIterator(IComparer<BytesRef>) with a null comparer Declaration public IBytesRefIterator GetIterator() Returns Type Description IBytesRefIterator | Improve this Doc View Source GetIterator(IComparer<BytesRef>) Returns a IBytesRefIterator with point in time semantics. The iterator provides access to all so far appended BytesRef instances. If a non null IComparer<BytesRef> is provided the iterator will iterate the byte values in the order specified by the comparer. Otherwise the order is the same as the values were appended. This is a non-destructive operation. Declaration public IBytesRefIterator GetIterator(IComparer<BytesRef> comp) Parameters Type Name Description IComparer < BytesRef > comp Returns Type Description IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.BytesStartArray.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.BytesStartArray.html",
    "title": "Class BytesRefHash.BytesStartArray | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefHash.BytesStartArray Manages allocation of the per-term addresses. Inheritance System.Object BytesRefHash.BytesStartArray BytesRefHash.DirectBytesStartArray Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class BytesStartArray : object Methods | Improve this Doc View Source BytesUsed() A Counter reference holding the number of bytes used by this BytesRefHash.BytesStartArray . The BytesRefHash uses this reference to track it memory usage. Declaration public abstract Counter BytesUsed() Returns Type Description Counter a reference holding the number of bytes used by this BytesRefHash.BytesStartArray . | Improve this Doc View Source Clear() Clears the BytesRefHash.BytesStartArray and returns the cleared instance. Declaration public abstract int[] Clear() Returns Type Description System.Int32 [] The cleared instance, this might be null . | Improve this Doc View Source Grow() Grows the BytesRefHash.BytesStartArray . Declaration public abstract int[] Grow() Returns Type Description System.Int32 [] The grown array. | Improve this Doc View Source Init() Initializes the BytesRefHash.BytesStartArray . This call will allocate memory. Declaration public abstract int[] Init() Returns Type Description System.Int32 [] The initialized bytes start array."
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.DirectBytesStartArray.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.DirectBytesStartArray.html",
    "title": "Class BytesRefHash.DirectBytesStartArray | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefHash.DirectBytesStartArray A simple BytesRefHash.BytesStartArray that tracks memory allocation using a private Counter instance. Inheritance System.Object BytesRefHash.BytesStartArray BytesRefHash.DirectBytesStartArray Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class DirectBytesStartArray : BytesRefHash.BytesStartArray Constructors | Improve this Doc View Source DirectBytesStartArray(Int32) Declaration public DirectBytesStartArray(int initSize) Parameters Type Name Description System.Int32 initSize | Improve this Doc View Source DirectBytesStartArray(Int32, Counter) Declaration public DirectBytesStartArray(int initSize, Counter counter) Parameters Type Name Description System.Int32 initSize Counter counter Fields | Improve this Doc View Source m_initSize Declaration protected readonly int m_initSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source BytesUsed() Declaration public override Counter BytesUsed() Returns Type Description Counter Overrides BytesRefHash.BytesStartArray.BytesUsed() | Improve this Doc View Source Clear() Declaration public override int[] Clear() Returns Type Description System.Int32 [] Overrides BytesRefHash.BytesStartArray.Clear() | Improve this Doc View Source Grow() Declaration public override int[] Grow() Returns Type Description System.Int32 [] Overrides BytesRefHash.BytesStartArray.Grow() | Improve this Doc View Source Init() Declaration public override int[] Init() Returns Type Description System.Int32 [] Overrides BytesRefHash.BytesStartArray.Init()"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.html",
    "title": "Class BytesRefHash | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefHash BytesRefHash is a special purpose hash-map like data-structure optimized for BytesRef instances. BytesRefHash maintains mappings of byte arrays to ids (Map<BytesRef,int>) storing the hashed bytes efficiently in continuous storage. The mapping to the id is encapsulated inside BytesRefHash and is guaranteed to be increased for each added BytesRef . Note: The maximum capacity BytesRef instance passed to Add(BytesRef) must not be longer than BYTE_BLOCK_SIZE -2. The internal storage is limited to 2GB total byte storage. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BytesRefHash Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class BytesRefHash : IDisposable Constructors | Improve this Doc View Source BytesRefHash() Creates a new BytesRefHash with a ByteBlockPool using a ByteBlockPool.DirectAllocator . Declaration public BytesRefHash() | Improve this Doc View Source BytesRefHash(ByteBlockPool) Creates a new BytesRefHash Declaration public BytesRefHash(ByteBlockPool pool) Parameters Type Name Description ByteBlockPool pool | Improve this Doc View Source BytesRefHash(ByteBlockPool, Int32, BytesRefHash.BytesStartArray) Creates a new BytesRefHash Declaration public BytesRefHash(ByteBlockPool pool, int capacity, BytesRefHash.BytesStartArray bytesStartArray) Parameters Type Name Description ByteBlockPool pool System.Int32 capacity BytesRefHash.BytesStartArray bytesStartArray Fields | Improve this Doc View Source DEFAULT_CAPACITY Declaration public const int DEFAULT_CAPACITY = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source Count Returns the number of BytesRef values in this BytesRefHash . NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 The number of BytesRef values in this BytesRefHash . Methods | Improve this Doc View Source Add(BytesRef) Adds a new BytesRef Declaration public int Add(BytesRef bytes) Parameters Type Name Description BytesRef bytes The bytes to hash Returns Type Description System.Int32 The id the given bytes are hashed if there was no mapping for the given bytes, otherwise (-(id)-1) . this guarantees that the return value will always be >= 0 if the given bytes haven't been hashed before. Exceptions Type Condition BytesRefHash.MaxBytesLengthExceededException if the given bytes are > 2 + BYTE_BLOCK_SIZE | Improve this Doc View Source AddByPoolOffset(Int32) Adds a \"arbitrary\" int offset instead of a BytesRef term. This is used in the indexer to hold the hash for term vectors, because they do not redundantly store the byte[] term directly and instead reference the byte[] term already stored by the postings BytesRefHash . See Lucene.Net.Index.TermsHashPerField.Add(System.Int32) . Declaration public int AddByPoolOffset(int offset) Parameters Type Name Description System.Int32 offset Returns Type Description System.Int32 | Improve this Doc View Source ByteStart(Int32) Returns the bytesStart offset into the internally used ByteBlockPool for the given bytesID Declaration public int ByteStart(int bytesID) Parameters Type Name Description System.Int32 bytesID The id to look up Returns Type Description System.Int32 The bytesStart offset into the internally used ByteBlockPool for the given id | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Clear(Boolean) Clears the BytesRef which maps to the given BytesRef Declaration public void Clear(bool resetPool) Parameters Type Name Description System.Boolean resetPool | Improve this Doc View Source Compact() Returns the ids array in arbitrary order. Valid ids start at offset of 0 and end at a limit of Count - 1 Note: this is a destructive operation. Clear() must be called in order to reuse this BytesRefHash instance. Declaration public int[] Compact() Returns Type Description System.Int32 [] | Improve this Doc View Source Dispose() Closes the BytesRefHash and releases all internally used memory Declaration public void Dispose() | Improve this Doc View Source Find(BytesRef) Returns the id of the given BytesRef . Declaration public int Find(BytesRef bytes) Parameters Type Name Description BytesRef bytes The bytes to look for Returns Type Description System.Int32 The id of the given bytes, or -1 if there is no mapping for the given bytes. | Improve this Doc View Source Get(Int32, BytesRef) Populates and returns a BytesRef with the bytes for the given bytesID. Note: the given bytesID must be a positive integer less than the current size ( Count ) Declaration public BytesRef Get(int bytesID, BytesRef ref) Parameters Type Name Description System.Int32 bytesID The id BytesRef ref The BytesRef to populate Returns Type Description BytesRef The given BytesRef instance populated with the bytes for the given bytesID | Improve this Doc View Source Reinit() Reinitializes the BytesRefHash after a previous Clear() call. If Clear() has not been called previously this method has no effect. Declaration public void Reinit() | Improve this Doc View Source Sort(IComparer<BytesRef>) Returns the values array sorted by the referenced byte values. Note: this is a destructive operation. Clear() must be called in order to reuse this BytesRefHash instance. Declaration public int[] Sort(IComparer<BytesRef> comp) Parameters Type Name Description IComparer < BytesRef > comp The IComparer<BytesRef> used for sorting Returns Type Description System.Int32 []"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.MaxBytesLengthExceededException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.MaxBytesLengthExceededException.html",
    "title": "Class BytesRefHash.MaxBytesLengthExceededException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefHash.MaxBytesLengthExceededException Thrown if a BytesRef exceeds the BytesRefHash limit of BYTE_BLOCK_SIZE -2. Inheritance System.Object BytesRefHash.MaxBytesLengthExceededException Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class MaxBytesLengthExceededException : Exception"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefIterator.html",
    "title": "Class BytesRefIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefIterator LUCENENET specific class to make the syntax of creating an empty IBytesRefIterator the same as it was in Lucene. Example: var iter = BytesRefIterator.Empty; Inheritance System.Object BytesRefIterator Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class BytesRefIterator : object Fields | Improve this Doc View Source EMPTY Singleton BytesRefIterator that iterates over 0 BytesRefs. Declaration public static readonly IBytesRefIterator EMPTY Field Value Type Description IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Util.CharsRef.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.CharsRef.html",
    "title": "Class CharsRef | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharsRef Represents char[] , as a slice (offset + Length) into an existing char[] . The Chars property should never be null ; use EMPTY_CHARS if necessary. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CharsRef Implements ICharSequence Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class CharsRef : IComparable<CharsRef>, ICharSequence Constructors | Improve this Doc View Source CharsRef() Creates a new CharsRef initialized an empty array zero-Length Declaration public CharsRef() | Improve this Doc View Source CharsRef(Char[], Int32, Int32) Creates a new CharsRef initialized with the given chars , offset and length . Declaration public CharsRef(char[] chars, int offset, int length) Parameters Type Name Description System.Char [] chars System.Int32 offset System.Int32 length | Improve this Doc View Source CharsRef(Int32) Creates a new CharsRef initialized with an array of the given capacity . Declaration public CharsRef(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source CharsRef(String) Creates a new CharsRef initialized with the given character array. Declaration public CharsRef(string string) Parameters Type Name Description System.String string Fields | Improve this Doc View Source EMPTY_CHARS An empty character array for convenience Declaration public static readonly char[] EMPTY_CHARS Field Value Type Description System.Char [] Properties | Improve this Doc View Source Chars The contents of the CharsRef . Should never be null . Declaration public char[] Chars { get; set; } Property Value Type Description System.Char [] | Improve this Doc View Source Item[Int32] Declaration public char this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Length of used characters. Declaration public int Length { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset Offset of first valid character. Declaration public int Offset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source UTF16SortedAsUTF8Comparer Declaration public static IComparer<CharsRef> UTF16SortedAsUTF8Comparer { get; } Property Value Type Description IComparer < CharsRef > Methods | Improve this Doc View Source Append(Char[], Int32, Int32) Appends the given array to this CharsRef . Declaration public void Append(char[] otherChars, int otherOffset, int otherLength) Parameters Type Name Description System.Char [] otherChars System.Int32 otherOffset System.Int32 otherLength | Improve this Doc View Source CharsEquals(CharsRef) Declaration public bool CharsEquals(CharsRef other) Parameters Type Name Description CharsRef other Returns Type Description System.Boolean | Improve this Doc View Source Clone() Returns a shallow clone of this instance (the underlying characters are not copied and will be shared by both the returned object and this object. Declaration public object Clone() Returns Type Description System.Object See Also DeepCopyOf(CharsRef) | Improve this Doc View Source CompareTo(CharsRef) Signed order comparison Declaration public int CompareTo(CharsRef other) Parameters Type Name Description CharsRef other Returns Type Description System.Int32 | Improve this Doc View Source CopyChars(CharsRef) Copies the given CharsRef referenced content into this instance. Declaration public void CopyChars(CharsRef other) Parameters Type Name Description CharsRef other The CharsRef to copy. | Improve this Doc View Source CopyChars(Char[], Int32, Int32) Copies the given array into this CharsRef . Declaration public void CopyChars(char[] otherChars, int otherOffset, int otherLength) Parameters Type Name Description System.Char [] otherChars System.Int32 otherOffset System.Int32 otherLength | Improve this Doc View Source DeepCopyOf(CharsRef) Creates a new CharsRef that points to a copy of the chars from other . The returned CharsRef will have a Length of other.Length and an offset of zero. Declaration public static CharsRef DeepCopyOf(CharsRef other) Parameters Type Name Description CharsRef other Returns Type Description CharsRef | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Grow(Int32) Used to grow the reference array. In general this should not be used as it does not take the offset into account. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Grow(int newLength) Parameters Type Name Description System.Int32 newLength | Improve this Doc View Source IsValid() Performs internal consistency checks. Always returns true (or throws ) Declaration public bool IsValid() Returns Type Description System.Boolean | Improve this Doc View Source SubSequence(Int32, Int32) Declaration public ICharSequence SubSequence(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Returns Type Description ICharSequence | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Implements ICharSequence"
  },
  "api/Lucene.Net/Lucene.Net.Util.CollectionUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.CollectionUtil.html",
    "title": "Class CollectionUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectionUtil Methods for manipulating (sorting) collections. Sort methods work directly on the supplied lists and don't copy to/from arrays before/after. For medium size collections as used in the Lucene indexer that is much more efficient. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CollectionUtil Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class CollectionUtil : object Methods | Improve this Doc View Source IntroSort<T>(IList<T>) Sorts the given random access in natural order. This method uses the intro sort algorithm, but falls back to insertion sort for small lists. Declaration public static void IntroSort<T>(IList<T> list) Parameters Type Name Description IList <T> list This Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(IList<T>, IComparer<T>) Sorts the given using the . This method uses the intro sort algorithm, but falls back to insertion sort for small lists. Declaration public static void IntroSort<T>(IList<T> list, IComparer<T> comp) Parameters Type Name Description IList <T> list This IComparer <T> comp The to use for the sort. Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(IList<T>) Sorts the given in natural order. This method uses the Tim sort algorithm, but falls back to binary sort for small lists. Declaration public static void TimSort<T>(IList<T> list) Parameters Type Name Description IList <T> list This Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(IList<T>, IComparer<T>) Sorts the given using the . This method uses the Tim sort algorithm, but falls back to binary sort for small lists. Declaration public static void TimSort<T>(IList<T> list, IComparer<T> comp) Parameters Type Name Description IList <T> list this IComparer <T> comp The to use for the sort. Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.CommandLineUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.CommandLineUtil.html",
    "title": "Class CommandLineUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CommandLineUtil Class containing some useful methods used by command line tools Inheritance System.Object CommandLineUtil Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class CommandLineUtil : object Methods | Improve this Doc View Source LoadDirectoryClass(String) Loads a specific Directory implementation. Declaration public static Type LoadDirectoryClass(string clazzName) Parameters Type Name Description System.String clazzName The name of the Directory class to load. Returns Type Description Type The Directory class loaded. | Improve this Doc View Source LoadFSDirectoryClass(String) Loads a specific FSDirectory implementation. Declaration public static Type LoadFSDirectoryClass(string clazzName) Parameters Type Name Description System.String clazzName The name of the FSDirectory class to load. Returns Type Description Type The FSDirectory class loaded. | Improve this Doc View Source NewFSDirectory(String, DirectoryInfo) Creates a specific FSDirectory instance starting from its class name. Declaration public static FSDirectory NewFSDirectory(string clazzName, DirectoryInfo dir) Parameters Type Name Description System.String clazzName The name of the FSDirectory class to load. DirectoryInfo dir The to be used as parameter constructor. Returns Type Description FSDirectory The new FSDirectory instance | Improve this Doc View Source NewFSDirectory(Type, DirectoryInfo) Creates a new specific FSDirectory instance. Declaration public static FSDirectory NewFSDirectory(Type clazz, DirectoryInfo dir) Parameters Type Name Description Type clazz The class of the object to be created DirectoryInfo dir The to be used as parameter constructor Returns Type Description FSDirectory The new FSDirectory instance."
  },
  "api/Lucene.Net/Lucene.Net.Util.Constants.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Constants.html",
    "title": "Class Constants | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Constants Some useful constants. Inheritance System.Object Constants Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public static class Constants : object Fields | Improve this Doc View Source FREE_BSD True iff running on FreeBSD Declaration public static readonly bool FREE_BSD Field Value Type Description System.Boolean | Improve this Doc View Source LINUX True iff running on Linux. Declaration public static readonly bool LINUX Field Value Type Description System.Boolean | Improve this Doc View Source LUCENE_MAIN_VERSION this is the internal Lucene version, recorded into each segment. NOTE: we track per-segment version as a with the \"X.Y\" format (no minor version), e.g. \"4.0\", \"3.1\", \"3.0\" . Alpha and Beta versions will have numbers like \"X.Y.0.Z\" , anything else is not allowed. This is done to prevent people from using indexes created with ALPHA/BETA versions with the released version. Declaration public static readonly string LUCENE_MAIN_VERSION Field Value Type Description System.String | Improve this Doc View Source LUCENE_VERSION This is the Lucene version for display purposes. Declaration public static readonly string LUCENE_VERSION Field Value Type Description System.String | Improve this Doc View Source MAC_OS_X True iff running on Mac OS X Declaration public static readonly bool MAC_OS_X Field Value Type Description System.Boolean | Improve this Doc View Source OS_ARCH Declaration public static readonly string OS_ARCH Field Value Type Description System.String | Improve this Doc View Source OS_NAME The value of , excluding the version number. Declaration public static readonly string OS_NAME Field Value Type Description System.String | Improve this Doc View Source OS_VERSION Declaration public static readonly string OS_VERSION Field Value Type Description System.String | Improve this Doc View Source RUNTIME_IS_64BIT NOTE: This was JRE_IS_64BIT in Lucene Declaration public static readonly bool RUNTIME_IS_64BIT Field Value Type Description System.Boolean | Improve this Doc View Source RUNTIME_VENDOR NOTE: This was JAVA_VENDOR in Lucene Declaration public static readonly string RUNTIME_VENDOR Field Value Type Description System.String | Improve this Doc View Source RUNTIME_VERSION The value of the version parsed from . NOTE: This was JAVA_VERSION in Lucene Declaration public static readonly string RUNTIME_VERSION Field Value Type Description System.String | Improve this Doc View Source SUN_OS True iff running on SunOS. Declaration public static readonly bool SUN_OS Field Value Type Description System.Boolean | Improve this Doc View Source WINDOWS True iff running on Windows. Declaration public static readonly bool WINDOWS Field Value Type Description System.Boolean Methods | Improve this Doc View Source MainVersionWithoutAlphaBeta() Returns a LUCENE_MAIN_VERSION without any ALPHA/BETA qualifier Used by test only! Declaration public static string MainVersionWithoutAlphaBeta() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Counter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Counter.html",
    "title": "Class Counter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Counter Simple counter class @lucene.internal This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Counter Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Counter : object Methods | Improve this Doc View Source AddAndGet(Int64) Adds the given delta to the counters current value. Declaration public abstract long AddAndGet(long delta) Parameters Type Name Description System.Int64 delta The delta to add. Returns Type Description System.Int64 The counters updated value. | Improve this Doc View Source Get() Returns the counters current value. Declaration public abstract long Get() Returns Type Description System.Int64 The counters current value. | Improve this Doc View Source NewCounter() Returns a new counter. The returned counter is not thread-safe. Declaration public static Counter NewCounter() Returns Type Description Counter | Improve this Doc View Source NewCounter(Boolean) Returns a new counter. Declaration public static Counter NewCounter(bool threadSafe) Parameters Type Name Description System.Boolean threadSafe true if the returned counter can be used by multiple threads concurrently. Returns Type Description Counter A new counter."
  },
  "api/Lucene.Net/Lucene.Net.Util.DisposableThreadLocal-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DisposableThreadLocal-1.html",
    "title": "Class DisposableThreadLocal<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DisposableThreadLocal<T> Java's builtin ThreadLocal has a serious flaw: it can take an arbitrarily long amount of time to dereference the things you had stored in it, even once the ThreadLocal instance itself is no longer referenced. This is because there is single, master map stored for each thread, which all ThreadLocals share, and that master map only periodically purges \"stale\" entries. While not technically a memory leak, because eventually the memory will be reclaimed, it can take a long time and you can easily hit because from the GC's standpoint the stale entries are not reclaimable. This class works around that, by only enrolling WeakReference values into the ThreadLocal, and separately holding a hard reference to each stored value. When you call Dispose() , these hard references are cleared and then GC is freely able to reclaim space by objects stored in it. You should not call Dispose() until all threads are done using the instance. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DisposableThreadLocal<T> Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class DisposableThreadLocal<T> : IDisposable Type Parameters Name Description T Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Get() Declaration public virtual T Get() Returns Type Description T | Improve this Doc View Source InitialValue() Declaration protected virtual T InitialValue() Returns Type Description T | Improve this Doc View Source Set(T) Declaration public virtual void Set(T object) Parameters Type Name Description T object"
  },
  "api/Lucene.Net/Lucene.Net.Util.DocIdBitSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DocIdBitSet.html",
    "title": "Class DocIdBitSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocIdBitSet Simple DocIdSet and DocIdSetIterator backed by a Inheritance System.Object DocIdSet DocIdBitSet Implements IBits Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class DocIdBitSet : DocIdSet, IBits Constructors | Improve this Doc View Source DocIdBitSet(BitArray) Declaration public DocIdBitSet(BitArray bitSet) Parameters Type Name Description BitArray bitSet Properties | Improve this Doc View Source Bits Declaration public override IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source BitSet Returns the underlying . Declaration public virtual BitArray BitSet { get; } Property Value Type Description BitArray | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32) Declaration public bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() Implements IBits"
  },
  "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache.CloneableKey.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache.CloneableKey.html",
    "title": "Class DoubleBarrelLRUCache.CloneableKey | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleBarrelLRUCache.CloneableKey Object providing clone(); the key class must subclass this. Inheritance System.Object DoubleBarrelLRUCache.CloneableKey Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class CloneableKey : object Methods | Improve this Doc View Source Clone() Declaration public abstract object Clone() Returns Type Description System.Object"
  },
  "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache.html",
    "title": "Class DoubleBarrelLRUCache | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleBarrelLRUCache LUCENENET specific class to nest the DoubleBarrelLRUCache.CloneableKey so it can be accessed without referencing the generic closing types of DoubleBarrelLRUCache<TKey, TValue> . Inheritance System.Object DoubleBarrelLRUCache DoubleBarrelLRUCache <TKey, TValue> Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class DoubleBarrelLRUCache : object"
  },
  "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache-2.html",
    "title": "Class DoubleBarrelLRUCache<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleBarrelLRUCache<TKey, TValue> Simple concurrent LRU cache, using a \"double barrel\" approach where two ConcurrentHashMaps record entries. At any given time, one hash is primary and the other is secondary. Get(TKey) first checks primary, and if that's a miss, checks secondary. If secondary has the entry, it's promoted to primary ( NOTE : the key is cloned at this point). Once primary is full, the secondary is cleared and the two are swapped. This is not as space efficient as other possible concurrent approaches (see LUCENE-2075): to achieve perfect LRU(N) it requires 2*N storage. But, this approach is relatively simple and seems in practice to not grow unbounded in size when under hideously high load. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DoubleBarrelLRUCache DoubleBarrelLRUCache<TKey, TValue> Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class DoubleBarrelLRUCache<TKey, TValue> : DoubleBarrelLRUCache where TKey : DoubleBarrelLRUCache.CloneableKey Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source DoubleBarrelLRUCache(Int32) Declaration public DoubleBarrelLRUCache(int maxCount) Parameters Type Name Description System.Int32 maxCount Methods | Improve this Doc View Source Get(TKey) Declaration public TValue Get(TKey key) Parameters Type Name Description TKey key Returns Type Description TValue | Improve this Doc View Source Put(TKey, TValue) Declaration public void Put(TKey key, TValue value) Parameters Type Name Description TKey key TValue value"
  },
  "api/Lucene.Net/Lucene.Net.Util.ExcludeServiceAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ExcludeServiceAttribute.html",
    "title": "Class ExcludeServiceAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExcludeServiceAttribute Base class for Attribute types that exclude services from Reflection scanning. Inheritance System.Object ExcludeServiceAttribute ExcludeCodecFromScanAttribute ExcludeDocValuesFormatFromScanAttribute ExcludePostingsFormatFromScanAttribute Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class ExcludeServiceAttribute : System.Attribute"
  },
  "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.html",
    "title": "Class FieldCacheSanityChecker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheSanityChecker Provides methods for sanity checking that entries in the FieldCache are not wasteful or inconsistent. Lucene 2.9 Introduced numerous enhancements into how the FieldCache is used by the low levels of Lucene searching (for Sorting and ValueSourceQueries) to improve both the speed for Sorting, as well as reopening of IndexReaders. But these changes have shifted the usage of FieldCache from \"top level\" IndexReaders (frequently a MultiReader or DirectoryReader) down to the leaf level SegmentReaders. As a result, existing applications that directly access the FieldCache may find RAM usage increase significantly when upgrading to 2.9 or Later. This class provides an API for these applications (or their Unit tests) to check at run time if the FieldCache contains \"insane\" usages of the FieldCache. @lucene.experimental Inheritance System.Object FieldCacheSanityChecker Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class FieldCacheSanityChecker : object Constructors | Improve this Doc View Source FieldCacheSanityChecker() Declaration public FieldCacheSanityChecker() | Improve this Doc View Source FieldCacheSanityChecker(Boolean) Declaration public FieldCacheSanityChecker(bool estimateRam) Parameters Type Name Description System.Boolean estimateRam If set, estimate size for all FieldCache.CacheEntry objects will be calculated. Methods | Improve this Doc View Source Check(FieldCache.CacheEntry[]) Tests a CacheEntry[] for indication of \"insane\" cache usage. NOTE: FieldCache CreationPlaceholder objects are ignored. (:TODO: is this a bad idea? are we masking a real problem?) Declaration public FieldCacheSanityChecker.Insanity[] Check(params FieldCache.CacheEntry[] cacheEntries) Parameters Type Name Description FieldCache.CacheEntry [] cacheEntries Returns Type Description FieldCacheSanityChecker.Insanity [] | Improve this Doc View Source CheckSanity(FieldCache.CacheEntry[]) Quick and dirty convenience method that instantiates an instance with \"good defaults\" and uses it to test the FieldCache.CacheEntry s Declaration public static FieldCacheSanityChecker.Insanity[] CheckSanity(params FieldCache.CacheEntry[] cacheEntries) Parameters Type Name Description FieldCache.CacheEntry [] cacheEntries Returns Type Description FieldCacheSanityChecker.Insanity [] See Also Check(FieldCache.CacheEntry[]) | Improve this Doc View Source CheckSanity(IFieldCache) Quick and dirty convenience method Declaration public static FieldCacheSanityChecker.Insanity[] CheckSanity(IFieldCache cache) Parameters Type Name Description IFieldCache cache Returns Type Description FieldCacheSanityChecker.Insanity [] See Also Check(FieldCache.CacheEntry[]) See Also IFieldCache FieldCacheSanityChecker.Insanity FieldCacheSanityChecker.InsanityType"
  },
  "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.Insanity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.Insanity.html",
    "title": "Class FieldCacheSanityChecker.Insanity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheSanityChecker.Insanity Simple container for a collection of related FieldCache.CacheEntry objects that in conjunction with each other represent some \"insane\" usage of the IFieldCache . Inheritance System.Object FieldCacheSanityChecker.Insanity Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Insanity : object Constructors | Improve this Doc View Source Insanity(FieldCacheSanityChecker.InsanityType, String, FieldCache.CacheEntry[]) Declaration public Insanity(FieldCacheSanityChecker.InsanityType type, string msg, params FieldCache.CacheEntry[] entries) Parameters Type Name Description FieldCacheSanityChecker.InsanityType type System.String msg FieldCache.CacheEntry [] entries Properties | Improve this Doc View Source CacheEntries FieldCache.CacheEntry objects which suggest a problem Declaration public FieldCache.CacheEntry[] CacheEntries { get; } Property Value Type Description FieldCache.CacheEntry [] | Improve this Doc View Source Msg Description of the insane behavior Declaration public string Msg { get; } Property Value Type Description System.String | Improve this Doc View Source Type Type of insane behavior this object represents Declaration public FieldCacheSanityChecker.InsanityType Type { get; } Property Value Type Description FieldCacheSanityChecker.InsanityType Methods | Improve this Doc View Source ToString() Multi-Line representation of this FieldCacheSanityChecker.Insanity object, starting with the Type and Msg, followed by each CacheEntry.ToString() on it's own line prefaced by a tab character Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.InsanityType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.InsanityType.html",
    "title": "Class FieldCacheSanityChecker.InsanityType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheSanityChecker.InsanityType An Enumeration of the different types of \"insane\" behavior that may be detected in a IFieldCache . Inheritance System.Object FieldCacheSanityChecker.InsanityType Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class InsanityType : object Fields | Improve this Doc View Source EXPECTED Indicates an expected bit of \"insanity\". This may be useful for clients that wish to preserve/log information about insane usage but indicate that it was expected. Declaration public static readonly FieldCacheSanityChecker.InsanityType EXPECTED Field Value Type Description FieldCacheSanityChecker.InsanityType | Improve this Doc View Source SUBREADER Indicates an overlap in cache usage on a given field in sub/super readers. Declaration public static readonly FieldCacheSanityChecker.InsanityType SUBREADER Field Value Type Description FieldCacheSanityChecker.InsanityType | Improve this Doc View Source VALUEMISMATCH Indicates entries have the same reader+fieldname but different cached values. This can happen if different datatypes, or parsers are used -- and while it's not necessarily a bug it's typically an indication of a possible problem. NOTE: Only the reader, fieldname, and cached value are actually tested -- if two cache entries have different parsers or datatypes but the cached values are the same Object (== not just Equal()) this method does not consider that a red flag. This allows for subtle variations in the way a Parser is specified (null vs DEFAULT_INT64_PARSER, etc...) Declaration public static readonly FieldCacheSanityChecker.InsanityType VALUEMISMATCH Field Value Type Description FieldCacheSanityChecker.InsanityType Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String See Also SUBREADER VALUEMISMATCH EXPECTED"
  },
  "api/Lucene.Net/Lucene.Net.Util.FilterIterator-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FilterIterator-1.html",
    "title": "Class FilterIterator<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterIterator<T> An implementation that filters elements with a boolean predicate. Inheritance System.Object FilterIterator<T> Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class FilterIterator<T> : IEnumerator<T> Type Parameters Name Description T Constructors | Improve this Doc View Source FilterIterator(IEnumerator<T>) Declaration public FilterIterator(IEnumerator<T> baseIterator) Parameters Type Name Description IEnumerator <T> baseIterator Properties | Improve this Doc View Source Current Declaration public T Current { get; } Property Value Type Description T Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source MoveNext() Declaration public bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source PredicateFunction(T) Returns true , if this element should be set to Current by Lucene.Net.Util.FilterIterator`1.SetNext . Declaration protected abstract bool PredicateFunction(T object) Parameters Type Name Description T object Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public void Reset() See Also PredicateFunction(T)"
  },
  "api/Lucene.Net/Lucene.Net.Util.FixedBitSet.FixedBitSetIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FixedBitSet.FixedBitSetIterator.html",
    "title": "Class FixedBitSet.FixedBitSetIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedBitSet.FixedBitSetIterator A DocIdSetIterator which iterates over set bits in a FixedBitSet . Inheritance System.Object DocIdSetIterator FixedBitSet.FixedBitSetIterator Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class FixedBitSetIterator : DocIdSetIterator Constructors | Improve this Doc View Source FixedBitSetIterator(FixedBitSet) Creates an iterator over the given FixedBitSet . Declaration public FixedBitSetIterator(FixedBitSet bits) Parameters Type Name Description FixedBitSet bits | Improve this Doc View Source FixedBitSetIterator(Int64[], Int32, Int32) Creates an iterator over the given array of bits. Declaration public FixedBitSetIterator(long[] bits, int numBits, int wordLength) Parameters Type Name Description System.Int64 [] bits System.Int32 numBits System.Int32 wordLength Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Util.FixedBitSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FixedBitSet.html",
    "title": "Class FixedBitSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedBitSet BitSet of fixed length (numBits), backed by accessible ( GetBits() ) long[], accessed with an int index, implementing GetBits() and DocIdSet . If you need to manage more than 2.1B bits, use Int64BitSet . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DocIdSet FixedBitSet Implements IBits Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class FixedBitSet : DocIdSet, IBits Constructors | Improve this Doc View Source FixedBitSet(Int32) Declaration public FixedBitSet(int numBits) Parameters Type Name Description System.Int32 numBits | Improve this Doc View Source FixedBitSet(Int64[], Int32) Declaration public FixedBitSet(long[] storedBits, int numBits) Parameters Type Name Description System.Int64 [] storedBits System.Int32 numBits Properties | Improve this Doc View Source Bits Declaration public override IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source And(DocIdSetIterator) Does in-place AND of the bits provided by the iterator. Declaration public void And(DocIdSetIterator iter) Parameters Type Name Description DocIdSetIterator iter | Improve this Doc View Source And(FixedBitSet) this = this AND other Declaration public void And(FixedBitSet other) Parameters Type Name Description FixedBitSet other | Improve this Doc View Source AndNot(DocIdSetIterator) Does in-place AND NOT of the bits provided by the iterator. Declaration public void AndNot(DocIdSetIterator iter) Parameters Type Name Description DocIdSetIterator iter | Improve this Doc View Source AndNot(FixedBitSet) this = this AND NOT other Declaration public void AndNot(FixedBitSet other) Parameters Type Name Description FixedBitSet other | Improve this Doc View Source AndNotCount(FixedBitSet, FixedBitSet) Returns the popcount or cardinality of \"a and not b\" or \"intersection(a, not(b))\". Neither set is modified. Declaration public static long AndNotCount(FixedBitSet a, FixedBitSet b) Parameters Type Name Description FixedBitSet a FixedBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Bits2words(Int32) Returns the number of 64 bit words it would take to hold numBits Declaration public static int Bits2words(int numBits) Parameters Type Name Description System.Int32 numBits Returns Type Description System.Int32 | Improve this Doc View Source Cardinality() Returns number of set bits. NOTE: this visits every in the backing bits array, and the result is not internally cached! Declaration public int Cardinality() Returns Type Description System.Int32 | Improve this Doc View Source Clear(Int32) Declaration public void Clear(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source Clear(Int32, Int32) Clears a range of bits. Declaration public void Clear(int startIndex, int endIndex) Parameters Type Name Description System.Int32 startIndex Lower index System.Int32 endIndex One-past the last bit to clear | Improve this Doc View Source Clone() Declaration public FixedBitSet Clone() Returns Type Description FixedBitSet | Improve this Doc View Source EnsureCapacity(FixedBitSet, Int32) If the given FixedBitSet is large enough to hold numBits , returns the given bits, otherwise returns a new FixedBitSet which can hold the requested number of bits. NOTE: the returned bitset reuses the underlying long[] of the given bits if possible. Also, calling Length on the returned bits may return a value greater than numBits . Declaration public static FixedBitSet EnsureCapacity(FixedBitSet bits, int numBits) Parameters Type Name Description FixedBitSet bits System.Int32 numBits Returns Type Description FixedBitSet | Improve this Doc View Source Equals(Object) Returns true if both sets have the same bits set Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source Flip(Int32, Int32) Flips a range of bits Declaration public void Flip(int startIndex, int endIndex) Parameters Type Name Description System.Int32 startIndex Lower index System.Int32 endIndex One-past the last bit to flip | Improve this Doc View Source Get(Int32) Declaration public bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndClear(Int32) Declaration public bool GetAndClear(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndSet(Int32) Declaration public bool GetAndSet(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetBits() Expert. Declaration public long[] GetBits() Returns Type Description System.Int64 [] | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source IntersectionCount(FixedBitSet, FixedBitSet) Returns the popcount or cardinality of the intersection of the two sets. Neither set is modified. Declaration public static long IntersectionCount(FixedBitSet a, FixedBitSet b) Parameters Type Name Description FixedBitSet a FixedBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Intersects(FixedBitSet) Returns true if the sets have any elements in common Declaration public bool Intersects(FixedBitSet other) Parameters Type Name Description FixedBitSet other Returns Type Description System.Boolean | Improve this Doc View Source NextSetBit(Int32) Returns the index of the first set bit starting at the index specified. -1 is returned if there are no more set bits. Declaration public int NextSetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source Or(DocIdSetIterator) Does in-place OR of the bits provided by the iterator. Declaration public void Or(DocIdSetIterator iter) Parameters Type Name Description DocIdSetIterator iter | Improve this Doc View Source Or(FixedBitSet) this = this OR other Declaration public void Or(FixedBitSet other) Parameters Type Name Description FixedBitSet other | Improve this Doc View Source PrevSetBit(Int32) Returns the index of the last set bit before or on the index specified. -1 is returned if there are no more set bits. Declaration public int PrevSetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source Set(Int32) Declaration public void Set(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source Set(Int32, Int32) Sets a range of bits Declaration public void Set(int startIndex, int endIndex) Parameters Type Name Description System.Int32 startIndex Lower index System.Int32 endIndex One-past the last bit to set | Improve this Doc View Source UnionCount(FixedBitSet, FixedBitSet) Returns the popcount or cardinality of the union of the two sets. Neither set is modified. Declaration public static long UnionCount(FixedBitSet a, FixedBitSet b) Parameters Type Name Description FixedBitSet a FixedBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Xor(DocIdSetIterator) Does in-place XOR of the bits provided by the iterator. Declaration public void Xor(DocIdSetIterator iter) Parameters Type Name Description DocIdSetIterator iter | Improve this Doc View Source Xor(FixedBitSet) this = this XOR other Declaration public void Xor(FixedBitSet other) Parameters Type Name Description FixedBitSet other Implements IBits"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.Arc-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.Arc-1.html",
    "title": "Class Builder.Arc<S> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Builder.Arc<S> Expert: holds a pending (seen but not yet serialized) arc. Inheritance System.Object Builder.Arc<S> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class Arc<S> : object Type Parameters Name Description S Properties | Improve this Doc View Source IsFinal Declaration public bool IsFinal { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Label Declaration public int Label { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source NextFinalOutput Declaration public S NextFinalOutput { get; set; } Property Value Type Description S | Improve this Doc View Source Output Declaration public S Output { get; set; } Property Value Type Description S | Improve this Doc View Source Target Declaration public Builder.INode Target { get; set; } Property Value Type Description Builder.INode"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.CompiledNode.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.CompiledNode.html",
    "title": "Class Builder.CompiledNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Builder.CompiledNode Inheritance System.Object Builder.CompiledNode Implements Builder.INode Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class CompiledNode : object, Builder.INode Properties | Improve this Doc View Source IsCompiled Declaration public bool IsCompiled { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Node Declaration public long Node { get; set; } Property Value Type Description System.Int64 Implements Builder.INode"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.FreezeTail-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.FreezeTail-1.html",
    "title": "Class Builder.FreezeTail<S> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Builder.FreezeTail<S> Expert: this is invoked by Builder whenever a suffix is serialized. Inheritance System.Object Builder.FreezeTail<S> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class FreezeTail<S> : object Type Parameters Name Description S Methods | Improve this Doc View Source Freeze(Builder.UnCompiledNode<S>[], Int32, Int32sRef) Declaration public abstract void Freeze(Builder.UnCompiledNode<S>[] frontier, int prefixLenPlus1, Int32sRef prevInput) Parameters Type Name Description Builder.UnCompiledNode <S>[] frontier System.Int32 prefixLenPlus1 Int32sRef prevInput"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.html",
    "title": "Class Builder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Builder LUCENENET specific type used to access nested types of Builder<T> without referring to its generic closing type. Inheritance System.Object Builder Builder <T> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class Builder : object"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.INode.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.INode.html",
    "title": "Interface Builder.INode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface Builder.INode Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public interface INode Properties | Improve this Doc View Source IsCompiled Declaration bool IsCompiled { get; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.UnCompiledNode-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.UnCompiledNode-1.html",
    "title": "Class Builder.UnCompiledNode<S> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Builder.UnCompiledNode<S> Expert: holds a pending (seen but not yet serialized) Node. Inheritance System.Object Builder.UnCompiledNode<S> Implements Builder.INode Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class UnCompiledNode<S> : object, Builder.INode Type Parameters Name Description S Constructors | Improve this Doc View Source UnCompiledNode(Builder<S>, Int32) Declaration public UnCompiledNode(Builder<S> owner, int depth) Parameters Type Name Description Builder <S> owner System.Int32 depth The node's depth starting from the automaton root. Needed for LUCENE-2934 (node expansion based on conditions other than the fanout size). Properties | Improve this Doc View Source Arcs Declaration public Builder.Arc<S>[] Arcs { get; set; } Property Value Type Description Builder.Arc <S>[] | Improve this Doc View Source Depth this node's depth, starting from the automaton root. Declaration public int Depth { get; } Property Value Type Description System.Int32 | Improve this Doc View Source InputCount Declaration public long InputCount { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source IsCompiled Declaration public bool IsCompiled { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsFinal Declaration public bool IsFinal { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source NumArcs Declaration public int NumArcs { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Output Declaration public S Output { get; set; } Property Value Type Description S Methods | Improve this Doc View Source AddArc(Int32, Builder.INode) Declaration public void AddArc(int label, Builder.INode target) Parameters Type Name Description System.Int32 label Builder.INode target | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source DeleteLast(Int32, Builder.INode) Declaration public void DeleteLast(int label, Builder.INode target) Parameters Type Name Description System.Int32 label Builder.INode target | Improve this Doc View Source GetLastOutput(Int32) Declaration public S GetLastOutput(int labelToMatch) Parameters Type Name Description System.Int32 labelToMatch Returns Type Description S | Improve this Doc View Source PrependOutput(S) Declaration public void PrependOutput(S outputPrefix) Parameters Type Name Description S outputPrefix | Improve this Doc View Source ReplaceLast(Int32, Builder.INode, S, Boolean) Declaration public void ReplaceLast(int labelToMatch, Builder.INode target, S nextFinalOutput, bool isFinal) Parameters Type Name Description System.Int32 labelToMatch Builder.INode target S nextFinalOutput System.Boolean isFinal | Improve this Doc View Source SetLastOutput(Int32, S) Declaration public void SetLastOutput(int labelToMatch, S newOutput) Parameters Type Name Description System.Int32 labelToMatch S newOutput Implements Builder.INode"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder-1.html",
    "title": "Class Builder<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Builder<T> Builds a minimal FST (maps an Int32sRef term to an arbitrary output) from pre-sorted terms with outputs. The FST becomes an FSA if you use NoOutputs. The FST is written on-the-fly into a compact serialized format byte array, which can be saved to / loaded from a Directory or used directly for traversal. The FST is always finite (no cycles). NOTE: The algorithm is described at http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698 The parameterized type is the output type. See the subclasses of Outputs<T> . FSTs larger than 2.1GB are now possible (as of Lucene 4.2). FSTs containing more than 2.1B nodes are also now possible, however they cannot be packed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Builder Builder<T> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class Builder<T> : Builder Type Parameters Name Description T Constructors | Improve this Doc View Source Builder(FST.INPUT_TYPE, Outputs<T>) Instantiates an FST/FSA builder without any pruning. A shortcut to Builder(FST.INPUT_TYPE, Int32, Int32, Boolean, Boolean, Int32, Outputs<T>, Builder.FreezeTail<T>, Boolean, Single, Boolean, Int32) with pruning options turned off. Declaration public Builder(FST.INPUT_TYPE inputType, Outputs<T> outputs) Parameters Type Name Description FST.INPUT_TYPE inputType Outputs <T> outputs | Improve this Doc View Source Builder(FST.INPUT_TYPE, Int32, Int32, Boolean, Boolean, Int32, Outputs<T>, Builder.FreezeTail<T>, Boolean, Single, Boolean, Int32) Instantiates an FST/FSA builder with all the possible tuning and construction tweaks. Read parameter documentation carefully. Declaration public Builder(FST.INPUT_TYPE inputType, int minSuffixCount1, int minSuffixCount2, bool doShareSuffix, bool doShareNonSingletonNodes, int shareMaxTailLength, Outputs<T> outputs, Builder.FreezeTail<T> freezeTail, bool doPackFST, float acceptableOverheadRatio, bool allowArrayArcs, int bytesPageBits) Parameters Type Name Description FST.INPUT_TYPE inputType The input type (transition labels). Can be anything from FST.INPUT_TYPE enumeration. Shorter types will consume less memory. Strings (character sequences) are represented as BYTE4 (full unicode codepoints). System.Int32 minSuffixCount1 If pruning the input graph during construction, this threshold is used for telling if a node is kept or pruned. If transition_count(node) >= minSuffixCount1, the node is kept. System.Int32 minSuffixCount2 (Note: only Mike McCandless knows what this one is really doing...) System.Boolean doShareSuffix If true , the shared suffixes will be compacted into unique paths. this requires an additional RAM-intensive hash map for lookups in memory. Setting this parameter to false creates a single suffix path for all input sequences. this will result in a larger FST, but requires substantially less memory and CPU during building. System.Boolean doShareNonSingletonNodes Only used if doShareSuffix is true . Set this to true to ensure FST is fully minimal, at cost of more CPU and more RAM during building. System.Int32 shareMaxTailLength Only used if doShareSuffix is true . Set this to to ensure FST is fully minimal, at cost of more CPU and more RAM during building. Outputs <T> outputs The output type for each input sequence. Applies only if building an FST. For FSA, use Singleton and NoOutput as the singleton output object. Builder.FreezeTail <T> freezeTail System.Boolean doPackFST Pass true to create a packed FST. System.Single acceptableOverheadRatio How to trade speed for space when building the FST. this option is only relevant when doPackFST is true. GetMutable(Int32, Int32, Single) System.Boolean allowArrayArcs Pass false to disable the array arc optimization while building the FST; this will make the resulting FST smaller but slower to traverse. System.Int32 bytesPageBits How many bits wide to make each byte[] block in the Lucene.Net.Util.Fst.BytesStore ; if you know the FST will be large then make this larger. For example 15 bits = 32768 byte pages. Properties | Improve this Doc View Source MappedStateCount Declaration public virtual long MappedStateCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TermCount Declaration public virtual long TermCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotStateCount Declaration public virtual long TotStateCount { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Add(Int32sRef, T) It's OK to add the same input twice in a row with different outputs, as long as outputs impls the merge method. Note that input is fully consumed after this method is returned (so caller is free to reuse), but output is not. So if your outputs are changeable (eg ByteSequenceOutputs or Int32SequenceOutputs ) then you cannot reuse across calls. Declaration public virtual void Add(Int32sRef input, T output) Parameters Type Name Description Int32sRef input T output | Improve this Doc View Source Finish() Returns final FST. NOTE: this will return null if nothing is accepted by the FST. Declaration public virtual FST<T> Finish() Returns Type Description FST <T> | Improve this Doc View Source GetFstSizeInBytes() Declaration public virtual long GetFstSizeInBytes() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.ByteSequenceOutputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.ByteSequenceOutputs.html",
    "title": "Class ByteSequenceOutputs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteSequenceOutputs An FST Outputs{BytesRef} implementation where each output is a sequence of bytes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < BytesRef > ByteSequenceOutputs Inherited Members Outputs<BytesRef>.WriteFinalOutput(BytesRef, DataOutput) Outputs<BytesRef>.ReadFinalOutput(DataInput) Outputs<BytesRef>.Merge(BytesRef, BytesRef) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class ByteSequenceOutputs : Outputs<BytesRef> Properties | Improve this Doc View Source NoOutput Declaration public override BytesRef NoOutput { get; } Property Value Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.NoOutput | Improve this Doc View Source Singleton Declaration public static ByteSequenceOutputs Singleton { get; } Property Value Type Description ByteSequenceOutputs Methods | Improve this Doc View Source Add(BytesRef, BytesRef) Declaration public override BytesRef Add(BytesRef prefix, BytesRef output) Parameters Type Name Description BytesRef prefix BytesRef output Returns Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Add(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source Common(BytesRef, BytesRef) Declaration public override BytesRef Common(BytesRef output1, BytesRef output2) Parameters Type Name Description BytesRef output1 BytesRef output2 Returns Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Common(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source OutputToString(BytesRef) Declaration public override string OutputToString(BytesRef output) Parameters Type Name Description BytesRef output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.OutputToString(Lucene.Net.Util.BytesRef) | Improve this Doc View Source Read(DataInput) Declaration public override BytesRef Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(BytesRef, BytesRef) Declaration public override BytesRef Subtract(BytesRef output, BytesRef inc) Parameters Type Name Description BytesRef output BytesRef inc Returns Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Subtract(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source Write(BytesRef, DataOutput) Declaration public override void Write(BytesRef prefix, DataOutput out) Parameters Type Name Description BytesRef prefix DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Write(Lucene.Net.Util.BytesRef, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum.html",
    "title": "Class BytesRefFSTEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefFSTEnum LUCENENET specific. This class is to mimic Java's ability to specify nested classes of Generics without having to specify the generic type (i.e. BytesRefFSTEnum.InputOutput{T} rather than BytesRefFSTEnum{T}.InputOutput{T}) Inheritance System.Object BytesRefFSTEnum Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class BytesRefFSTEnum : object"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum.InputOutput-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum.InputOutput-1.html",
    "title": "Class BytesRefFSTEnum.InputOutput<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefFSTEnum.InputOutput<T> Holds a single input ( BytesRef ) + output pair. Inheritance System.Object BytesRefFSTEnum.InputOutput<T> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class InputOutput<T> : object Type Parameters Name Description T Properties | Improve this Doc View Source Input Declaration public BytesRef Input { get; set; } Property Value Type Description BytesRef | Improve this Doc View Source Output Declaration public T Output { get; set; } Property Value Type Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum-1.html",
    "title": "Class BytesRefFSTEnum<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefFSTEnum<T> Enumerates all input ( BytesRef ) + output pairs in an FST. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FSTEnum <T> BytesRefFSTEnum<T> Inherited Members FSTEnum<T>.m_fst FSTEnum<T>.m_arcs FSTEnum<T>.m_output FSTEnum<T>.NO_OUTPUT FSTEnum<T>.m_fstReader FSTEnum<T>.m_scratchArc FSTEnum<T>.m_upto FSTEnum<T>.m_targetLength FSTEnum<T>.RewindPrefix() FSTEnum<T>.DoNext() FSTEnum<T>.DoSeekCeil() FSTEnum<T>.DoSeekFloor() FSTEnum<T>.DoSeekExact() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class BytesRefFSTEnum<T> : FSTEnum<T> Type Parameters Name Description T Constructors | Improve this Doc View Source BytesRefFSTEnum(FST<T>) doFloor controls the behavior of advance: if it's true doFloor is true, advance positions to the biggest term before target. Declaration public BytesRefFSTEnum(FST<T> fst) Parameters Type Name Description FST <T> fst Properties | Improve this Doc View Source Current Declaration public BytesRefFSTEnum.InputOutput<T> Current { get; } Property Value Type Description BytesRefFSTEnum.InputOutput <T> | Improve this Doc View Source CurrentLabel Declaration protected override int CurrentLabel { get; set; } Property Value Type Description System.Int32 Overrides Lucene.Net.Util.Fst.FSTEnum<T>.CurrentLabel | Improve this Doc View Source TargetLabel Declaration protected override int TargetLabel { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Util.Fst.FSTEnum<T>.TargetLabel Methods | Improve this Doc View Source Grow() Declaration protected override void Grow() Overrides Lucene.Net.Util.Fst.FSTEnum<T>.Grow() | Improve this Doc View Source Next() Declaration public BytesRefFSTEnum.InputOutput<T> Next() Returns Type Description BytesRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekCeil(BytesRef) Seeks to smallest term that's >= target. Declaration public BytesRefFSTEnum.InputOutput<T> SeekCeil(BytesRef target) Parameters Type Name Description BytesRef target Returns Type Description BytesRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekExact(BytesRef) Seeks to exactly this term, returning null if the term doesn't exist. This is faster than using SeekFloor(BytesRef) or SeekCeil(BytesRef) because it short-circuits as soon the match is not found. Declaration public BytesRefFSTEnum.InputOutput<T> SeekExact(BytesRef target) Parameters Type Name Description BytesRef target Returns Type Description BytesRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekFloor(BytesRef) Seeks to biggest term that's <= target. Declaration public BytesRefFSTEnum.InputOutput<T> SeekFloor(BytesRef target) Parameters Type Name Description BytesRef target Returns Type Description BytesRefFSTEnum.InputOutput <T>"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.CharSequenceOutputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.CharSequenceOutputs.html",
    "title": "Class CharSequenceOutputs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharSequenceOutputs An FST Outputs<T> implementation where each output is a sequence of characters. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < CharsRef > CharSequenceOutputs Inherited Members Outputs<CharsRef>.WriteFinalOutput(CharsRef, DataOutput) Outputs<CharsRef>.ReadFinalOutput(DataInput) Outputs<CharsRef>.Merge(CharsRef, CharsRef) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class CharSequenceOutputs : Outputs<CharsRef> Properties | Improve this Doc View Source NoOutput Declaration public override CharsRef NoOutput { get; } Property Value Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.NoOutput | Improve this Doc View Source Singleton Declaration public static CharSequenceOutputs Singleton { get; } Property Value Type Description CharSequenceOutputs Methods | Improve this Doc View Source Add(CharsRef, CharsRef) Declaration public override CharsRef Add(CharsRef prefix, CharsRef output) Parameters Type Name Description CharsRef prefix CharsRef output Returns Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Add(Lucene.Net.Util.CharsRef, Lucene.Net.Util.CharsRef) | Improve this Doc View Source Common(CharsRef, CharsRef) Declaration public override CharsRef Common(CharsRef output1, CharsRef output2) Parameters Type Name Description CharsRef output1 CharsRef output2 Returns Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Common(Lucene.Net.Util.CharsRef, Lucene.Net.Util.CharsRef) | Improve this Doc View Source OutputToString(CharsRef) Declaration public override string OutputToString(CharsRef output) Parameters Type Name Description CharsRef output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.OutputToString(Lucene.Net.Util.CharsRef) | Improve this Doc View Source Read(DataInput) Declaration public override CharsRef Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(CharsRef, CharsRef) Declaration public override CharsRef Subtract(CharsRef output, CharsRef inc) Parameters Type Name Description CharsRef output CharsRef inc Returns Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Subtract(Lucene.Net.Util.CharsRef, Lucene.Net.Util.CharsRef) | Improve this Doc View Source Write(CharsRef, DataOutput) Declaration public override void Write(CharsRef prefix, DataOutput out) Parameters Type Name Description CharsRef prefix DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Write(Lucene.Net.Util.CharsRef, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST.Arc-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST.Arc-1.html",
    "title": "Class FST.Arc<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FST.Arc<T> Represents a single arc. Inheritance System.Object FST.Arc<T> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class Arc<T> : object Type Parameters Name Description T Properties | Improve this Doc View Source IsFinal Declaration public virtual bool IsFinal { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsLast Declaration public virtual bool IsLast { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Label Declaration public int Label { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source NextFinalOutput Declaration public T NextFinalOutput { get; set; } Property Value Type Description T | Improve this Doc View Source Output Declaration public T Output { get; set; } Property Value Type Description T | Improve this Doc View Source Target To node (ord or address) Declaration public long Target { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CopyFrom(FST.Arc<T>) Return this Declaration public FST.Arc<T> CopyFrom(FST.Arc<T> other) Parameters Type Name Description FST.Arc <T> other Returns Type Description FST.Arc <T> | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST.BytesReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST.BytesReader.html",
    "title": "Class FST.BytesReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FST.BytesReader Reads bytes stored in an FST. Inheritance System.Object DataInput FST.BytesReader Inherited Members DataInput.ReadByte() DataInput.ReadBytes(Byte[], Int32, Int32) DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.Clone() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class BytesReader : DataInput Properties | Improve this Doc View Source IsReversed Returns true if this reader uses reversed bytes under-the-hood. Declaration public abstract bool IsReversed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Position Current read position Declaration public abstract long Position { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source SkipBytes(Int32) Skips bytes. Declaration public abstract void SkipBytes(int count) Parameters Type Name Description System.Int32 count"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST.html",
    "title": "Class FST | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FST LUCENENET specific: This new base class is to mimic Java's ability to use nested types without specifying a type parameter. i.e. FST.BytesReader instead of FST<BytesRef>.BytesReader Inheritance System.Object FST Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class FST : object Constructors | Improve this Doc View Source FST() Declaration public FST() Fields | Improve this Doc View Source DEFAULT_MAX_BLOCK_BITS Declaration public static readonly int DEFAULT_MAX_BLOCK_BITS Field Value Type Description System.Int32 | Improve this Doc View Source END_LABEL If arc has this label then that arc is final/accepted Declaration public static readonly int END_LABEL Field Value Type Description System.Int32 | Improve this Doc View Source FIXED_ARRAY_NUM_ARCS_DEEP Builder.UnCompiledNode<S> Declaration public const int FIXED_ARRAY_NUM_ARCS_DEEP = null Field Value Type Description System.Int32 | Improve this Doc View Source FIXED_ARRAY_NUM_ARCS_SHALLOW Builder.UnCompiledNode<S> Declaration public const int FIXED_ARRAY_NUM_ARCS_SHALLOW = null Field Value Type Description System.Int32 | Improve this Doc View Source FIXED_ARRAY_SHALLOW_DISTANCE Builder.UnCompiledNode<S> Declaration public const int FIXED_ARRAY_SHALLOW_DISTANCE = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source Read<T>(FileInfo, Outputs<T>) Reads an automaton from a file. Declaration public static FST<T> Read<T>(FileInfo file, Outputs<T> outputs) Parameters Type Name Description FileInfo file Outputs <T> outputs Returns Type Description FST <T> Type Parameters Name Description T | Improve this Doc View Source TargetHasArcs<T>(FST.Arc<T>) returns true if the node at this address has any outgoing arcs Declaration public static bool TargetHasArcs<T>(FST.Arc<T> arc) Parameters Type Name Description FST.Arc <T> arc Returns Type Description System.Boolean Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST.INPUT_TYPE.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST.INPUT_TYPE.html",
    "title": "Enum FST.INPUT_TYPE | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum FST.INPUT_TYPE Specifies allowed range of each int input label for this FST. Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public enum INPUT_TYPE : int Fields Name Description BYTE1 BYTE2 BYTE4"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST-1.html",
    "title": "Class FST<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FST<T> Represents an finite state machine (FST), using a compact byte[] format. The format is similar to what's used by Morfologik ( http://sourceforge.net/projects/morfologik ). See the FST package documentation for some simple examples. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FST<T> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class FST<T> : object Type Parameters Name Description T Constructors | Improve this Doc View Source FST(DataInput, Outputs<T>) Load a previously saved FST. Declaration public FST(DataInput in, Outputs<T> outputs) Parameters Type Name Description DataInput in Outputs <T> outputs | Improve this Doc View Source FST(DataInput, Outputs<T>, Int32) Load a previously saved FST; maxBlockBits allows you to control the size of the byte[] pages used to hold the FST bytes. Declaration public FST(DataInput in, Outputs<T> outputs, int maxBlockBits) Parameters Type Name Description DataInput in Outputs <T> outputs System.Int32 maxBlockBits Properties | Improve this Doc View Source ArcCount Declaration public long ArcCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source ArcWithOutputCount Declaration public long ArcWithOutputCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source EmptyOutput Declaration public T EmptyOutput { get; set; } Property Value Type Description T | Improve this Doc View Source InputType Declaration public FST.INPUT_TYPE InputType { get; } Property Value Type Description FST.INPUT_TYPE | Improve this Doc View Source NodeCount Declaration public long NodeCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Outputs Declaration public Outputs<T> Outputs { get; } Property Value Type Description Outputs <T> Methods | Improve this Doc View Source FindTargetArc(Int32, FST.Arc<T>, FST.Arc<T>, FST.BytesReader) Finds an arc leaving the incoming arc , replacing the arc in place. this returns null if the arc was not found, else the incoming arc . Declaration public FST.Arc<T> FindTargetArc(int labelToMatch, FST.Arc<T> follow, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description System.Int32 labelToMatch FST.Arc <T> follow FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> | Improve this Doc View Source GetBytesReader() Returns a FST.BytesReader for this FST, positioned at position 0. Declaration public FST.BytesReader GetBytesReader() Returns Type Description FST.BytesReader | Improve this Doc View Source GetFirstArc(FST.Arc<T>) Fills virtual 'start' arc, ie, an empty incoming arc to the FST's start node Declaration public FST.Arc<T> GetFirstArc(FST.Arc<T> arc) Parameters Type Name Description FST.Arc <T> arc Returns Type Description FST.Arc <T> | Improve this Doc View Source GetSizeInBytes() Returns bytes used to represent the FST Declaration public long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source ReadFirstRealTargetArc(Int64, FST.Arc<T>, FST.BytesReader) Declaration public FST.Arc<T> ReadFirstRealTargetArc(long node, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description System.Int64 node FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> | Improve this Doc View Source ReadFirstTargetArc(FST.Arc<T>, FST.Arc<T>, FST.BytesReader) Follow the follow arc and read the first arc of its target; this changes the provided arc (2nd arg) in-place and returns it. Declaration public FST.Arc<T> ReadFirstTargetArc(FST.Arc<T> follow, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> follow FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> Returns the second argument ( arc ). | Improve this Doc View Source ReadLastTargetArc(FST.Arc<T>, FST.Arc<T>, FST.BytesReader) Follows the follow arc and reads the last arc of its target; this changes the provided arc (2nd arg) in-place and returns it. Declaration public FST.Arc<T> ReadLastTargetArc(FST.Arc<T> follow, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> follow FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> Returns the second argument ( arc ). | Improve this Doc View Source ReadNextArc(FST.Arc<T>, FST.BytesReader) In-place read; returns the arc. Declaration public FST.Arc<T> ReadNextArc(FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> | Improve this Doc View Source ReadNextArcLabel(FST.Arc<T>, FST.BytesReader) Peeks at next arc's label; does not alter arc . Do not call this if arc.IsLast! Declaration public int ReadNextArcLabel(FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> arc FST.BytesReader in Returns Type Description System.Int32 | Improve this Doc View Source ReadNextRealArc(FST.Arc<T>, FST.BytesReader) Never returns null , but you should never call this if arc.IsLast is true . Declaration public FST.Arc<T> ReadNextRealArc(FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> | Improve this Doc View Source ReadRootArcs(FST.Arc<T>[]) Declaration public void ReadRootArcs(FST.Arc<T>[] arcs) Parameters Type Name Description FST.Arc <T>[] arcs | Improve this Doc View Source Save(FileInfo) Writes an automaton to a file. Declaration public void Save(FileInfo file) Parameters Type Name Description FileInfo file | Improve this Doc View Source Save(DataOutput) Declaration public void Save(DataOutput out) Parameters Type Name Description DataOutput out | Improve this Doc View Source TargetHasArcs(FST.Arc<T>) returns true if the node at this address has any outgoing arcs Declaration public static bool TargetHasArcs(FST.Arc<T> arc) Parameters Type Name Description FST.Arc <T> arc Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FSTEnum-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FSTEnum-1.html",
    "title": "Class FSTEnum<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTEnum<T> Can Next() and Advance() through the terms in an FST This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FSTEnum<T> BytesRefFSTEnum<T> Int32sRefFSTEnum<T> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class FSTEnum<T> : object Type Parameters Name Description T Constructors | Improve this Doc View Source FSTEnum(FST<T>) doFloor controls the behavior of advance: if it's true doFloor is true, advance positions to the biggest term before target. Declaration protected FSTEnum(FST<T> fst) Parameters Type Name Description FST <T> fst Fields | Improve this Doc View Source m_arcs Declaration protected FST.Arc<T>[] m_arcs Field Value Type Description FST.Arc <T>[] | Improve this Doc View Source m_fst Declaration protected readonly FST<T> m_fst Field Value Type Description FST <T> | Improve this Doc View Source m_fstReader Declaration protected readonly FST.BytesReader m_fstReader Field Value Type Description FST.BytesReader | Improve this Doc View Source m_output Declaration protected T[] m_output Field Value Type Description T[] | Improve this Doc View Source m_scratchArc Declaration protected readonly FST.Arc<T> m_scratchArc Field Value Type Description FST.Arc <T> | Improve this Doc View Source m_targetLength Declaration protected int m_targetLength Field Value Type Description System.Int32 | Improve this Doc View Source m_upto Declaration protected int m_upto Field Value Type Description System.Int32 | Improve this Doc View Source NO_OUTPUT Declaration protected readonly T NO_OUTPUT Field Value Type Description T Properties | Improve this Doc View Source CurrentLabel Declaration protected abstract int CurrentLabel { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TargetLabel Declaration protected abstract int TargetLabel { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source DoNext() Declaration protected virtual void DoNext() | Improve this Doc View Source DoSeekCeil() Seeks to smallest term that's >= target. Declaration protected virtual void DoSeekCeil() | Improve this Doc View Source DoSeekExact() Seeks to exactly target term. Declaration protected virtual bool DoSeekExact() Returns Type Description System.Boolean | Improve this Doc View Source DoSeekFloor() Seeks to largest term that's <= target. Declaration protected virtual void DoSeekFloor() | Improve this Doc View Source Grow() Declaration protected abstract void Grow() | Improve this Doc View Source RewindPrefix() Rewinds enum state to match the shared prefix between current term and target term Declaration protected void RewindPrefix()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.html",
    "title": "Namespace Lucene.Net.Util.Fst | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Fst <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Misc FST classes. Classes Builder LUCENENET specific type used to access nested types of Builder<T> without referring to its generic closing type. Builder.Arc<S> Expert: holds a pending (seen but not yet serialized) arc. Builder.CompiledNode Builder.FreezeTail<S> Expert: this is invoked by Builder whenever a suffix is serialized. Builder.UnCompiledNode<S> Expert: holds a pending (seen but not yet serialized) Node. Builder<T> Builds a minimal FST (maps an Int32sRef term to an arbitrary output) from pre-sorted terms with outputs. The FST becomes an FSA if you use NoOutputs. The FST is written on-the-fly into a compact serialized format byte array, which can be saved to / loaded from a Directory or used directly for traversal. The FST is always finite (no cycles). NOTE: The algorithm is described at http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698 The parameterized type is the output type. See the subclasses of Outputs<T> . FSTs larger than 2.1GB are now possible (as of Lucene 4.2). FSTs containing more than 2.1B nodes are also now possible, however they cannot be packed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ByteSequenceOutputs An FST Outputs{BytesRef} implementation where each output is a sequence of bytes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BytesRefFSTEnum LUCENENET specific. This class is to mimic Java's ability to specify nested classes of Generics without having to specify the generic type (i.e. BytesRefFSTEnum.InputOutput{T} rather than BytesRefFSTEnum{T}.InputOutput{T}) BytesRefFSTEnum.InputOutput<T> Holds a single input ( BytesRef ) + output pair. BytesRefFSTEnum<T> Enumerates all input ( BytesRef ) + output pairs in an FST. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CharSequenceOutputs An FST Outputs<T> implementation where each output is a sequence of characters. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FST LUCENENET specific: This new base class is to mimic Java's ability to use nested types without specifying a type parameter. i.e. FST.BytesReader instead of FST<BytesRef>.BytesReader FST.Arc<T> Represents a single arc. FST.BytesReader Reads bytes stored in an FST. FST<T> Represents an finite state machine (FST), using a compact byte[] format. The format is similar to what's used by Morfologik ( http://sourceforge.net/projects/morfologik ). See the FST package documentation for some simple examples. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTEnum<T> Can Next() and Advance() through the terms in an FST This is a Lucene.NET EXPERIMENTAL API, use at your own risk Int32SequenceOutputs An FST Outputs<T> implementation where each output is a sequence of s. NOTE: This was IntSequenceOutputs in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Int32sRefFSTEnum LUCENENET specific. This class is to mimic Java's ability to specify nested classes of Generics without having to specify the generic type (i.e. Int32sRefFSTEnum.InputOutput{T} rather than Int32sRefFSTEnum{T}.InputOutput{T} ) NOTE: This was Int32sRefFSTEnum{T} in Lucene Int32sRefFSTEnum.InputOutput<T> Holds a single input ( Int32sRef ) + output pair. Int32sRefFSTEnum<T> Enumerates all input ( Int32sRef ) + output pairs in an FST. NOTE: This was IntsRefFSTEnum{T} in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk NoOutputs A null FST Outputs<T> implementation; use this if you just want to build an FSA. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Outputs<T> Represents the outputs for an FST, providing the basic algebra required for building and traversing the FST. Note that any operation that returns NO_OUTPUT must return the same singleton object from NoOutput . This is a Lucene.NET EXPERIMENTAL API, use at your own risk PairOutputs<A, B> An FST Outputs<T> implementation, holding two other outputs. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PairOutputs<A, B>.Pair Holds a single pair of two outputs. PositiveInt32Outputs An FST Outputs<T> implementation where each output is a non-negative value. NOTE: This was PositiveIntOutputs in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Util Static helper methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Util.FSTPath<T> Represents a path in TopNSearcher. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Util.Result<T> Holds a single input ( Int32sRef ) + output, returned by ShortestPaths<T>(FST<T>, FST.Arc<T>, T, IComparer<T>, Int32, Boolean) . Util.TopNSearcher<T> Utility class to find top N shortest paths from start point(s). Util.TopResults<T> Holds the results for a top N search using Util.TopNSearcher<T> Interfaces Builder.INode Enums FST.INPUT_TYPE Specifies allowed range of each int input label for this FST."
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Int32SequenceOutputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Int32SequenceOutputs.html",
    "title": "Class Int32SequenceOutputs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32SequenceOutputs An FST Outputs<T> implementation where each output is a sequence of s. NOTE: This was IntSequenceOutputs in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < Int32sRef > Int32SequenceOutputs Inherited Members Outputs<Int32sRef>.WriteFinalOutput(Int32sRef, DataOutput) Outputs<Int32sRef>.ReadFinalOutput(DataInput) Outputs<Int32sRef>.Merge(Int32sRef, Int32sRef) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Int32SequenceOutputs : Outputs<Int32sRef> Properties | Improve this Doc View Source NoOutput Declaration public override Int32sRef NoOutput { get; } Property Value Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.NoOutput | Improve this Doc View Source Singleton Declaration public static Int32SequenceOutputs Singleton { get; } Property Value Type Description Int32SequenceOutputs Methods | Improve this Doc View Source Add(Int32sRef, Int32sRef) Declaration public override Int32sRef Add(Int32sRef prefix, Int32sRef output) Parameters Type Name Description Int32sRef prefix Int32sRef output Returns Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Add(Lucene.Net.Util.Int32sRef, Lucene.Net.Util.Int32sRef) | Improve this Doc View Source Common(Int32sRef, Int32sRef) Declaration public override Int32sRef Common(Int32sRef output1, Int32sRef output2) Parameters Type Name Description Int32sRef output1 Int32sRef output2 Returns Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Common(Lucene.Net.Util.Int32sRef, Lucene.Net.Util.Int32sRef) | Improve this Doc View Source OutputToString(Int32sRef) Declaration public override string OutputToString(Int32sRef output) Parameters Type Name Description Int32sRef output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.OutputToString(Lucene.Net.Util.Int32sRef) | Improve this Doc View Source Read(DataInput) Declaration public override Int32sRef Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Int32sRef, Int32sRef) Declaration public override Int32sRef Subtract(Int32sRef output, Int32sRef inc) Parameters Type Name Description Int32sRef output Int32sRef inc Returns Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Subtract(Lucene.Net.Util.Int32sRef, Lucene.Net.Util.Int32sRef) | Improve this Doc View Source Write(Int32sRef, DataOutput) Declaration public override void Write(Int32sRef prefix, DataOutput out) Parameters Type Name Description Int32sRef prefix DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Write(Lucene.Net.Util.Int32sRef, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum.html",
    "title": "Class Int32sRefFSTEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32sRefFSTEnum LUCENENET specific. This class is to mimic Java's ability to specify nested classes of Generics without having to specify the generic type (i.e. Int32sRefFSTEnum.InputOutput{T} rather than Int32sRefFSTEnum{T}.InputOutput{T} ) NOTE: This was Int32sRefFSTEnum{T} in Lucene Inheritance System.Object Int32sRefFSTEnum Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Int32sRefFSTEnum : object"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum.InputOutput-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum.InputOutput-1.html",
    "title": "Class Int32sRefFSTEnum.InputOutput<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32sRefFSTEnum.InputOutput<T> Holds a single input ( Int32sRef ) + output pair. Inheritance System.Object Int32sRefFSTEnum.InputOutput<T> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class InputOutput<T> : object Type Parameters Name Description T Properties | Improve this Doc View Source Input Declaration public Int32sRef Input { get; set; } Property Value Type Description Int32sRef | Improve this Doc View Source Output Declaration public T Output { get; set; } Property Value Type Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum-1.html",
    "title": "Class Int32sRefFSTEnum<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32sRefFSTEnum<T> Enumerates all input ( Int32sRef ) + output pairs in an FST. NOTE: This was IntsRefFSTEnum{T} in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FSTEnum <T> Int32sRefFSTEnum<T> Inherited Members FSTEnum<T>.m_fst FSTEnum<T>.m_arcs FSTEnum<T>.m_output FSTEnum<T>.NO_OUTPUT FSTEnum<T>.m_fstReader FSTEnum<T>.m_scratchArc FSTEnum<T>.m_upto FSTEnum<T>.m_targetLength FSTEnum<T>.RewindPrefix() FSTEnum<T>.DoNext() FSTEnum<T>.DoSeekCeil() FSTEnum<T>.DoSeekFloor() FSTEnum<T>.DoSeekExact() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Int32sRefFSTEnum<T> : FSTEnum<T> Type Parameters Name Description T Constructors | Improve this Doc View Source Int32sRefFSTEnum(FST<T>) doFloor controls the behavior of advance: if it's true doFloor is true, advance positions to the biggest term before target. Declaration public Int32sRefFSTEnum(FST<T> fst) Parameters Type Name Description FST <T> fst Properties | Improve this Doc View Source Current Declaration public Int32sRefFSTEnum.InputOutput<T> Current { get; } Property Value Type Description Int32sRefFSTEnum.InputOutput <T> | Improve this Doc View Source CurrentLabel Declaration protected override int CurrentLabel { get; set; } Property Value Type Description System.Int32 Overrides Lucene.Net.Util.Fst.FSTEnum<T>.CurrentLabel | Improve this Doc View Source TargetLabel Declaration protected override int TargetLabel { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Util.Fst.FSTEnum<T>.TargetLabel Methods | Improve this Doc View Source Grow() Declaration protected override void Grow() Overrides Lucene.Net.Util.Fst.FSTEnum<T>.Grow() | Improve this Doc View Source Next() Declaration public Int32sRefFSTEnum.InputOutput<T> Next() Returns Type Description Int32sRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekCeil(Int32sRef) Seeks to smallest term that's >= target. Declaration public Int32sRefFSTEnum.InputOutput<T> SeekCeil(Int32sRef target) Parameters Type Name Description Int32sRef target Returns Type Description Int32sRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekExact(Int32sRef) Seeks to exactly this term, returning null if the term doesn't exist. This is faster than using SeekFloor(Int32sRef) or SeekCeil(Int32sRef) because it short-circuits as soon the match is not found. Declaration public Int32sRefFSTEnum.InputOutput<T> SeekExact(Int32sRef target) Parameters Type Name Description Int32sRef target Returns Type Description Int32sRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekFloor(Int32sRef) Seeks to biggest term that's <= target. Declaration public Int32sRefFSTEnum.InputOutput<T> SeekFloor(Int32sRef target) Parameters Type Name Description Int32sRef target Returns Type Description Int32sRefFSTEnum.InputOutput <T>"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.NoOutputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.NoOutputs.html",
    "title": "Class NoOutputs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoOutputs A null FST Outputs<T> implementation; use this if you just want to build an FSA. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < System.Object > NoOutputs Inherited Members Outputs<Object>.WriteFinalOutput(Object, DataOutput) Outputs<Object>.ReadFinalOutput(DataInput) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class NoOutputs : Outputs<object> Properties | Improve this Doc View Source NoOutput Declaration public override object NoOutput { get; } Property Value Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.NoOutput | Improve this Doc View Source Singleton Declaration public static NoOutputs Singleton { get; } Property Value Type Description NoOutputs Methods | Improve this Doc View Source Add(Object, Object) Declaration public override object Add(object prefix, object output) Parameters Type Name Description System.Object prefix System.Object output Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Add(System.Object, System.Object) | Improve this Doc View Source Common(Object, Object) Declaration public override object Common(object output1, object output2) Parameters Type Name Description System.Object output1 System.Object output2 Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Common(System.Object, System.Object) | Improve this Doc View Source Merge(Object, Object) Declaration public override object Merge(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Merge(System.Object, System.Object) | Improve this Doc View Source OutputToString(Object) Declaration public override string OutputToString(object output) Parameters Type Name Description System.Object output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.OutputToString(System.Object) | Improve this Doc View Source Read(DataInput) Declaration public override object Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Object, Object) Declaration public override object Subtract(object output, object inc) Parameters Type Name Description System.Object output System.Object inc Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Subtract(System.Object, System.Object) | Improve this Doc View Source Write(Object, DataOutput) Declaration public override void Write(object prefix, DataOutput out) Parameters Type Name Description System.Object prefix DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Write(System.Object, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Outputs-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Outputs-1.html",
    "title": "Class Outputs<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Outputs<T> Represents the outputs for an FST, providing the basic algebra required for building and traversing the FST. Note that any operation that returns NO_OUTPUT must return the same singleton object from NoOutput . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs<T> ByteSequenceOutputs CharSequenceOutputs Int32SequenceOutputs NoOutputs PairOutputs<A, B> PositiveInt32Outputs Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class Outputs<T> : object Type Parameters Name Description T Properties | Improve this Doc View Source NoOutput NOTE: this output is compared with == so you must ensure that all methods return the single object if it's really no output Declaration public abstract T NoOutput { get; } Property Value Type Description T Methods | Improve this Doc View Source Add(T, T) Eg add(\"foo\", \"bar\") -> \"foobar\" Declaration public abstract T Add(T prefix, T output) Parameters Type Name Description T prefix T output Returns Type Description T | Improve this Doc View Source Common(T, T) Eg common(\"foobar\", \"food\") -> \"foo\" Declaration public abstract T Common(T output1, T output2) Parameters Type Name Description T output1 T output2 Returns Type Description T | Improve this Doc View Source Merge(T, T) Declaration public virtual T Merge(T first, T second) Parameters Type Name Description T first T second Returns Type Description T | Improve this Doc View Source OutputToString(T) Declaration public abstract string OutputToString(T output) Parameters Type Name Description T output Returns Type Description System.String | Improve this Doc View Source Read(DataInput) Decode an output value previously written with Write(T, DataOutput) . Declaration public abstract T Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description T | Improve this Doc View Source ReadFinalOutput(DataInput) Decode an output value previously written with WriteFinalOutput(T, DataOutput) . By default this just calls Read(DataInput) . Declaration public virtual T ReadFinalOutput(DataInput in) Parameters Type Name Description DataInput in Returns Type Description T | Improve this Doc View Source Subtract(T, T) Eg subtract(\"foobar\", \"foo\") -> \"bar\" Declaration public abstract T Subtract(T output, T inc) Parameters Type Name Description T output T inc Returns Type Description T | Improve this Doc View Source Write(T, DataOutput) Encode an output value into a DataOutput . Declaration public abstract void Write(T output, DataOutput out) Parameters Type Name Description T output DataOutput out | Improve this Doc View Source WriteFinalOutput(T, DataOutput) Encode an final node output value into a DataOutput . By default this just calls Write(T, DataOutput) . Declaration public virtual void WriteFinalOutput(T output, DataOutput out) Parameters Type Name Description T output DataOutput out"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.PairOutputs-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.PairOutputs-2.html",
    "title": "Class PairOutputs<A, B> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PairOutputs<A, B> An FST Outputs<T> implementation, holding two other outputs. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < PairOutputs.Pair <>> PairOutputs<A, B> Inherited Members Outputs<PairOutputs<A, B>.Pair>.WriteFinalOutput(PairOutputs.Pair<>, DataOutput) Outputs<PairOutputs<A, B>.Pair>.ReadFinalOutput(DataInput) Outputs<PairOutputs<A, B>.Pair>.Merge(PairOutputs.Pair<>, PairOutputs.Pair<>) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class PairOutputs<A, B> : Outputs<PairOutputs<A, B>.Pair> Type Parameters Name Description A B Constructors | Improve this Doc View Source PairOutputs(Outputs<A>, Outputs<B>) Declaration public PairOutputs(Outputs<A> outputs1, Outputs<B> outputs2) Parameters Type Name Description Outputs <A> outputs1 Outputs <B> outputs2 Properties | Improve this Doc View Source NoOutput Declaration public override PairOutputs<A, B>.Pair NoOutput { get; } Property Value Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.NoOutput Methods | Improve this Doc View Source Add(PairOutputs<A, B>.Pair, PairOutputs<A, B>.Pair) Declaration public override PairOutputs<A, B>.Pair Add(PairOutputs<A, B>.Pair prefix, PairOutputs<A, B>.Pair output) Parameters Type Name Description PairOutputs.Pair <> prefix PairOutputs.Pair <> output Returns Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Add(Lucene.Net.Util.Fst.PairOutputs.Pair<>, Lucene.Net.Util.Fst.PairOutputs.Pair<>) | Improve this Doc View Source Common(PairOutputs<A, B>.Pair, PairOutputs<A, B>.Pair) Declaration public override PairOutputs<A, B>.Pair Common(PairOutputs<A, B>.Pair pair1, PairOutputs<A, B>.Pair pair2) Parameters Type Name Description PairOutputs.Pair <> pair1 PairOutputs.Pair <> pair2 Returns Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Common(Lucene.Net.Util.Fst.PairOutputs.Pair<>, Lucene.Net.Util.Fst.PairOutputs.Pair<>) | Improve this Doc View Source NewPair(A, B) Create a new PairOutputs<A, B>.Pair Declaration public virtual PairOutputs<A, B>.Pair NewPair(A a, B b) Parameters Type Name Description A a B b Returns Type Description PairOutputs.Pair <> | Improve this Doc View Source OutputToString(PairOutputs<A, B>.Pair) Declaration public override string OutputToString(PairOutputs<A, B>.Pair output) Parameters Type Name Description PairOutputs.Pair <> output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.OutputToString(Lucene.Net.Util.Fst.PairOutputs.Pair<>) | Improve this Doc View Source Read(DataInput) Declaration public override PairOutputs<A, B>.Pair Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(PairOutputs<A, B>.Pair, PairOutputs<A, B>.Pair) Declaration public override PairOutputs<A, B>.Pair Subtract(PairOutputs<A, B>.Pair output, PairOutputs<A, B>.Pair inc) Parameters Type Name Description PairOutputs.Pair <> output PairOutputs.Pair <> inc Returns Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Subtract(Lucene.Net.Util.Fst.PairOutputs.Pair<>, Lucene.Net.Util.Fst.PairOutputs.Pair<>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source Write(PairOutputs<A, B>.Pair, DataOutput) Declaration public override void Write(PairOutputs<A, B>.Pair output, DataOutput writer) Parameters Type Name Description PairOutputs.Pair <> output DataOutput writer Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Write(Lucene.Net.Util.Fst.PairOutputs.Pair<>, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.PairOutputs-2.Pair.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.PairOutputs-2.Pair.html",
    "title": "Class PairOutputs<A, B>.Pair | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PairOutputs<A, B>.Pair Holds a single pair of two outputs. Inheritance System.Object PairOutputs<A, B>.Pair Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class Pair : object Properties | Improve this Doc View Source Output1 Declaration public A Output1 { get; } Property Value Type Description A | Improve this Doc View Source Output2 Declaration public B Output2 { get; } Property Value Type Description B Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.PositiveInt32Outputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.PositiveInt32Outputs.html",
    "title": "Class PositiveInt32Outputs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PositiveInt32Outputs An FST Outputs<T> implementation where each output is a non-negative value. NOTE: This was PositiveIntOutputs in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < System.Nullable < System.Int64 >> PositiveInt32Outputs Inherited Members Outputs<Nullable<Int64>>.WriteFinalOutput(Nullable<Int64>, DataOutput) Outputs<Nullable<Int64>>.ReadFinalOutput(DataInput) Outputs<Nullable<Int64>>.Merge(Nullable<Int64>, Nullable<Int64>) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class PositiveInt32Outputs : Outputs<long?> Properties | Improve this Doc View Source NoOutput Declaration public override long? NoOutput { get; } Property Value Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.NoOutput | Improve this Doc View Source Singleton Declaration public static PositiveInt32Outputs Singleton { get; } Property Value Type Description PositiveInt32Outputs Methods | Improve this Doc View Source Add(Nullable<Int64>, Nullable<Int64>) Declaration public override long? Add(long? prefix, long? output) Parameters Type Name Description System.Nullable < System.Int64 > prefix System.Nullable < System.Int64 > output Returns Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Add(System.Nullable<System.Int64>, System.Nullable<System.Int64>) | Improve this Doc View Source Common(Nullable<Int64>, Nullable<Int64>) Declaration public override long? Common(long? output1, long? output2) Parameters Type Name Description System.Nullable < System.Int64 > output1 System.Nullable < System.Int64 > output2 Returns Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Common(System.Nullable<System.Int64>, System.Nullable<System.Int64>) | Improve this Doc View Source OutputToString(Nullable<Int64>) Declaration public override string OutputToString(long? output) Parameters Type Name Description System.Nullable < System.Int64 > output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.OutputToString(System.Nullable<System.Int64>) | Improve this Doc View Source Read(DataInput) Declaration public override long? Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Nullable<Int64>, Nullable<Int64>) Declaration public override long? Subtract(long? output, long? inc) Parameters Type Name Description System.Nullable < System.Int64 > output System.Nullable < System.Int64 > inc Returns Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Subtract(System.Nullable<System.Int64>, System.Nullable<System.Int64>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String | Improve this Doc View Source Write(Nullable<Int64>, DataOutput) Declaration public override void Write(long? output, DataOutput out) Parameters Type Name Description System.Nullable < System.Int64 > output DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Write(System.Nullable<System.Int64>, Lucene.Net.Store.DataOutput)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.FSTPath-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.FSTPath-1.html",
    "title": "Class Util.FSTPath<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Util.FSTPath<T> Represents a path in TopNSearcher. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Util.FSTPath<T> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class FSTPath<T> : object Type Parameters Name Description T Constructors | Improve this Doc View Source FSTPath(T, FST.Arc<T>, Int32sRef) Sole constructor Declaration public FSTPath(T cost, FST.Arc<T> arc, Int32sRef input) Parameters Type Name Description T cost FST.Arc <T> arc Int32sRef input Properties | Improve this Doc View Source Arc Declaration public FST.Arc<T> Arc { get; set; } Property Value Type Description FST.Arc <T> | Improve this Doc View Source Cost Declaration public T Cost { get; set; } Property Value Type Description T | Improve this Doc View Source Input Declaration public Int32sRef Input { get; } Property Value Type Description Int32sRef Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.html",
    "title": "Class Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Util Static helper methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Util Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Util : object Methods | Improve this Doc View Source Get<T>(FST<T>, BytesRef) Looks up the output for this input, or null if the input is not accepted Declaration public static T Get<T>(FST<T> fst, BytesRef input) Parameters Type Name Description FST <T> fst BytesRef input Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source Get<T>(FST<T>, Int32sRef) Looks up the output for this input, or null if the input is not accepted. Declaration public static T Get<T>(FST<T> fst, Int32sRef input) Parameters Type Name Description FST <T> fst Int32sRef input Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source GetByOutput(FST<Nullable<Int64>>, Int64) Reverse lookup (lookup by output instead of by input), in the special case when your FSTs outputs are strictly ascending. This locates the input/output pair where the output is equal to the target, and will return null if that output does not exist. NOTE: this only works with , only works when the outputs are ascending in order with the inputs. For example, simple ordinals (0, 1, 2, ...), or file offets (when appending to a file) fit this. Declaration public static Int32sRef GetByOutput(FST<long?> fst, long targetOutput) Parameters Type Name Description FST < System.Nullable < System.Int64 >> fst System.Int64 targetOutput Returns Type Description Int32sRef | Improve this Doc View Source GetByOutput(FST<Nullable<Int64>>, Int64, FST.BytesReader, FST.Arc<Nullable<Int64>>, FST.Arc<Nullable<Int64>>, Int32sRef) Expert: like GetByOutput(FST<Nullable<Int64>>, Int64) except reusing FST.BytesReader , initial and scratch Arc, and result. Declaration public static Int32sRef GetByOutput(FST<long?> fst, long targetOutput, FST.BytesReader in, FST.Arc<long?> arc, FST.Arc<long?> scratchArc, Int32sRef result) Parameters Type Name Description FST < System.Nullable < System.Int64 >> fst System.Int64 targetOutput FST.BytesReader in FST.Arc < System.Nullable < System.Int64 >> arc FST.Arc < System.Nullable < System.Int64 >> scratchArc Int32sRef result Returns Type Description Int32sRef | Improve this Doc View Source ReadCeilArc<T>(Int32, FST<T>, FST.Arc<T>, FST.Arc<T>, FST.BytesReader) Reads the first arc greater or equal that the given label into the provided arc in place and returns it iff found, otherwise return null . Declaration public static FST.Arc<T> ReadCeilArc<T>(int label, FST<T> fst, FST.Arc<T> follow, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description System.Int32 label the label to ceil on FST <T> fst the fst to operate on FST.Arc <T> follow the arc to follow reading the label from FST.Arc <T> arc the arc to read into in place FST.BytesReader in the fst's FST.BytesReader Returns Type Description FST.Arc <T> Type Parameters Name Description T | Improve this Doc View Source ShortestPaths<T>(FST<T>, FST.Arc<T>, T, IComparer<T>, Int32, Boolean) Starting from node, find the top N min cost completions to a final node. Declaration public static Util.TopResults<T> ShortestPaths<T>(FST<T> fst, FST.Arc<T> fromNode, T startOutput, IComparer<T> comparer, int topN, bool allowEmptyString) Parameters Type Name Description FST <T> fst FST.Arc <T> fromNode T startOutput IComparer <T> comparer System.Int32 topN System.Boolean allowEmptyString Returns Type Description Util.TopResults <T> Type Parameters Name Description T | Improve this Doc View Source ToBytesRef(Int32sRef, BytesRef) Just converts Int32sRef to BytesRef ; you must ensure the values fit into a . Declaration public static BytesRef ToBytesRef(Int32sRef input, BytesRef scratch) Parameters Type Name Description Int32sRef input BytesRef scratch Returns Type Description BytesRef | Improve this Doc View Source ToDot<T>(FST<T>, TextWriter, Boolean, Boolean) Dumps an FST<T> to a GraphViz's dot language description for visualization. Example of use: using (TextWriter sw = new StreamWriter(\"out.dot\")) { Util.ToDot(fst, sw, true, true); } and then, from command line: dot -Tpng -o out.png out.dot Note: larger FSTs (a few thousand nodes) won't even render, don't bother. If the FST is > 2.1 GB in size then this method will throw strange exceptions. See also http://www.graphviz.org/ . Declaration public static void ToDot<T>(FST<T> fst, TextWriter out, bool sameRank, bool labelStates) Parameters Type Name Description FST <T> fst TextWriter out System.Boolean sameRank If true , the resulting dot file will try to order states in layers of breadth-first traversal. This may mess up arcs, but makes the output FST's structure a bit clearer. System.Boolean labelStates If true states will have labels equal to their offsets in their binary format. Expands the graph considerably. Type Parameters Name Description T | Improve this Doc View Source ToInt32sRef(BytesRef, Int32sRef) Just takes unsigned byte values from the BytesRef and converts into an Int32sRef . NOTE: This was toIntsRef() in Lucene Declaration public static Int32sRef ToInt32sRef(BytesRef input, Int32sRef scratch) Parameters Type Name Description BytesRef input Int32sRef scratch Returns Type Description Int32sRef | Improve this Doc View Source ToUTF16(String, Int32sRef) Just maps each UTF16 unit (char) to the s in an Int32sRef . Declaration public static Int32sRef ToUTF16(string s, Int32sRef scratch) Parameters Type Name Description System.String s Int32sRef scratch Returns Type Description Int32sRef | Improve this Doc View Source ToUTF32(Char[], Int32, Int32, Int32sRef) Decodes the Unicode codepoints from the provided char[] and places them in the provided scratch Int32sRef , which must not be null , returning it. Declaration public static Int32sRef ToUTF32(char[] s, int offset, int length, Int32sRef scratch) Parameters Type Name Description System.Char [] s System.Int32 offset System.Int32 length Int32sRef scratch Returns Type Description Int32sRef | Improve this Doc View Source ToUTF32(String, Int32sRef) Decodes the Unicode codepoints from the provided ICharSequence and places them in the provided scratch Int32sRef , which must not be null , returning it. Declaration public static Int32sRef ToUTF32(string s, Int32sRef scratch) Parameters Type Name Description System.String s Int32sRef scratch Returns Type Description Int32sRef"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.Result-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.Result-1.html",
    "title": "Class Util.Result<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Util.Result<T> Holds a single input ( Int32sRef ) + output, returned by ShortestPaths<T>(FST<T>, FST.Arc<T>, T, IComparer<T>, Int32, Boolean) . Inheritance System.Object Util.Result<T> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Result<T> : object Type Parameters Name Description T Constructors | Improve this Doc View Source Result(Int32sRef, T) Declaration public Result(Int32sRef input, T output) Parameters Type Name Description Int32sRef input T output Properties | Improve this Doc View Source Input Declaration public Int32sRef Input { get; } Property Value Type Description Int32sRef | Improve this Doc View Source Output Declaration public T Output { get; } Property Value Type Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.TopNSearcher-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.TopNSearcher-1.html",
    "title": "Class Util.TopNSearcher<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Util.TopNSearcher<T> Utility class to find top N shortest paths from start point(s). Inheritance System.Object Util.TopNSearcher<T> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class TopNSearcher<T> : object Type Parameters Name Description T Constructors | Improve this Doc View Source TopNSearcher(FST<T>, Int32, Int32, IComparer<T>) Creates an unbounded TopNSearcher Declaration public TopNSearcher(FST<T> fst, int topN, int maxQueueDepth, IComparer<T> comparer) Parameters Type Name Description FST <T> fst the FST<T> to search on System.Int32 topN the number of top scoring entries to retrieve System.Int32 maxQueueDepth the maximum size of the queue of possible top entries IComparer <T> comparer the comparer to select the top N Methods | Improve this Doc View Source AcceptResult(Int32sRef, T) Declaration protected virtual bool AcceptResult(Int32sRef input, T output) Parameters Type Name Description Int32sRef input T output Returns Type Description System.Boolean | Improve this Doc View Source AddIfCompetitive(Util.FSTPath<T>) If back plus this arc is competitive then add to queue: Declaration protected virtual void AddIfCompetitive(Util.FSTPath<T> path) Parameters Type Name Description Util.FSTPath <T> path | Improve this Doc View Source AddStartPaths(FST.Arc<T>, T, Boolean, Int32sRef) Adds all leaving arcs, including 'finished' arc, if the node is final, from this node into the queue. Declaration public virtual void AddStartPaths(FST.Arc<T> node, T startOutput, bool allowEmptyString, Int32sRef input) Parameters Type Name Description FST.Arc <T> node T startOutput System.Boolean allowEmptyString Int32sRef input | Improve this Doc View Source Search() Declaration public virtual Util.TopResults<T> Search() Returns Type Description Util.TopResults <T>"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.TopResults-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.TopResults-1.html",
    "title": "Class Util.TopResults<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Util.TopResults<T> Holds the results for a top N search using Util.TopNSearcher<T> Inheritance System.Object Util.TopResults<T> Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class TopResults<T> : IEnumerable<Util.Result<T>> Type Parameters Name Description T Properties | Improve this Doc View Source IsComplete true iff this is a complete result ie. if the specified queue size was large enough to find the complete list of results. this might be false if the Util.TopNSearcher<T> rejected too many results. Declaration public bool IsComplete { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TopN The top results Declaration public IList<Util.Result<T>> TopN { get; } Property Value Type Description IList < Util.Result <T>> Methods | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<Util.Result<T>> GetEnumerator() Returns Type Description IEnumerator < Util.Result <T>>"
  },
  "api/Lucene.Net/Lucene.Net.Util.GrowableByteArrayDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.GrowableByteArrayDataOutput.html",
    "title": "Class GrowableByteArrayDataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GrowableByteArrayDataOutput A DataOutput that can be used to build a byte[] . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DataOutput GrowableByteArrayDataOutput Inherited Members DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class GrowableByteArrayDataOutput : DataOutput Constructors | Improve this Doc View Source GrowableByteArrayDataOutput(Int32) Create a GrowableByteArrayDataOutput with the given initial capacity. Declaration public GrowableByteArrayDataOutput(int cp) Parameters Type Name Description System.Int32 cp Properties | Improve this Doc View Source Bytes The bytes Declaration public byte[] Bytes { get; set; } Property Value Type Description System.Byte [] | Improve this Doc View Source Length The length Declaration public int Length { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int off, int len) Parameters Type Name Description System.Byte [] b System.Int32 off System.Int32 len Overrides DataOutput.WriteBytes(Byte[], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.html",
    "title": "Namespace Lucene.Net.Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Util <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Some utility classes. Classes AlreadySetException Thrown when Set(T) is called more than once. ArrayUtil Methods for manipulating arrays. This is a Lucene.NET INTERNAL API, use at your own risk Attribute Base class for Attributes that can be added to a AttributeSource . Attributes are used to add data in a dynamic, yet type-safe way to a source of usually streamed objects, e. g. a TokenStream . AttributeSource An AttributeSource contains a list of different Attribute s, and methods to add and get them. There can only be a single instance of an attribute in the same AttributeSource instance. This is ensured by passing in the actual type of the IAttribute to the AddAttribute<T>() , which then checks if an instance of that type is already present. If yes, it returns the instance, otherwise it creates a new instance and returns it. AttributeSource.AttributeFactory An AttributeSource.AttributeFactory creates instances of Attribute s. AttributeSource.State This class holds the state of an AttributeSource . Bits Bits.MatchAllBits Bits impl of the specified length with all bits set. Bits.MatchNoBits Bits impl of the specified length with no bits set. BitUtil A variety of high efficiency bit twiddling routines. This is a Lucene.NET INTERNAL API, use at your own risk BroadWord Methods and constants inspired by the article \"Broadword Implementation of Rank/Select Queries\" by Sebastiano Vigna, January 30, 2012: algorithm 1: Lucene.Net.Util.BroadWord.BitCount(System.Int64) , count of set bits in a algorithm 2: Select(Int64, Int32) , selection of a set bit in a , bytewise signed smaller < 8 operator: SmallerUpTo7_8(Int64, Int64) . shortwise signed smaller < 16 operator: SmallerUpto15_16(Int64, Int64) . some of the Lk and Hk constants that are used by the above: L8 L8_L , H8 H8_L , L9 L9_L , L16 L16_L and H16 H8_L . This is a Lucene.NET INTERNAL API, use at your own risk BundleResourceManagerFactory This implementation of IResourceManagerFactory uses a convention to retrieve resources. In Java NLS, the convention is to use the same name for the resource key propeties and for the resource file names. This presents a problem for .NET because the resource generator already creates an internal class with the same name as the .resx file. To work around this, we use the convention of appending the suffix \"Bundle\" to the end of the type the resource key propeties are stored in. For example, if our constants are stored in a class named ErrorMessages, the type that will be looked up by this factory will be ErrorMessagesBundle (which is the name of the .resx file that should be added to your project). This implementation can be inherited to use a different convention or can be replaced to get the resources from an external source. ByteBlockPool Class that Posting and PostingVector use to write byte streams into shared fixed-size byte[] arrays. The idea is to allocate slices of increasing lengths. For example, the first slice is 5 bytes, the next slice is 14, etc. We start by writing our bytes into the first 5 bytes. When we hit the end of the slice, we allocate the next slice and then write the address of the new slice into the last 4 bytes of the previous slice (the \"forwarding address\"). Each slice is filled with 0's initially, and we mark the end with a non-zero byte. This way the methods that are writing into the slice don't need to record its length and instead allocate a new slice once they hit a non-zero byte. This is a Lucene.NET INTERNAL API, use at your own risk ByteBlockPool.Allocator Abstract class for allocating and freeing byte blocks. ByteBlockPool.DirectAllocator A simple ByteBlockPool.Allocator that never recycles. ByteBlockPool.DirectTrackingAllocator A simple ByteBlockPool.Allocator that never recycles, but tracks how much total RAM is in use. BytesRef Represents byte[] , as a slice (offset + length) into an existing byte[] . The Bytes property should never be null ; use EMPTY_BYTES if necessary. Important note: Unless otherwise noted, Lucene uses this class to represent terms that are encoded as UTF8 bytes in the index. To convert them to a .NET (which is UTF16), use Utf8ToString() . Using code like new String(bytes, offset, length) to do this is wrong , as it does not respect the correct character set and may return wrong results (depending on the platform's defaults)! BytesRefArray A simple append only random-access BytesRef array that stores full copies of the appended bytes in a ByteBlockPool . Note: this class is not Thread-Safe! @lucene.internal This is a Lucene.NET EXPERIMENTAL API, use at your own risk BytesRefHash BytesRefHash is a special purpose hash-map like data-structure optimized for BytesRef instances. BytesRefHash maintains mappings of byte arrays to ids (Map<BytesRef,int>) storing the hashed bytes efficiently in continuous storage. The mapping to the id is encapsulated inside BytesRefHash and is guaranteed to be increased for each added BytesRef . Note: The maximum capacity BytesRef instance passed to Add(BytesRef) must not be longer than BYTE_BLOCK_SIZE -2. The internal storage is limited to 2GB total byte storage. This is a Lucene.NET INTERNAL API, use at your own risk BytesRefHash.BytesStartArray Manages allocation of the per-term addresses. BytesRefHash.DirectBytesStartArray A simple BytesRefHash.BytesStartArray that tracks memory allocation using a private Counter instance. BytesRefHash.MaxBytesLengthExceededException Thrown if a BytesRef exceeds the BytesRefHash limit of BYTE_BLOCK_SIZE -2. BytesRefIterator LUCENENET specific class to make the syntax of creating an empty IBytesRefIterator the same as it was in Lucene. Example: var iter = BytesRefIterator.Empty; CharsRef Represents char[] , as a slice (offset + Length) into an existing char[] . The Chars property should never be null ; use EMPTY_CHARS if necessary. This is a Lucene.NET INTERNAL API, use at your own risk CollectionUtil Methods for manipulating (sorting) collections. Sort methods work directly on the supplied lists and don't copy to/from arrays before/after. For medium size collections as used in the Lucene indexer that is much more efficient. This is a Lucene.NET INTERNAL API, use at your own risk CommandLineUtil Class containing some useful methods used by command line tools Constants Some useful constants. Counter Simple counter class @lucene.internal This is a Lucene.NET EXPERIMENTAL API, use at your own risk DisposableThreadLocal<T> Java's builtin ThreadLocal has a serious flaw: it can take an arbitrarily long amount of time to dereference the things you had stored in it, even once the ThreadLocal instance itself is no longer referenced. This is because there is single, master map stored for each thread, which all ThreadLocals share, and that master map only periodically purges \"stale\" entries. While not technically a memory leak, because eventually the memory will be reclaimed, it can take a long time and you can easily hit because from the GC's standpoint the stale entries are not reclaimable. This class works around that, by only enrolling WeakReference values into the ThreadLocal, and separately holding a hard reference to each stored value. When you call Dispose() , these hard references are cleared and then GC is freely able to reclaim space by objects stored in it. You should not call Dispose() until all threads are done using the instance. This is a Lucene.NET INTERNAL API, use at your own risk DocIdBitSet Simple DocIdSet and DocIdSetIterator backed by a DoubleBarrelLRUCache LUCENENET specific class to nest the DoubleBarrelLRUCache.CloneableKey so it can be accessed without referencing the generic closing types of DoubleBarrelLRUCache<TKey, TValue> . DoubleBarrelLRUCache.CloneableKey Object providing clone(); the key class must subclass this. DoubleBarrelLRUCache<TKey, TValue> Simple concurrent LRU cache, using a \"double barrel\" approach where two ConcurrentHashMaps record entries. At any given time, one hash is primary and the other is secondary. Get(TKey) first checks primary, and if that's a miss, checks secondary. If secondary has the entry, it's promoted to primary ( NOTE : the key is cloned at this point). Once primary is full, the secondary is cleared and the two are swapped. This is not as space efficient as other possible concurrent approaches (see LUCENE-2075): to achieve perfect LRU(N) it requires 2*N storage. But, this approach is relatively simple and seems in practice to not grow unbounded in size when under hideously high load. This is a Lucene.NET INTERNAL API, use at your own risk ExcludeServiceAttribute Base class for Attribute types that exclude services from Reflection scanning. FieldCacheSanityChecker Provides methods for sanity checking that entries in the FieldCache are not wasteful or inconsistent. Lucene 2.9 Introduced numerous enhancements into how the FieldCache is used by the low levels of Lucene searching (for Sorting and ValueSourceQueries) to improve both the speed for Sorting, as well as reopening of IndexReaders. But these changes have shifted the usage of FieldCache from \"top level\" IndexReaders (frequently a MultiReader or DirectoryReader) down to the leaf level SegmentReaders. As a result, existing applications that directly access the FieldCache may find RAM usage increase significantly when upgrading to 2.9 or Later. This class provides an API for these applications (or their Unit tests) to check at run time if the FieldCache contains \"insane\" usages of the FieldCache. @lucene.experimental FieldCacheSanityChecker.Insanity Simple container for a collection of related FieldCache.CacheEntry objects that in conjunction with each other represent some \"insane\" usage of the IFieldCache . FieldCacheSanityChecker.InsanityType An Enumeration of the different types of \"insane\" behavior that may be detected in a IFieldCache . FilterIterator<T> An implementation that filters elements with a boolean predicate. FixedBitSet BitSet of fixed length (numBits), backed by accessible ( GetBits() ) long[], accessed with an int index, implementing GetBits() and DocIdSet . If you need to manage more than 2.1B bits, use Int64BitSet . This is a Lucene.NET INTERNAL API, use at your own risk FixedBitSet.FixedBitSetIterator A DocIdSetIterator which iterates over set bits in a FixedBitSet . GrowableByteArrayDataOutput A DataOutput that can be used to build a byte[] . This is a Lucene.NET INTERNAL API, use at your own risk IndexableBinaryStringTools Provides support for converting byte sequences to s and back again. The resulting s preserve the original byte sequences' sort order. The s are constructed using a Base 8000h encoding of the original binary data - each char of an encoded represents a 15-bit chunk from the byte sequence. Base 8000h was chosen because it allows for all lower 15 bits of char to be used without restriction; the surrogate range [U+D8000-U+DFFF] does not represent valid chars, and would require complicated handling to avoid them and allow use of char's high bit. Although unset bits are used as padding in the final char, the original byte sequence could contain trailing bytes with no set bits (null bytes): padding is indistinguishable from valid information. To overcome this problem, a char is appended, indicating the number of encoded bytes in the final content char. @lucene.experimental InfoStream Debugging API for Lucene classes such as IndexWriter and SegmentInfos . NOTE: Enabling infostreams may cause performance degradation in some components. This is a Lucene.NET INTERNAL API, use at your own risk InPlaceMergeSorter Sorter implementation based on the merge-sort algorithm that merges in place (no extra memory will be allocated). Small arrays are sorted with insertion sort. This is a Lucene.NET INTERNAL API, use at your own risk Int32BlockPool A pool for blocks similar to ByteBlockPool . NOTE: This was IntBlockPool in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Int32BlockPool.Allocator Abstract class for allocating and freeing blocks. Int32BlockPool.DirectAllocator A simple Int32BlockPool.Allocator that never recycles. Int32BlockPool.SliceReader A Int32BlockPool.SliceReader that can read slices written by a Int32BlockPool.SliceWriter . This is a Lucene.NET INTERNAL API, use at your own risk Int32BlockPool.SliceWriter A Int32BlockPool.SliceWriter that allows to write multiple integer slices into a given Int32BlockPool . This is a Lucene.NET INTERNAL API, use at your own risk Int32sRef Represents int[] , as a slice (offset + length) into an existing int[] . The Int32s member should never be null ; use EMPTY_INT32S if necessary. NOTE: This was IntsRef in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Int64BitSet BitSet of fixed length ( Lucene.Net.Util.Int64BitSet.numBits ), backed by accessible ( GetBits() ) long[] , accessed with a index. Use it only if you intend to store more than 2.1B bits, otherwise you should use FixedBitSet . NOTE: This was LongBitSet in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Int64sRef Represents long[] , as a slice (offset + length) into an existing long[] . The Int64s member should never be null ; use EMPTY_INT64S if necessary. NOTE: This was LongsRef in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Int64Values Abstraction over an array of s. This class extends NumericDocValues so that we don't need to add another level of abstraction every time we want eg. to use the PackedInt32s utility classes to represent a NumericDocValues instance. NOTE: This was LongValues in Lucene This is a Lucene.NET INTERNAL API, use at your own risk IntroSorter Sorter implementation based on a variant of the quicksort algorithm called introsort : when the recursion level exceeds the log of the length of the array to sort, it falls back to heapsort. This prevents quicksort from running into its worst-case quadratic runtime. Small arrays are sorted with insertion sort. This is a Lucene.NET INTERNAL API, use at your own risk IOUtils This class emulates the new Java 7 \"Try-With-Resources\" statement. Remove once Lucene is on Java 7. This is a Lucene.NET INTERNAL API, use at your own risk LuceneVersionExtensions Extension methods to the LuceneVersion enumeration to provide version comparison and parsing functionality. MapOfSets<TKey, TValue> Helper class for keeping Lists of Objects associated with keys. WARNING: this CLASS IS NOT THREAD SAFE This is a Lucene.NET INTERNAL API, use at your own risk MathUtil Math static utility methods. MergedIterator<T> Provides a merged sorted view from several sorted iterators. If built with Lucene.Net.Util.MergedIterator`1.removeDuplicates set to true and an element appears in multiple iterators then it is deduplicated, that is this iterator returns the sorted union of elements. If built with Lucene.Net.Util.MergedIterator`1.removeDuplicates set to false then all elements in all iterators are returned. Caveats: The behavior is undefined if the iterators are not actually sorted. Null elements are unsupported. If Lucene.Net.Util.MergedIterator`1.removeDuplicates is set to true and if a single iterator contains duplicates then they will not be deduplicated. When elements are deduplicated it is not defined which one is returned. If Lucene.Net.Util.MergedIterator`1.removeDuplicates is set to false then the order in which duplicates are returned isn't defined. The caller is responsible for disposing the instances that are passed into the constructor, MergedIterator<T> doesn't do it automatically. This is a Lucene.NET INTERNAL API, use at your own risk NamedServiceFactory<TService> LUCENENET specific abstract class containing common fuctionality for named service factories. NumericUtils This is a helper class to generate prefix-encoded representations for numerical values and supplies converters to represent float/double values as sortable integers/longs. To quickly execute range queries in Apache Lucene, a range is divided recursively into multiple intervals for searching: The center of the range is searched only with the lowest possible precision in the trie, while the boundaries are matched more exactly. this reduces the number of terms dramatically. This class generates terms to achieve this: First the numerical integer values need to be converted to bytes. For that integer values (32 bit or 64 bit) are made unsigned and the bits are converted to ASCII chars with each 7 bit. The resulting byte[] is sortable like the original integer value (even using UTF-8 sort order). Each value is also prefixed (in the first char) by the shift value (number of bits removed) used during encoding. To also index floating point numbers, this class supplies two methods to convert them to integer values by changing their bit layout: DoubleToSortableInt64(Double) , SingleToSortableInt32(Single) . You will have no precision loss by converting floating point numbers to integers and back (only that the integer form is not usable). Other data types like dates can easily converted to s or s (e.g. date to long: ). For easy usage, the trie algorithm is implemented for indexing inside NumericTokenStream that can index , , , and . For querying, NumericRangeQuery and NumericRangeFilter implement the query part for the same data types. This class can also be used, to generate lexicographically sortable (according to UTF8SortedAsUTF16Comparer ) representations of numeric data types for other usages (e.g. sorting). @lucene.internal @since 2.9, API changed non backwards-compliant in 4.0 NumericUtils.Int32RangeBuilder Callback for SplitInt32Range(NumericUtils.Int32RangeBuilder, Int32, Int32, Int32) . You need to override only one of the methods. NOTE: This was IntRangeBuilder in Lucene @lucene.internal @since 2.9, API changed non backwards-compliant in 4.0 NumericUtils.Int64RangeBuilder Callback for SplitInt64Range(NumericUtils.Int64RangeBuilder, Int32, Int64, Int64) . You need to override only one of the methods. NOTE: This was LongRangeBuilder in Lucene @lucene.internal @since 2.9, API changed non backwards-compliant in 4.0 OfflineSorter On-disk sorting of byte arrays. Each byte array (entry) is a composed of the following fields: (two bytes) length of the following byte array, exactly the above count of bytes for the sequence to be sorted. OfflineSorter.BufferSize A bit more descriptive unit for constructors. OfflineSorter.ByteSequencesReader Utility class to read length-prefixed byte[] entries from an input. Complementary to OfflineSorter.ByteSequencesWriter . OfflineSorter.ByteSequencesWriter Utility class to emit length-prefixed byte[] entries to an output stream for sorting. Complementary to OfflineSorter.ByteSequencesReader . OfflineSorter.SortInfo Sort info (debugging mostly). OpenBitSet An \"open\" BitSet implementation that allows direct access to the array of words storing the bits. NOTE: This can be used in .NET any place where a java.util.BitSet is used in Java. Unlike java.util.BitSet , the fact that bits are packed into an array of longs is part of the interface. This allows efficient implementation of other algorithms by someone other than the author. It also allows one to efficiently implement alternate serialization or interchange formats. OpenBitSet is faster than java.util.BitSet in most operations and much faster at calculating cardinality of sets and results of set operations. It can also handle sets of larger cardinality (up to 64 * 2**32-1) The goals of OpenBitSet are the fastest implementation possible, and maximum code reuse. Extra safety and encapsulation may always be built on top, but if that's built in, the cost can never be removed (and hence people re-implement their own version in order to get better performance). Performance Results Test system: Pentium 4, Sun Java 1.5_06 -server -Xbatch -Xmx64M BitSet size = 1,000,000 Results are java.util.BitSet time divided by OpenBitSet time. cardinalityIntersectionCountUnionNextSetBitGetGetIterator 50% full 3.363.961.441.461.991.58 1% full 3.313.90 1.04 0.99 Test system: AMD Opteron, 64 bit linux, Sun Java 1.5_06 -server -Xbatch -Xmx64M BitSet size = 1,000,000 Results are java.util.BitSet time divided by OpenBitSet time. cardinalityIntersectionCountUnionNextSetBitGetGetIterator 50% full 2.503.501.001.031.121.25 1% full 2.513.49 1.00 1.02 OpenBitSetDISI OpenBitSet with added methods to bulk-update the bits from a DocIdSetIterator . (DISI stands for DocIdSetIterator ). OpenBitSetIterator An iterator to iterate over set bits in an OpenBitSet . this is faster than NextSetBit(Int64) for iterating over the complete set of bits, especially when the density of the bits set is high. PagedBytes Represents a logical byte[] as a series of pages. You can write-once into the logical byte[] (append only), using copy, and then retrieve slices ( BytesRef ) into it using fill. This is a Lucene.NET INTERNAL API, use at your own risk PagedBytes.PagedBytesDataInput PagedBytes.PagedBytesDataOutput PagedBytes.Reader Provides methods to read BytesRef s from a frozen PagedBytes . PForDeltaDocIdSet DocIdSet implementation based on pfor-delta encoding. This implementation is inspired from LinkedIn's Kamikaze ( http://data.linkedin.com/opensource/kamikaze ) and Daniel Lemire's JavaFastPFOR ( https://github.com/lemire/JavaFastPFOR ). On the contrary to the original PFOR paper, exceptions are encoded with FOR instead of Simple16. PForDeltaDocIdSet.Builder A builder for PForDeltaDocIdSet . PrintStreamInfoStream LUCENENET specific stub to assist with migration to TextWriterInfoStream . PriorityQueue<T> A PriorityQueue<T> maintains a partial ordering of its elements such that the element with least priority can always be found in constant time. Put()'s and Pop()'s require log(size) time. NOTE : this class will pre-allocate a full array of length maxSize+1 if instantiated via the PriorityQueue(Int32, Boolean) constructor with prepopulate set to true . That maximum size can grow as we insert elements over the time. This is a Lucene.NET INTERNAL API, use at your own risk QueryBuilder Creates queries from the Analyzer chain. Example usage: QueryBuilder builder = new QueryBuilder(analyzer); Query a = builder.CreateBooleanQuery(\"body\", \"just a test\"); Query b = builder.CreatePhraseQuery(\"body\", \"another test\"); Query c = builder.CreateMinShouldMatchQuery(\"body\", \"another test\", 0.5f); This can also be used as a subclass for query parsers to make it easier to interact with the analysis chain. Factory methods such as NewTermQuery(Term) are provided so that the generated queries can be customized. RamUsageEstimator Estimates the size (memory representation) of .NET objects. This is a Lucene.NET INTERNAL API, use at your own risk RecyclingByteBlockAllocator A ByteBlockPool.Allocator implementation that recycles unused byte blocks in a buffer and reuses them in subsequent calls to GetByteBlock() . Note: this class is not thread-safe. This is a Lucene.NET INTERNAL API, use at your own risk RecyclingInt32BlockAllocator A Int32BlockPool.Allocator implementation that recycles unused blocks in a buffer and reuses them in subsequent calls to GetInt32Block() . Note: this class is not thread-safe. NOTE: This was RecyclingIntBlockAllocator in Lucene This is a Lucene.NET INTERNAL API, use at your own risk RefCount<T> Manages reference counting for a given object. Extensions can override Release() to do custom logic when reference counting hits 0. RollingBuffer LUCENENET specific class to allow referencing static members of RollingBuffer<T> without referencing its generic closing type. RollingBuffer<T> Acts like forever growing T[] , but internally uses a circular buffer to reuse instances of . This is a Lucene.NET INTERNAL API, use at your own risk SentinelInt32Set A native hash-based set where one value is reserved to mean \"EMPTY\" internally. The space overhead is fairly low as there is only one power-of-two sized int[] to hold the values. The set is re-hashed when adding a value that would make it >= 75% full. Consider extending and over-riding Hash(Int32) if the values might be poor hash keys; Lucene docids should be fine. The internal fields are exposed publicly to enable more efficient use at the expense of better O-O principles. To iterate over the integers held in this set, simply use code like this: SentinelIntSet set = ... foreach (int v in set.keys) { if (v == set.EmptyVal) continue; //use v... } NOTE: This was SentinelIntSet in Lucene This is a Lucene.NET INTERNAL API, use at your own risk ServiceNameAttribute LUCENENET specific abstract class for s that can be used to override the default convention-based names of services. For example, \"Lucene40Codec\" will by convention be named \"Lucene40\". Using the CodecNameAttribute , the name can be overridden with a custom value. SetOnce<T> A convenient class which offers a semi-immutable object wrapper implementation which allows one to set the value of an object exactly once, and retrieve it many times. If Set(T) is called more than once, AlreadySetException is thrown and the operation will fail. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SloppyMath Math functions that trade off accuracy for speed. SmallSingle Floating point numbers smaller than 32 bits. NOTE: This was SmallFloat in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Sorter Base class for sorting algorithms implementations. This is a Lucene.NET INTERNAL API, use at your own risk SPIClassIterator<S> Helper class for loading SPI classes from classpath (META-INF files). This is a light impl of java.util.ServiceLoader but is guaranteed to be bug-free regarding classpath order and does not instantiate or initialize the classes found. This is a Lucene.NET INTERNAL API, use at your own risk StringHelper Methods for manipulating strings. This is a Lucene.NET INTERNAL API, use at your own risk TextWriterInfoStream InfoStream implementation over a such as . NOTE: This is analogous to PrintStreamInfoStream in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk TimSorter Sorter implementation based on the TimSort algorithm. This implementation is especially good at sorting partially-sorted arrays and sorts small arrays with binary sort. NOTE :There are a few differences with the original implementation: The extra amount of memory to perform merges is configurable. This allows small merges to be very fast while large merges will be performed in-place (slightly slower). You can make sure that the fast merge routine will always be used by having maxTempSlots equal to half of the length of the slice of data to sort. Only the fast merge routine can gallop (the one that doesn't run in-place) and it only gallops on the longest slice. This is a Lucene.NET INTERNAL API, use at your own risk ToStringUtils Helper methods to ease implementing . UnicodeUtil Class to encode .NET's UTF16 char[] into UTF8 byte[] without always allocating a new byte[] as of does. This is a Lucene.NET INTERNAL API, use at your own risk VirtualMethod A utility for keeping backwards compatibility on previously abstract methods (or similar replacements). Before the replacement method can be made abstract, the old method must kept deprecated. If somebody still overrides the deprecated method in a non-sealed class, you must keep track, of this and maybe delegate to the old method in the subclass. The cost of reflection is minimized by the following usage of this class: Define static readonly fields in the base class ( BaseClass ), where the old and new method are declared: internal static readonly VirtualMethod newMethod = new VirtualMethod(typeof(BaseClass), \"newName\", parameters...); internal static readonly VirtualMethod oldMethod = new VirtualMethod(typeof(BaseClass), \"oldName\", parameters...); this enforces the singleton status of these objects, as the maintenance of the cache would be too costly else. If you try to create a second instance of for the same method/ baseClass combination, an exception is thrown. To detect if e.g. the old method was overridden by a more far subclass on the inheritance path to the current instance's class, use a non-static field: bool isDeprecatedMethodOverridden = oldMethod.GetImplementationDistance(this.GetType()) > newMethod.GetImplementationDistance(this.GetType()); // alternatively (more readable): bool isDeprecatedMethodOverridden = VirtualMethod.CompareImplementationDistance(this.GetType(), oldMethod, newMethod) > 0 GetImplementationDistance(Type) returns the distance of the subclass that overrides this method. The one with the larger distance should be used preferable. this way also more complicated method rename scenarios can be handled (think of 2.9 TokenStream deprecations). This is a Lucene.NET INTERNAL API, use at your own risk WAH8DocIdSet DocIdSet implementation based on word-aligned hybrid encoding on words of 8 bits. This implementation doesn't support random-access but has a fast DocIdSetIterator which can advance in logarithmic time thanks to an index. The compression scheme is simplistic and should work well with sparse and very dense doc id sets while being only slightly larger than a FixedBitSet for incompressible sets (overhead<2% in the worst case) in spite of the index. Format : The format is byte-aligned. An 8-bits word is either clean, meaning composed only of zeros or ones, or dirty, meaning that it contains between 1 and 7 bits set. The idea is to encode sequences of clean words using run-length encoding and to leave sequences of dirty words as-is. TokenClean length+Dirty length+Dirty words 1 byte0-n bytes0-n bytes0-n bytes Token encodes whether clean means full of zeros or ones in the first bit, the number of clean words minus 2 on the next 3 bits and the number of dirty words on the last 4 bits. The higher-order bit is a continuation bit, meaning that the number is incomplete and needs additional bytes to be read. Clean length+ : If clean length has its higher-order bit set, you need to read a vint ( ReadVInt32() ), shift it by 3 bits on the left side and add it to the 3 bits which have been read in the token. Dirty length+ works the same way as Clean length+ but on 4 bits and for the length of dirty words. Dirty words are the dirty words, there are Dirty length of them. This format cannot encode sequences of less than 2 clean words and 0 dirty word. The reason is that if you find a single clean word, you should rather encode it as a dirty word. This takes the same space as starting a new sequence (since you need one byte for the token) but will be lighter to decode. There is however an exception for the first sequence. Since the first sequence may start directly with a dirty word, the clean length is encoded directly, without subtracting 2. There is an additional restriction on the format: the sequence of dirty words is not allowed to contain two consecutive clean words. This restriction exists to make sure no space is wasted and to make sure iterators can read the next doc ID by reading at most 2 dirty words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WAH8DocIdSet.Builder A builder for WAH8DocIdSet s. WAH8DocIdSet.WordBuilder Word-based builder. WeakIdentityMap<TKey, TValue> Implements a combination of java.util.WeakHashMap and java.util.IdentityHashMap . Useful for caches that need to key off of a == comparison instead of a .Equals(object) . This class is not a general-purpose implementation! It intentionally violates 's general contract, which mandates the use of the method when comparing objects. This class is designed for use only in the rare cases wherein reference-equality semantics are required. This implementation was forked from Apache CXF but modified to not implement the interface and without any set views on it, as those are error-prone and inefficient, if not implemented carefully. The map only contains implementations on the values and not-GCed keys. Lucene's implementation also supports null keys, but those are never weak! The map supports two modes of operation: reapOnRead = true : This behaves identical to a java.util.WeakHashMap where it also cleans up the reference queue on every read operation ( Get(Object) , ContainsKey(Object) , Count , GetValueEnumerator() ), freeing map entries of already GCed keys. reapOnRead = false : This mode does not call Reap() on every read operation. In this case, the reference queue is only cleaned up on write operations (like Put(TKey, TValue) ). This is ideal for maps with few entries where the keys are unlikely be garbage collected, but there are lots of Get(Object) operations. The code can still call Reap() to manually clean up the queue without doing a write operation. This is a Lucene.NET INTERNAL API, use at your own risk Interfaces IAccountable An object whose RAM usage can be computed. This is a Lucene.NET INTERNAL API, use at your own risk IAttribute Base interface for attributes. IAttributeReflector This interface is used to reflect contents of AttributeSource or Attribute . IBits Interface for Bitset-like structures. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IBytesRefIterator A simple iterator interface for BytesRef iteration. IMutableBits Extension of IBits for live documents. IResourceManagerFactory LUCENENET specific interface used to inject instances of . This extension point can be used to override the default behavior to, for example, retrieve resources from a persistent data store, rather than getting them from resource files. IServiceListable LUCENENET specific contract that provides support for AvailableCodecs , AvailableDocValuesFormats , and AvailablePostingsFormats . Implement this interface in addition to ICodecFactory , IDocValuesFormatFactory , or IPostingsFormatFactory to provide optional support for the above methods when providing a custom implementation. If this interface is not supported by the corresponding factory, a will be thrown from the above methods. RollingBuffer.IResettable Implement to reset an instance Enums LuceneVersion Use by certain classes to match version compatibility across releases of Lucene. WARNING : When changing the version parameter that you supply to components in Lucene, do not simply change the version at search-time, but instead also adjust your indexing code to match, and re-index."
  },
  "api/Lucene.Net/Lucene.Net.Util.IAccountable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IAccountable.html",
    "title": "Interface IAccountable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAccountable An object whose RAM usage can be computed. This is a Lucene.NET INTERNAL API, use at your own risk Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IAccountable Methods | Improve this Doc View Source RamBytesUsed() Return the memory usage of this object in bytes. Negative values are illegal. Declaration long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.IAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IAttribute.html",
    "title": "Interface IAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAttribute Base interface for attributes. Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IAttribute Methods | Improve this Doc View Source CopyTo(IAttribute) Declaration void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target"
  },
  "api/Lucene.Net/Lucene.Net.Util.IAttributeReflector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IAttributeReflector.html",
    "title": "Interface IAttributeReflector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAttributeReflector This interface is used to reflect contents of AttributeSource or Attribute . Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IAttributeReflector Methods | Improve this Doc View Source Reflect(Type, String, Object) This method gets called for every property in an Attribute / AttributeSource passing the of the IAttribute , a key and the actual value . E.g., an invocation of ReflectWith(IAttributeReflector) would call this method once using typeof(Analysis.TokenAttributes.ICharTermAttribute) as attribute type, \"term\" as key and the actual value as a . Declaration void Reflect(Type type, string key, object value) Parameters Type Name Description Type type System.String key System.Object value | Improve this Doc View Source Reflect<T>(String, Object) LUCENENET specific overload to support generics. Declaration void Reflect<T>(string key, object value) where T : IAttribute Parameters Type Name Description System.String key System.Object value Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Util.IBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IBits.html",
    "title": "Interface IBits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IBits Interface for Bitset-like structures. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IBits Properties | Improve this Doc View Source Length Returns the number of bits in this set Declaration int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32) Returns the value of the bit with the specified index . Declaration bool Get(int index) Parameters Type Name Description System.Int32 index Index, should be non-negative and < Length . The result of passing negative or out of bounds values is undefined by this interface, just don't do it! Returns Type Description System.Boolean true if the bit is set, false otherwise."
  },
  "api/Lucene.Net/Lucene.Net.Util.IBytesRefIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IBytesRefIterator.html",
    "title": "Interface IBytesRefIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IBytesRefIterator A simple iterator interface for BytesRef iteration. Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IBytesRefIterator Properties | Improve this Doc View Source Comparer Return the BytesRef Comparer used to sort terms provided by the iterator. This may return null if there are no items or the iterator is not sorted. Callers may invoke this method many times, so it's best to cache a single instance & reuse it. Declaration IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Methods | Improve this Doc View Source Next() Increments the iteration to the next BytesRef in the iterator. Returns the resulting BytesRef or null if the end of the iterator is reached. The returned BytesRef may be re-used across calls to Next() . After this method returns null , do not call it again: the results are undefined. Declaration BytesRef Next() Returns Type Description BytesRef The next BytesRef in the iterator or null if the end of the iterator is reached."
  },
  "api/Lucene.Net/Lucene.Net.Util.IMutableBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IMutableBits.html",
    "title": "Interface IMutableBits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IMutableBits Extension of IBits for live documents. Inherited Members IBits.Get(Int32) IBits.Length Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IMutableBits : IBits Methods | Improve this Doc View Source Clear(Int32) Sets the bit specified by index to false . Declaration void Clear(int index) Parameters Type Name Description System.Int32 index index, should be non-negative and < Length . The result of passing negative or out of bounds values is undefined by this interface, just don't do it!"
  },
  "api/Lucene.Net/Lucene.Net.Util.IndexableBinaryStringTools.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IndexableBinaryStringTools.html",
    "title": "Class IndexableBinaryStringTools | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexableBinaryStringTools Provides support for converting byte sequences to s and back again. The resulting s preserve the original byte sequences' sort order. The s are constructed using a Base 8000h encoding of the original binary data - each char of an encoded represents a 15-bit chunk from the byte sequence. Base 8000h was chosen because it allows for all lower 15 bits of char to be used without restriction; the surrogate range [U+D8000-U+DFFF] does not represent valid chars, and would require complicated handling to avoid them and allow use of char's high bit. Although unset bits are used as padding in the final char, the original byte sequence could contain trailing bytes with no set bits (null bytes): padding is indistinguishable from valid information. To overcome this problem, a char is appended, indicating the number of encoded bytes in the final content char. @lucene.experimental Inheritance System.Object IndexableBinaryStringTools Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class IndexableBinaryStringTools : object Methods | Improve this Doc View Source Decode(Char[], Int32, Int32, Byte[], Int32, Int32) Decodes the input sequence into the output sequence. Before calling this method, ensure that the output array has sufficient capacity by calling GetDecodedLength(Char[], Int32, Int32) . Declaration public static void Decode(char[] inputArray, int inputOffset, int inputLength, byte[] outputArray, int outputOffset, int outputLength) Parameters Type Name Description System.Char [] inputArray sequence to be decoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of chars in inputArray System.Byte [] outputArray sequence to store encoded result System.Int32 outputOffset Initial offset into outputArray System.Int32 outputLength Length of output, must be GetDecodedLength(inputArray, inputOffset, inputLength) | Improve this Doc View Source Decode(Char[], Int32, Int32, SByte[], Int32, Int32) Decodes the input char sequence into the output sbyte sequence. Before calling this method, ensure that the output array has sufficient capacity by calling GetDecodedLength(Char[], Int32, Int32) . Declaration public static void Decode(char[] inputArray, int inputOffset, int inputLength, sbyte[] outputArray, int outputOffset, int outputLength) Parameters Type Name Description System.Char [] inputArray sequence to be decoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of chars in inputArray System.SByte [] outputArray sequence to store encoded result System.Int32 outputOffset Initial offset into outputArray System.Int32 outputLength Length of output, must be GetDecodedLength(inputArray, inputOffset, inputLength) | Improve this Doc View Source Encode(Byte[], Int32, Int32, Char[], Int32, Int32) Encodes the input sequence into the output char sequence. Before calling this method, ensure that the output array has sufficient capacity by calling GetEncodedLength(Byte[], Int32, Int32) . Declaration public static void Encode(byte[] inputArray, int inputOffset, int inputLength, char[] outputArray, int outputOffset, int outputLength) Parameters Type Name Description System.Byte [] inputArray sequence to be encoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of bytes in inputArray System.Char [] outputArray sequence to store encoded result System.Int32 outputOffset Initial offset into outputArray System.Int32 outputLength Length of output, must be GetEncodedLength(inputArray, inputOffset, inputLength) | Improve this Doc View Source Encode(SByte[], Int32, Int32, Char[], Int32, Int32) Encodes the input sequence into the output char sequence. Before calling this method, ensure that the output array has sufficient capacity by calling GetEncodedLength(SByte[], Int32, Int32) . Declaration public static void Encode(sbyte[] inputArray, int inputOffset, int inputLength, char[] outputArray, int outputOffset, int outputLength) Parameters Type Name Description System.SByte [] inputArray sequence to be encoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of bytes in inputArray System.Char [] outputArray sequence to store encoded result System.Int32 outputOffset Initial offset into outputArray System.Int32 outputLength Length of output, must be getEncodedLength | Improve this Doc View Source GetDecodedLength(Char[], Int32, Int32) Returns the number of s required to decode the given char sequence. Declaration public static int GetDecodedLength(char[] encoded, int offset, int length) Parameters Type Name Description System.Char [] encoded Char sequence to be decoded System.Int32 offset Initial offset System.Int32 length Number of characters Returns Type Description System.Int32 The number of s required to decode the given char sequence | Improve this Doc View Source GetEncodedLength(Byte[], Int32, Int32) Returns the number of chars required to encode the given s. Declaration public static int GetEncodedLength(byte[] inputArray, int inputOffset, int inputLength) Parameters Type Name Description System.Byte [] inputArray Byte sequence to be encoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of bytes in inputArray Returns Type Description System.Int32 The number of chars required to encode the number of s. | Improve this Doc View Source GetEncodedLength(SByte[], Int32, Int32) Returns the number of chars required to encode the given s. Declaration public static int GetEncodedLength(sbyte[] inputArray, int inputOffset, int inputLength) Parameters Type Name Description System.SByte [] inputArray sequence to be encoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of sbytes in inputArray Returns Type Description System.Int32 The number of chars required to encode the number of s."
  },
  "api/Lucene.Net/Lucene.Net.Util.InfoStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.InfoStream.html",
    "title": "Class InfoStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InfoStream Debugging API for Lucene classes such as IndexWriter and SegmentInfos . NOTE: Enabling infostreams may cause performance degradation in some components. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object InfoStream TextWriterInfoStream Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class InfoStream : IDisposable Fields | Improve this Doc View Source NO_OUTPUT Instance of InfoStream that does no logging at all. Declaration public static readonly InfoStream NO_OUTPUT Field Value Type Description InfoStream Properties | Improve this Doc View Source Default Gets or Sets the default InfoStream used by a newly instantiated classes. Declaration public static InfoStream Default { get; set; } Property Value Type Description InfoStream Methods | Improve this Doc View Source Clone() Clones this InfoStream Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Disposes this InfoStream Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Disposes this InfoStream Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source IsEnabled(String) Returns true if messages are enabled and should be posted to Message(String, String) . Declaration public abstract bool IsEnabled(string component) Parameters Type Name Description System.String component Returns Type Description System.Boolean | Improve this Doc View Source Message(String, String) Prints a message Declaration public abstract void Message(string component, string message) Parameters Type Name Description System.String component System.String message"
  },
  "api/Lucene.Net/Lucene.Net.Util.InPlaceMergeSorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.InPlaceMergeSorter.html",
    "title": "Class InPlaceMergeSorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InPlaceMergeSorter Sorter implementation based on the merge-sort algorithm that merges in place (no extra memory will be allocated). Small arrays are sorted with insertion sort. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Sorter InPlaceMergeSorter Inherited Members Sorter.Compare(Int32, Int32) Sorter.Swap(Int32, Int32) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class InPlaceMergeSorter : Sorter Constructors | Improve this Doc View Source InPlaceMergeSorter() Create a new InPlaceMergeSorter Declaration public InPlaceMergeSorter() Methods | Improve this Doc View Source Sort(Int32, Int32) Sort the slice which starts at from (inclusive) and ends at to (exclusive). Declaration public override sealed void Sort(int from, int to) Parameters Type Name Description System.Int32 from System.Int32 to Overrides Sorter.Sort(Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.Allocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.Allocator.html",
    "title": "Class Int32BlockPool.Allocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32BlockPool.Allocator Abstract class for allocating and freeing blocks. Inheritance System.Object Int32BlockPool.Allocator Int32BlockPool.DirectAllocator RecyclingInt32BlockAllocator Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Allocator : object Constructors | Improve this Doc View Source Allocator(Int32) Declaration public Allocator(int blockSize) Parameters Type Name Description System.Int32 blockSize Fields | Improve this Doc View Source m_blockSize Declaration protected readonly int m_blockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetInt32Block() NOTE: This was getIntBlock() in Lucene Declaration public virtual int[] GetInt32Block() Returns Type Description System.Int32 [] | Improve this Doc View Source RecycleInt32Blocks(Int32[][], Int32, Int32) NOTE: This was recycleIntBlocks() in Lucene Declaration public abstract void RecycleInt32Blocks(int[][] blocks, int start, int end) Parameters Type Name Description System.Int32 [][] blocks System.Int32 start System.Int32 end"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.DirectAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.DirectAllocator.html",
    "title": "Class Int32BlockPool.DirectAllocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32BlockPool.DirectAllocator A simple Int32BlockPool.Allocator that never recycles. Inheritance System.Object Int32BlockPool.Allocator Int32BlockPool.DirectAllocator Inherited Members Int32BlockPool.Allocator.m_blockSize Int32BlockPool.Allocator.GetInt32Block() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class DirectAllocator : Int32BlockPool.Allocator Constructors | Improve this Doc View Source DirectAllocator() Creates a new Int32BlockPool.DirectAllocator with a default block size Declaration public DirectAllocator() Methods | Improve this Doc View Source RecycleInt32Blocks(Int32[][], Int32, Int32) NOTE: This was recycleIntBlocks() in Lucene Declaration public override void RecycleInt32Blocks(int[][] blocks, int start, int end) Parameters Type Name Description System.Int32 [][] blocks System.Int32 start System.Int32 end Overrides Int32BlockPool.Allocator.RecycleInt32Blocks(Int32[][], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.html",
    "title": "Class Int32BlockPool | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32BlockPool A pool for blocks similar to ByteBlockPool . NOTE: This was IntBlockPool in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32BlockPool Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Int32BlockPool : object Constructors | Improve this Doc View Source Int32BlockPool() Creates a new Int32BlockPool with a default Int32BlockPool.Allocator . Declaration public Int32BlockPool() See Also NextBuffer() | Improve this Doc View Source Int32BlockPool(Int32BlockPool.Allocator) Creates a new Int32BlockPool with the given Int32BlockPool.Allocator . Declaration public Int32BlockPool(Int32BlockPool.Allocator allocator) Parameters Type Name Description Int32BlockPool.Allocator allocator See Also NextBuffer() Fields | Improve this Doc View Source INT32_BLOCK_MASK NOTE: This was INT_BLOCK_MASK in Lucene Declaration public static readonly int INT32_BLOCK_MASK Field Value Type Description System.Int32 | Improve this Doc View Source INT32_BLOCK_SHIFT NOTE: This was INT_BLOCK_SHIFT in Lucene Declaration public static readonly int INT32_BLOCK_SHIFT Field Value Type Description System.Int32 | Improve this Doc View Source INT32_BLOCK_SIZE NOTE: This was INT_BLOCK_SIZE in Lucene Declaration public static readonly int INT32_BLOCK_SIZE Field Value Type Description System.Int32 Properties | Improve this Doc View Source Buffer Current head buffer. Declaration public int[] Buffer { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Buffers Array of buffers currently used in the pool. Buffers are allocated if needed don't modify this outside of this class. Declaration public int[][] Buffers { get; set; } Property Value Type Description System.Int32 [][] | Improve this Doc View Source Int32Offset Current head offset. NOTE: This was intOffset in Lucene Declaration public int Int32Offset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Int32Upto Pointer to the current position in head buffer NOTE: This was intUpto in Lucene Declaration public int Int32Upto { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source NextBuffer() Advances the pool to its next buffer. This method should be called once after the constructor to initialize the pool. In contrast to the constructor a Reset() call will advance the pool to its first buffer immediately. Declaration public void NextBuffer() | Improve this Doc View Source Reset() Resets the pool to its initial state reusing the first buffer. Calling NextBuffer() is not needed after reset. Declaration public void Reset() | Improve this Doc View Source Reset(Boolean, Boolean) Expert: Resets the pool to its initial state reusing the first buffer. Declaration public void Reset(bool zeroFillBuffers, bool reuseFirst) Parameters Type Name Description System.Boolean zeroFillBuffers If true the buffers are filled with 0 . this should be set to true if this pool is used with Int32BlockPool.SliceWriter . System.Boolean reuseFirst If true the first buffer will be reused and calling NextBuffer() is not needed after reset if the block pool was used before ie. NextBuffer() was called before."
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.SliceReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.SliceReader.html",
    "title": "Class Int32BlockPool.SliceReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32BlockPool.SliceReader A Int32BlockPool.SliceReader that can read slices written by a Int32BlockPool.SliceWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32BlockPool.SliceReader Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class SliceReader : object Constructors | Improve this Doc View Source SliceReader(Int32BlockPool) Creates a new Int32BlockPool.SliceReader on the given pool. Declaration public SliceReader(Int32BlockPool pool) Parameters Type Name Description Int32BlockPool pool Properties | Improve this Doc View Source IsEndOfSlice Returns true if the current slice is fully read. If this method returns true ReadInt32() should not be called again on this slice. Declaration public bool IsEndOfSlice { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source ReadInt32() Reads the next from the current slice and returns it. NOTE: This was readInt() in Lucene Declaration public int ReadInt32() Returns Type Description System.Int32 See Also IsEndOfSlice | Improve this Doc View Source Reset(Int32, Int32) Resets the reader to a slice give the slices absolute start and end offset in the pool. Declaration public void Reset(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.SliceWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.SliceWriter.html",
    "title": "Class Int32BlockPool.SliceWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32BlockPool.SliceWriter A Int32BlockPool.SliceWriter that allows to write multiple integer slices into a given Int32BlockPool . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32BlockPool.SliceWriter Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class SliceWriter : object Constructors | Improve this Doc View Source SliceWriter(Int32BlockPool) Declaration public SliceWriter(Int32BlockPool pool) Parameters Type Name Description Int32BlockPool pool Properties | Improve this Doc View Source CurrentOffset Returns the offset of the currently written slice. The returned value should be used as the end offset to initialize a Int32BlockPool.SliceReader once this slice is fully written or to reset the this writer if another slice needs to be written. Declaration public virtual int CurrentOffset { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Reset(Int32) Declaration public virtual void Reset(int sliceOffset) Parameters Type Name Description System.Int32 sliceOffset | Improve this Doc View Source StartNewSlice() Starts a new slice and returns the start offset. The returned value should be used as the start offset to initialize a Int32BlockPool.SliceReader . Declaration public virtual int StartNewSlice() Returns Type Description System.Int32 | Improve this Doc View Source WriteInt32(Int32) Writes the given value into the slice and resizes the slice if needed NOTE: This was writeInt() in Lucene Declaration public virtual void WriteInt32(int value) Parameters Type Name Description System.Int32 value See Also Int32BlockPool.SliceReader"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32sRef.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32sRef.html",
    "title": "Class Int32sRef | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32sRef Represents int[] , as a slice (offset + length) into an existing int[] . The Int32s member should never be null ; use EMPTY_INT32S if necessary. NOTE: This was IntsRef in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32sRef Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Int32sRef : IComparable<Int32sRef> Constructors | Improve this Doc View Source Int32sRef() Create a Int32sRef with EMPTY_INT32S . Declaration public Int32sRef() | Improve this Doc View Source Int32sRef(Int32) Create a Int32sRef pointing to a new array of size capacity . Offset and length will both be zero. Declaration public Int32sRef(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source Int32sRef(Int32[], Int32, Int32) This instance will directly reference ints w/o making a copy. ints should not be null . Declaration public Int32sRef(int[] ints, int offset, int length) Parameters Type Name Description System.Int32 [] ints System.Int32 offset System.Int32 length Fields | Improve this Doc View Source EMPTY_INT32S An empty integer array for convenience. NOTE: This was EMPTY_INTS in Lucene Declaration public static readonly int[] EMPTY_INT32S Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Int32s The contents of the Int32sRef . Should never be null . NOTE: This was ints (field) in Lucene Declaration public int[] Int32s { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Length Length of used s. Declaration public int Length { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset Offset of first valid integer. Declaration public int Offset { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Returns a shallow clone of this instance (the underlying s are not copied and will be shared by both the returned object and this object. Declaration public object Clone() Returns Type Description System.Object See Also DeepCopyOf(Int32sRef) | Improve this Doc View Source CompareTo(Int32sRef) Signed order comparison. Declaration public int CompareTo(Int32sRef other) Parameters Type Name Description Int32sRef other Returns Type Description System.Int32 | Improve this Doc View Source CopyInt32s(Int32sRef) NOTE: This was copyInts() in Lucene Declaration public void CopyInt32s(Int32sRef other) Parameters Type Name Description Int32sRef other | Improve this Doc View Source DeepCopyOf(Int32sRef) Creates a new Int32sRef that points to a copy of the s from other The returned Int32sRef will have a length of other.Length and an offset of zero. Declaration public static Int32sRef DeepCopyOf(Int32sRef other) Parameters Type Name Description Int32sRef other Returns Type Description Int32sRef | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Grow(Int32) Used to grow the reference array. In general this should not be used as it does not take the offset into account. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Grow(int newLength) Parameters Type Name Description System.Int32 newLength | Improve this Doc View Source Int32sEquals(Int32sRef) NOTE: This was intsEquals() in Lucene Declaration public bool Int32sEquals(Int32sRef other) Parameters Type Name Description Int32sRef other Returns Type Description System.Boolean | Improve this Doc View Source IsValid() Performs internal consistency checks. Always returns true (or throws ) Declaration public bool IsValid() Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int64BitSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int64BitSet.html",
    "title": "Class Int64BitSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64BitSet BitSet of fixed length ( Lucene.Net.Util.Int64BitSet.numBits ), backed by accessible ( GetBits() ) long[] , accessed with a index. Use it only if you intend to store more than 2.1B bits, otherwise you should use FixedBitSet . NOTE: This was LongBitSet in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int64BitSet Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Int64BitSet : object Constructors | Improve this Doc View Source Int64BitSet(Int64) Declaration public Int64BitSet(long numBits) Parameters Type Name Description System.Int64 numBits | Improve this Doc View Source Int64BitSet(Int64[], Int64) Declaration public Int64BitSet(long[] storedBits, long numBits) Parameters Type Name Description System.Int64 [] storedBits System.Int64 numBits Properties | Improve this Doc View Source Length Returns the number of bits stored in this bitset. Declaration public long Length { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source And(Int64BitSet) this = this AND other Declaration public void And(Int64BitSet other) Parameters Type Name Description Int64BitSet other | Improve this Doc View Source AndNot(Int64BitSet) this = this AND NOT other Declaration public void AndNot(Int64BitSet other) Parameters Type Name Description Int64BitSet other | Improve this Doc View Source Bits2words(Int64) Returns the number of 64 bit words it would take to hold numBits . Declaration public static int Bits2words(long numBits) Parameters Type Name Description System.Int64 numBits Returns Type Description System.Int32 | Improve this Doc View Source Cardinality() Returns number of set bits. NOTE: this visits every long in the backing bits array, and the result is not internally cached! Declaration public long Cardinality() Returns Type Description System.Int64 | Improve this Doc View Source Clear(Int64) Declaration public void Clear(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Clear(Int64, Int64) Clears a range of bits. Declaration public void Clear(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to clear | Improve this Doc View Source Clone() Declaration public Int64BitSet Clone() Returns Type Description Int64BitSet | Improve this Doc View Source EnsureCapacity(Int64BitSet, Int64) If the given Int64BitSet is large enough to hold numBits , returns the given bits , otherwise returns a new Int64BitSet which can hold the requested number of bits. NOTE: the returned bitset reuses the underlying long[] of the given bits if possible. Also, reading Length on the returned bits may return a value greater than numBits . Declaration public static Int64BitSet EnsureCapacity(Int64BitSet bits, long numBits) Parameters Type Name Description Int64BitSet bits System.Int64 numBits Returns Type Description Int64BitSet | Improve this Doc View Source Equals(Object) Returns true if both sets have the same bits set Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source Flip(Int64, Int64) Flips a range of bits Declaration public void Flip(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to flip | Improve this Doc View Source Get(Int64) Declaration public bool Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndClear(Int64) Declaration public bool GetAndClear(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndSet(Int64) Declaration public bool GetAndSet(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetBits() Expert. Declaration public long[] GetBits() Returns Type Description System.Int64 [] | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Intersects(Int64BitSet) Returns true if the sets have any elements in common Declaration public bool Intersects(Int64BitSet other) Parameters Type Name Description Int64BitSet other Returns Type Description System.Boolean | Improve this Doc View Source NextSetBit(Int64) Returns the index of the first set bit starting at the index specified. -1 is returned if there are no more set bits. Declaration public long NextSetBit(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 | Improve this Doc View Source Or(Int64BitSet) this = this OR other Declaration public void Or(Int64BitSet other) Parameters Type Name Description Int64BitSet other | Improve this Doc View Source PrevSetBit(Int64) Returns the index of the last set bit before or on the index specified. -1 is returned if there are no more set bits. Declaration public long PrevSetBit(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 | Improve this Doc View Source Set(Int64) Declaration public void Set(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Set(Int64, Int64) Sets a range of bits Declaration public void Set(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to set | Improve this Doc View Source Xor(Int64BitSet) this = this XOR other Declaration public void Xor(Int64BitSet other) Parameters Type Name Description Int64BitSet other"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int64sRef.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int64sRef.html",
    "title": "Class Int64sRef | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64sRef Represents long[] , as a slice (offset + length) into an existing long[] . The Int64s member should never be null ; use EMPTY_INT64S if necessary. NOTE: This was LongsRef in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int64sRef Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Int64sRef : IComparable<Int64sRef> Constructors | Improve this Doc View Source Int64sRef() Create a Int64sRef with EMPTY_INT64S Declaration public Int64sRef() | Improve this Doc View Source Int64sRef(Int32) Create a Int64sRef pointing to a new array of size capacity . Offset and length will both be zero. Declaration public Int64sRef(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source Int64sRef(Int64[], Int32, Int32) This instance will directly reference longs w/o making a copy. longs should not be null . Declaration public Int64sRef(long[] longs, int offset, int length) Parameters Type Name Description System.Int64 [] longs System.Int32 offset System.Int32 length Fields | Improve this Doc View Source EMPTY_INT64S An empty array for convenience NOTE: This was EMPTY_LONGS in Lucene Declaration public static readonly long[] EMPTY_INT64S Field Value Type Description System.Int64 [] Properties | Improve this Doc View Source Int64s The contents of the Int64sRef . Should never be null . NOTE: This was longs (field) in Lucene Declaration public long[] Int64s { get; set; } Property Value Type Description System.Int64 [] | Improve this Doc View Source Length Length of used longs. Declaration public int Length { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset Offset of first valid long. Declaration public int Offset { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Returns a shallow clone of this instance (the underlying s are not copied and will be shared by both the returned object and this object. Declaration public object Clone() Returns Type Description System.Object See Also DeepCopyOf(Int64sRef) | Improve this Doc View Source CompareTo(Int64sRef) Signed order comparison Declaration public int CompareTo(Int64sRef other) Parameters Type Name Description Int64sRef other Returns Type Description System.Int32 | Improve this Doc View Source CopyInt64s(Int64sRef) NOTE: This was copyLongs() in Lucene Declaration public void CopyInt64s(Int64sRef other) Parameters Type Name Description Int64sRef other | Improve this Doc View Source DeepCopyOf(Int64sRef) Creates a new Int64sRef that points to a copy of the s from other . The returned Int64sRef will have a length of other.Length and an offset of zero. Declaration public static Int64sRef DeepCopyOf(Int64sRef other) Parameters Type Name Description Int64sRef other Returns Type Description Int64sRef | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source Grow(Int32) Used to grow the reference array. In general this should not be used as it does not take the offset into account. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Grow(int newLength) Parameters Type Name Description System.Int32 newLength | Improve this Doc View Source Int64sEquals(Int64sRef) NOTE: This was longsEquals() in Lucene Declaration public bool Int64sEquals(Int64sRef other) Parameters Type Name Description Int64sRef other Returns Type Description System.Boolean | Improve this Doc View Source IsValid() Performs internal consistency checks. Always returns true (or throws ) Declaration public bool IsValid() Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int64Values.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int64Values.html",
    "title": "Class Int64Values | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64Values Abstraction over an array of s. This class extends NumericDocValues so that we don't need to add another level of abstraction every time we want eg. to use the PackedInt32s utility classes to represent a NumericDocValues instance. NOTE: This was LongValues in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer AbstractPagedMutable<T> BlockPackedReader MonotonicBlockPackedReader Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Int64Values : NumericDocValues Methods | Improve this Doc View Source Get(Int32) Get value at idx . Declaration public override long Get(int idx) Parameters Type Name Description System.Int32 idx Returns Type Description System.Int64 Overrides NumericDocValues.Get(Int32) | Improve this Doc View Source Get(Int64) Get value at index . Declaration public abstract long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.IntroSorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IntroSorter.html",
    "title": "Class IntroSorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IntroSorter Sorter implementation based on a variant of the quicksort algorithm called introsort : when the recursion level exceeds the log of the length of the array to sort, it falls back to heapsort. This prevents quicksort from running into its worst-case quadratic runtime. Small arrays are sorted with insertion sort. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Sorter IntroSorter Inherited Members Sorter.Compare(Int32, Int32) Sorter.Swap(Int32, Int32) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class IntroSorter : Sorter Constructors | Improve this Doc View Source IntroSorter() Create a new IntroSorter . Declaration public IntroSorter() Methods | Improve this Doc View Source ComparePivot(Int32) Compare the pivot with the slot at j , similarly to Compare(i, j) ( Compare(Int32, Int32) ). Declaration protected abstract int ComparePivot(int j) Parameters Type Name Description System.Int32 j Returns Type Description System.Int32 | Improve this Doc View Source SetPivot(Int32) Save the value at slot i so that it can later be used as a pivot, see ComparePivot(Int32) . Declaration protected abstract void SetPivot(int i) Parameters Type Name Description System.Int32 i | Improve this Doc View Source Sort(Int32, Int32) Sort the slice which starts at from (inclusive) and ends at to (exclusive). Declaration public override sealed void Sort(int from, int to) Parameters Type Name Description System.Int32 from System.Int32 to Overrides Sorter.Sort(Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.IOUtils.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IOUtils.html",
    "title": "Class IOUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IOUtils This class emulates the new Java 7 \"Try-With-Resources\" statement. Remove once Lucene is on Java 7. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object IOUtils Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class IOUtils : object Fields | Improve this Doc View Source CHARSET_UTF_8 UTF-8 instance to prevent repeated lookups Declaration public static readonly Encoding CHARSET_UTF_8 Field Value Type Description Encoding | Improve this Doc View Source UTF_8 UTF-8 charset string. Where possible, use instead, as using the constant may slow things down. Declaration public static readonly string UTF_8 Field Value Type Description System.String Methods | Improve this Doc View Source Close(IDisposable[]) Disposes all given s. Some of the s may be null ; they are ignored. After everything is closed, the method either throws the first exception it hit while closing, or completes normally if there were no exceptions. Declaration public static void Close(params IDisposable[] objects) Parameters Type Name Description IDisposable [] objects Objects to call on | Improve this Doc View Source Close(IEnumerable<IDisposable>) Disposes all given s. Declaration public static void Close(IEnumerable<IDisposable> objects) Parameters Type Name Description IEnumerable < IDisposable > objects See Also Dispose(IDisposable[]) | Improve this Doc View Source CloseWhileHandlingException(Exception, IDisposable[]) Disposes all given IDisposable s, suppressing all thrown exceptions. Some of the IDisposable s may be null , they are ignored. After everything is disposed, method either throws priorException , if one is supplied, or the first of suppressed exceptions, or completes normally. Sample usage: IDisposable resource1 = null, resource2 = null, resource3 = null; ExpectedException priorE = null; try { resource1 = ...; resource2 = ...; resource3 = ...; // Acquisition may throw ExpectedException ..do..stuff.. // May throw ExpectedException } catch (ExpectedException e) { priorE = e; } finally { IOUtils.CloseWhileHandlingException(priorE, resource1, resource2, resource3); } Declaration public static void CloseWhileHandlingException(Exception priorException, params IDisposable[] objects) Parameters Type Name Description Exception priorException null or an exception that will be rethrown after method completion. IDisposable [] objects Objects to call on. | Improve this Doc View Source CloseWhileHandlingException(Exception, IEnumerable<IDisposable>) Disposes all given s, suppressing all thrown exceptions. Declaration public static void CloseWhileHandlingException(Exception priorException, IEnumerable<IDisposable> objects) Parameters Type Name Description Exception priorException IEnumerable < IDisposable > objects See Also DisposeWhileHandlingException(Exception, IDisposable[]) | Improve this Doc View Source CloseWhileHandlingException(IDisposable[]) Disposes all given s, suppressing all thrown exceptions. Some of the s may be null , they are ignored. Declaration public static void CloseWhileHandlingException(params IDisposable[] objects) Parameters Type Name Description IDisposable [] objects Objects to call on | Improve this Doc View Source CloseWhileHandlingException(IEnumerable<IDisposable>) Disposes all given s, suppressing all thrown exceptions. Declaration public static void CloseWhileHandlingException(IEnumerable<IDisposable> objects) Parameters Type Name Description IEnumerable < IDisposable > objects See Also DisposeWhileHandlingException(IEnumerable<IDisposable>) DisposeWhileHandlingException(IDisposable[]) | Improve this Doc View Source Copy(FileInfo, FileInfo) Copy one file's contents to another file. The target will be overwritten if it exists. The source must exist. Declaration public static void Copy(FileInfo source, FileInfo target) Parameters Type Name Description FileInfo source FileInfo target | Improve this Doc View Source DeleteFilesIgnoringExceptions(Directory, String[]) Deletes all given files, suppressing all thrown s. Note that the files should not be null . Declaration public static void DeleteFilesIgnoringExceptions(Directory dir, params string[] files) Parameters Type Name Description Directory dir System.String [] files | Improve this Doc View Source Dispose(IDisposable[]) Disposes all given s. Some of the s may be null ; they are ignored. After everything is closed, the method either throws the first exception it hit while closing, or completes normally if there were no exceptions. Declaration public static void Dispose(params IDisposable[] objects) Parameters Type Name Description IDisposable [] objects Objects to call on | Improve this Doc View Source Dispose(IEnumerable<IDisposable>) Disposes all given s. Declaration public static void Dispose(IEnumerable<IDisposable> objects) Parameters Type Name Description IEnumerable < IDisposable > objects See Also Dispose(IDisposable[]) | Improve this Doc View Source DisposeWhileHandlingException(Exception, IDisposable[]) Disposes all given IDisposable s, suppressing all thrown exceptions. Some of the IDisposable s may be null , they are ignored. After everything is disposed, method either throws priorException , if one is supplied, or the first of suppressed exceptions, or completes normally. Sample usage: IDisposable resource1 = null, resource2 = null, resource3 = null; ExpectedException priorE = null; try { resource1 = ...; resource2 = ...; resource3 = ...; // Acquisition may throw ExpectedException ..do..stuff.. // May throw ExpectedException } catch (ExpectedException e) { priorE = e; } finally { IOUtils.DisposeWhileHandlingException(priorE, resource1, resource2, resource3); } Declaration public static void DisposeWhileHandlingException(Exception priorException, params IDisposable[] objects) Parameters Type Name Description Exception priorException null or an exception that will be rethrown after method completion. IDisposable [] objects Objects to call on. | Improve this Doc View Source DisposeWhileHandlingException(Exception, IEnumerable<IDisposable>) Disposes all given s, suppressing all thrown exceptions. Declaration public static void DisposeWhileHandlingException(Exception priorException, IEnumerable<IDisposable> objects) Parameters Type Name Description Exception priorException IEnumerable < IDisposable > objects See Also DisposeWhileHandlingException(Exception, IDisposable[]) | Improve this Doc View Source DisposeWhileHandlingException(IDisposable[]) Disposes all given s, suppressing all thrown exceptions. Some of the s may be null , they are ignored. Declaration public static void DisposeWhileHandlingException(params IDisposable[] objects) Parameters Type Name Description IDisposable [] objects Objects to call on | Improve this Doc View Source DisposeWhileHandlingException(IEnumerable<IDisposable>) Disposes all given s, suppressing all thrown exceptions. Declaration public static void DisposeWhileHandlingException(IEnumerable<IDisposable> objects) Parameters Type Name Description IEnumerable < IDisposable > objects See Also DisposeWhileHandlingException(IDisposable[]) | Improve this Doc View Source GetDecodingReader(FileInfo, Encoding) Opens a for the given using a . Unlike Java's defaults this reader will throw an exception if your it detects the read charset doesn't match the expected . Decoding readers are useful to load configuration files, stopword lists or synonym files to detect character set problems. However, its not recommended to use as a common purpose reader. Declaration public static TextReader GetDecodingReader(FileInfo file, Encoding charSet) Parameters Type Name Description FileInfo file The file to open a reader on Encoding charSet The expected charset Returns Type Description TextReader A reader to read the given file | Improve this Doc View Source GetDecodingReader(Stream, Encoding) Wrapping the given in a reader using a . Unlike Java's defaults this reader will throw an exception if your it detects the read charset doesn't match the expected . Decoding readers are useful to load configuration files, stopword lists or synonym files to detect character set problems. However, its not recommended to use as a common purpose reader. Declaration public static TextReader GetDecodingReader(Stream stream, Encoding charSet) Parameters Type Name Description Stream stream The stream to wrap in a reader Encoding charSet The expected charset Returns Type Description TextReader A wrapping reader | Improve this Doc View Source GetDecodingReader(Type, String, Encoding) Opens a for the given resource using a . Unlike Java's defaults this reader will throw an exception if your it detects the read charset doesn't match the expected . Decoding readers are useful to load configuration files, stopword lists or synonym files to detect character set problems. However, its not recommended to use as a common purpose reader. Declaration public static TextReader GetDecodingReader(Type clazz, string resource, Encoding charSet) Parameters Type Name Description Type clazz The class used to locate the resource System.String resource The resource name to load Encoding charSet The expected charset Returns Type Description TextReader A reader to read the given file | Improve this Doc View Source ReThrow(Exception) Simple utilty method that takes a previously caught and rethrows either or an unchecked exception. If the argument is null then this method does nothing. Declaration public static void ReThrow(Exception th) Parameters Type Name Description Exception th | Improve this Doc View Source ReThrowUnchecked(Exception) Simple utilty method that takes a previously caught and rethrows it as an unchecked exception. If the argument is null then this method does nothing. Declaration public static void ReThrowUnchecked(Exception th) Parameters Type Name Description Exception th"
  },
  "api/Lucene.Net/Lucene.Net.Util.IResourceManagerFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IResourceManagerFactory.html",
    "title": "Interface IResourceManagerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IResourceManagerFactory LUCENENET specific interface used to inject instances of . This extension point can be used to override the default behavior to, for example, retrieve resources from a persistent data store, rather than getting them from resource files. Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IResourceManagerFactory Methods | Improve this Doc View Source Create(Type) Declaration ResourceManager Create(Type resourceSource) Parameters Type Name Description Type resourceSource Returns Type Description ResourceManager | Improve this Doc View Source Release(ResourceManager) Declaration void Release(ResourceManager manager) Parameters Type Name Description ResourceManager manager"
  },
  "api/Lucene.Net/Lucene.Net.Util.IServiceListable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IServiceListable.html",
    "title": "Interface IServiceListable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IServiceListable LUCENENET specific contract that provides support for AvailableCodecs , AvailableDocValuesFormats , and AvailablePostingsFormats . Implement this interface in addition to ICodecFactory , IDocValuesFormatFactory , or IPostingsFormatFactory to provide optional support for the above methods when providing a custom implementation. If this interface is not supported by the corresponding factory, a will be thrown from the above methods. Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IServiceListable Properties | Improve this Doc View Source AvailableServices Lists the available services for the current service type. Declaration ICollection<string> AvailableServices { get; } Property Value Type Description ICollection < System.String >"
  },
  "api/Lucene.Net/Lucene.Net.Util.LuceneVersion.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.LuceneVersion.html",
    "title": "Enum LuceneVersion | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum LuceneVersion Use by certain classes to match version compatibility across releases of Lucene. WARNING : When changing the version parameter that you supply to components in Lucene, do not simply change the version at search-time, but instead also adjust your indexing code to match, and re-index. Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public enum LuceneVersion : int Fields Name Description LUCENE_30 Match settings and bugs in Lucene's 3.0 release. LUCENE_31 Match settings and bugs in Lucene's 3.1 release. LUCENE_32 Match settings and bugs in Lucene's 3.2 release. LUCENE_33 Match settings and bugs in Lucene's 3.3 release. LUCENE_34 Match settings and bugs in Lucene's 3.4 release. LUCENE_35 Match settings and bugs in Lucene's 3.5 release. LUCENE_36 Match settings and bugs in Lucene's 3.6 release. LUCENE_40 Match settings and bugs in Lucene's 3.6 release. LUCENE_41 Match settings and bugs in Lucene's 4.1 release. LUCENE_42 Match settings and bugs in Lucene's 4.2 release. LUCENE_43 Match settings and bugs in Lucene's 4.3 release. LUCENE_44 Match settings and bugs in Lucene's 4.4 release. LUCENE_45 Match settings and bugs in Lucene's 4.5 release. LUCENE_46 Match settings and bugs in Lucene's 4.6 release. LUCENE_47 Match settings and bugs in Lucene's 4.7 release. LUCENE_48 Match settings and bugs in Lucene's 4.8 release. Use this to get the latest & greatest settings, bug fixes, etc, for Lucene. LUCENE_CURRENT WARNING : if you use this setting, and then upgrade to a newer release of Lucene, sizable changes may happen. If backwards compatibility is important then you should instead explicitly specify an actual version. If you use this constant then you may need to re-index all of your documents when upgrading Lucene, as the way text is indexed may have changed. Additionally, you may need to re-test your entire application to ensure it behaves as expected, as some defaults may have changed and may break functionality in your application. Extension Methods LuceneVersionExtensions.OnOrAfter(LuceneVersion)"
  },
  "api/Lucene.Net/Lucene.Net.Util.LuceneVersionExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.LuceneVersionExtensions.html",
    "title": "Class LuceneVersionExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LuceneVersionExtensions Extension methods to the LuceneVersion enumeration to provide version comparison and parsing functionality. Inheritance System.Object LuceneVersionExtensions Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public static class LuceneVersionExtensions : object Methods | Improve this Doc View Source OnOrAfter(LuceneVersion, LuceneVersion) Declaration public static bool OnOrAfter(this LuceneVersion instance, LuceneVersion other) Parameters Type Name Description LuceneVersion instance LuceneVersion other Returns Type Description System.Boolean | Improve this Doc View Source ParseLeniently(String) Declaration public static LuceneVersion ParseLeniently(string version) Parameters Type Name Description System.String version Returns Type Description LuceneVersion"
  },
  "api/Lucene.Net/Lucene.Net.Util.MapOfSets-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.MapOfSets-2.html",
    "title": "Class MapOfSets<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MapOfSets<TKey, TValue> Helper class for keeping Lists of Objects associated with keys. WARNING: this CLASS IS NOT THREAD SAFE This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object MapOfSets<TKey, TValue> Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class MapOfSets<TKey, TValue> : object Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source MapOfSets(IDictionary<TKey, ISet<TValue>>) Declaration public MapOfSets(IDictionary<TKey, ISet<TValue>> m) Parameters Type Name Description IDictionary <TKey, ISet <TValue>> m The backing store for this object. Properties | Improve this Doc View Source Map Declaration public virtual IDictionary<TKey, ISet<TValue>> Map { get; } Property Value Type Description IDictionary <TKey, ISet <TValue>> Direct access to the map backing this object. Methods | Improve this Doc View Source Put(TKey, TValue) Adds val to the associated with key in the . If key is not already in the map, a new will first be created. Declaration public virtual int Put(TKey key, TValue val) Parameters Type Name Description TKey key TValue val Returns Type Description System.Int32 The size of the associated with key once val is added to it. | Improve this Doc View Source PutAll(TKey, IEnumerable<TValue>) Adds multiple vals to the associated with key in the . If key is not already in the map, a new will first be created. Declaration public virtual int PutAll(TKey key, IEnumerable<TValue> vals) Parameters Type Name Description TKey key IEnumerable <TValue> vals Returns Type Description System.Int32 The size of the associated with key once val is added to it."
  },
  "api/Lucene.Net/Lucene.Net.Util.MathUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.MathUtil.html",
    "title": "Class MathUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MathUtil Math static utility methods. Inheritance System.Object MathUtil Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class MathUtil : object Methods | Improve this Doc View Source Acosh(Double) Calculates inverse hyperbolic cosine of a value. Special cases: If the argument is NaN, then the result is NaN. If the argument is +1, then the result is a zero. If the argument is positive infinity, then the result is positive infinity. If the argument is less than 1, then the result is NaN. Declaration public static double Acosh(double a) Parameters Type Name Description System.Double a Returns Type Description System.Double | Improve this Doc View Source Asinh(Double) Calculates inverse hyperbolic sine of a value. Special cases: If the argument is NaN, then the result is NaN. If the argument is zero, then the result is a zero with the same sign as the argument. If the argument is infinite, then the result is infinity with the same sign as the argument. Declaration public static double Asinh(double a) Parameters Type Name Description System.Double a Returns Type Description System.Double | Improve this Doc View Source Atanh(Double) Calculates inverse hyperbolic tangent of a value. Special cases: If the argument is NaN, then the result is NaN. If the argument is zero, then the result is a zero with the same sign as the argument. If the argument is +1, then the result is positive infinity. If the argument is -1, then the result is negative infinity. If the argument's absolute value is greater than 1, then the result is NaN. Declaration public static double Atanh(double a) Parameters Type Name Description System.Double a Returns Type Description System.Double | Improve this Doc View Source Gcd(Int64, Int64) Return the greatest common divisor of a and b , consistently with System.Numerics.BigInteger.GreatestCommonDivisor(System.Numerics.BigInteger, System.Numerics.BigInteger) . NOTE : A greatest common divisor must be positive, but 2^64 cannot be expressed as a although it is the GCD of and 0 and the GCD of and . So in these 2 cases, and only them, this method will return . Declaration public static long Gcd(long a, long b) Parameters Type Name Description System.Int64 a System.Int64 b Returns Type Description System.Int64 | Improve this Doc View Source Log(Double, Double) Calculates logarithm in a given base with doubles. Declaration public static double Log(double base, double x) Parameters Type Name Description System.Double base System.Double x Returns Type Description System.Double | Improve this Doc View Source Log(Int64, Int32) Returns x <= 0 ? 0 : Math.Floor(Math.Log(x) / Math.Log(base)) . Declaration public static int Log(long x, int base) Parameters Type Name Description System.Int64 x System.Int32 base Must be > 1 . Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Util.MergedIterator-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.MergedIterator-1.html",
    "title": "Class MergedIterator<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergedIterator<T> Provides a merged sorted view from several sorted iterators. If built with Lucene.Net.Util.MergedIterator`1.removeDuplicates set to true and an element appears in multiple iterators then it is deduplicated, that is this iterator returns the sorted union of elements. If built with Lucene.Net.Util.MergedIterator`1.removeDuplicates set to false then all elements in all iterators are returned. Caveats: The behavior is undefined if the iterators are not actually sorted. Null elements are unsupported. If Lucene.Net.Util.MergedIterator`1.removeDuplicates is set to true and if a single iterator contains duplicates then they will not be deduplicated. When elements are deduplicated it is not defined which one is returned. If Lucene.Net.Util.MergedIterator`1.removeDuplicates is set to false then the order in which duplicates are returned isn't defined. The caller is responsible for disposing the instances that are passed into the constructor, MergedIterator<T> doesn't do it automatically. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object MergedIterator<T> Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class MergedIterator<T> : IEnumerator<T> where T : IComparable<T> Type Parameters Name Description T Constructors | Improve this Doc View Source MergedIterator(IEnumerator<T>[]) Declaration public MergedIterator(params IEnumerator<T>[] iterators) Parameters Type Name Description IEnumerator <T>[] iterators | Improve this Doc View Source MergedIterator(Boolean, IEnumerator<T>[]) Declaration public MergedIterator(bool removeDuplicates, params IEnumerator<T>[] iterators) Parameters Type Name Description System.Boolean removeDuplicates IEnumerator <T>[] iterators Properties | Improve this Doc View Source Current Declaration public T Current { get; } Property Value Type Description T Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source MoveNext() Declaration public bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public void Reset()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.html",
    "title": "Namespace Lucene.Net.Util.Mutable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Mutable <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Comparable object wrappers Classes MutableValue Base class for all mutable values. This is a Lucene.NET INTERNAL API, use at your own risk MutableValueBool MutableValue implementation of type . MutableValueDate MutableValue implementation of type . MutableValueDouble MutableValue implementation of type . MutableValueInt32 MutableValue implementation of type . NOTE: This was MutableValueInt in Lucene MutableValueInt64 MutableValue implementation of type . NOTE: This was MutableValueLong in Lucene MutableValueSingle MutableValue implementation of type . NOTE: This was MutableValueFloat in Lucene MutableValueStr MutableValue implementation of type ."
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValue.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValue.html",
    "title": "Class MutableValue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValue Base class for all mutable values. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object MutableValue MutableValueBool MutableValueDouble MutableValueInt32 MutableValueInt64 MutableValueSingle MutableValueStr Implements IComparable Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public abstract class MutableValue : IComparable<MutableValue>, IComparable Constructors | Improve this Doc View Source MutableValue() Declaration protected MutableValue() Properties | Improve this Doc View Source Exists Declaration public bool Exists { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source CompareSameType(Object) Declaration public abstract int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(MutableValue) Declaration public virtual int CompareTo(MutableValue other) Parameters Type Name Description MutableValue other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(Object) Declaration public virtual int CompareTo(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 | Improve this Doc View Source Copy(MutableValue) Declaration public abstract void Copy(MutableValue source) Parameters Type Name Description MutableValue source | Improve this Doc View Source Duplicate() Declaration public abstract MutableValue Duplicate() Returns Type Description MutableValue | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source EqualsSameType(Object) Declaration public abstract bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public abstract override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source ToObject() Declaration public abstract object ToObject() Returns Type Description System.Object | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Implements IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueBool.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueBool.html",
    "title": "Class MutableValueBool | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValueBool MutableValue implementation of type . Inheritance System.Object MutableValue MutableValueBool Implements IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueBool : MutableValue, IComparable Properties | Improve this Doc View Source Value Declaration public bool Value { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueDate.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueDate.html",
    "title": "Class MutableValueDate | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValueDate MutableValue implementation of type . Inheritance System.Object MutableValue MutableValueInt64 MutableValueDate Implements IComparable Inherited Members MutableValueInt64.Value MutableValueInt64.Copy(MutableValue) MutableValueInt64.EqualsSameType(Object) MutableValueInt64.CompareSameType(Object) MutableValueInt64.GetHashCode() MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueDate : MutableValueInt64, IComparable Methods | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValueInt64.Duplicate() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValueInt64.ToObject() Implements IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueDouble.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueDouble.html",
    "title": "Class MutableValueDouble | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValueDouble MutableValue implementation of type . Inheritance System.Object MutableValue MutableValueDouble Implements IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueDouble : MutableValue, IComparable Properties | Improve this Doc View Source Value Declaration public double Value { get; set; } Property Value Type Description System.Double Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueInt32.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueInt32.html",
    "title": "Class MutableValueInt32 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValueInt32 MutableValue implementation of type . NOTE: This was MutableValueInt in Lucene Inheritance System.Object MutableValue MutableValueInt32 Implements IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueInt32 : MutableValue, IComparable Properties | Improve this Doc View Source Value Declaration public int Value { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueInt64.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueInt64.html",
    "title": "Class MutableValueInt64 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValueInt64 MutableValue implementation of type . NOTE: This was MutableValueLong in Lucene Inheritance System.Object MutableValue MutableValueInt64 MutableValueDate Implements IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueInt64 : MutableValue, IComparable Properties | Improve this Doc View Source Value Declaration public long Value { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueSingle.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueSingle.html",
    "title": "Class MutableValueSingle | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValueSingle MutableValue implementation of type . NOTE: This was MutableValueFloat in Lucene Inheritance System.Object MutableValue MutableValueSingle Implements IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueSingle : MutableValue, IComparable Properties | Improve this Doc View Source Value Declaration public float Value { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueStr.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueStr.html",
    "title": "Class MutableValueStr | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValueStr MutableValue implementation of type . Inheritance System.Object MutableValue MutableValueStr Implements IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueStr : MutableValue, IComparable Constructors | Improve this Doc View Source MutableValueStr() Declaration public MutableValueStr() Properties | Improve this Doc View Source Value Declaration public BytesRef Value { get; set; } Property Value Type Description BytesRef Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements IComparable"
  },
  "api/Lucene.Net/Lucene.Net.Util.NamedServiceFactory-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.NamedServiceFactory-1.html",
    "title": "Class NamedServiceFactory<TService> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NamedServiceFactory<TService> LUCENENET specific abstract class containing common fuctionality for named service factories. Inheritance System.Object NamedServiceFactory<TService> DefaultCodecFactory DefaultDocValuesFormatFactory DefaultPostingsFormatFactory Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class NamedServiceFactory<TService> : object Type Parameters Name Description TService The type of service this factory applies to. Fields | Improve this Doc View Source m_initializationLock Declaration protected object m_initializationLock Field Value Type Description System.Object Properties | Improve this Doc View Source CodecsAssembly The Lucene.Net.Codecs assembly or null if the assembly is not referenced in the host project. Declaration protected Assembly CodecsAssembly { get; } Property Value Type Description Assembly | Improve this Doc View Source IsFullyTrusted Gets a value that indicates whether the current application domain executes with full trust. Declaration protected bool IsFullyTrusted { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source EnsureInitialized() Ensures the Initialize() method has been called since the last application start. This method is thread-safe. Declaration protected void EnsureInitialized() | Improve this Doc View Source GetCanonicalName(Type) Gets the type name without the suffix of the abstract base class it implements. If the class is generic, it will add the word \"Generic\" to the suffix in place of \"`\" to ensure the name is ASCII-only. Declaration protected static string GetCanonicalName(Type type) Parameters Type Name Description Type type The to get the name for. Returns Type Description System.String The canonical name of the service. | Improve this Doc View Source GetServiceName(Type) Get the service name for the class (either by convention or by attribute). Declaration public static string GetServiceName(Type type) Parameters Type Name Description Type type A service to get the name for. Returns Type Description System.String The canonical name of the service or the name provided in the corresponding name attribute, if supplied. | Improve this Doc View Source Initialize() Initializes the dependencies of this factory (such as using Reflection to populate the type cache). Declaration protected abstract void Initialize() | Improve this Doc View Source IsServiceType(Type) Determines whether the given type is corresponding service for this class, based on its generic closing type TService . Declaration protected virtual bool IsServiceType(Type type) Parameters Type Name Description Type type The of service to analyze. Returns Type Description System.Boolean true if the service subclasses TService , is public, and is not abstract; otherwise false ."
  },
  "api/Lucene.Net/Lucene.Net.Util.NumericUtils.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.NumericUtils.html",
    "title": "Class NumericUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericUtils This is a helper class to generate prefix-encoded representations for numerical values and supplies converters to represent float/double values as sortable integers/longs. To quickly execute range queries in Apache Lucene, a range is divided recursively into multiple intervals for searching: The center of the range is searched only with the lowest possible precision in the trie, while the boundaries are matched more exactly. this reduces the number of terms dramatically. This class generates terms to achieve this: First the numerical integer values need to be converted to bytes. For that integer values (32 bit or 64 bit) are made unsigned and the bits are converted to ASCII chars with each 7 bit. The resulting byte[] is sortable like the original integer value (even using UTF-8 sort order). Each value is also prefixed (in the first char) by the shift value (number of bits removed) used during encoding. To also index floating point numbers, this class supplies two methods to convert them to integer values by changing their bit layout: DoubleToSortableInt64(Double) , SingleToSortableInt32(Single) . You will have no precision loss by converting floating point numbers to integers and back (only that the integer form is not usable). Other data types like dates can easily converted to s or s (e.g. date to long: ). For easy usage, the trie algorithm is implemented for indexing inside NumericTokenStream that can index , , , and . For querying, NumericRangeQuery and NumericRangeFilter implement the query part for the same data types. This class can also be used, to generate lexicographically sortable (according to UTF8SortedAsUTF16Comparer ) representations of numeric data types for other usages (e.g. sorting). @lucene.internal @since 2.9, API changed non backwards-compliant in 4.0 Inheritance System.Object NumericUtils Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class NumericUtils : object Fields | Improve this Doc View Source BUF_SIZE_INT32 The maximum term length (used for byte[] buffer size) for encoding values. NOTE: This was BUF_SIZE_INT in Lucene Declaration public const int BUF_SIZE_INT32 = null Field Value Type Description System.Int32 See Also Int32ToPrefixCodedBytes(Int32, Int32, BytesRef) | Improve this Doc View Source BUF_SIZE_INT64 The maximum term length (used for byte[] buffer size) for encoding values. NOTE: This was BUF_SIZE_LONG in Lucene Declaration public const int BUF_SIZE_INT64 = null Field Value Type Description System.Int32 See Also Int64ToPrefixCodedBytes(Int64, Int32, BytesRef) | Improve this Doc View Source PRECISION_STEP_DEFAULT The default precision step used by Int32Field , SingleField , Int64Field , DoubleField , NumericTokenStream , NumericRangeQuery , and NumericRangeFilter . Declaration public const int PRECISION_STEP_DEFAULT = null Field Value Type Description System.Int32 | Improve this Doc View Source SHIFT_START_INT32 Integers are stored at lower precision by shifting off lower bits. The shift count is stored as SHIFT_START_INT32+shift in the first byte NOTE: This was SHIFT_START_INT in Lucene Declaration public const byte SHIFT_START_INT32 = null Field Value Type Description System.Byte | Improve this Doc View Source SHIFT_START_INT64 Longs are stored at lower precision by shifting off lower bits. The shift count is stored as SHIFT_START_INT64+shift in the first byte NOTE: This was SHIFT_START_LONG in Lucene Declaration public const char SHIFT_START_INT64 = null Field Value Type Description System.Char Methods | Improve this Doc View Source DoubleToSortableInt64(Double) Converts a value to a sortable signed . The value is converted by getting their IEEE 754 floating-point \"double format\" bit layout and then some bits are swapped, to be able to compare the result as . By this the precision is not reduced, but the value can easily used as a . The sort order (including ) is defined by ; NaN is greater than positive infinity. NOTE: This was doubleToSortableLong() in Lucene Declaration public static long DoubleToSortableInt64(double val) Parameters Type Name Description System.Double val Returns Type Description System.Int64 See Also SortableInt64ToDouble(Int64) | Improve this Doc View Source FilterPrefixCodedInt32s(TermsEnum) Filters the given TermsEnum by accepting only prefix coded 32 bit terms with a shift value of 0 . NOTE: This was filterPrefixCodedInts() in Lucene Declaration public static TermsEnum FilterPrefixCodedInt32s(TermsEnum termsEnum) Parameters Type Name Description TermsEnum termsEnum The terms enum to filter Returns Type Description TermsEnum A filtered TermsEnum that only returns prefix coded 32 bit terms with a shift value of 0 . | Improve this Doc View Source FilterPrefixCodedInt64s(TermsEnum) Filters the given TermsEnum by accepting only prefix coded 64 bit terms with a shift value of 0 . NOTE: This was filterPrefixCodedLongs() in Lucene Declaration public static TermsEnum FilterPrefixCodedInt64s(TermsEnum termsEnum) Parameters Type Name Description TermsEnum termsEnum The terms enum to filter Returns Type Description TermsEnum A filtered TermsEnum that only returns prefix coded 64 bit terms with a shift value of 0 . | Improve this Doc View Source GetPrefixCodedInt32Shift(BytesRef) Returns the shift value from a prefix encoded . NOTE: This was getPrefixCodedIntShift() in Lucene Declaration public static int GetPrefixCodedInt32Shift(BytesRef val) Parameters Type Name Description BytesRef val Returns Type Description System.Int32 | Improve this Doc View Source GetPrefixCodedInt64Shift(BytesRef) Returns the shift value from a prefix encoded . NOTE: This was getPrefixCodedLongShift() in Lucene Declaration public static int GetPrefixCodedInt64Shift(BytesRef val) Parameters Type Name Description BytesRef val Returns Type Description System.Int32 | Improve this Doc View Source Int32ToPrefixCoded(Int32, Int32, BytesRef) Returns prefix coded bits after reducing the precision by shift bits. This is method is used by NumericTokenStream . After encoding, bytes.Offset will always be 0. NOTE: This was intToPrefixCoded() in Lucene Declaration public static void Int32ToPrefixCoded(int val, int shift, BytesRef bytes) Parameters Type Name Description System.Int32 val The numeric value System.Int32 shift How many bits to strip from the right BytesRef bytes Will contain the encoded value | Improve this Doc View Source Int32ToPrefixCodedBytes(Int32, Int32, BytesRef) Returns prefix coded bits after reducing the precision by shift bits. This is method is used by NumericTokenStream . After encoding, bytes.Offset will always be 0. NOTE: This was intToPrefixCodedBytes() in Lucene Declaration public static void Int32ToPrefixCodedBytes(int val, int shift, BytesRef bytes) Parameters Type Name Description System.Int32 val The numeric value System.Int32 shift How many bits to strip from the right BytesRef bytes Will contain the encoded value | Improve this Doc View Source Int64ToPrefixCoded(Int64, Int32, BytesRef) Returns prefix coded bits after reducing the precision by shift bits. This is method is used by NumericTokenStream . After encoding, bytes.Offset will always be 0. NOTE: This was longToPrefixCoded() in Lucene Declaration public static void Int64ToPrefixCoded(long val, int shift, BytesRef bytes) Parameters Type Name Description System.Int64 val The numeric value System.Int32 shift How many bits to strip from the right BytesRef bytes Will contain the encoded value | Improve this Doc View Source Int64ToPrefixCodedBytes(Int64, Int32, BytesRef) Returns prefix coded bits after reducing the precision by shift bits. This is method is used by NumericTokenStream . After encoding, bytes.Offset will always be 0. NOTE: This was longToPrefixCodedBytes() in Lucene Declaration public static void Int64ToPrefixCodedBytes(long val, int shift, BytesRef bytes) Parameters Type Name Description System.Int64 val The numeric value System.Int32 shift How many bits to strip from the right BytesRef bytes Will contain the encoded value | Improve this Doc View Source PrefixCodedToInt32(BytesRef) Returns an from prefixCoded bytes. Rightmost bits will be zero for lower precision codes. This method can be used to decode a term's value. NOTE: This was prefixCodedToInt() in Lucene Declaration public static int PrefixCodedToInt32(BytesRef val) Parameters Type Name Description BytesRef val Returns Type Description System.Int32 See Also Int32ToPrefixCodedBytes(Int32, Int32, BytesRef) | Improve this Doc View Source PrefixCodedToInt64(BytesRef) Returns a from prefixCoded bytes. Rightmost bits will be zero for lower precision codes. This method can be used to decode a term's value. NOTE: This was prefixCodedToLong() in Lucene Declaration public static long PrefixCodedToInt64(BytesRef val) Parameters Type Name Description BytesRef val Returns Type Description System.Int64 See Also Int64ToPrefixCodedBytes(Int64, Int32, BytesRef) | Improve this Doc View Source SingleToSortableInt32(Single) Converts a value to a sortable signed . The value is converted by getting their IEEE 754 floating-point \"float format\" bit layout and then some bits are swapped, to be able to compare the result as . By this the precision is not reduced, but the value can easily used as an . The sort order (including ) is defined by ; NaN is greater than positive infinity. NOTE: This was floatToSortableInt() in Lucene Declaration public static int SingleToSortableInt32(float val) Parameters Type Name Description System.Single val Returns Type Description System.Int32 See Also SortableInt32ToSingle(Int32) | Improve this Doc View Source SortableInt32ToSingle(Int32) Converts a sortable back to a . NOTE: This was sortableIntToFloat() in Lucene Declaration public static float SortableInt32ToSingle(int val) Parameters Type Name Description System.Int32 val Returns Type Description System.Single See Also SingleToSortableInt32(Single) | Improve this Doc View Source SortableInt64ToDouble(Int64) Converts a sortable back to a . NOTE: This was sortableLongToDouble() in Lucene Declaration public static double SortableInt64ToDouble(long val) Parameters Type Name Description System.Int64 val Returns Type Description System.Double See Also DoubleToSortableInt64(Double) | Improve this Doc View Source SplitInt32Range(NumericUtils.Int32RangeBuilder, Int32, Int32, Int32) Splits an range recursively. You may implement a builder that adds clauses to a BooleanQuery for each call to its AddRange(BytesRef, BytesRef) method. This method is used by NumericRangeQuery . NOTE: This was splitIntRange() in Lucene Declaration public static void SplitInt32Range(NumericUtils.Int32RangeBuilder builder, int precisionStep, int minBound, int maxBound) Parameters Type Name Description NumericUtils.Int32RangeBuilder builder System.Int32 precisionStep System.Int32 minBound System.Int32 maxBound | Improve this Doc View Source SplitInt64Range(NumericUtils.Int64RangeBuilder, Int32, Int64, Int64) Splits a long range recursively. You may implement a builder that adds clauses to a BooleanQuery for each call to its AddRange(BytesRef, BytesRef) method. This method is used by NumericRangeQuery . NOTE: This was splitLongRange() in Lucene Declaration public static void SplitInt64Range(NumericUtils.Int64RangeBuilder builder, int precisionStep, long minBound, long maxBound) Parameters Type Name Description NumericUtils.Int64RangeBuilder builder System.Int32 precisionStep System.Int64 minBound System.Int64 maxBound"
  },
  "api/Lucene.Net/Lucene.Net.Util.NumericUtils.Int32RangeBuilder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.NumericUtils.Int32RangeBuilder.html",
    "title": "Class NumericUtils.Int32RangeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericUtils.Int32RangeBuilder Callback for SplitInt32Range(NumericUtils.Int32RangeBuilder, Int32, Int32, Int32) . You need to override only one of the methods. NOTE: This was IntRangeBuilder in Lucene @lucene.internal @since 2.9, API changed non backwards-compliant in 4.0 Inheritance System.Object NumericUtils.Int32RangeBuilder Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Int32RangeBuilder : object Methods | Improve this Doc View Source AddRange(BytesRef, BytesRef) Override this method, if you like to receive the already prefix encoded range bounds. You can directly build classical range (inclusive) queries from them. Declaration public virtual void AddRange(BytesRef minPrefixCoded, BytesRef maxPrefixCoded) Parameters Type Name Description BytesRef minPrefixCoded BytesRef maxPrefixCoded | Improve this Doc View Source AddRange(Int32, Int32, Int32) Override this method, if you like to receive the raw int range bounds. You can use this for e.g. debugging purposes (print out range bounds). Declaration public virtual void AddRange(int min, int max, int shift) Parameters Type Name Description System.Int32 min System.Int32 max System.Int32 shift"
  },
  "api/Lucene.Net/Lucene.Net.Util.NumericUtils.Int64RangeBuilder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.NumericUtils.Int64RangeBuilder.html",
    "title": "Class NumericUtils.Int64RangeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericUtils.Int64RangeBuilder Callback for SplitInt64Range(NumericUtils.Int64RangeBuilder, Int32, Int64, Int64) . You need to override only one of the methods. NOTE: This was LongRangeBuilder in Lucene @lucene.internal @since 2.9, API changed non backwards-compliant in 4.0 Inheritance System.Object NumericUtils.Int64RangeBuilder Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Int64RangeBuilder : object Methods | Improve this Doc View Source AddRange(BytesRef, BytesRef) Override this method, if you like to receive the already prefix encoded range bounds. You can directly build classical (inclusive) range queries from them. Declaration public virtual void AddRange(BytesRef minPrefixCoded, BytesRef maxPrefixCoded) Parameters Type Name Description BytesRef minPrefixCoded BytesRef maxPrefixCoded | Improve this Doc View Source AddRange(Int64, Int64, Int32) Override this method, if you like to receive the raw long range bounds. You can use this for e.g. debugging purposes (print out range bounds). Declaration public virtual void AddRange(long min, long max, int shift) Parameters Type Name Description System.Int64 min System.Int64 max System.Int32 shift"
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.BufferSize.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.BufferSize.html",
    "title": "Class OfflineSorter.BufferSize | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OfflineSorter.BufferSize A bit more descriptive unit for constructors. Inheritance System.Object OfflineSorter.BufferSize Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class BufferSize : object Methods | Improve this Doc View Source Automatic() Approximately half of the currently available free heap, but no less than ABSOLUTE_MIN_SORT_BUFFER_SIZE . However if current heap allocation is insufficient or if there is a large portion of unallocated heap-space available for sorting consult with max allowed heap size. Declaration public static OfflineSorter.BufferSize Automatic() Returns Type Description OfflineSorter.BufferSize | Improve this Doc View Source Megabytes(Int64) Creates a OfflineSorter.BufferSize in MB. The given values must be > 0 and < 2048. Declaration public static OfflineSorter.BufferSize Megabytes(long mb) Parameters Type Name Description System.Int64 mb Returns Type Description OfflineSorter.BufferSize See Also Automatic() Megabytes(Int64)"
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.ByteSequencesReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.ByteSequencesReader.html",
    "title": "Class OfflineSorter.ByteSequencesReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OfflineSorter.ByteSequencesReader Utility class to read length-prefixed byte[] entries from an input. Complementary to OfflineSorter.ByteSequencesWriter . Inheritance System.Object OfflineSorter.ByteSequencesReader Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class ByteSequencesReader : IDisposable Constructors | Improve this Doc View Source ByteSequencesReader(FileInfo) Constructs a OfflineSorter.ByteSequencesReader from the provided . Declaration public ByteSequencesReader(FileInfo file) Parameters Type Name Description FileInfo file | Improve this Doc View Source ByteSequencesReader(DataInput) Constructs a OfflineSorter.ByteSequencesReader from the provided DataInput . Declaration public ByteSequencesReader(DataInput inputStream) Parameters Type Name Description DataInput inputStream Methods | Improve this Doc View Source Dispose() Disposes the provided DataInput if it is . Declaration public void Dispose() | Improve this Doc View Source Read() Reads the next entry and returns it if successful. Declaration public virtual byte[] Read() Returns Type Description System.Byte [] Returns null if EOF occurred before the next entry could be read. See Also Read(BytesRef) | Improve this Doc View Source Read(BytesRef) Reads the next entry into the provided BytesRef . The internal storage is resized if needed. Declaration public virtual bool Read(BytesRef ref) Parameters Type Name Description BytesRef ref Returns Type Description System.Boolean Returns false if EOF occurred when trying to read the header of the next sequence. Returns true otherwise."
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.ByteSequencesWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.ByteSequencesWriter.html",
    "title": "Class OfflineSorter.ByteSequencesWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OfflineSorter.ByteSequencesWriter Utility class to emit length-prefixed byte[] entries to an output stream for sorting. Complementary to OfflineSorter.ByteSequencesReader . Inheritance System.Object OfflineSorter.ByteSequencesWriter Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class ByteSequencesWriter : IDisposable Constructors | Improve this Doc View Source ByteSequencesWriter(FileInfo) Constructs a OfflineSorter.ByteSequencesWriter to the provided . Declaration public ByteSequencesWriter(FileInfo file) Parameters Type Name Description FileInfo file | Improve this Doc View Source ByteSequencesWriter(DataOutput) Constructs a OfflineSorter.ByteSequencesWriter to the provided DataOutput . Declaration public ByteSequencesWriter(DataOutput os) Parameters Type Name Description DataOutput os Methods | Improve this Doc View Source Dispose() Disposes the provided DataOutput if it is . Declaration public void Dispose() | Improve this Doc View Source Write(BytesRef) Writes a BytesRef . Declaration public virtual void Write(BytesRef ref) Parameters Type Name Description BytesRef ref See Also Write(Byte[], Int32, Int32) | Improve this Doc View Source Write(Byte[]) Writes a byte array. Declaration public virtual void Write(byte[] bytes) Parameters Type Name Description System.Byte [] bytes See Also Write(Byte[], Int32, Int32) | Improve this Doc View Source Write(Byte[], Int32, Int32) Writes a byte array. The length is written as a , followed by the bytes. Declaration public virtual void Write(byte[] bytes, int off, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 off System.Int32 len"
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.html",
    "title": "Class OfflineSorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OfflineSorter On-disk sorting of byte arrays. Each byte array (entry) is a composed of the following fields: (two bytes) length of the following byte array, exactly the above count of bytes for the sequence to be sorted. Inheritance System.Object OfflineSorter Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class OfflineSorter : object Constructors | Improve this Doc View Source OfflineSorter() Defaults constructor. Declaration public OfflineSorter() See Also DefaultTempDir() Automatic() | Improve this Doc View Source OfflineSorter(IComparer<BytesRef>) Defaults constructor with a custom comparer. Declaration public OfflineSorter(IComparer<BytesRef> comparer) Parameters Type Name Description IComparer < BytesRef > comparer See Also DefaultTempDir() Automatic() | Improve this Doc View Source OfflineSorter(IComparer<BytesRef>, OfflineSorter.BufferSize, DirectoryInfo, Int32) All-details constructor. Declaration public OfflineSorter(IComparer<BytesRef> comparer, OfflineSorter.BufferSize ramBufferSize, DirectoryInfo tempDirectory, int maxTempfiles) Parameters Type Name Description IComparer < BytesRef > comparer OfflineSorter.BufferSize ramBufferSize DirectoryInfo tempDirectory System.Int32 maxTempfiles Fields | Improve this Doc View Source ABSOLUTE_MIN_SORT_BUFFER_SIZE Absolute minimum required buffer size for sorting. Declaration public static readonly long ABSOLUTE_MIN_SORT_BUFFER_SIZE Field Value Type Description System.Int64 | Improve this Doc View Source DEFAULT_COMPARER Default comparer: sorts in binary (codepoint) order Declaration public static readonly IComparer<BytesRef> DEFAULT_COMPARER Field Value Type Description IComparer < BytesRef > | Improve this Doc View Source GB Convenience constant for gigabytes Declaration public static readonly long GB Field Value Type Description System.Int64 | Improve this Doc View Source MAX_TEMPFILES Maximum number of temporary files before doing an intermediate merge. Declaration public static readonly int MAX_TEMPFILES Field Value Type Description System.Int32 | Improve this Doc View Source MB Convenience constant for megabytes Declaration public static readonly long MB Field Value Type Description System.Int64 | Improve this Doc View Source MIN_BUFFER_SIZE_MB Minimum recommended buffer size for sorting. Declaration public static readonly long MIN_BUFFER_SIZE_MB Field Value Type Description System.Int64 Properties | Improve this Doc View Source Comparer Returns the comparer in use to sort entries Declaration public IComparer<BytesRef> Comparer { get; } Property Value Type Description IComparer < BytesRef > Methods | Improve this Doc View Source DefaultTempDir() Returns the default temporary directory. By default, the System's temp folder. If not accessible or not available, an is thrown. Declaration public static DirectoryInfo DefaultTempDir() Returns Type Description DirectoryInfo | Improve this Doc View Source Sort(FileInfo, FileInfo) Sort input to output, explicit hint for the buffer size. The amount of allocated memory may deviate from the hint (may be smaller or larger). Declaration public OfflineSorter.SortInfo Sort(FileInfo input, FileInfo output) Parameters Type Name Description FileInfo input FileInfo output Returns Type Description OfflineSorter.SortInfo"
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.SortInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.SortInfo.html",
    "title": "Class OfflineSorter.SortInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OfflineSorter.SortInfo Sort info (debugging mostly). Inheritance System.Object OfflineSorter.SortInfo Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class SortInfo : object Constructors | Improve this Doc View Source SortInfo(OfflineSorter) Create a new OfflineSorter.SortInfo (with empty statistics) for debugging. Declaration public SortInfo(OfflineSorter outerInstance) Parameters Type Name Description OfflineSorter outerInstance Properties | Improve this Doc View Source BufferSize Read buffer size (in bytes) Declaration public long BufferSize { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Lines Number of lines of data read Declaration public int Lines { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeRounds Number of partition merges Declaration public int MergeRounds { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeTime Time spent merging sorted partitions (in milliseconds) Declaration public long MergeTime { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source ReadTime Time spent in i/o read (in milliseconds) Declaration public long ReadTime { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source SortTime Time spent sorting data (in milliseconds) Declaration public long SortTime { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TempMergeFiles Number of temporary files created when merging partitions Declaration public int TempMergeFiles { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalTime Total time spent (in milliseconds) Declaration public long TotalTime { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source ToString() Returns a string representation of this object. Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.OpenBitSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OpenBitSet.html",
    "title": "Class OpenBitSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenBitSet An \"open\" BitSet implementation that allows direct access to the array of words storing the bits. NOTE: This can be used in .NET any place where a java.util.BitSet is used in Java. Unlike java.util.BitSet , the fact that bits are packed into an array of longs is part of the interface. This allows efficient implementation of other algorithms by someone other than the author. It also allows one to efficiently implement alternate serialization or interchange formats. OpenBitSet is faster than java.util.BitSet in most operations and much faster at calculating cardinality of sets and results of set operations. It can also handle sets of larger cardinality (up to 64 * 2**32-1) The goals of OpenBitSet are the fastest implementation possible, and maximum code reuse. Extra safety and encapsulation may always be built on top, but if that's built in, the cost can never be removed (and hence people re-implement their own version in order to get better performance). Performance Results Test system: Pentium 4, Sun Java 1.5_06 -server -Xbatch -Xmx64M BitSet size = 1,000,000 Results are java.util.BitSet time divided by OpenBitSet time. cardinalityIntersectionCountUnionNextSetBitGetGetIterator 50% full 3.363.961.441.461.991.58 1% full 3.313.90 1.04 0.99 Test system: AMD Opteron, 64 bit linux, Sun Java 1.5_06 -server -Xbatch -Xmx64M BitSet size = 1,000,000 Results are java.util.BitSet time divided by OpenBitSet time. cardinalityIntersectionCountUnionNextSetBitGetGetIterator 50% full 2.503.501.001.031.121.25 1% full 2.513.49 1.00 1.02 Inheritance System.Object DocIdSet OpenBitSet OpenBitSetDISI Implements IBits Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class OpenBitSet : DocIdSet, IBits Constructors | Improve this Doc View Source OpenBitSet() Constructor: allocates enough space for 64 bits. Declaration public OpenBitSet() | Improve this Doc View Source OpenBitSet(Int64) Constructs an OpenBitSet large enough to hold numBits . Declaration public OpenBitSet(long numBits) Parameters Type Name Description System.Int64 numBits | Improve this Doc View Source OpenBitSet(Int64[], Int32) Constructs an OpenBitSet from an existing long[] . The first 64 bits are in long[0], with bit index 0 at the least significant bit, and bit index 63 at the most significant. Given a bit index, the word containing it is long[index/64], and it is at bit number index%64 within that word. numWords are the number of elements in the array that contain set bits (non-zero longs). numWords should be <= bits.Length, and any existing words in the array at position >= numWords should be zero. Declaration public OpenBitSet(long[] bits, int numWords) Parameters Type Name Description System.Int64 [] bits System.Int32 numWords Fields | Improve this Doc View Source m_bits Declaration protected long[] m_bits Field Value Type Description System.Int64 [] | Improve this Doc View Source m_wlen Declaration protected int m_wlen Field Value Type Description System.Int32 Properties | Improve this Doc View Source Bits Declaration public override IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source Capacity Returns the current capacity in bits (1 greater than the index of the last bit). Declaration public virtual long Capacity { get; } Property Value Type Description System.Int64 | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable | Improve this Doc View Source IsEmpty Returns true if there are no set bits Declaration public virtual bool IsEmpty { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Length Returns the current capacity of this set. This is not equal to Cardinality() . NOTE: This is equivalent to size() or length() in Lucene. Declaration public virtual int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumWords Expert: gets the number of s in the array that are in use. Declaration public virtual int NumWords { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source And(OpenBitSet) see Intersect(OpenBitSet) Declaration public virtual void And(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source AndNot(OpenBitSet) see AndNot(OpenBitSet) Declaration public virtual void AndNot(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source AndNotCount(OpenBitSet, OpenBitSet) Returns the popcount or cardinality of \"a and not b\" or \"intersection(a, not(b))\". Neither set is modified. Declaration public static long AndNotCount(OpenBitSet a, OpenBitSet b) Parameters Type Name Description OpenBitSet a OpenBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Bits2words(Int64) Returns the number of 64 bit words it would take to hold numBits . Declaration public static int Bits2words(long numBits) Parameters Type Name Description System.Int64 numBits Returns Type Description System.Int32 | Improve this Doc View Source Cardinality() Get the number of set bits. Declaration public virtual long Cardinality() Returns Type Description System.Int64 The number of set bits. | Improve this Doc View Source Clear(Int32, Int32) Clears a range of bits. Clearing past the end does not change the size of the set. Declaration public virtual void Clear(int startIndex, int endIndex) Parameters Type Name Description System.Int32 startIndex Lower index System.Int32 endIndex One-past the last bit to clear | Improve this Doc View Source Clear(Int64) Clears a bit, allowing access beyond the current set size without changing the size. Declaration public virtual void Clear(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Clear(Int64, Int64) Clears a range of bits. Clearing past the end does not change the size of the set. Declaration public virtual void Clear(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to clear | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object | Improve this Doc View Source EnsureCapacity(Int64) Ensure that the long[] is big enough to hold numBits, expanding it if necessary. Declaration public virtual void EnsureCapacity(long numBits) Parameters Type Name Description System.Int64 numBits | Improve this Doc View Source EnsureCapacityWords(Int32) Expand the long[] with the size given as a number of words (64 bit longs). Declaration public virtual void EnsureCapacityWords(int numWords) Parameters Type Name Description System.Int32 numWords | Improve this Doc View Source Equals(Object) Returns true if both sets have the same bits set. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source ExpandingWordNum(Int64) Declaration protected virtual int ExpandingWordNum(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int32 | Improve this Doc View Source FastClear(Int32) Clears a bit. The index should be less than the Length . Declaration public virtual void FastClear(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source FastClear(Int64) Clears a bit. The index should be less than the Length . Declaration public virtual void FastClear(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source FastFlip(Int32) Flips a bit. The index should be less than the Length . Declaration public virtual void FastFlip(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source FastFlip(Int64) Flips a bit. The index should be less than the Length . Declaration public virtual void FastFlip(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source FastGet(Int32) Returns true or false for the specified bit index . The index should be less than the Length . Declaration public virtual bool FastGet(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source FastGet(Int64) Returns true or false for the specified bit index . The index should be less than the Length . Declaration public virtual bool FastGet(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source FastSet(Int32) Sets the bit at the specified index . The index should be less than the Length . Declaration public virtual void FastSet(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source FastSet(Int64) Sets the bit at the specified index . The index should be less than the Length . Declaration public virtual void FastSet(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Flip(Int64) Flips a bit, expanding the set size if necessary. Declaration public virtual void Flip(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Flip(Int64, Int64) Flips a range of bits, expanding the set size if necessary. Declaration public virtual void Flip(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to flip | Improve this Doc View Source FlipAndGet(Int32) Flips a bit and returns the resulting bit value. The index should be less than the Length . Declaration public virtual bool FlipAndGet(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source FlipAndGet(Int64) Flips a bit and returns the resulting bit value. The index should be less than the Length . Declaration public virtual bool FlipAndGet(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source Get(Int32) Returns true or false for the specified bit index . Declaration public virtual bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source Get(Int64) Returns true or false for the specified bit index . Declaration public virtual bool Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndSet(Int32) Sets a bit and returns the previous value. The index should be less than the Length . Declaration public virtual bool GetAndSet(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndSet(Int64) Sets a bit and returns the previous value. The index should be less than the Length . Declaration public virtual bool GetAndSet(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetBit(Int32) Returns 1 if the bit is set, 0 if not. The index should be less than the Length . Declaration public virtual int GetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source GetBits() Expert: returns the long[] storing the bits. Declaration public virtual long[] GetBits() Returns Type Description System.Int64 [] | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source Intersect(OpenBitSet) this = this AND other Declaration public virtual void Intersect(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source IntersectionCount(OpenBitSet, OpenBitSet) Returns the popcount or cardinality of the intersection of the two sets. Neither set is modified. Declaration public static long IntersectionCount(OpenBitSet a, OpenBitSet b) Parameters Type Name Description OpenBitSet a OpenBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Intersects(OpenBitSet) returns true if the sets have any elements in common. Declaration public virtual bool Intersects(OpenBitSet other) Parameters Type Name Description OpenBitSet other Returns Type Description System.Boolean | Improve this Doc View Source NextSetBit(Int32) Returns the index of the first set bit starting at the index specified. -1 is returned if there are no more set bits. Declaration public virtual int NextSetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source NextSetBit(Int64) Returns the index of the first set bit starting at the index specified. -1 is returned if there are no more set bits. Declaration public virtual long NextSetBit(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 | Improve this Doc View Source Or(OpenBitSet) see Union(OpenBitSet) Declaration public virtual void Or(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source PrevSetBit(Int32) Returns the index of the first set bit starting downwards at the index specified. -1 is returned if there are no more set bits. Declaration public virtual int PrevSetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source PrevSetBit(Int64) Returns the index of the first set bit starting downwards at the index specified. -1 is returned if there are no more set bits. Declaration public virtual long PrevSetBit(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 | Improve this Doc View Source Remove(OpenBitSet) Remove all elements set in other. this = this AND_NOT other. Declaration public virtual void Remove(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source Set(Int64) Sets a bit, expanding the set size if necessary. Declaration public virtual void Set(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Set(Int64, Int64) Sets a range of bits, expanding the set size if necessary. Declaration public virtual void Set(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to set | Improve this Doc View Source TrimTrailingZeros() Lowers numWords, the number of words in use, by checking for trailing zero words. Declaration public virtual void TrimTrailingZeros() | Improve this Doc View Source Union(OpenBitSet) this = this OR other Declaration public virtual void Union(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source UnionCount(OpenBitSet, OpenBitSet) Returns the popcount or cardinality of the union of the two sets. Neither set is modified. Declaration public static long UnionCount(OpenBitSet a, OpenBitSet b) Parameters Type Name Description OpenBitSet a OpenBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Xor(OpenBitSet) this = this XOR other Declaration public virtual void Xor(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source XorCount(OpenBitSet, OpenBitSet) Returns the popcount or cardinality of the exclusive-or of the two sets. Neither set is modified. Declaration public static long XorCount(OpenBitSet a, OpenBitSet b) Parameters Type Name Description OpenBitSet a OpenBitSet b Returns Type Description System.Int64 Implements IBits"
  },
  "api/Lucene.Net/Lucene.Net.Util.OpenBitSetDISI.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OpenBitSetDISI.html",
    "title": "Class OpenBitSetDISI | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenBitSetDISI OpenBitSet with added methods to bulk-update the bits from a DocIdSetIterator . (DISI stands for DocIdSetIterator ). Inheritance System.Object DocIdSet OpenBitSet OpenBitSetDISI Implements IBits Inherited Members OpenBitSet.m_bits OpenBitSet.m_wlen OpenBitSet.GetIterator() OpenBitSet.Bits OpenBitSet.IsCacheable OpenBitSet.Capacity OpenBitSet.Length OpenBitSet.IsEmpty OpenBitSet.GetBits() OpenBitSet.NumWords OpenBitSet.Get(Int32) OpenBitSet.FastGet(Int32) OpenBitSet.Get(Int64) OpenBitSet.FastGet(Int64) OpenBitSet.GetBit(Int32) OpenBitSet.Set(Int64) OpenBitSet.FastSet(Int32) OpenBitSet.FastSet(Int64) OpenBitSet.Set(Int64, Int64) OpenBitSet.ExpandingWordNum(Int64) OpenBitSet.FastClear(Int32) OpenBitSet.FastClear(Int64) OpenBitSet.Clear(Int64) OpenBitSet.Clear(Int32, Int32) OpenBitSet.Clear(Int64, Int64) OpenBitSet.GetAndSet(Int32) OpenBitSet.GetAndSet(Int64) OpenBitSet.FastFlip(Int32) OpenBitSet.FastFlip(Int64) OpenBitSet.Flip(Int64) OpenBitSet.FlipAndGet(Int32) OpenBitSet.FlipAndGet(Int64) OpenBitSet.Flip(Int64, Int64) OpenBitSet.Cardinality() OpenBitSet.IntersectionCount(OpenBitSet, OpenBitSet) OpenBitSet.UnionCount(OpenBitSet, OpenBitSet) OpenBitSet.AndNotCount(OpenBitSet, OpenBitSet) OpenBitSet.XorCount(OpenBitSet, OpenBitSet) OpenBitSet.NextSetBit(Int32) OpenBitSet.NextSetBit(Int64) OpenBitSet.PrevSetBit(Int32) OpenBitSet.PrevSetBit(Int64) OpenBitSet.Clone() OpenBitSet.Intersect(OpenBitSet) OpenBitSet.Union(OpenBitSet) OpenBitSet.Remove(OpenBitSet) OpenBitSet.Xor(OpenBitSet) OpenBitSet.And(OpenBitSet) OpenBitSet.Or(OpenBitSet) OpenBitSet.AndNot(OpenBitSet) OpenBitSet.Intersects(OpenBitSet) OpenBitSet.EnsureCapacityWords(Int32) OpenBitSet.EnsureCapacity(Int64) OpenBitSet.TrimTrailingZeros() OpenBitSet.Bits2words(Int64) OpenBitSet.Equals(Object) OpenBitSet.GetHashCode() DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class OpenBitSetDISI : OpenBitSet, IBits Constructors | Improve this Doc View Source OpenBitSetDISI(DocIdSetIterator, Int32) Construct an OpenBitSetDISI with its bits set from the doc ids of the given DocIdSetIterator . Also give a maximum size one larger than the largest doc id for which a bit may ever be set on this OpenBitSetDISI . Declaration public OpenBitSetDISI(DocIdSetIterator disi, int maxSize) Parameters Type Name Description DocIdSetIterator disi System.Int32 maxSize | Improve this Doc View Source OpenBitSetDISI(Int32) Construct an OpenBitSetDISI with no bits set, and a given maximum size one larger than the largest doc id for which a bit may ever be set on this OpenBitSetDISI . Declaration public OpenBitSetDISI(int maxSize) Parameters Type Name Description System.Int32 maxSize Methods | Improve this Doc View Source InPlaceAnd(DocIdSetIterator) Perform an inplace AND with the doc ids from a given DocIdSetIterator , leaving only the bits set for which the doc ids are in common. These doc ids should be smaller than the maximum size passed to the constructor. Declaration public virtual void InPlaceAnd(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi | Improve this Doc View Source InPlaceNot(DocIdSetIterator) Perform an inplace NOT with the doc ids from a given DocIdSetIterator , clearing all the bits for each such doc id. These doc ids should be smaller than the maximum size passed to the constructor. Declaration public virtual void InPlaceNot(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi | Improve this Doc View Source InPlaceOr(DocIdSetIterator) Perform an inplace OR with the doc ids from a given DocIdSetIterator , setting the bit for each such doc id. These doc ids should be smaller than the maximum size passed to the constructor. Declaration public virtual void InPlaceOr(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi | Improve this Doc View Source InPlaceXor(DocIdSetIterator) Perform an inplace XOR with the doc ids from a given DocIdSetIterator , flipping all the bits for each such doc id. These doc ids should be smaller than the maximum size passed to the constructor. Declaration public virtual void InPlaceXor(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi Implements IBits"
  },
  "api/Lucene.Net/Lucene.Net.Util.OpenBitSetIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OpenBitSetIterator.html",
    "title": "Class OpenBitSetIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenBitSetIterator An iterator to iterate over set bits in an OpenBitSet . this is faster than NextSetBit(Int64) for iterating over the complete set of bits, especially when the density of the bits set is high. Inheritance System.Object DocIdSetIterator OpenBitSetIterator Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class OpenBitSetIterator : DocIdSetIterator Constructors | Improve this Doc View Source OpenBitSetIterator(OpenBitSet) Declaration public OpenBitSetIterator(OpenBitSet obs) Parameters Type Name Description OpenBitSet obs | Improve this Doc View Source OpenBitSetIterator(Int64[], Int32) Declaration public OpenBitSetIterator(long[] bits, int numWords) Parameters Type Name Description System.Int64 [] bits System.Int32 numWords Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractAppendingInt64Buffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractAppendingInt64Buffer.html",
    "title": "Class AbstractAppendingInt64Buffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAppendingInt64Buffer Common functionality shared by AppendingDeltaPackedInt64Buffer and MonotonicAppendingInt64Buffer . NOTE: This was AbstractAppendingLongBuffer in Lucene Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer AppendingDeltaPackedInt64Buffer AppendingPackedInt64Buffer MonotonicAppendingInt64Buffer Inherited Members Int64Values.Get(Int32) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class AbstractAppendingInt64Buffer : Int64Values Properties | Improve this Doc View Source Count Get the number of values that have been added to the buffer. NOTE: This was size() in Lucene. Declaration public long Count { get; } Property Value Type Description System.Int64 | Improve this Doc View Source PageSize Declaration public int PageSize { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(Int64) Append a value to this buffer. Declaration public void Add(long l) Parameters Type Name Description System.Int64 l | Improve this Doc View Source Freeze() Pack all pending values in this buffer. Subsequent calls to Add(Int64) will fail. Declaration public virtual void Freeze() | Improve this Doc View Source Get(Int64) Declaration public override sealed long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 Overrides Int64Values.Get(Int64) | Improve this Doc View Source Get(Int64, Int64[], Int32, Int32) Bulk get: read at least one and at most len s starting from index into arr[off:off+len] and return the actual number of values that have been read. Declaration public int Get(long index, long[] arr, int off, int len) Parameters Type Name Description System.Int64 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 | Improve this Doc View Source GetIterator() Return an iterator over the values of this buffer. Declaration public virtual AbstractAppendingInt64Buffer.Iterator GetIterator() Returns Type Description AbstractAppendingInt64Buffer.Iterator | Improve this Doc View Source RamBytesUsed() Return the number of bytes used by this instance. Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractAppendingInt64Buffer.Iterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractAppendingInt64Buffer.Iterator.html",
    "title": "Class AbstractAppendingInt64Buffer.Iterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAppendingInt64Buffer.Iterator Inheritance System.Object AbstractAppendingInt64Buffer.Iterator Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class Iterator : object Properties | Improve this Doc View Source HasNext Whether or not there are remaining values. Declaration public bool HasNext { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Next() Return the next long in the buffer. Declaration public long Next() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractBlockPackedWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractBlockPackedWriter.html",
    "title": "Class AbstractBlockPackedWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractBlockPackedWriter Inheritance System.Object AbstractBlockPackedWriter BlockPackedWriter MonotonicBlockPackedWriter Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class AbstractBlockPackedWriter : object Constructors | Improve this Doc View Source AbstractBlockPackedWriter(DataOutput, Int32) Sole constructor. Declaration public AbstractBlockPackedWriter(DataOutput out, int blockSize) Parameters Type Name Description DataOutput out System.Int32 blockSize the number of values of a single block, must be a multiple of 64 . Fields | Improve this Doc View Source m_blocks Declaration protected byte[] m_blocks Field Value Type Description System.Byte [] | Improve this Doc View Source m_finished Declaration protected bool m_finished Field Value Type Description System.Boolean | Improve this Doc View Source m_off Declaration protected int m_off Field Value Type Description System.Int32 | Improve this Doc View Source m_ord Declaration protected long m_ord Field Value Type Description System.Int64 | Improve this Doc View Source m_out Declaration protected DataOutput m_out Field Value Type Description DataOutput | Improve this Doc View Source m_values Declaration protected readonly long[] m_values Field Value Type Description System.Int64 [] Properties | Improve this Doc View Source Ord Return the number of values which have been added. Declaration public virtual long Ord { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Add(Int64) Append a new long. Declaration public virtual void Add(long l) Parameters Type Name Description System.Int64 l | Improve this Doc View Source Finish() Flush all buffered data to disk. This instance is not usable anymore after this method has been called until Reset(DataOutput) has been called. Declaration public virtual void Finish() | Improve this Doc View Source Flush() Declaration protected abstract void Flush() | Improve this Doc View Source Reset(DataOutput) Reset this writer to wrap out . The block size remains unchanged. Declaration public virtual void Reset(DataOutput out) Parameters Type Name Description DataOutput out | Improve this Doc View Source WriteValues(Int32) Declaration protected void WriteValues(int bitsRequired) Parameters Type Name Description System.Int32 bitsRequired"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractPagedMutable-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractPagedMutable-1.html",
    "title": "Class AbstractPagedMutable<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractPagedMutable<T> Base implementation for PagedMutable and PagedGrowableWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractPagedMutable<T> PagedGrowableWriter PagedMutable Inherited Members Int64Values.Get(Int32) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class AbstractPagedMutable<T> : Int64Values where T : AbstractPagedMutable<T> Type Parameters Name Description T Properties | Improve this Doc View Source Count The number of values. NOTE: This was size() in Lucene. Declaration public long Count { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source BaseRamBytesUsed() Declaration protected virtual long BaseRamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source FillPages() Declaration protected void FillPages() | Improve this Doc View Source Get(Int64) Declaration public override sealed long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 Overrides Int64Values.Get(Int64) | Improve this Doc View Source Grow() Similar to Grow(Int64[]) . Declaration public T Grow() Returns Type Description T | Improve this Doc View Source Grow(Int64) Similar to Grow(Int64[], Int32) . Declaration public T Grow(long minSize) Parameters Type Name Description System.Int64 minSize Returns Type Description T | Improve this Doc View Source NewMutable(Int32, Int32) Declaration protected abstract PackedInt32s.Mutable NewMutable(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description PackedInt32s.Mutable | Improve this Doc View Source NewUnfilledCopy(Int64) Declaration protected abstract T NewUnfilledCopy(long newSize) Parameters Type Name Description System.Int64 newSize Returns Type Description T | Improve this Doc View Source RamBytesUsed() Return the number of bytes used by this object. Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source Resize(Int64) Create a new copy of size newSize based on the content of this buffer. This method is much more efficient than creating a new instance and copying values one by one. Declaration public T Resize(long newSize) Parameters Type Name Description System.Int64 newSize Returns Type Description T | Improve this Doc View Source Set(Int64, Int64) Set value at index . Declaration public void Set(long index, long value) Parameters Type Name Description System.Int64 index System.Int64 value | Improve this Doc View Source ToString() Declaration public override sealed string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AppendingDeltaPackedInt64Buffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AppendingDeltaPackedInt64Buffer.html",
    "title": "Class AppendingDeltaPackedInt64Buffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AppendingDeltaPackedInt64Buffer Utility class to buffer a list of signed longs in memory. This class only supports appending and is optimized for the case where values are close to each other. NOTE: This was AppendingDeltaPackedLongBuffer in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer AppendingDeltaPackedInt64Buffer Inherited Members AbstractAppendingInt64Buffer.PageSize AbstractAppendingInt64Buffer.Count AbstractAppendingInt64Buffer.Add(Int64) AbstractAppendingInt64Buffer.Get(Int64) AbstractAppendingInt64Buffer.Get(Int64, Int64[], Int32, Int32) AbstractAppendingInt64Buffer.GetIterator() AbstractAppendingInt64Buffer.Freeze() Int64Values.Get(Int32) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class AppendingDeltaPackedInt64Buffer : AbstractAppendingInt64Buffer Constructors | Improve this Doc View Source AppendingDeltaPackedInt64Buffer() Create an AppendingDeltaPackedInt64Buffer with initialPageCount=16, pageSize=1024 and acceptableOverheadRatio= DEFAULT . Declaration public AppendingDeltaPackedInt64Buffer() | Improve this Doc View Source AppendingDeltaPackedInt64Buffer(Int32, Int32, Single) Create AppendingDeltaPackedInt64Buffer . Declaration public AppendingDeltaPackedInt64Buffer(int initialPageCount, int pageSize, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 initialPageCount The initial number of pages. System.Int32 pageSize The size of a single page. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. | Improve this Doc View Source AppendingDeltaPackedInt64Buffer(Single) Create an AppendingDeltaPackedInt64Buffer with initialPageCount=16, pageSize=1024. Declaration public AppendingDeltaPackedInt64Buffer(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Methods | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides AbstractAppendingInt64Buffer.RamBytesUsed()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AppendingPackedInt64Buffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AppendingPackedInt64Buffer.html",
    "title": "Class AppendingPackedInt64Buffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AppendingPackedInt64Buffer Utility class to buffer a list of signed longs in memory. This class only supports appending and is optimized for non-negative numbers with a uniform distribution over a fixed (limited) range. NOTE: This was AppendingPackedLongBuffer in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer AppendingPackedInt64Buffer Inherited Members AbstractAppendingInt64Buffer.PageSize AbstractAppendingInt64Buffer.Count AbstractAppendingInt64Buffer.Add(Int64) AbstractAppendingInt64Buffer.Get(Int64) AbstractAppendingInt64Buffer.Get(Int64, Int64[], Int32, Int32) AbstractAppendingInt64Buffer.GetIterator() AbstractAppendingInt64Buffer.RamBytesUsed() AbstractAppendingInt64Buffer.Freeze() Int64Values.Get(Int32) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class AppendingPackedInt64Buffer : AbstractAppendingInt64Buffer Constructors | Improve this Doc View Source AppendingPackedInt64Buffer() Create an AppendingPackedInt64Buffer with initialPageCount=16, pageSize=1024 and acceptableOverheadRatio= DEFAULT . Declaration public AppendingPackedInt64Buffer() | Improve this Doc View Source AppendingPackedInt64Buffer(Int32, Int32, Single) Initialize a AppendingPackedInt64Buffer . Declaration public AppendingPackedInt64Buffer(int initialPageCount, int pageSize, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 initialPageCount The initial number of pages. System.Int32 pageSize The size of a single page. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. | Improve this Doc View Source AppendingPackedInt64Buffer(Single) Create an AppendingPackedInt64Buffer with initialPageCount=16, pageSize=1024. Declaration public AppendingPackedInt64Buffer(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedReader.html",
    "title": "Class BlockPackedReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockPackedReader Provides random access to a stream written with BlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values BlockPackedReader Inherited Members Int64Values.Get(Int32) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class BlockPackedReader : Int64Values Constructors | Improve this Doc View Source BlockPackedReader(IndexInput, Int32, Int32, Int64, Boolean) Sole constructor. Declaration public BlockPackedReader(IndexInput in, int packedIntsVersion, int blockSize, long valueCount, bool direct) Parameters Type Name Description IndexInput in System.Int32 packedIntsVersion System.Int32 blockSize System.Int64 valueCount System.Boolean direct Methods | Improve this Doc View Source Get(Int64) Declaration public override long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 Overrides Int64Values.Get(Int64) | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedReaderIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedReaderIterator.html",
    "title": "Class BlockPackedReaderIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockPackedReaderIterator Reader for sequences of s written with BlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BlockPackedReaderIterator Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class BlockPackedReaderIterator : object Constructors | Improve this Doc View Source BlockPackedReaderIterator(DataInput, Int32, Int32, Int64) Sole constructor. Declaration public BlockPackedReaderIterator(DataInput in, int packedIntsVersion, int blockSize, long valueCount) Parameters Type Name Description DataInput in System.Int32 packedIntsVersion System.Int32 blockSize The number of values of a block, must be equal to the block size of the BlockPackedWriter which has been used to write the stream. System.Int64 valueCount Properties | Improve this Doc View Source Ord Return the offset of the next value to read. Declaration public long Ord { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Read the next value. Declaration public long Next() Returns Type Description System.Int64 | Improve this Doc View Source Next(Int32) Read between 1 and count values. Declaration public Int64sRef Next(int count) Parameters Type Name Description System.Int32 count Returns Type Description Int64sRef | Improve this Doc View Source Reset(DataInput, Int64) Reset the current reader to wrap a stream of valueCount values contained in in . The block size remains unchanged. Declaration public void Reset(DataInput in, long valueCount) Parameters Type Name Description DataInput in System.Int64 valueCount | Improve this Doc View Source Skip(Int64) Skip exactly count values. Declaration public void Skip(long count) Parameters Type Name Description System.Int64 count See Also BlockPackedWriter"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedWriter.html",
    "title": "Class BlockPackedWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockPackedWriter A writer for large sequences of longs. The sequence is divided into fixed-size blocks and for each block, the difference between each value and the minimum value of the block is encoded using as few bits as possible. Memory usage of this class is proportional to the block size. Each block has an overhead between 1 and 10 bytes to store the minimum value and the number of bits per value of the block. Format: <BLock> BlockCount BlockCount: ⌈ ValueCount / BlockSize ⌉ Block: <Header, (Ints)> Header: <Token, (MinValue)> Token: a byte ( WriteByte(Byte) ), first 7 bits are the number of bits per value ( bitsPerValue ). If the 8th bit is 1, then MinValue (see next) is 0 , otherwise MinValue and needs to be decoded MinValue: a zigzag-encoded variable-length ( WriteVInt64(Int64) ) whose value should be added to every int from the block to restore the original values Ints: If the number of bits per value is 0 , then there is nothing to decode and all ints are equal to MinValue. Otherwise: BlockSize packed ints ( PackedInt32s ) encoded on exactly bitsPerValue bits per value. They are the subtraction of the original values and MinValue This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object AbstractBlockPackedWriter BlockPackedWriter Inherited Members AbstractBlockPackedWriter.m_out AbstractBlockPackedWriter.m_values AbstractBlockPackedWriter.m_blocks AbstractBlockPackedWriter.m_off AbstractBlockPackedWriter.m_ord AbstractBlockPackedWriter.m_finished AbstractBlockPackedWriter.Reset(DataOutput) AbstractBlockPackedWriter.Add(Int64) AbstractBlockPackedWriter.Finish() AbstractBlockPackedWriter.Ord AbstractBlockPackedWriter.WriteValues(Int32) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class BlockPackedWriter : AbstractBlockPackedWriter Constructors | Improve this Doc View Source BlockPackedWriter(DataOutput, Int32) Sole constructor. Declaration public BlockPackedWriter(DataOutput out, int blockSize) Parameters Type Name Description DataOutput out System.Int32 blockSize the number of values of a single block, must be a power of 2 Methods | Improve this Doc View Source Flush() Declaration protected override void Flush() Overrides AbstractBlockPackedWriter.Flush() See Also BlockPackedReaderIterator BlockPackedReader"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoDecoder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoDecoder.html",
    "title": "Class EliasFanoDecoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EliasFanoDecoder A decoder for an EliasFanoEncoder . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object EliasFanoDecoder Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class EliasFanoDecoder : object Constructors | Improve this Doc View Source EliasFanoDecoder(EliasFanoEncoder) Construct a decoder for a given EliasFanoEncoder . The decoding index is set to just before the first encoded value. Declaration public EliasFanoDecoder(EliasFanoEncoder efEncoder) Parameters Type Name Description EliasFanoEncoder efEncoder Fields | Improve this Doc View Source NO_MORE_VALUES Declaration public const long NO_MORE_VALUES = null Field Value Type Description System.Int64 Properties | Improve this Doc View Source EliasFanoEncoder Declaration public virtual EliasFanoEncoder EliasFanoEncoder { get; } Property Value Type Description EliasFanoEncoder The Elias-Fano encoder that is decoded. | Improve this Doc View Source NumEncoded The number of values encoded by the encoder. Declaration public virtual long NumEncoded { get; } Property Value Type Description System.Int64 The number of values encoded by the encoder. Methods | Improve this Doc View Source AdvanceToIndex(Int64) Advance the decoding index to a given index . and return true iff it is available. See also CurrentValue() . The current implementation does not use the index on the upper bit zero bit positions. Note: there is currently no implementation of BackToIndex() . Declaration public virtual bool AdvanceToIndex(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source AdvanceToValue(Int64) Given a target value, advance the decoding index to the first bigger or equal value and return it if it is available. Otherwise return NO_MORE_VALUES . The current implementation uses the index on the upper zero bit positions. Declaration public virtual long AdvanceToValue(long target) Parameters Type Name Description System.Int64 target Returns Type Description System.Int64 | Improve this Doc View Source BackToValue(Int64) Given a target value, go back to the first smaller or equal value and return it if it is available. Otherwise return NO_MORE_VALUES . The current implementation does not use the index on the upper zero bit positions. Declaration public virtual long BackToValue(long target) Parameters Type Name Description System.Int64 target Returns Type Description System.Int64 | Improve this Doc View Source CurrentIndex() The current decoding index. The first value encoded by EncodeNext(Int64) has index 0. Only valid directly after NextValue() , AdvanceToValue(Int64) , PreviousValue() , or BackToValue(Int64) returned another value than NO_MORE_VALUES , or AdvanceToIndex(Int64) returned true . Declaration public virtual long CurrentIndex() Returns Type Description System.Int64 The decoding index of the last decoded value, or as last set by AdvanceToIndex(Int64) . | Improve this Doc View Source CurrentValue() The value at the current decoding index. Only valid when CurrentIndex() would return a valid result. This is only intended for use after AdvanceToIndex(Int64) returned true . Declaration public virtual long CurrentValue() Returns Type Description System.Int64 The value encoded at CurrentIndex() . | Improve this Doc View Source NextValue() If another value is available after the current decoding index, return this value and and increase the decoding index by 1. Otherwise return NO_MORE_VALUES . Declaration public virtual long NextValue() Returns Type Description System.Int64 | Improve this Doc View Source PreviousValue() If another value is available before the current decoding index, return this value and decrease the decoding index by 1. Otherwise return NO_MORE_VALUES . Declaration public virtual long PreviousValue() Returns Type Description System.Int64 | Improve this Doc View Source ToAfterSequence() Set the decoding index to just after the last encoded value. Declaration public virtual void ToAfterSequence() | Improve this Doc View Source ToBeforeSequence() Set the decoding index to just before the first encoded value. Declaration public virtual void ToBeforeSequence()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoDocIdSet.html",
    "title": "Class EliasFanoDocIdSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EliasFanoDocIdSet A DocIdSet in Elias-Fano encoding. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DocIdSet EliasFanoDocIdSet Inherited Members DocIdSet.Bits DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class EliasFanoDocIdSet : DocIdSet Constructors | Improve this Doc View Source EliasFanoDocIdSet(Int32, Int32) Construct an EliasFanoDocIdSet. For efficient encoding, the parameters should be chosen as low as possible. Declaration public EliasFanoDocIdSet(int numValues, int upperBound) Parameters Type Name Description System.Int32 numValues At least the number of document ids that will be encoded. System.Int32 upperBound At least the highest document id that will be encoded. Properties | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean true Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source EncodeFromDisi(DocIdSetIterator) Encode the document ids from a DocIdSetIterator. Declaration public virtual void EncodeFromDisi(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi This DocIdSetIterator should provide document ids that are consistent with numValues and upperBound as provided to the constructor. | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source GetIterator() Provides a DocIdSetIterator to access encoded document ids. Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source SufficientlySmallerThanBitSet(Int64, Int64) Provide an indication that is better to use an EliasFanoDocIdSet than a FixedBitSet to encode document identifiers. Declaration public static bool SufficientlySmallerThanBitSet(long numValues, long upperBound) Parameters Type Name Description System.Int64 numValues The number of document identifiers that is to be encoded. Should be non negative. System.Int64 upperBound The maximum possible value for a document identifier. Should be at least numValues . Returns Type Description System.Boolean See SufficientlySmallerThanBitSet(Int64, Int64)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoEncoder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoEncoder.html",
    "title": "Class EliasFanoEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EliasFanoEncoder Encode a non decreasing sequence of non negative whole numbers in the Elias-Fano encoding that was introduced in the 1970's by Peter Elias and Robert Fano. The Elias-Fano encoding is a high bits / low bits representation of a monotonically increasing sequence of numValues > 0 natural numbers x[i] 0 <= x[0] <= x[1] <= ... <= x[numValues-2] <= x[numValues-1] <= upperBound where upperBound > 0 is an upper bound on the last value. The Elias-Fano encoding uses less than half a bit per encoded number more than the smallest representation that can encode any monotone sequence with the same bounds. The lower L bits of each x[i] are stored explicitly and contiguously in the lower-bits array, with L chosen as ( Log() base 2): L = max(0, floor(log(upperBound/numValues))) The upper bits are stored in the upper-bits array as a sequence of unary-coded gaps ( x[-1] = 0 ): (x[i]/2 L) - (x[i-1]/2 L) The unary code encodes a natural number n by n 0 bits followed by a 1 bit: 0...01 . In the upper bits the total the number of 1 bits is numValues and the total number of 0 bits is: floor(x[numValues-1]/2 L) <= upperBound/(2 max(0, floor(log(upperBound/numValues)))) <= 2 numValues The Elias-Fano encoding uses at most 2 + Ceil(Log(upperBound/numValues)) bits per encoded number. With upperBound in these bounds ( p is an integer): 2 p < x[numValues-1] <= upperBound <= 2 *(p+1) the number of bits per encoded number is minimized. In this implementation the values in the sequence can be given as long , numValues = 0 and upperBound = 0 are allowed, and each of the upper and lower bit arrays should fit in a long[] . An index of positions of zero's in the upper bits is also built. this implementation is based on this article: Sebastiano Vigna, \"Quasi Succinct Indices\", June 19, 2012, sections 3, 4 and 9. Retrieved from http://arxiv.org/pdf/1206.4300 . The articles originally describing the Elias-Fano representation are: Peter Elias, \"Efficient storage and retrieval by content and address of static files\", J. Assoc. Comput. Mach., 21(2):246â€\"260, 1974. Robert M. Fano, \"On the number of bits required to implement an associative memory\", Memorandum 61, Computer Structures Group, Project MAC, MIT, Cambridge, Mass., 1971. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object EliasFanoEncoder Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class EliasFanoEncoder : object Constructors | Improve this Doc View Source EliasFanoEncoder(Int64, Int64) Construct an Elias-Fano encoder using DEFAULT_INDEX_INTERVAL . Declaration public EliasFanoEncoder(long numValues, long upperBound) Parameters Type Name Description System.Int64 numValues System.Int64 upperBound | Improve this Doc View Source EliasFanoEncoder(Int64, Int64, Int64) Construct an Elias-Fano encoder. After construction, call EncodeNext(Int64) numValues times to encode a non decreasing sequence of non negative numbers. Declaration public EliasFanoEncoder(long numValues, long upperBound, long indexInterval) Parameters Type Name Description System.Int64 numValues The number of values that is to be encoded. System.Int64 upperBound At least the highest value that will be encoded. For space efficiency this should not exceed the power of two that equals or is the first higher than the actual maximum. When numValues >= (upperBound/3) a FixedBitSet will take less space. System.Int64 indexInterval The number of high zero bits for which a single index entry is built. The index will have at most 2 * numValues / indexInterval entries and each index entry will use at most Ceil(Log2(3 * numValues)) bits, see EliasFanoEncoder . Fields | Improve this Doc View Source DEFAULT_INDEX_INTERVAL The default index interval for zero upper bits. Declaration public const long DEFAULT_INDEX_INTERVAL = null Field Value Type Description System.Int64 Properties | Improve this Doc View Source IndexBits Expert. The index bits. Declaration public virtual long[] IndexBits { get; } Property Value Type Description System.Int64 [] | Improve this Doc View Source LowerBits Expert. The low bits. Declaration public virtual long[] LowerBits { get; } Property Value Type Description System.Int64 [] | Improve this Doc View Source UpperBits Expert. The high bits. Declaration public virtual long[] UpperBits { get; } Property Value Type Description System.Int64 [] Methods | Improve this Doc View Source EncodeNext(Int64) Call at most Lucene.Net.Util.Packed.EliasFanoEncoder.numValues times to encode a non decreasing sequence of non negative numbers. Declaration public virtual void EncodeNext(long x) Parameters Type Name Description System.Int64 x The next number to be encoded. | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetDecoder() Returns an EliasFanoDecoder to access the encoded values. Perform all calls to EncodeNext(Int64) before calling GetDecoder() . Declaration public virtual EliasFanoDecoder GetDecoder() Returns Type Description EliasFanoDecoder | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 | Improve this Doc View Source SufficientlySmallerThanBitSet(Int64, Int64) Provide an indication that it is better to use an EliasFanoEncoder than a FixedBitSet to encode document identifiers. This indication is not precise and may change in the future. An EliasFanoEncoder is favored when the size of the encoding by the EliasFanoEncoder (including some space for its index) is at most about 5/6 of the size of the FixedBitSet , this is the same as comparing estimates of the number of bits accessed by a pair of FixedBitSet s and by a pair of non indexed EliasFanoDocIdSet s when determining the intersections of the pairs. A bit set is preferred when upperbound <= 256 . It is assumed that DEFAULT_INDEX_INTERVAL is used. Declaration public static bool SufficientlySmallerThanBitSet(long numValues, long upperBound) Parameters Type Name Description System.Int64 numValues The number of document identifiers that is to be encoded. Should be non negative. System.Int64 upperBound The maximum possible value for a document identifier. Should be at least numValues . Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.GrowableWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.GrowableWriter.html",
    "title": "Class GrowableWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GrowableWriter Implements PackedInt32s.Mutable , but grows the bit count of the underlying packed ints on-demand. Beware that this class will accept to set negative values but in order to do this, it will grow the number of bits per value to 64. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable GrowableWriter Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class GrowableWriter : PackedInt32s.Mutable Constructors | Improve this Doc View Source GrowableWriter(Int32, Int32, Single) Declaration public GrowableWriter(int startBitsPerValue, int valueCount, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 startBitsPerValue the initial number of bits per value, may grow depending on the data System.Int32 valueCount the number of values System.Single acceptableOverheadRatio an acceptable overhead ratio Properties | Improve this Doc View Source BitsPerValue Declaration public override int BitsPerValue { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.BitsPerValue | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.Count | Improve this Doc View Source HasArray Declaration public override bool HasArray { get; } Property Value Type Description System.Boolean Overrides PackedInt32s.Reader.HasArray | Improve this Doc View Source Mutable Declaration public virtual PackedInt32s.Mutable Mutable { get; } Property Value Type Description PackedInt32s.Mutable Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides PackedInt32s.Mutable.Clear() | Improve this Doc View Source Fill(Int32, Int32, Int64) Declaration public override void Fill(int fromIndex, int toIndex, long val) Parameters Type Name Description System.Int32 fromIndex System.Int32 toIndex System.Int64 val Overrides PackedInt32s.Mutable.Fill(Int32, Int32, Int64) | Improve this Doc View Source Get(Int32) Declaration public override long Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int64 Overrides NumericDocValues.Get(Int32) | Improve this Doc View Source Get(Int32, Int64[], Int32, Int32) Declaration public override int Get(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) | Improve this Doc View Source GetArray() Declaration public override object GetArray() Returns Type Description System.Object Overrides PackedInt32s.Reader.GetArray() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PackedInt32s.Reader.RamBytesUsed() | Improve this Doc View Source Resize(Int32) Declaration public virtual GrowableWriter Resize(int newSize) Parameters Type Name Description System.Int32 newSize Returns Type Description GrowableWriter | Improve this Doc View Source Save(DataOutput) Declaration public override void Save(DataOutput out) Parameters Type Name Description DataOutput out Overrides PackedInt32s.Mutable.Save(DataOutput) | Improve this Doc View Source Set(Int32, Int64) Declaration public override void Set(int index, long value) Parameters Type Name Description System.Int32 index System.Int64 value Overrides PackedInt32s.Mutable.Set(Int32, Int64) | Improve this Doc View Source Set(Int32, Int64[], Int32, Int32) Declaration public override int Set(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Mutable.Set(Int32, Int64[], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.html",
    "title": "Namespace Lucene.Net.Util.Packed | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Packed <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Packed integer arrays and streams. The packed package provides * sequential and random access capable arrays of positive longs, * routines for efficient serialization and deserialization of streams of packed integers. The implementations provide different trade-offs between memory usage and access speed. The standard usage scenario is replacing large int or long arrays in order to reduce the memory footprint. The main access point is the <xref:Lucene.Net.Util.Packed.PackedInts> factory. In-memory structures <xref:Lucene.Net.Util.Packed.PackedInts.Mutable> Only supports positive longs. Requires the number of bits per value to be known in advance. Random-access for both writing and reading. GrowableWriter Same as PackedInts.Mutable but grows the number of bits per values when needed. Useful to build a PackedInts.Mutable from a read-once stream of longs. PagedGrowableWriter Slices data into fixed-size blocks stored in GrowableWriters. Supports more than 2B values. You should use Appending(Delta)PackedLongBuffer instead if you don't need random write access. <xref:Lucene.Net.Util.Packed.AppendingDeltaPackedLongBuffer> Can store any sequence of longs. Compression is good when values are close to each other. Supports random reads, but only sequential writes. Can address up to 2^42 values. <xref:Lucene.Net.Util.Packed.AppendingPackedLongBuffer> Same as AppendingDeltaPackedLongBuffer but assumes values are 0-based. <xref:Lucene.Net.Util.Packed.MonotonicAppendingLongBuffer> Same as AppendingDeltaPackedLongBuffer except that compression is good when the stream is a succession of affine functions. Disk-based structures <xref:Lucene.Net.Util.Packed.PackedInts.Writer>, <xref:Lucene.Net.Util.Packed.PackedInts.Reader>, <xref:Lucene.Net.Util.Packed.PackedInts.ReaderIterator> Only supports positive longs. Requires the number of bits per value to be known in advance. Supports both fast sequential access with low memory footprint with ReaderIterator and random-access by either loading values in memory or leaving them on disk with Reader. BlockPackedWriter , BlockPackedReader , BlockPackedReaderIterator Splits the stream into fixed-size blocks. Compression is good when values are close to each other. Can address up to 2B * blockSize values. MonotonicBlockPackedWriter , MonotonicBlockPackedReader Same as the non-monotonic variants except that compression is good when the stream is a succession of affine functions. The reason why there is no sequential access is that if you need sequential access, you should rather delta-encode and use BlockPackedWriter. PackedDataOutput , PackedDataInput Writes sequences of longs where each long can use any number of bits. Classes AbstractAppendingInt64Buffer Common functionality shared by AppendingDeltaPackedInt64Buffer and MonotonicAppendingInt64Buffer . NOTE: This was AbstractAppendingLongBuffer in Lucene AbstractAppendingInt64Buffer.Iterator AbstractBlockPackedWriter AbstractPagedMutable<T> Base implementation for PagedMutable and PagedGrowableWriter . This is a Lucene.NET INTERNAL API, use at your own risk AppendingDeltaPackedInt64Buffer Utility class to buffer a list of signed longs in memory. This class only supports appending and is optimized for the case where values are close to each other. NOTE: This was AppendingDeltaPackedLongBuffer in Lucene This is a Lucene.NET INTERNAL API, use at your own risk AppendingPackedInt64Buffer Utility class to buffer a list of signed longs in memory. This class only supports appending and is optimized for non-negative numbers with a uniform distribution over a fixed (limited) range. NOTE: This was AppendingPackedLongBuffer in Lucene This is a Lucene.NET INTERNAL API, use at your own risk BlockPackedReader Provides random access to a stream written with BlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk BlockPackedReaderIterator Reader for sequences of s written with BlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk BlockPackedWriter A writer for large sequences of longs. The sequence is divided into fixed-size blocks and for each block, the difference between each value and the minimum value of the block is encoded using as few bits as possible. Memory usage of this class is proportional to the block size. Each block has an overhead between 1 and 10 bytes to store the minimum value and the number of bits per value of the block. Format: <BLock> BlockCount BlockCount: ⌈ ValueCount / BlockSize ⌉ Block: <Header, (Ints)> Header: <Token, (MinValue)> Token: a byte ( WriteByte(Byte) ), first 7 bits are the number of bits per value ( bitsPerValue ). If the 8th bit is 1, then MinValue (see next) is 0 , otherwise MinValue and needs to be decoded MinValue: a zigzag-encoded variable-length ( WriteVInt64(Int64) ) whose value should be added to every int from the block to restore the original values Ints: If the number of bits per value is 0 , then there is nothing to decode and all ints are equal to MinValue. Otherwise: BlockSize packed ints ( PackedInt32s ) encoded on exactly bitsPerValue bits per value. They are the subtraction of the original values and MinValue This is a Lucene.NET INTERNAL API, use at your own risk EliasFanoDecoder A decoder for an EliasFanoEncoder . This is a Lucene.NET INTERNAL API, use at your own risk EliasFanoDocIdSet A DocIdSet in Elias-Fano encoding. This is a Lucene.NET INTERNAL API, use at your own risk EliasFanoEncoder Encode a non decreasing sequence of non negative whole numbers in the Elias-Fano encoding that was introduced in the 1970's by Peter Elias and Robert Fano. The Elias-Fano encoding is a high bits / low bits representation of a monotonically increasing sequence of numValues > 0 natural numbers x[i] 0 <= x[0] <= x[1] <= ... <= x[numValues-2] <= x[numValues-1] <= upperBound where upperBound > 0 is an upper bound on the last value. The Elias-Fano encoding uses less than half a bit per encoded number more than the smallest representation that can encode any monotone sequence with the same bounds. The lower L bits of each x[i] are stored explicitly and contiguously in the lower-bits array, with L chosen as ( Log() base 2): L = max(0, floor(log(upperBound/numValues))) The upper bits are stored in the upper-bits array as a sequence of unary-coded gaps ( x[-1] = 0 ): (x[i]/2 L) - (x[i-1]/2 L) The unary code encodes a natural number n by n 0 bits followed by a 1 bit: 0...01 . In the upper bits the total the number of 1 bits is numValues and the total number of 0 bits is: floor(x[numValues-1]/2 L) <= upperBound/(2 max(0, floor(log(upperBound/numValues)))) <= 2 numValues The Elias-Fano encoding uses at most 2 + Ceil(Log(upperBound/numValues)) bits per encoded number. With upperBound in these bounds ( p is an integer): 2 p < x[numValues-1] <= upperBound <= 2 *(p+1) the number of bits per encoded number is minimized. In this implementation the values in the sequence can be given as long , numValues = 0 and upperBound = 0 are allowed, and each of the upper and lower bit arrays should fit in a long[] . An index of positions of zero's in the upper bits is also built. this implementation is based on this article: Sebastiano Vigna, \"Quasi Succinct Indices\", June 19, 2012, sections 3, 4 and 9. Retrieved from http://arxiv.org/pdf/1206.4300 . The articles originally describing the Elias-Fano representation are: Peter Elias, \"Efficient storage and retrieval by content and address of static files\", J. Assoc. Comput. Mach., 21(2):246â€\"260, 1974. Robert M. Fano, \"On the number of bits required to implement an associative memory\", Memorandum 61, Computer Structures Group, Project MAC, MIT, Cambridge, Mass., 1971. This is a Lucene.NET INTERNAL API, use at your own risk GrowableWriter Implements PackedInt32s.Mutable , but grows the bit count of the underlying packed ints on-demand. Beware that this class will accept to set negative values but in order to do this, it will grow the number of bits per value to 64. This is a Lucene.NET INTERNAL API, use at your own risk MonotonicAppendingInt64Buffer Utility class to buffer signed longs in memory, which is optimized for the case where the sequence is monotonic, although it can encode any sequence of arbitrary longs. It only supports appending. NOTE: This was MonotonicAppendingLongBuffer in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk MonotonicBlockPackedReader Provides random access to a stream written with MonotonicBlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk MonotonicBlockPackedWriter A writer for large monotonically increasing sequences of positive s. The sequence is divided into fixed-size blocks and for each block, values are modeled after a linear function f: x → A × x + B. The block encodes deltas from the expected values computed from this function using as few bits as possible. Each block has an overhead between 6 and 14 bytes. Format: <BLock> BlockCount BlockCount: ⌈ ValueCount / BlockSize ⌉ Block: <Header, (Ints)> Header: <B, A, BitsPerValue> B: the B from f: x → A × x + B using a variable-length ( WriteVInt64(Int64) ) A: the A from f: x → A × x + B encoded using on 4 bytes ( WriteVInt32(Int32) ) BitsPerValue: a variable-length ( WriteVInt32(Int32) ) Ints: if BitsPerValue is 0 , then there is nothing to read and all values perfectly match the result of the function. Otherwise, these are the zigzag-encoded packed ( PackedInt32s ) deltas from the expected value (computed from the function) using exaclty BitsPerValue bits per value This is a Lucene.NET INTERNAL API, use at your own risk Packed64 Space optimized random access capable array of values with a fixed number of bits/value. Values are packed contiguously. The implementation strives to perform af fast as possible under the constraint of contiguous bits, by avoiding expensive operations. This comes at the cost of code clarity. Technical details: this implementation is a refinement of a non-branching version. The non-branching get and set methods meant that 2 or 4 atomics in the underlying array were always accessed, even for the cases where only 1 or 2 were needed. Even with caching, this had a detrimental effect on performance. Related to this issue, the old implementation used lookup tables for shifts and masks, which also proved to be a bit slower than calculating the shifts and masks on the fly. See https://issues.apache.org/jira/browse/LUCENE-4062 for details. PackedDataInput A DataInput wrapper to read unaligned, variable-length packed integers. This API is much slower than the PackedInt32s fixed-length API but can be convenient to save space. This is a Lucene.NET INTERNAL API, use at your own risk PackedDataOutput A DataOutput wrapper to write unaligned, variable-length packed integers. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s Simplistic compression for array of unsigned long values. Each value is >= 0 and <= a specified maximum value. The values are stored as packed ints, with each value consuming a fixed number of bits. NOTE: This was PackedInts in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s.Format A format to write packed s. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s.FormatAndBits Simple class that holds a format and a number of bits per value. PackedInt32s.Header Header identifying the structure of a packed integer array. PackedInt32s.Mutable A packed integer array that can be modified. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s.MutableImpl PackedInt32s.NullReader A PackedInt32s.Reader which has all its values equal to 0 (bitsPerValue = 0). PackedInt32s.Reader A read-only random access array of positive integers. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s.Writer A write-once Writer. This is a Lucene.NET INTERNAL API, use at your own risk PagedGrowableWriter A PagedGrowableWriter . This class slices data into fixed-size blocks which have independent numbers of bits per value and grow on-demand. You should use this class instead of the AbstractAppendingInt64Buffer related ones only when you need random write-access. Otherwise this class will likely be slower and less memory-efficient. This is a Lucene.NET INTERNAL API, use at your own risk PagedMutable A PagedMutable . This class slices data into fixed-size blocks which have the same number of bits per value. It can be a useful replacement for PackedInt32s.Mutable to store more than 2B values. This is a Lucene.NET INTERNAL API, use at your own risk Interfaces PackedInt32s.IDecoder A decoder for packed integers. PackedInt32s.IEncoder An encoder for packed integers. PackedInt32s.IReaderIterator Run-once iterator interface, to decode previously saved PackedInt32s ."
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicAppendingInt64Buffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicAppendingInt64Buffer.html",
    "title": "Class MonotonicAppendingInt64Buffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MonotonicAppendingInt64Buffer Utility class to buffer signed longs in memory, which is optimized for the case where the sequence is monotonic, although it can encode any sequence of arbitrary longs. It only supports appending. NOTE: This was MonotonicAppendingLongBuffer in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer MonotonicAppendingInt64Buffer Inherited Members AbstractAppendingInt64Buffer.PageSize AbstractAppendingInt64Buffer.Count AbstractAppendingInt64Buffer.Add(Int64) AbstractAppendingInt64Buffer.Get(Int64) AbstractAppendingInt64Buffer.Get(Int64, Int64[], Int32, Int32) AbstractAppendingInt64Buffer.GetIterator() AbstractAppendingInt64Buffer.Freeze() Int64Values.Get(Int32) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class MonotonicAppendingInt64Buffer : AbstractAppendingInt64Buffer Constructors | Improve this Doc View Source MonotonicAppendingInt64Buffer() Create an MonotonicAppendingInt64Buffer with initialPageCount=16, pageSize=1024 and acceptableOverheadRatio= DEFAULT . Declaration public MonotonicAppendingInt64Buffer() | Improve this Doc View Source MonotonicAppendingInt64Buffer(Int32, Int32, Single) Declaration public MonotonicAppendingInt64Buffer(int initialPageCount, int pageSize, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 initialPageCount The initial number of pages. System.Int32 pageSize The size of a single page. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. | Improve this Doc View Source MonotonicAppendingInt64Buffer(Single) Create an AppendingDeltaPackedInt64Buffer with initialPageCount=16, pageSize=1024. Declaration public MonotonicAppendingInt64Buffer(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Methods | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides AbstractAppendingInt64Buffer.RamBytesUsed()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicBlockPackedReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicBlockPackedReader.html",
    "title": "Class MonotonicBlockPackedReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MonotonicBlockPackedReader Provides random access to a stream written with MonotonicBlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values MonotonicBlockPackedReader Inherited Members Int64Values.Get(Int32) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class MonotonicBlockPackedReader : Int64Values Constructors | Improve this Doc View Source MonotonicBlockPackedReader(IndexInput, Int32, Int32, Int64, Boolean) Sole constructor. Declaration public MonotonicBlockPackedReader(IndexInput in, int packedIntsVersion, int blockSize, long valueCount, bool direct) Parameters Type Name Description IndexInput in System.Int32 packedIntsVersion System.Int32 blockSize System.Int64 valueCount System.Boolean direct Properties | Improve this Doc View Source Count Returns the number of values. NOTE: This was size() in Lucene. Declaration public long Count { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Get(Int64) Declaration public override long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 Overrides Int64Values.Get(Int64) | Improve this Doc View Source RamBytesUsed() Returns the approximate RAM bytes used. Declaration public long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicBlockPackedWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicBlockPackedWriter.html",
    "title": "Class MonotonicBlockPackedWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MonotonicBlockPackedWriter A writer for large monotonically increasing sequences of positive s. The sequence is divided into fixed-size blocks and for each block, values are modeled after a linear function f: x → A × x + B. The block encodes deltas from the expected values computed from this function using as few bits as possible. Each block has an overhead between 6 and 14 bytes. Format: <BLock> BlockCount BlockCount: ⌈ ValueCount / BlockSize ⌉ Block: <Header, (Ints)> Header: <B, A, BitsPerValue> B: the B from f: x → A × x + B using a variable-length ( WriteVInt64(Int64) ) A: the A from f: x → A × x + B encoded using on 4 bytes ( WriteVInt32(Int32) ) BitsPerValue: a variable-length ( WriteVInt32(Int32) ) Ints: if BitsPerValue is 0 , then there is nothing to read and all values perfectly match the result of the function. Otherwise, these are the zigzag-encoded packed ( PackedInt32s ) deltas from the expected value (computed from the function) using exaclty BitsPerValue bits per value This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object AbstractBlockPackedWriter MonotonicBlockPackedWriter Inherited Members AbstractBlockPackedWriter.m_out AbstractBlockPackedWriter.m_values AbstractBlockPackedWriter.m_blocks AbstractBlockPackedWriter.m_off AbstractBlockPackedWriter.m_ord AbstractBlockPackedWriter.m_finished AbstractBlockPackedWriter.Reset(DataOutput) AbstractBlockPackedWriter.Finish() AbstractBlockPackedWriter.Ord AbstractBlockPackedWriter.WriteValues(Int32) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class MonotonicBlockPackedWriter : AbstractBlockPackedWriter Constructors | Improve this Doc View Source MonotonicBlockPackedWriter(DataOutput, Int32) Sole constructor. Declaration public MonotonicBlockPackedWriter(DataOutput out, int blockSize) Parameters Type Name Description DataOutput out System.Int32 blockSize The number of values of a single block, must be a power of 2. Methods | Improve this Doc View Source Add(Int64) Declaration public override void Add(long l) Parameters Type Name Description System.Int64 l Overrides AbstractBlockPackedWriter.Add(Int64) | Improve this Doc View Source Flush() Declaration protected override void Flush() Overrides AbstractBlockPackedWriter.Flush() See Also MonotonicBlockPackedReader"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.Packed64.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.Packed64.html",
    "title": "Class Packed64 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Packed64 Space optimized random access capable array of values with a fixed number of bits/value. Values are packed contiguously. The implementation strives to perform af fast as possible under the constraint of contiguous bits, by avoiding expensive operations. This comes at the cost of code clarity. Technical details: this implementation is a refinement of a non-branching version. The non-branching get and set methods meant that 2 or 4 atomics in the underlying array were always accessed, even for the cases where only 1 or 2 were needed. Even with caching, this had a detrimental effect on performance. Related to this issue, the old implementation used lookup tables for shifts and masks, which also proved to be a bit slower than calculating the shifts and masks on the fly. See https://issues.apache.org/jira/browse/LUCENE-4062 for details. Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable PackedInt32s.MutableImpl Packed64 Inherited Members PackedInt32s.MutableImpl.m_valueCount PackedInt32s.MutableImpl.m_bitsPerValue PackedInt32s.MutableImpl.BitsPerValue PackedInt32s.MutableImpl.Count PackedInt32s.Mutable.Save(DataOutput) PackedInt32s.Reader.GetArray() PackedInt32s.Reader.HasArray Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class Packed64 : PackedInt32s.MutableImpl Constructors | Improve this Doc View Source Packed64(Int32, DataInput, Int32, Int32) Creates an array with content retrieved from the given DataInput . Declaration public Packed64(int packedIntsVersion, DataInput in, int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 packedIntsVersion DataInput in A DataInput , positioned at the start of Packed64-content. System.Int32 valueCount The number of elements. System.Int32 bitsPerValue The number of bits available for any given value. | Improve this Doc View Source Packed64(Int32, Int32) Creates an array with the internal structures adjusted for the given limits and initialized to 0. Declaration public Packed64(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount The number of elements. System.Int32 bitsPerValue The number of bits available for any given value. Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides PackedInt32s.Mutable.Clear() | Improve this Doc View Source Fill(Int32, Int32, Int64) Declaration public override void Fill(int fromIndex, int toIndex, long val) Parameters Type Name Description System.Int32 fromIndex System.Int32 toIndex System.Int64 val Overrides PackedInt32s.Mutable.Fill(Int32, Int32, Int64) | Improve this Doc View Source Get(Int32) Declaration public override long Get(int index) Parameters Type Name Description System.Int32 index The position of the value. Returns Type Description System.Int64 The value at the given index. Overrides NumericDocValues.Get(Int32) | Improve this Doc View Source Get(Int32, Int64[], Int32, Int32) Declaration public override int Get(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PackedInt32s.Reader.RamBytesUsed() | Improve this Doc View Source Set(Int32, Int64) Declaration public override void Set(int index, long value) Parameters Type Name Description System.Int32 index System.Int64 value Overrides PackedInt32s.Mutable.Set(Int32, Int64) | Improve this Doc View Source Set(Int32, Int64[], Int32, Int32) Declaration public override int Set(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Mutable.Set(Int32, Int64[], Int32, Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedDataInput.html",
    "title": "Class PackedDataInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedDataInput A DataInput wrapper to read unaligned, variable-length packed integers. This API is much slower than the PackedInt32s fixed-length API but can be convenient to save space. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedDataInput Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class PackedDataInput : object Constructors | Improve this Doc View Source PackedDataInput(DataInput) Create a new instance that wraps in . Declaration public PackedDataInput(DataInput in) Parameters Type Name Description DataInput in Methods | Improve this Doc View Source ReadInt64(Int32) Read the next using exactly bitsPerValue bits. NOTE: This was readLong() in Lucene. Declaration public long ReadInt64(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue Returns Type Description System.Int64 | Improve this Doc View Source SkipToNextByte() If there are pending bits (at most 7), they will be ignored and the next value will be read starting at the next byte. Declaration public void SkipToNextByte() See Also PackedDataOutput"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedDataOutput.html",
    "title": "Class PackedDataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedDataOutput A DataOutput wrapper to write unaligned, variable-length packed integers. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedDataOutput Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class PackedDataOutput : object Constructors | Improve this Doc View Source PackedDataOutput(DataOutput) Create a new instance that wraps out . Declaration public PackedDataOutput(DataOutput out) Parameters Type Name Description DataOutput out Methods | Improve this Doc View Source Flush() Flush pending bits to the underlying DataOutput . Declaration public void Flush() | Improve this Doc View Source WriteInt64(Int64, Int32) Write a value using exactly bitsPerValue bits. NOTE: This was writeLong() in Lucene. Declaration public void WriteInt64(long value, int bitsPerValue) Parameters Type Name Description System.Int64 value System.Int32 bitsPerValue See Also PackedDataInput"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Format.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Format.html",
    "title": "Class PackedInt32s.Format | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.Format A format to write packed s. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedInt32s.Format Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class Format : object Fields | Improve this Doc View Source PACKED Compact format, all bits are written contiguously. Declaration public static readonly PackedInt32s.Format PACKED Field Value Type Description PackedInt32s.Format | Improve this Doc View Source PACKED_SINGLE_BLOCK A format that may insert padding bits to improve encoding and decoding speed. Since this format doesn't support all possible bits per value, you should never use it directly, but rather use FastestFormatAndBits(Int32, Int32, Single) to find the format that best suits your needs. Declaration public static readonly PackedInt32s.Format PACKED_SINGLE_BLOCK Field Value Type Description PackedInt32s.Format Properties | Improve this Doc View Source Id Returns the ID of the format. Declaration public int Id { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Values Declaration public static IEnumerable<PackedInt32s.Format> Values { get; } Property Value Type Description IEnumerable < PackedInt32s.Format > Methods | Improve this Doc View Source ById(Int32) Get a format according to its ID. Declaration public static PackedInt32s.Format ById(int id) Parameters Type Name Description System.Int32 id Returns Type Description PackedInt32s.Format | Improve this Doc View Source ByteCount(Int32, Int32, Int32) Computes how many blocks are needed to store valueCount values of size bitsPerValue . Declaration public virtual long ByteCount(int packedIntsVersion, int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 packedIntsVersion System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description System.Int64 | Improve this Doc View Source Int64Count(Int32, Int32, Int32) Computes how many blocks are needed to store valueCount values of size bitsPerValue . NOTE: This was longCount() in Lucene. Declaration public virtual int Int64Count(int packedIntsVersion, int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 packedIntsVersion System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description System.Int32 | Improve this Doc View Source IsSupported(Int32) Tests whether the provided number of bits per value is supported by the format. Declaration public virtual bool IsSupported(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue Returns Type Description System.Boolean | Improve this Doc View Source OverheadPerValue(Int32) Returns the overhead per value, in bits. Declaration public virtual float OverheadPerValue(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue Returns Type Description System.Single | Improve this Doc View Source OverheadRatio(Int32) Returns the overhead ratio ( overhead per value / bits per value ). Declaration public virtual float OverheadRatio(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue Returns Type Description System.Single"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.FormatAndBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.FormatAndBits.html",
    "title": "Class PackedInt32s.FormatAndBits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.FormatAndBits Simple class that holds a format and a number of bits per value. Inheritance System.Object PackedInt32s.FormatAndBits Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class FormatAndBits : object Constructors | Improve this Doc View Source FormatAndBits(PackedInt32s.Format, Int32) Declaration public FormatAndBits(PackedInt32s.Format format, int bitsPerValue) Parameters Type Name Description PackedInt32s.Format format System.Int32 bitsPerValue Properties | Improve this Doc View Source BitsPerValue Declaration public int BitsPerValue { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Format Declaration public PackedInt32s.Format Format { get; } Property Value Type Description PackedInt32s.Format Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Header.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Header.html",
    "title": "Class PackedInt32s.Header | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.Header Header identifying the structure of a packed integer array. Inheritance System.Object PackedInt32s.Header Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class Header : object Constructors | Improve this Doc View Source Header(PackedInt32s.Format, Int32, Int32, Int32) Declaration public Header(PackedInt32s.Format format, int valueCount, int bitsPerValue, int version) Parameters Type Name Description PackedInt32s.Format format System.Int32 valueCount System.Int32 bitsPerValue System.Int32 version"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.html",
    "title": "Class PackedInt32s | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s Simplistic compression for array of unsigned long values. Each value is >= 0 and <= a specified maximum value. The values are stored as packed ints, with each value consuming a fixed number of bits. NOTE: This was PackedInts in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedInt32s Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class PackedInt32s : object Fields | Improve this Doc View Source CODEC_NAME Declaration public static string CODEC_NAME Field Value Type Description System.String | Improve this Doc View Source COMPACT No memory overhead at all, but the returned implementation may be slow. Declaration public static float COMPACT Field Value Type Description System.Single | Improve this Doc View Source DEFAULT At most 20% memory overhead. Declaration public static float DEFAULT Field Value Type Description System.Single | Improve this Doc View Source DEFAULT_BUFFER_SIZE Default amount of memory to use for bulk operations. Declaration public static int DEFAULT_BUFFER_SIZE Field Value Type Description System.Int32 | Improve this Doc View Source FAST At most 50% memory overhead, always select a reasonably fast implementation. Declaration public static float FAST Field Value Type Description System.Single | Improve this Doc View Source FASTEST At most 700% memory overhead, always select a direct implementation. Declaration public static float FASTEST Field Value Type Description System.Single | Improve this Doc View Source VERSION_BYTE_ALIGNED Declaration public static int VERSION_BYTE_ALIGNED Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CURRENT Declaration public static int VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Declaration public static int VERSION_START Field Value Type Description System.Int32 Methods | Improve this Doc View Source BitsRequired(Int64) Returns how many bits are required to hold values up to and including maxValue . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static int BitsRequired(long maxValue) Parameters Type Name Description System.Int64 maxValue The maximum value that should be representable. Returns Type Description System.Int32 The amount of bits needed to represent values from 0 to maxValue . | Improve this Doc View Source CheckVersion(Int32) Check the validity of a version number. Declaration public static void CheckVersion(int version) Parameters Type Name Description System.Int32 version | Improve this Doc View Source Copy(PackedInt32s.Reader, Int32, PackedInt32s.Mutable, Int32, Int32, Int32) Copy src[srcPos:srcPos+len] into dest[destPos:destPos+len] using at most mem bytes. Declaration public static void Copy(PackedInt32s.Reader src, int srcPos, PackedInt32s.Mutable dest, int destPos, int len, int mem) Parameters Type Name Description PackedInt32s.Reader src System.Int32 srcPos PackedInt32s.Mutable dest System.Int32 destPos System.Int32 len System.Int32 mem | Improve this Doc View Source FastestFormatAndBits(Int32, Int32, Single) Try to find the PackedInt32s.Format and number of bits per value that would restore from disk the fastest reader whose overhead is less than acceptableOverheadRatio . The acceptableOverheadRatio parameter makes sense for random-access PackedInt32s.Reader s. In case you only plan to perform sequential access on this stream later on, you should probably use COMPACT . If you don't know how many values you are going to write, use valueCount = -1 . Declaration public static PackedInt32s.FormatAndBits FastestFormatAndBits(int valueCount, int bitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue System.Single acceptableOverheadRatio Returns Type Description PackedInt32s.FormatAndBits | Improve this Doc View Source GetDecoder(PackedInt32s.Format, Int32, Int32) Get a PackedInt32s.IDecoder . Declaration public static PackedInt32s.IDecoder GetDecoder(PackedInt32s.Format format, int version, int bitsPerValue) Parameters Type Name Description PackedInt32s.Format format The format used to store packed s. System.Int32 version The compatibility version. System.Int32 bitsPerValue The number of bits per value. Returns Type Description PackedInt32s.IDecoder A decoder. | Improve this Doc View Source GetDirectReader(IndexInput) Construct a direct PackedInt32s.Reader from an IndexInput . this method is useful to restore data from streams which have been created using GetWriter(DataOutput, Int32, Int32, Single) . The returned reader will have very little memory overhead, but every call to Get(Int32) is likely to perform a disk seek. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetDirectReader(IndexInput in) Parameters Type Name Description IndexInput in The stream to read data from. Returns Type Description PackedInt32s.Reader A direct PackedInt32s.Reader . | Improve this Doc View Source GetDirectReaderNoHeader(IndexInput, PackedInt32s.Format, Int32, Int32, Int32) Expert: Construct a direct PackedInt32s.Reader from a stream without reading metadata at the beginning of the stream. This method is useful to restore data from streams which have been created using GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) . The returned reader will have very little memory overhead, but every call to Get(Int32) is likely to perform a disk seek. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetDirectReaderNoHeader(IndexInput in, PackedInt32s.Format format, int version, int valueCount, int bitsPerValue) Parameters Type Name Description IndexInput in The stream to read data from. PackedInt32s.Format format The format used to serialize. System.Int32 version The version used to serialize the data. System.Int32 valueCount How many values the stream holds. System.Int32 bitsPerValue The number of bits per value. Returns Type Description PackedInt32s.Reader A direct PackedInt32s.Reader . | Improve this Doc View Source GetDirectReaderNoHeader(IndexInput, PackedInt32s.Header) Expert: Construct a direct PackedInt32s.Reader from an IndexInput without reading metadata at the beginning of the stream. this method is useful to restore data when metadata has been previously read using ReadHeader(DataInput) . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetDirectReaderNoHeader(IndexInput in, PackedInt32s.Header header) Parameters Type Name Description IndexInput in The stream to read data from, positioned at the beginning of the packed values. PackedInt32s.Header header Metadata result from ReadHeader(DataInput) . Returns Type Description PackedInt32s.Reader A PackedInt32s.Reader . See Also ReadHeader(DataInput) | Improve this Doc View Source GetEncoder(PackedInt32s.Format, Int32, Int32) Get an PackedInt32s.IEncoder . Declaration public static PackedInt32s.IEncoder GetEncoder(PackedInt32s.Format format, int version, int bitsPerValue) Parameters Type Name Description PackedInt32s.Format format The format used to store packed s. System.Int32 version The compatibility version. System.Int32 bitsPerValue The number of bits per value. Returns Type Description PackedInt32s.IEncoder An encoder. | Improve this Doc View Source GetMutable(Int32, Int32, PackedInt32s.Format) Same as GetMutable(Int32, Int32, Single) with a pre-computed number of bits per value and format. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Mutable GetMutable(int valueCount, int bitsPerValue, PackedInt32s.Format format) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue PackedInt32s.Format format Returns Type Description PackedInt32s.Mutable | Improve this Doc View Source GetMutable(Int32, Int32, Single) Create a packed integer array with the given amount of values initialized to 0. The valueCount and the bitsPerValue cannot be changed after creation. All Mutables known by this factory are kept fully in RAM. Positive values of acceptableOverheadRatio will trade space for speed by selecting a faster but potentially less memory-efficient implementation. An acceptableOverheadRatio of COMPACT will make sure that the most memory-efficient implementation is selected whereas FASTEST will make sure that the fastest implementation is selected. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Mutable GetMutable(int valueCount, int bitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 valueCount The number of elements. System.Int32 bitsPerValue The number of bits available for any given value. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. Returns Type Description PackedInt32s.Mutable A mutable packed integer array. | Improve this Doc View Source GetReader(DataInput) Restore a PackedInt32s.Reader from a stream. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetReader(DataInput in) Parameters Type Name Description DataInput in The stream to read data from. Returns Type Description PackedInt32s.Reader A PackedInt32s.Reader . | Improve this Doc View Source GetReaderIterator(DataInput, Int32) Retrieve PackedInt32s as a PackedInt32s.IReaderIterator . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.IReaderIterator GetReaderIterator(DataInput in, int mem) Parameters Type Name Description DataInput in Positioned at the beginning of a stored packed int structure. System.Int32 mem How much memory the iterator is allowed to use to read-ahead (likely to speed up iteration). Returns Type Description PackedInt32s.IReaderIterator An iterator to access the values. | Improve this Doc View Source GetReaderIteratorNoHeader(DataInput, PackedInt32s.Format, Int32, Int32, Int32, Int32) Expert: Restore a PackedInt32s.IReaderIterator from a stream without reading metadata at the beginning of the stream. This method is useful to restore data from streams which have been created using GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.IReaderIterator GetReaderIteratorNoHeader(DataInput in, PackedInt32s.Format format, int version, int valueCount, int bitsPerValue, int mem) Parameters Type Name Description DataInput in The stream to read data from, positioned at the beginning of the packed values. PackedInt32s.Format format The format used to serialize. System.Int32 version The version used to serialize the data. System.Int32 valueCount How many values the stream holds. System.Int32 bitsPerValue the number of bits per value. System.Int32 mem How much memory the iterator is allowed to use to read-ahead (likely to speed up iteration). Returns Type Description PackedInt32s.IReaderIterator A PackedInt32s.IReaderIterator . See Also GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) | Improve this Doc View Source GetReaderNoHeader(DataInput, PackedInt32s.Format, Int32, Int32, Int32) Expert: Restore a PackedInt32s.Reader from a stream without reading metadata at the beginning of the stream. This method is useful to restore data from streams which have been created using GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetReaderNoHeader(DataInput in, PackedInt32s.Format format, int version, int valueCount, int bitsPerValue) Parameters Type Name Description DataInput in The stream to read data from, positioned at the beginning of the packed values. PackedInt32s.Format format The format used to serialize. System.Int32 version The version used to serialize the data. System.Int32 valueCount How many values the stream holds. System.Int32 bitsPerValue The number of bits per value. Returns Type Description PackedInt32s.Reader A PackedInt32s.Reader . See Also GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) | Improve this Doc View Source GetReaderNoHeader(DataInput, PackedInt32s.Header) Expert: Restore a PackedInt32s.Reader from a stream without reading metadata at the beginning of the stream. this method is useful to restore data when metadata has been previously read using ReadHeader(DataInput) . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetReaderNoHeader(DataInput in, PackedInt32s.Header header) Parameters Type Name Description DataInput in The stream to read data from, positioned at the beginning of the packed values. PackedInt32s.Header header Metadata result from ReadHeader(DataInput) . Returns Type Description PackedInt32s.Reader A PackedInt32s.Reader . See Also ReadHeader(DataInput) | Improve this Doc View Source GetWriter(DataOutput, Int32, Int32, Single) Create a packed integer array writer for the given output, format, value count, and number of bits per value. The resulting stream will be long-aligned. this means that depending on the format which is used under the hoods, up to 63 bits will be wasted. An easy way to make sure that no space is lost is to always use a valueCount that is a multiple of 64. This method writes metadata to the stream, so that the resulting stream is sufficient to restore a PackedInt32s.Reader from it. You don't need to track valueCount or bitsPerValue by yourself. In case this is a problem, you should probably look at GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) . The acceptableOverheadRatio parameter controls how readers that will be restored from this stream trade space for speed by selecting a faster but potentially less memory-efficient implementation. An acceptableOverheadRatio of COMPACT will make sure that the most memory-efficient implementation is selected whereas FASTEST will make sure that the fastest implementation is selected. In case you are only interested in reading this stream sequentially later on, you should probably use COMPACT . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Writer GetWriter(DataOutput out, int valueCount, int bitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description DataOutput out The data output. System.Int32 valueCount The number of values. System.Int32 bitsPerValue The number of bits per value. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. Returns Type Description PackedInt32s.Writer A PackedInt32s.Writer . | Improve this Doc View Source GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) Expert: Create a packed integer array writer for the given output, format, value count, and number of bits per value. The resulting stream will be long-aligned. this means that depending on the format which is used, up to 63 bits will be wasted. An easy way to make sure that no space is lost is to always use a valueCount that is a multiple of 64. This method does not write any metadata to the stream, meaning that it is your responsibility to store it somewhere else in order to be able to recover data from the stream later on: format (using Id ), valueCount , bitsPerValue , VERSION_CURRENT . It is possible to start writing values without knowing how many of them you are actually going to write. To do this, just pass -1 as valueCount . On the other hand, for any positive value of valueCount , the returned writer will make sure that you don't write more values than expected and pad the end of stream with zeros in case you have written less than valueCount when calling Finish() . The mem parameter lets you control how much memory can be used to buffer changes in memory before flushing to disk. High values of mem are likely to improve throughput. On the other hand, if speed is not that important to you, a value of 0 will use as little memory as possible and should already offer reasonable throughput. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Writer GetWriterNoHeader(DataOutput out, PackedInt32s.Format format, int valueCount, int bitsPerValue, int mem) Parameters Type Name Description DataOutput out The data output. PackedInt32s.Format format The format to use to serialize the values. System.Int32 valueCount The number of values. System.Int32 bitsPerValue The number of bits per value. System.Int32 mem How much memory (in bytes) can be used to speed up serialization. Returns Type Description PackedInt32s.Writer A PackedInt32s.Writer . See Also GetReaderIteratorNoHeader(DataInput, PackedInt32s.Format, Int32, Int32, Int32, Int32) GetReaderNoHeader(DataInput, PackedInt32s.Format, Int32, Int32, Int32) | Improve this Doc View Source MaxValue(Int32) Calculates the maximum unsigned long that can be expressed with the given number of bits. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static long MaxValue(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue The number of bits available for any given value. Returns Type Description System.Int64 The maximum value for the given bits. | Improve this Doc View Source ReadHeader(DataInput) Expert: reads only the metadata from a stream. This is useful to later restore a stream or open a direct reader via GetReaderNoHeader(DataInput, PackedInt32s.Header) or GetDirectReaderNoHeader(IndexInput, PackedInt32s.Header) . Declaration public static PackedInt32s.Header ReadHeader(DataInput in) Parameters Type Name Description DataInput in The stream to read data. Returns Type Description PackedInt32s.Header Packed integer metadata. See Also GetReaderNoHeader(DataInput, PackedInt32s.Header) GetDirectReaderNoHeader(IndexInput, PackedInt32s.Header)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IDecoder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IDecoder.html",
    "title": "Interface PackedInt32s.IDecoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface PackedInt32s.IDecoder A decoder for packed integers. Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public interface IDecoder Properties | Improve this Doc View Source ByteBlockCount The minimum number of blocks to encode in a single iteration, when using byte encoding. Declaration int ByteBlockCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ByteValueCount The number of values that can be stored in ByteBlockCount blocks. Declaration int ByteValueCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64BlockCount The minimum number of blocks to encode in a single iteration, when using long encoding. NOTE: This was longBlockCount() in Lucene. Declaration int Int64BlockCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64ValueCount The number of values that can be stored in Int64BlockCount blocks. NOTE: This was longValueCount() in Lucene. Declaration int Int64ValueCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Decode(Byte[], Int32, Int32[], Int32, Int32) Read 8 * iterations * BlockCount blocks from blocks , decode them and write iterations * ValueCount values into values . Declaration void Decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) Parameters Type Name Description System.Byte [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start reading blocks. System.Int32 [] values The values buffer. System.Int32 valuesOffset The offset where to start writing values. System.Int32 iterations Controls how much data to decode. | Improve this Doc View Source Decode(Byte[], Int32, Int64[], Int32, Int32) Read 8 * iterations * BlockCount blocks from blocks , decode them and write iterations * ValueCount values into values . Declaration void Decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) Parameters Type Name Description System.Byte [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start reading blocks. System.Int64 [] values The values buffer. System.Int32 valuesOffset The offset where to start writing values. System.Int32 iterations Controls how much data to decode. | Improve this Doc View Source Decode(Int64[], Int32, Int32[], Int32, Int32) Read iterations * BlockCount blocks from blocks , decode them and write iterations * ValueCount values into values . Declaration void Decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) Parameters Type Name Description System.Int64 [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start reading blocks. System.Int32 [] values The values buffer. System.Int32 valuesOffset The offset where to start writing values. System.Int32 iterations Controls how much data to decode. | Improve this Doc View Source Decode(Int64[], Int32, Int64[], Int32, Int32) Read iterations * BlockCount blocks from blocks , decode them and write iterations * ValueCount values into values . Declaration void Decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) Parameters Type Name Description System.Int64 [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start reading blocks. System.Int64 [] values The values buffer. System.Int32 valuesOffset The offset where to start writing values. System.Int32 iterations Controls how much data to decode."
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IEncoder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IEncoder.html",
    "title": "Interface PackedInt32s.IEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface PackedInt32s.IEncoder An encoder for packed integers. Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public interface IEncoder Properties | Improve this Doc View Source ByteBlockCount The minimum number of byte blocks to encode in a single iteration, when using byte encoding. Declaration int ByteBlockCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ByteValueCount The number of values that can be stored in ByteBlockCount byte blocks. Declaration int ByteValueCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64BlockCount The minimum number of long blocks to encode in a single iteration, when using long encoding. NOTE: This was longBlockCount() in Lucene Declaration int Int64BlockCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64ValueCount The number of values that can be stored in Int64BlockCount long blocks. NOTE: This was longValueCount() in Lucene Declaration int Int64ValueCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Encode(Int32[], Int32, Byte[], Int32, Int32) Read iterations * ValueCount values from values , encode them and write 8 * iterations * BlockCount blocks into blocks . Declaration void Encode(int[] values, int valuesOffset, byte[] blocks, int blocksOffset, int iterations) Parameters Type Name Description System.Int32 [] values The values buffer. System.Int32 valuesOffset The offset where to start reading values. System.Byte [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start writing blocks. System.Int32 iterations Controls how much data to encode. | Improve this Doc View Source Encode(Int32[], Int32, Int64[], Int32, Int32) Read iterations * ValueCount values from values , encode them and write iterations * BlockCount blocks into blocks . Declaration void Encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) Parameters Type Name Description System.Int32 [] values The values buffer. System.Int32 valuesOffset The offset where to start reading values. System.Int64 [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start writing blocks. System.Int32 iterations Controls how much data to encode. | Improve this Doc View Source Encode(Int64[], Int32, Byte[], Int32, Int32) Read iterations * ValueCount values from values , encode them and write 8 * iterations * BlockCount blocks into blocks . Declaration void Encode(long[] values, int valuesOffset, byte[] blocks, int blocksOffset, int iterations) Parameters Type Name Description System.Int64 [] values The values buffer. System.Int32 valuesOffset The offset where to start reading values. System.Byte [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start writing blocks. System.Int32 iterations Controls how much data to encode. | Improve this Doc View Source Encode(Int64[], Int32, Int64[], Int32, Int32) Read iterations * ValueCount values from values , encode them and write iterations * BlockCount blocks into blocks . Declaration void Encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) Parameters Type Name Description System.Int64 [] values The values buffer. System.Int32 valuesOffset The offset where to start reading values. System.Int64 [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start writing blocks. System.Int32 iterations Controls how much data to encode."
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IReaderIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IReaderIterator.html",
    "title": "Interface PackedInt32s.IReaderIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface PackedInt32s.IReaderIterator Run-once iterator interface, to decode previously saved PackedInt32s . Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public interface IReaderIterator Properties | Improve this Doc View Source BitsPerValue Returns number of bits per value. Declaration int BitsPerValue { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Count Returns number of values. NOTE: This was size() in Lucene. Declaration int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Ord Returns the current position. Declaration int Ord { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Next() Returns next value. Declaration long Next() Returns Type Description System.Int64 | Improve this Doc View Source Next(Int32) Returns at least 1 and at most count next values, the returned ref MUST NOT be modified. Declaration Int64sRef Next(int count) Parameters Type Name Description System.Int32 count Returns Type Description Int64sRef"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Mutable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Mutable.html",
    "title": "Class PackedInt32s.Mutable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.Mutable A packed integer array that can be modified. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable GrowableWriter PackedInt32s.MutableImpl Inherited Members PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) PackedInt32s.Reader.BitsPerValue PackedInt32s.Reader.Count PackedInt32s.Reader.RamBytesUsed() PackedInt32s.Reader.GetArray() PackedInt32s.Reader.HasArray NumericDocValues.Get(Int32) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class Mutable : PackedInt32s.Reader Methods | Improve this Doc View Source Clear() Sets all values to 0. Declaration public virtual void Clear() | Improve this Doc View Source Fill(Int32, Int32, Int64) Fill the mutable from fromIndex (inclusive) to toIndex (exclusive) with val . Declaration public virtual void Fill(int fromIndex, int toIndex, long val) Parameters Type Name Description System.Int32 fromIndex System.Int32 toIndex System.Int64 val | Improve this Doc View Source Save(DataOutput) Save this mutable into out . Instantiating a reader from the generated data will return a reader with the same number of bits per value. Declaration public virtual void Save(DataOutput out) Parameters Type Name Description DataOutput out | Improve this Doc View Source Set(Int32, Int64) Set the value at the given index in the array. Declaration public abstract void Set(int index, long value) Parameters Type Name Description System.Int32 index Where the value should be positioned. System.Int64 value A value conforming to the constraints set by the array. | Improve this Doc View Source Set(Int32, Int64[], Int32, Int32) Bulk set: set at least one and at most len longs starting at off in arr into this mutable, starting at index . Returns the actual number of values that have been set. Declaration public virtual int Set(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.MutableImpl.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.MutableImpl.html",
    "title": "Class PackedInt32s.MutableImpl | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.MutableImpl Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable PackedInt32s.MutableImpl Packed64 Inherited Members PackedInt32s.Mutable.Set(Int32, Int64) PackedInt32s.Mutable.Set(Int32, Int64[], Int32, Int32) PackedInt32s.Mutable.Fill(Int32, Int32, Int64) PackedInt32s.Mutable.Clear() PackedInt32s.Mutable.Save(DataOutput) PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) PackedInt32s.Reader.RamBytesUsed() PackedInt32s.Reader.GetArray() PackedInt32s.Reader.HasArray NumericDocValues.Get(Int32) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class MutableImpl : PackedInt32s.Mutable Constructors | Improve this Doc View Source MutableImpl(Int32, Int32) Declaration protected MutableImpl(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue Fields | Improve this Doc View Source m_bitsPerValue Declaration protected readonly int m_bitsPerValue Field Value Type Description System.Int32 | Improve this Doc View Source m_valueCount Declaration protected readonly int m_valueCount Field Value Type Description System.Int32 Properties | Improve this Doc View Source BitsPerValue Declaration public override sealed int BitsPerValue { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.BitsPerValue | Improve this Doc View Source Count Declaration public override sealed int Count { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.Count"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.NullReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.NullReader.html",
    "title": "Class PackedInt32s.NullReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.NullReader A PackedInt32s.Reader which has all its values equal to 0 (bitsPerValue = 0). Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.NullReader Inherited Members PackedInt32s.Reader.GetArray() PackedInt32s.Reader.HasArray Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class NullReader : PackedInt32s.Reader Constructors | Improve this Doc View Source NullReader(Int32) Sole constructor. Declaration public NullReader(int valueCount) Parameters Type Name Description System.Int32 valueCount Properties | Improve this Doc View Source BitsPerValue Declaration public override int BitsPerValue { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.BitsPerValue | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.Count Methods | Improve this Doc View Source Get(Int32) Declaration public override long Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int64 Overrides NumericDocValues.Get(Int32) | Improve this Doc View Source Get(Int32, Int64[], Int32, Int32) Declaration public override int Get(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PackedInt32s.Reader.RamBytesUsed()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Reader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Reader.html",
    "title": "Class PackedInt32s.Reader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.Reader A read-only random access array of positive integers. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable PackedInt32s.NullReader Inherited Members NumericDocValues.Get(Int32) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class Reader : NumericDocValues Properties | Improve this Doc View Source BitsPerValue Declaration public abstract int BitsPerValue { get; } Property Value Type Description System.Int32 The number of bits used to store any given value. Note: this does not imply that memory usage is bitsPerValue * #values as implementations are free to use non-space-optimal packing of bits. | Improve this Doc View Source Count The number of values. NOTE: This was size() in Lucene. Declaration public abstract int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source HasArray Returns true if this implementation is backed by a native .NET array. Declaration public virtual bool HasArray { get; } Property Value Type Description System.Boolean See Also GetArray() Methods | Improve this Doc View Source Get(Int32, Int64[], Int32, Int32) Bulk get: read at least one and at most len longs starting from index into arr[off:off+len] and return the actual number of values that have been read. Declaration public virtual int Get(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 | Improve this Doc View Source GetArray() Expert: if the bit-width of this reader matches one of .NET's native types, returns the underlying array (ie, byte[], short[], int[], long[]); else, returns null . Note that when accessing the array you must upgrade the type (bitwise AND with all ones), to interpret the full value as unsigned. Ie, bytes[idx]&0xFF, shorts[idx]&0xFFFF, etc. Declaration public virtual object GetArray() Returns Type Description System.Object | Improve this Doc View Source RamBytesUsed() Return the in-memory size in bytes. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Writer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Writer.html",
    "title": "Class PackedInt32s.Writer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.Writer A write-once Writer. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedInt32s.Writer Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class Writer : object Constructors | Improve this Doc View Source Writer(DataOutput, Int32, Int32) Declaration protected Writer(DataOutput out, int valueCount, int bitsPerValue) Parameters Type Name Description DataOutput out System.Int32 valueCount System.Int32 bitsPerValue Fields | Improve this Doc View Source m_bitsPerValue Declaration protected readonly int m_bitsPerValue Field Value Type Description System.Int32 | Improve this Doc View Source m_out Declaration protected readonly DataOutput m_out Field Value Type Description DataOutput | Improve this Doc View Source m_valueCount Declaration protected readonly int m_valueCount Field Value Type Description System.Int32 Properties | Improve this Doc View Source BitsPerValue The number of bits per value. Declaration public int BitsPerValue { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Format The format used to serialize values. Declaration protected abstract PackedInt32s.Format Format { get; } Property Value Type Description PackedInt32s.Format | Improve this Doc View Source Ord Returns the current ord in the stream (number of values that have been written so far minus one). Declaration public abstract int Ord { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(Int64) Add a value to the stream. Declaration public abstract void Add(long v) Parameters Type Name Description System.Int64 v | Improve this Doc View Source Finish() Perform end-of-stream operations. Declaration public abstract void Finish()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PagedGrowableWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PagedGrowableWriter.html",
    "title": "Class PagedGrowableWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PagedGrowableWriter A PagedGrowableWriter . This class slices data into fixed-size blocks which have independent numbers of bits per value and grow on-demand. You should use this class instead of the AbstractAppendingInt64Buffer related ones only when you need random write-access. Otherwise this class will likely be slower and less memory-efficient. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractPagedMutable < PagedGrowableWriter > PagedGrowableWriter Inherited Members AbstractPagedMutable<PagedGrowableWriter>.FillPages() AbstractPagedMutable<PagedGrowableWriter>.Count AbstractPagedMutable<PagedGrowableWriter>.Get(Int64) AbstractPagedMutable<PagedGrowableWriter>.Set(Int64, Int64) AbstractPagedMutable<PagedGrowableWriter>.RamBytesUsed() AbstractPagedMutable<PagedGrowableWriter>.Resize(Int64) AbstractPagedMutable<PagedGrowableWriter>.Grow(Int64) AbstractPagedMutable<PagedGrowableWriter>.Grow() AbstractPagedMutable<PagedGrowableWriter>.ToString() Int64Values.Get(Int32) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class PagedGrowableWriter : AbstractPagedMutable<PagedGrowableWriter> Constructors | Improve this Doc View Source PagedGrowableWriter(Int64, Int32, Int32, Single) Create a new PagedGrowableWriter instance. Declaration public PagedGrowableWriter(long size, int pageSize, int startBitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description System.Int64 size The number of values to store. System.Int32 pageSize The number of values per page. System.Int32 startBitsPerValue The initial number of bits per value. System.Single acceptableOverheadRatio An acceptable overhead ratio. Methods | Improve this Doc View Source BaseRamBytesUsed() Declaration protected override long BaseRamBytesUsed() Returns Type Description System.Int64 Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedGrowableWriter>.BaseRamBytesUsed() | Improve this Doc View Source NewMutable(Int32, Int32) Declaration protected override PackedInt32s.Mutable NewMutable(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description PackedInt32s.Mutable Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedGrowableWriter>.NewMutable(System.Int32, System.Int32) | Improve this Doc View Source NewUnfilledCopy(Int64) Declaration protected override PagedGrowableWriter NewUnfilledCopy(long newSize) Parameters Type Name Description System.Int64 newSize Returns Type Description PagedGrowableWriter Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedGrowableWriter>.NewUnfilledCopy(System.Int64)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PagedMutable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PagedMutable.html",
    "title": "Class PagedMutable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PagedMutable A PagedMutable . This class slices data into fixed-size blocks which have the same number of bits per value. It can be a useful replacement for PackedInt32s.Mutable to store more than 2B values. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractPagedMutable < PagedMutable > PagedMutable Inherited Members AbstractPagedMutable<PagedMutable>.FillPages() AbstractPagedMutable<PagedMutable>.Count AbstractPagedMutable<PagedMutable>.Get(Int64) AbstractPagedMutable<PagedMutable>.Set(Int64, Int64) AbstractPagedMutable<PagedMutable>.RamBytesUsed() AbstractPagedMutable<PagedMutable>.Resize(Int64) AbstractPagedMutable<PagedMutable>.Grow(Int64) AbstractPagedMutable<PagedMutable>.Grow() AbstractPagedMutable<PagedMutable>.ToString() Int64Values.Get(Int32) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class PagedMutable : AbstractPagedMutable<PagedMutable> Constructors | Improve this Doc View Source PagedMutable(Int64, Int32, Int32, Single) Create a new PagedMutable instance. Declaration public PagedMutable(long size, int pageSize, int bitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description System.Int64 size The number of values to store. System.Int32 pageSize The number of values per page. System.Int32 bitsPerValue The number of bits per value. System.Single acceptableOverheadRatio An acceptable overhead ratio. Methods | Improve this Doc View Source BaseRamBytesUsed() Declaration protected override long BaseRamBytesUsed() Returns Type Description System.Int64 Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedMutable>.BaseRamBytesUsed() | Improve this Doc View Source NewMutable(Int32, Int32) Declaration protected override PackedInt32s.Mutable NewMutable(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description PackedInt32s.Mutable Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedMutable>.NewMutable(System.Int32, System.Int32) | Improve this Doc View Source NewUnfilledCopy(Int64) Declaration protected override PagedMutable NewUnfilledCopy(long newSize) Parameters Type Name Description System.Int64 newSize Returns Type Description PagedMutable Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedMutable>.NewUnfilledCopy(System.Int64)"
  },
  "api/Lucene.Net/Lucene.Net.Util.PagedBytes.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PagedBytes.html",
    "title": "Class PagedBytes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PagedBytes Represents a logical byte[] as a series of pages. You can write-once into the logical byte[] (append only), using copy, and then retrieve slices ( BytesRef ) into it using fill. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PagedBytes Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class PagedBytes : object Constructors | Improve this Doc View Source PagedBytes(Int32) 1<<blockBits must be bigger than biggest single BytesRef slice that will be pulled. Declaration public PagedBytes(int blockBits) Parameters Type Name Description System.Int32 blockBits Methods | Improve this Doc View Source Copy(IndexInput, Int64) Read this many bytes from in . Declaration public void Copy(IndexInput in, long byteCount) Parameters Type Name Description IndexInput in System.Int64 byteCount | Improve this Doc View Source Copy(BytesRef, BytesRef) Copy BytesRef in, setting BytesRef out to the result. Do not use this if you will use Freeze(true) . This only supports bytes.Length <= blockSize / Declaration public void Copy(BytesRef bytes, BytesRef out) Parameters Type Name Description BytesRef bytes BytesRef out | Improve this Doc View Source CopyUsingLengthPrefix(BytesRef) Copy bytes in, writing the length as a 1 or 2 byte vInt prefix. Declaration public long CopyUsingLengthPrefix(BytesRef bytes) Parameters Type Name Description BytesRef bytes Returns Type Description System.Int64 | Improve this Doc View Source Freeze(Boolean) Commits final byte[] , trimming it if necessary and if trim =true. Declaration public PagedBytes.Reader Freeze(bool trim) Parameters Type Name Description System.Boolean trim Returns Type Description PagedBytes.Reader | Improve this Doc View Source GetDataInput() Returns a DataInput to read values from this PagedBytes instance. Declaration public PagedBytes.PagedBytesDataInput GetDataInput() Returns Type Description PagedBytes.PagedBytesDataInput | Improve this Doc View Source GetDataOutput() Returns a DataOutput that you may use to write into this PagedBytes instance. If you do this, you should not call the other writing methods (eg, copy); results are undefined. Declaration public PagedBytes.PagedBytesDataOutput GetDataOutput() Returns Type Description PagedBytes.PagedBytesDataOutput | Improve this Doc View Source GetPointer() Declaration public long GetPointer() Returns Type Description System.Int64 | Improve this Doc View Source RamBytesUsed() Return approx RAM usage in bytes. Declaration public long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.PagedBytes.PagedBytesDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PagedBytes.PagedBytesDataInput.html",
    "title": "Class PagedBytes.PagedBytesDataInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PagedBytes.PagedBytesDataInput Inheritance System.Object DataInput PagedBytes.PagedBytesDataInput Inherited Members DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class PagedBytesDataInput : DataInput Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides DataInput.Clone() | Improve this Doc View Source GetPosition() Returns the current byte position. Declaration public long GetPosition() Returns Type Description System.Int64 | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source SetPosition(Int64) Seek to a position previously obtained from GetPosition() . Declaration public void SetPosition(long position) Parameters Type Name Description System.Int64 position"
  },
  "api/Lucene.Net/Lucene.Net.Util.PagedBytes.PagedBytesDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PagedBytes.PagedBytesDataOutput.html",
    "title": "Class PagedBytes.PagedBytesDataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PagedBytes.PagedBytesDataOutput Inheritance System.Object DataOutput PagedBytes.PagedBytesDataOutput Inherited Members DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class PagedBytesDataOutput : DataOutput Constructors | Improve this Doc View Source PagedBytesDataOutput(PagedBytes) Declaration public PagedBytesDataOutput(PagedBytes outerInstance) Parameters Type Name Description PagedBytes outerInstance Methods | Improve this Doc View Source GetPosition() Return the current byte position. Declaration public long GetPosition() Returns Type Description System.Int64 | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.PagedBytes.Reader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PagedBytes.Reader.html",
    "title": "Class PagedBytes.Reader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PagedBytes.Reader Provides methods to read BytesRef s from a frozen PagedBytes . Inheritance System.Object PagedBytes.Reader Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Reader : object Methods | Improve this Doc View Source Fill(BytesRef, Int64) Reads length as 1 or 2 byte vInt prefix, starting at start . Note: this method does not support slices spanning across block borders. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Fill(BytesRef b, long start) Parameters Type Name Description BytesRef b System.Int64 start | Improve this Doc View Source FillSlice(BytesRef, Int64, Int32) Gets a slice out of PagedBytes starting at start with a given length. If the slice spans across a block border this method will allocate sufficient resources and copy the paged data. Slices spanning more than two blocks are not supported. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void FillSlice(BytesRef b, long start, int length) Parameters Type Name Description BytesRef b System.Int64 start System.Int32 length | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public long RamBytesUsed() Returns Type Description System.Int64 See Also Freeze(Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Util.PForDeltaDocIdSet.Builder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PForDeltaDocIdSet.Builder.html",
    "title": "Class PForDeltaDocIdSet.Builder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PForDeltaDocIdSet.Builder A builder for PForDeltaDocIdSet . Inheritance System.Object PForDeltaDocIdSet.Builder Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class Builder : object Constructors | Improve this Doc View Source Builder() Sole constructor. Declaration public Builder() Methods | Improve this Doc View Source Add(DocIdSetIterator) Convenience method to add the content of a DocIdSetIterator to this builder. Declaration public virtual PForDeltaDocIdSet.Builder Add(DocIdSetIterator it) Parameters Type Name Description DocIdSetIterator it Returns Type Description PForDeltaDocIdSet.Builder | Improve this Doc View Source Add(Int32) Add a document to this builder. Documents must be added in order. Declaration public virtual PForDeltaDocIdSet.Builder Add(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description PForDeltaDocIdSet.Builder | Improve this Doc View Source Build() Build the PForDeltaDocIdSet instance. Declaration public virtual PForDeltaDocIdSet Build() Returns Type Description PForDeltaDocIdSet | Improve this Doc View Source SetIndexInterval(Int32) Set the index interval. Every indexInterval -th block will be stored in the index. Set to to disable indexing. Declaration public virtual PForDeltaDocIdSet.Builder SetIndexInterval(int indexInterval) Parameters Type Name Description System.Int32 indexInterval Returns Type Description PForDeltaDocIdSet.Builder"
  },
  "api/Lucene.Net/Lucene.Net.Util.PForDeltaDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PForDeltaDocIdSet.html",
    "title": "Class PForDeltaDocIdSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PForDeltaDocIdSet DocIdSet implementation based on pfor-delta encoding. This implementation is inspired from LinkedIn's Kamikaze ( http://data.linkedin.com/opensource/kamikaze ) and Daniel Lemire's JavaFastPFOR ( https://github.com/lemire/JavaFastPFOR ). On the contrary to the original PFOR paper, exceptions are encoded with FOR instead of Simple16. Inheritance System.Object DocIdSet PForDeltaDocIdSet Inherited Members DocIdSet.Bits DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class PForDeltaDocIdSet : DocIdSet Properties | Improve this Doc View Source IsCacheable Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source Cardinality() Return the number of documents in this DocIdSet in constant time. Declaration public int Cardinality() Returns Type Description System.Int32 | Improve this Doc View Source GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source RamBytesUsed() Return the memory usage of this instance. Declaration public long RamBytesUsed() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Util.PrintStreamInfoStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PrintStreamInfoStream.html",
    "title": "Class PrintStreamInfoStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrintStreamInfoStream LUCENENET specific stub to assist with migration to TextWriterInfoStream . Inheritance System.Object InfoStream TextWriterInfoStream PrintStreamInfoStream Inherited Members TextWriterInfoStream.m_messageID TextWriterInfoStream.m_stream TextWriterInfoStream.Message(String, String) TextWriterInfoStream.IsEnabled(String) TextWriterInfoStream.Dispose(Boolean) TextWriterInfoStream.IsSystemStream InfoStream.NO_OUTPUT InfoStream.Default InfoStream.Dispose() InfoStream.Clone() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class PrintStreamInfoStream : TextWriterInfoStream Constructors | Improve this Doc View Source PrintStreamInfoStream(TextWriter) Declaration public PrintStreamInfoStream(TextWriter stream) Parameters Type Name Description TextWriter stream | Improve this Doc View Source PrintStreamInfoStream(TextWriter, Int32) Declaration public PrintStreamInfoStream(TextWriter stream, int messageID) Parameters Type Name Description TextWriter stream System.Int32 messageID"
  },
  "api/Lucene.Net/Lucene.Net.Util.PriorityQueue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PriorityQueue-1.html",
    "title": "Class PriorityQueue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PriorityQueue<T> A PriorityQueue<T> maintains a partial ordering of its elements such that the element with least priority can always be found in constant time. Put()'s and Pop()'s require log(size) time. NOTE : this class will pre-allocate a full array of length maxSize+1 if instantiated via the PriorityQueue(Int32, Boolean) constructor with prepopulate set to true . That maximum size can grow as we insert elements over the time. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PriorityQueue<T> FieldValueHitQueue<T> Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class PriorityQueue<T> : object Type Parameters Name Description T Constructors | Improve this Doc View Source PriorityQueue(Int32) Declaration public PriorityQueue(int maxSize) Parameters Type Name Description System.Int32 maxSize | Improve this Doc View Source PriorityQueue(Int32, Boolean) Declaration public PriorityQueue(int maxSize, bool prepopulate) Parameters Type Name Description System.Int32 maxSize System.Boolean prepopulate Properties | Improve this Doc View Source Count Returns the number of elements currently stored in the PriorityQueue<T> . NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source HeapArray This method returns the internal heap array as T[]. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected T[] HeapArray { get; } Property Value Type Description T[] | Improve this Doc View Source Top Returns the least element of the PriorityQueue<T> in constant time. Returns null if the queue is empty. Declaration public T Top { get; } Property Value Type Description T Methods | Improve this Doc View Source Add(T) Adds an Object to a PriorityQueue<T> in log(size) time. If one tries to add more objects than Lucene.Net.Util.PriorityQueue`1.maxSize from initialize and it is not possible to resize the heap, an is thrown. Declaration public T Add(T element) Parameters Type Name Description T element Returns Type Description T The new 'top' element in the queue. | Improve this Doc View Source Clear() Removes all entries from the PriorityQueue<T> . Declaration public void Clear() | Improve this Doc View Source GetSentinelObject() This method can be overridden by extending classes to return a sentinel object which will be used by the PriorityQueue(Int32, Boolean) constructor to fill the queue, so that the code which uses that queue can always assume it's full and only change the top without attempting to insert any new object. Those sentinel values should always compare worse than any non-sentinel value (i.e., LessThan(T, T) should always favor the non-sentinel values). By default, this method returns false , which means the queue will not be filled with sentinel values. Otherwise, the value returned will be used to pre-populate the queue. Adds sentinel values to the queue. If this method is extended to return a non-null value, then the following usage pattern is recommended: // extends GetSentinelObject() to return a non-null value. PriorityQueue<MyObject> pq = new MyQueue<MyObject>(numHits); // save the 'top' element, which is guaranteed to not be null. MyObject pqTop = pq.Top; <...> // now in order to add a new element, which is 'better' than top (after // you've verified it is better), it is as simple as: pqTop.Change(). pqTop = pq.UpdateTop(); NOTE: if this method returns a non- null value, it will be called by the PriorityQueue(Int32, Boolean) constructor Count times, relying on a new object to be returned and will not check if it's null again. Therefore you should ensure any call to this method creates a new instance and behaves consistently, e.g., it cannot return null if it previously returned non- null . Declaration protected virtual T GetSentinelObject() Returns Type Description T The sentinel object to use to pre-populate the queue, or null if sentinel objects are not supported. | Improve this Doc View Source InsertWithOverflow(T) Adds an Object to a PriorityQueue<T> in log(size) time. It returns the object (if any) that was dropped off the heap because it was full. This can be the given parameter (in case it is smaller than the full heap's minimum, and couldn't be added), or another object that was previously the smallest value in the heap and now has been replaced by a larger one, or null if the queue wasn't yet full with Lucene.Net.Util.PriorityQueue`1.maxSize elements. Declaration public virtual T InsertWithOverflow(T element) Parameters Type Name Description T element Returns Type Description T | Improve this Doc View Source LessThan(T, T) Determines the ordering of objects in this priority queue. Subclasses must define this one method. Declaration protected abstract bool LessThan(T a, T b) Parameters Type Name Description T a T b Returns Type Description System.Boolean true if parameter a is less than parameter b . | Improve this Doc View Source Pop() Removes and returns the least element of the PriorityQueue<T> in log(size) time. Declaration public T Pop() Returns Type Description T | Improve this Doc View Source UpdateTop() Should be called when the Object at top changes values. Still log(n) worst case, but it's at least twice as fast to pq.Top.Change(); pq.UpdateTop(); instead of o = pq.Pop(); o.Change(); pq.Push(o); Declaration public T UpdateTop() Returns Type Description T The new 'top' element."
  },
  "api/Lucene.Net/Lucene.Net.Util.QueryBuilder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.QueryBuilder.html",
    "title": "Class QueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryBuilder Creates queries from the Analyzer chain. Example usage: QueryBuilder builder = new QueryBuilder(analyzer); Query a = builder.CreateBooleanQuery(\"body\", \"just a test\"); Query b = builder.CreatePhraseQuery(\"body\", \"another test\"); Query c = builder.CreateMinShouldMatchQuery(\"body\", \"another test\", 0.5f); This can also be used as a subclass for query parsers to make it easier to interact with the analysis chain. Factory methods such as NewTermQuery(Term) are provided so that the generated queries can be customized. Inheritance System.Object QueryBuilder Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class QueryBuilder : object Constructors | Improve this Doc View Source QueryBuilder(Analyzer) Creates a new QueryBuilder using the given analyzer. Declaration public QueryBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Properties | Improve this Doc View Source Analyzer Gets or Sets the analyzer. Declaration public virtual Analyzer Analyzer { get; set; } Property Value Type Description Analyzer | Improve this Doc View Source EnablePositionIncrements Gets or Sets whether position increments are enabled. When true , result phrase and multi-phrase queries will be aware of position increments. Useful when e.g. a StopFilter increases the position increment of the token that follows an omitted token. Default: true. Declaration public virtual bool EnablePositionIncrements { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source CreateBooleanQuery(String, String) Creates a boolean query from the query text. This is equivalent to CreateBooleanQuery(field, queryText, Occur.SHOULD) Declaration public virtual Query CreateBooleanQuery(string field, string queryText) Parameters Type Name Description System.String field Field name. System.String queryText Text to be passed to the analyzer. Returns Type Description Query TermQuery or BooleanQuery , based on the analysis of queryText . | Improve this Doc View Source CreateBooleanQuery(String, String, Occur) Creates a boolean query from the query text. Declaration public virtual Query CreateBooleanQuery(string field, string queryText, Occur operator) Parameters Type Name Description System.String field Field name System.String queryText Text to be passed to the analyzer. Occur operator Operator used for clauses between analyzer tokens. Returns Type Description Query TermQuery or BooleanQuery , based on the analysis of queryText . | Improve this Doc View Source CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) Creates a query from the analysis chain. Expert: this is more useful for subclasses such as queryparsers. If using this class directly, just use CreateBooleanQuery(String, String) and CreatePhraseQuery(String, String) . Declaration protected Query CreateFieldQuery(Analyzer analyzer, Occur operator, string field, string queryText, bool quoted, int phraseSlop) Parameters Type Name Description Analyzer analyzer Analyzer used for this query. Occur operator Default boolean operator used for this query. System.String field Field to create queries against. System.String queryText Text to be passed to the analysis chain. System.Boolean quoted true if phrases should be generated when terms occur at more than one position. System.Int32 phraseSlop Slop factor for phrase/multiphrase queries. Returns Type Description Query | Improve this Doc View Source CreateMinShouldMatchQuery(String, String, Single) Creates a minimum-should-match query from the query text. Declaration public virtual Query CreateMinShouldMatchQuery(string field, string queryText, float fraction) Parameters Type Name Description System.String field Field name. System.String queryText Text to be passed to the analyzer. System.Single fraction of query terms [0..1] that should match Returns Type Description Query TermQuery or BooleanQuery , based on the analysis of queryText . | Improve this Doc View Source CreatePhraseQuery(String, String) Creates a phrase query from the query text. This is equivalent to CreatePhraseQuery(field, queryText, 0) Declaration public virtual Query CreatePhraseQuery(string field, string queryText) Parameters Type Name Description System.String field Field name. System.String queryText Text to be passed to the analyzer. Returns Type Description Query TermQuery , BooleanQuery , PhraseQuery , or MultiPhraseQuery , based on the analysis of queryText . | Improve this Doc View Source CreatePhraseQuery(String, String, Int32) Creates a phrase query from the query text. Declaration public virtual Query CreatePhraseQuery(string field, string queryText, int phraseSlop) Parameters Type Name Description System.String field Field name. System.String queryText Text to be passed to the analyzer. System.Int32 phraseSlop number of other words permitted between words in query phrase Returns Type Description Query TermQuery , BooleanQuery , PhraseQuery , or MultiPhraseQuery , based on the analysis of queryText . | Improve this Doc View Source NewBooleanQuery(Boolean) Builds a new BooleanQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual BooleanQuery NewBooleanQuery(bool disableCoord) Parameters Type Name Description System.Boolean disableCoord Disable coord. Returns Type Description BooleanQuery New BooleanQuery instance. | Improve this Doc View Source NewMultiPhraseQuery() Builds a new MultiPhraseQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual MultiPhraseQuery NewMultiPhraseQuery() Returns Type Description MultiPhraseQuery New MultiPhraseQuery instance. | Improve this Doc View Source NewPhraseQuery() Builds a new PhraseQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual PhraseQuery NewPhraseQuery() Returns Type Description PhraseQuery New PhraseQuery instance. | Improve this Doc View Source NewTermQuery(Term) Builds a new TermQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual Query NewTermQuery(Term term) Parameters Type Name Description Term term Term. Returns Type Description Query New TermQuery instance."
  },
  "api/Lucene.Net/Lucene.Net.Util.RamUsageEstimator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RamUsageEstimator.html",
    "title": "Class RamUsageEstimator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RamUsageEstimator Estimates the size (memory representation) of .NET objects. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object RamUsageEstimator Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class RamUsageEstimator : object Fields | Improve this Doc View Source NUM_BYTES_ARRAY_HEADER Number of bytes to represent an array header (no content, but with alignments). Declaration public static readonly int NUM_BYTES_ARRAY_HEADER Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_BOOLEAN Declaration public const int NUM_BYTES_BOOLEAN = null Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_BYTE Declaration public const int NUM_BYTES_BYTE = null Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_CHAR Declaration public const int NUM_BYTES_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_DOUBLE Declaration public const int NUM_BYTES_DOUBLE = null Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_INT16 NOTE: This was NUM_BYTES_SHORT in Lucene Declaration public const int NUM_BYTES_INT16 = null Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_INT32 NOTE: This was NUM_BYTES_INT in Lucene Declaration public const int NUM_BYTES_INT32 = null Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_INT64 NOTE: This was NUM_BYTES_LONG in Lucene Declaration public const int NUM_BYTES_INT64 = null Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_OBJECT_ALIGNMENT A constant specifying the object alignment boundary inside the .NET runtime. Objects will always take a full multiple of this constant, possibly wasting some space. Declaration public static readonly int NUM_BYTES_OBJECT_ALIGNMENT Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_OBJECT_HEADER Number of bytes to represent an object header (no fields, no alignments). Declaration public static readonly int NUM_BYTES_OBJECT_HEADER Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_OBJECT_REF Number of bytes this .NET runtime uses to represent an object reference. Declaration public static readonly int NUM_BYTES_OBJECT_REF Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_SINGLE NOTE: This was NUM_BYTES_FLOAT in Lucene Declaration public const int NUM_BYTES_SINGLE = null Field Value Type Description System.Int32 | Improve this Doc View Source ONE_GB One gigabyte bytes. Declaration public const long ONE_GB = null Field Value Type Description System.Int64 | Improve this Doc View Source ONE_KB One kilobyte bytes. Declaration public const long ONE_KB = null Field Value Type Description System.Int64 | Improve this Doc View Source ONE_MB One megabyte bytes. Declaration public const long ONE_MB = null Field Value Type Description System.Int64 Methods | Improve this Doc View Source AlignObjectSize(Int64) Aligns an object size to be the next multiple of NUM_BYTES_OBJECT_ALIGNMENT . Declaration public static long AlignObjectSize(long size) Parameters Type Name Description System.Int64 size Returns Type Description System.Int64 | Improve this Doc View Source HumanReadableUnits(Int64) Returns size in human-readable units (GB, MB, KB or bytes). Declaration public static string HumanReadableUnits(long bytes) Parameters Type Name Description System.Int64 bytes Returns Type Description System.String | Improve this Doc View Source HumanReadableUnits(Int64, IFormatProvider) Returns size in human-readable units (GB, MB, KB or bytes). Declaration public static string HumanReadableUnits(long bytes, IFormatProvider df) Parameters Type Name Description System.Int64 bytes IFormatProvider df Returns Type Description System.String | Improve this Doc View Source HumanSizeOf(Object) Return a human-readable size of a given object. Declaration public static string HumanSizeOf(object object) Parameters Type Name Description System.Object object Returns Type Description System.String See Also SizeOf(Object) HumanReadableUnits(Int64) | Improve this Doc View Source HumanSizeOf(Object, IFormatProvider) Return a human-readable size of a given object. Declaration public static string HumanSizeOf(object object, IFormatProvider df) Parameters Type Name Description System.Object object IFormatProvider df Returns Type Description System.String See Also SizeOf(Object) HumanReadableUnits(Int64) | Improve this Doc View Source ShallowSizeOf(Object) Estimates a \"shallow\" memory usage of the given object. For arrays, this will be the memory taken by array storage (no subreferences will be followed). For objects, this will be the memory taken by the fields. .NET object alignments are also applied. Declaration public static long ShallowSizeOf(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Int64 | Improve this Doc View Source ShallowSizeOfInstance(Type) Returns the shallow instance size in bytes an instance of the given class would occupy. This works with all conventional classes and primitive types, but not with arrays (the size then depends on the number of elements and varies from object to object). Declaration public static long ShallowSizeOfInstance(Type clazz) Parameters Type Name Description Type clazz Returns Type Description System.Int64 See Also ShallowSizeOf(Object) | Improve this Doc View Source SizeOf(Boolean[]) Returns the size in bytes of the bool[] object. Declaration public static long SizeOf(bool[] arr) Parameters Type Name Description System.Boolean [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Byte[]) Returns the size in bytes of the byte[] object. Declaration public static long SizeOf(byte[] arr) Parameters Type Name Description System.Byte [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Char[]) Returns the size in bytes of the char[] object. Declaration public static long SizeOf(char[] arr) Parameters Type Name Description System.Char [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Double[]) Returns the size in bytes of the double[] object. Declaration public static long SizeOf(double[] arr) Parameters Type Name Description System.Double [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Int16[]) Returns the size in bytes of the short[] object. Declaration public static long SizeOf(short[] arr) Parameters Type Name Description System.Int16 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Int32[]) Returns the size in bytes of the int[] object. Declaration public static long SizeOf(int[] arr) Parameters Type Name Description System.Int32 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Int64[]) Returns the size in bytes of the long[] object. Declaration public static long SizeOf(long[] arr) Parameters Type Name Description System.Int64 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Object) Estimates the RAM usage by the given object. It will walk the object tree and sum up all referenced objects. Resource Usage: this method internally uses a set of every object seen during traversals so it does allocate memory (it isn't side-effect free). After the method exits, this memory should be GCed. Declaration public static long SizeOf(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(SByte[]) Returns the size in bytes of the sbyte[] object. Declaration public static long SizeOf(sbyte[] arr) Parameters Type Name Description System.SByte [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Single[]) Returns the size in bytes of the float[] object. Declaration public static long SizeOf(float[] arr) Parameters Type Name Description System.Single [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(UInt16[]) Returns the size in bytes of the ushort[] object. Declaration public static long SizeOf(ushort[] arr) Parameters Type Name Description System.UInt16 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(UInt32[]) Returns the size in bytes of the uint[] object. Declaration public static long SizeOf(uint[] arr) Parameters Type Name Description System.UInt32 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(UInt64[]) Returns the size in bytes of the ulong[] object. Declaration public static long SizeOf(ulong[] arr) Parameters Type Name Description System.UInt64 [] arr Returns Type Description System.Int64 See Also SizeOf(Object) ShallowSizeOf(Object) ShallowSizeOfInstance(Type)"
  },
  "api/Lucene.Net/Lucene.Net.Util.RecyclingByteBlockAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RecyclingByteBlockAllocator.html",
    "title": "Class RecyclingByteBlockAllocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RecyclingByteBlockAllocator A ByteBlockPool.Allocator implementation that recycles unused byte blocks in a buffer and reuses them in subsequent calls to GetByteBlock() . Note: this class is not thread-safe. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ByteBlockPool.Allocator RecyclingByteBlockAllocator Inherited Members ByteBlockPool.Allocator.m_blockSize ByteBlockPool.Allocator.RecycleByteBlocks(IList<Byte[]>) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class RecyclingByteBlockAllocator : ByteBlockPool.Allocator Constructors | Improve this Doc View Source RecyclingByteBlockAllocator() Creates a new RecyclingByteBlockAllocator with a block size of BYTE_BLOCK_SIZE , upper buffered docs limit of DEFAULT_BUFFERED_BLOCKS (64). Declaration public RecyclingByteBlockAllocator() | Improve this Doc View Source RecyclingByteBlockAllocator(Int32, Int32) Creates a new RecyclingByteBlockAllocator . Declaration public RecyclingByteBlockAllocator(int blockSize, int maxBufferedBlocks) Parameters Type Name Description System.Int32 blockSize The block size in bytes. System.Int32 maxBufferedBlocks Maximum number of buffered byte block. | Improve this Doc View Source RecyclingByteBlockAllocator(Int32, Int32, Counter) Creates a new RecyclingByteBlockAllocator Declaration public RecyclingByteBlockAllocator(int blockSize, int maxBufferedBlocks, Counter bytesUsed) Parameters Type Name Description System.Int32 blockSize The block size in bytes. System.Int32 maxBufferedBlocks Maximum number of buffered byte block. Counter bytesUsed Counter reference counting internally allocated bytes. Fields | Improve this Doc View Source DEFAULT_BUFFERED_BLOCKS Declaration public const int DEFAULT_BUFFERED_BLOCKS = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source BytesUsed Declaration public long BytesUsed { get; } Property Value Type Description System.Int64 The number of bytes currently allocated by this ByteBlockPool.Allocator . | Improve this Doc View Source MaxBufferedBlocks Declaration public int MaxBufferedBlocks { get; } Property Value Type Description System.Int32 The maximum number of buffered byte blocks. | Improve this Doc View Source NumBufferedBlocks Declaration public int NumBufferedBlocks { get; } Property Value Type Description System.Int32 The number of currently buffered blocks. Methods | Improve this Doc View Source FreeBlocks(Int32) Removes the given number of byte blocks from the buffer if possible. Declaration public int FreeBlocks(int num) Parameters Type Name Description System.Int32 num The number of byte blocks to remove. Returns Type Description System.Int32 The number of actually removed buffers. | Improve this Doc View Source GetByteBlock() Declaration public override byte[] GetByteBlock() Returns Type Description System.Byte [] Overrides ByteBlockPool.Allocator.GetByteBlock() | Improve this Doc View Source RecycleByteBlocks(Byte[][], Int32, Int32) Declaration public override void RecycleByteBlocks(byte[][] blocks, int start, int end) Parameters Type Name Description System.Byte [][] blocks System.Int32 start System.Int32 end Overrides ByteBlockPool.Allocator.RecycleByteBlocks(Byte[][], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.RecyclingInt32BlockAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RecyclingInt32BlockAllocator.html",
    "title": "Class RecyclingInt32BlockAllocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RecyclingInt32BlockAllocator A Int32BlockPool.Allocator implementation that recycles unused blocks in a buffer and reuses them in subsequent calls to GetInt32Block() . Note: this class is not thread-safe. NOTE: This was RecyclingIntBlockAllocator in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32BlockPool.Allocator RecyclingInt32BlockAllocator Inherited Members Int32BlockPool.Allocator.m_blockSize Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class RecyclingInt32BlockAllocator : Int32BlockPool.Allocator Constructors | Improve this Doc View Source RecyclingInt32BlockAllocator() Creates a new RecyclingInt32BlockAllocator with a block size of INT32_BLOCK_SIZE , upper buffered docs limit of DEFAULT_BUFFERED_BLOCKS . Declaration public RecyclingInt32BlockAllocator() | Improve this Doc View Source RecyclingInt32BlockAllocator(Int32, Int32) Creates a new RecyclingInt32BlockAllocator . Declaration public RecyclingInt32BlockAllocator(int blockSize, int maxBufferedBlocks) Parameters Type Name Description System.Int32 blockSize The size of each block returned by this allocator. System.Int32 maxBufferedBlocks Maximum number of buffered int blocks. | Improve this Doc View Source RecyclingInt32BlockAllocator(Int32, Int32, Counter) Creates a new RecyclingInt32BlockAllocator . Declaration public RecyclingInt32BlockAllocator(int blockSize, int maxBufferedBlocks, Counter bytesUsed) Parameters Type Name Description System.Int32 blockSize The block size in bytes. System.Int32 maxBufferedBlocks Maximum number of buffered int block. Counter bytesUsed Counter reference counting internally allocated bytes. Fields | Improve this Doc View Source DEFAULT_BUFFERED_BLOCKS Declaration public const int DEFAULT_BUFFERED_BLOCKS = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source BytesUsed Declaration public long BytesUsed { get; } Property Value Type Description System.Int64 The number of bytes currently allocated by this Int32BlockPool.Allocator . | Improve this Doc View Source MaxBufferedBlocks Declaration public int MaxBufferedBlocks { get; } Property Value Type Description System.Int32 The maximum number of buffered byte blocks. | Improve this Doc View Source NumBufferedBlocks Declaration public int NumBufferedBlocks { get; } Property Value Type Description System.Int32 The number of currently buffered blocks. Methods | Improve this Doc View Source FreeBlocks(Int32) Removes the given number of int blocks from the buffer if possible. Declaration public int FreeBlocks(int num) Parameters Type Name Description System.Int32 num The number of int blocks to remove. Returns Type Description System.Int32 The number of actually removed buffers. | Improve this Doc View Source GetInt32Block() NOTE: This was getIntBlock() in Lucene Declaration public override int[] GetInt32Block() Returns Type Description System.Int32 [] Overrides Int32BlockPool.Allocator.GetInt32Block() | Improve this Doc View Source RecycleInt32Blocks(Int32[][], Int32, Int32) NOTE: This was recycleIntBlocks in Lucene Declaration public override void RecycleInt32Blocks(int[][] blocks, int start, int end) Parameters Type Name Description System.Int32 [][] blocks System.Int32 start System.Int32 end Overrides Int32BlockPool.Allocator.RecycleInt32Blocks(Int32[][], Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.RefCount-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RefCount-1.html",
    "title": "Class RefCount<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RefCount<T> Manages reference counting for a given object. Extensions can override Release() to do custom logic when reference counting hits 0. Inheritance System.Object RefCount<T> Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class RefCount<T> : object Type Parameters Name Description T Constructors | Improve this Doc View Source RefCount(T) Declaration public RefCount(T object) Parameters Type Name Description T object Fields | Improve this Doc View Source m_object Declaration protected readonly T m_object Field Value Type Description T Methods | Improve this Doc View Source DecRef() Decrements the reference counting of this object. When reference counting hits 0, calls Release() . Declaration public void DecRef() | Improve this Doc View Source Get() Declaration public T Get() Returns Type Description T | Improve this Doc View Source GetRefCount() Returns the current reference count. Declaration public int GetRefCount() Returns Type Description System.Int32 | Improve this Doc View Source IncRef() Increments the reference count. Calls to this method must be matched with calls to DecRef() . Declaration public void IncRef() | Improve this Doc View Source Release() Called when reference counting hits 0. By default this method does nothing, but extensions can override to e.g. release resources attached to object that is managed by this class. Declaration protected virtual void Release()"
  },
  "api/Lucene.Net/Lucene.Net.Util.RollingBuffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RollingBuffer.html",
    "title": "Class RollingBuffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RollingBuffer LUCENENET specific class to allow referencing static members of RollingBuffer<T> without referencing its generic closing type. Inheritance System.Object RollingBuffer Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public static class RollingBuffer : object"
  },
  "api/Lucene.Net/Lucene.Net.Util.RollingBuffer.IResettable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RollingBuffer.IResettable.html",
    "title": "Interface RollingBuffer.IResettable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface RollingBuffer.IResettable Implement to reset an instance Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IResettable Methods | Improve this Doc View Source Reset() Declaration void Reset()"
  },
  "api/Lucene.Net/Lucene.Net.Util.RollingBuffer-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RollingBuffer-1.html",
    "title": "Class RollingBuffer<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RollingBuffer<T> Acts like forever growing T[] , but internally uses a circular buffer to reuse instances of . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object RollingBuffer<T> Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class RollingBuffer<T> : object where T : RollingBuffer.IResettable Type Parameters Name Description T Constructors | Improve this Doc View Source RollingBuffer() Declaration protected RollingBuffer() | Improve this Doc View Source RollingBuffer(Func<T>) Declaration protected RollingBuffer(Func<T> factory) Parameters Type Name Description Func <T> factory Properties | Improve this Doc View Source MaxPos Returns the maximum position looked up, or -1 if no position has been looked up since Reset() /init. Declaration public virtual int MaxPos { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source FreeBefore(Int32) Declaration public virtual void FreeBefore(int pos) Parameters Type Name Description System.Int32 pos | Improve this Doc View Source Get(Int32) Get T instance for this absolute position; This is allowed to be arbitrarily far \"in the future\" but cannot be before the last FreeBefore(Int32) . Declaration public virtual T Get(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description T | Improve this Doc View Source NewInstance() Declaration protected abstract T NewInstance() Returns Type Description T | Improve this Doc View Source Reset() Declaration public virtual void Reset()"
  },
  "api/Lucene.Net/Lucene.Net.Util.SentinelInt32Set.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SentinelInt32Set.html",
    "title": "Class SentinelInt32Set | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SentinelInt32Set A native hash-based set where one value is reserved to mean \"EMPTY\" internally. The space overhead is fairly low as there is only one power-of-two sized int[] to hold the values. The set is re-hashed when adding a value that would make it >= 75% full. Consider extending and over-riding Hash(Int32) if the values might be poor hash keys; Lucene docids should be fine. The internal fields are exposed publicly to enable more efficient use at the expense of better O-O principles. To iterate over the integers held in this set, simply use code like this: SentinelIntSet set = ... foreach (int v in set.keys) { if (v == set.EmptyVal) continue; //use v... } NOTE: This was SentinelIntSet in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SentinelInt32Set Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class SentinelInt32Set : object Constructors | Improve this Doc View Source SentinelInt32Set(Int32, Int32) Declaration public SentinelInt32Set(int size, int emptyVal) Parameters Type Name Description System.Int32 size The minimum number of elements this set should be able to hold without rehashing (i.e. the slots are guaranteed not to change). System.Int32 emptyVal The integer value to use for EMPTY. Properties | Improve this Doc View Source Count The number of integers in this set. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EmptyVal Declaration public int EmptyVal { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Keys A power-of-2 over-sized array holding the integers in the set along with empty values. Declaration public int[] Keys { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source RehashCount The count at which a rehash should be done. Declaration public int RehashCount { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source Exists(Int32) Does this set contain the specified integer? Declaration public virtual bool Exists(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Boolean | Improve this Doc View Source Find(Int32) (internal) Returns the slot for this key, or -slot-1 if not found. Declaration public virtual int Find(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Int32 | Improve this Doc View Source GetSlot(Int32) (internal) Returns the slot for this key. Declaration public virtual int GetSlot(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Int32 | Improve this Doc View Source Hash(Int32) (internal) Return the hash for the key. The default implementation just returns the key, which is not appropriate for general purpose use. Declaration public virtual int Hash(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Int32 | Improve this Doc View Source Put(Int32) Puts this integer (key) in the set, and returns the slot index it was added to. It rehashes if adding it would make the set more than 75% full. Declaration public virtual int Put(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Int32 | Improve this Doc View Source Rehash() (internal) Rehashes by doubling key ( int[] ) and filling with the old values. Declaration public virtual void Rehash()"
  },
  "api/Lucene.Net/Lucene.Net.Util.ServiceNameAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ServiceNameAttribute.html",
    "title": "Class ServiceNameAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ServiceNameAttribute LUCENENET specific abstract class for s that can be used to override the default convention-based names of services. For example, \"Lucene40Codec\" will by convention be named \"Lucene40\". Using the CodecNameAttribute , the name can be overridden with a custom value. Inheritance System.Object ServiceNameAttribute CodecNameAttribute DocValuesFormatNameAttribute PostingsFormatNameAttribute Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class ServiceNameAttribute : System.Attribute Constructors | Improve this Doc View Source ServiceNameAttribute(String) Sole constructor. Initializes the service name. Declaration public ServiceNameAttribute(string name) Parameters Type Name Description System.String name Properties | Improve this Doc View Source Name Gets the service name. Declaration public string Name { get; } Property Value Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.SetOnce-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SetOnce-1.html",
    "title": "Class SetOnce<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SetOnce<T> A convenient class which offers a semi-immutable object wrapper implementation which allows one to set the value of an object exactly once, and retrieve it many times. If Set(T) is called more than once, AlreadySetException is thrown and the operation will fail. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SetOnce<T> Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class SetOnce<T> : object where T : class Type Parameters Name Description T Constructors | Improve this Doc View Source SetOnce() A default constructor which does not set the internal object, and allows setting it by calling Set(T) . Declaration public SetOnce() | Improve this Doc View Source SetOnce(T) Creates a new instance with the internal object set to the given object. Note that any calls to Set(T) afterwards will result in AlreadySetException Declaration public SetOnce(T obj) Parameters Type Name Description T obj Exceptions Type Condition AlreadySetException if called more than once See Also Set(T) Methods | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object | Improve this Doc View Source Get() Returns the object set by Set(T) . Declaration public T Get() Returns Type Description T | Improve this Doc View Source Set(T) Sets the given object. If the object has already been set, an exception is thrown. Declaration public void Set(T obj) Parameters Type Name Description T obj"
  },
  "api/Lucene.Net/Lucene.Net.Util.SloppyMath.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SloppyMath.html",
    "title": "Class SloppyMath | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SloppyMath Math functions that trade off accuracy for speed. Inheritance System.Object SloppyMath Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class SloppyMath : object Methods | Improve this Doc View Source Asin(Double) Returns the arc sine of a value. The returned angle is in the range -pi /2 through pi /2. Error is around 1E-7. Special cases: If the argument is or its absolute value is greater than 1, then the result is . Declaration public static double Asin(double a) Parameters Type Name Description System.Double a the value whose arc sine is to be returned. Returns Type Description System.Double arc sine of the argument | Improve this Doc View Source Cos(Double) Returns the trigonometric cosine of an angle. Error is around 1E-15. Special cases: If the argument is or an infinity, then the result is . Declaration public static double Cos(double a) Parameters Type Name Description System.Double a An angle, in radians. Returns Type Description System.Double The cosine of the argument. | Improve this Doc View Source EarthDiameter(Double) Return an approximate value of the diameter of the earth at the given latitude, in kilometers. Declaration public static double EarthDiameter(double latitude) Parameters Type Name Description System.Double latitude Returns Type Description System.Double | Improve this Doc View Source Haversin(Double, Double, Double, Double) Returns the distance in kilometers between two points specified in decimal degrees (latitude/longitude). Declaration public static double Haversin(double lat1, double lon1, double lat2, double lon2) Parameters Type Name Description System.Double lat1 Latitude of the first point. System.Double lon1 Longitude of the first point. System.Double lat2 Latitude of the second point. System.Double lon2 Longitude of the second point. Returns Type Description System.Double distance in kilometers."
  },
  "api/Lucene.Net/Lucene.Net.Util.SmallSingle.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SmallSingle.html",
    "title": "Class SmallSingle | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SmallSingle Floating point numbers smaller than 32 bits. NOTE: This was SmallFloat in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SmallSingle Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class SmallSingle : object Methods | Improve this Doc View Source Byte315ToSingle(Byte) ByteToSingle(b, mantissaBits=3, zeroExponent=15) NOTE: This was byte315ToFloat() in Lucene Declaration public static float Byte315ToSingle(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Single | Improve this Doc View Source Byte52ToSingle(Byte) ByteToFloat(b, mantissaBits=5, zeroExponent=2) NOTE: This was byte52ToFloat() in Lucene Declaration public static float Byte52ToSingle(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Single | Improve this Doc View Source ByteToSingle(Byte, Int32, Int32) Converts an 8 bit to a 32 bit . NOTE: This was byteToFloat() in Lucene Declaration public static float ByteToSingle(byte b, int numMantissaBits, int zeroExp) Parameters Type Name Description System.Byte b System.Int32 numMantissaBits System.Int32 zeroExp Returns Type Description System.Single | Improve this Doc View Source SByte315ToSingle(SByte) SByteToSingle(b, mantissaBits=3, zeroExponent=15) NOTE: This was byte315ToFloat() in Lucene Declaration public static float SByte315ToSingle(sbyte b) Parameters Type Name Description System.SByte b Returns Type Description System.Single | Improve this Doc View Source SByte52ToSingle(SByte) SByteToFloat(b, mantissaBits=5, zeroExponent=2) NOTE: This was byte52ToFloat() in Lucene Declaration public static float SByte52ToSingle(sbyte b) Parameters Type Name Description System.SByte b Returns Type Description System.Single | Improve this Doc View Source SByteToSingle(SByte, Int32, Int32) Converts an 8 bit to a 32 bit . NOTE: This was byteToFloat() in Lucene Declaration public static float SByteToSingle(sbyte b, int numMantissaBits, int zeroExp) Parameters Type Name Description System.SByte b System.Int32 numMantissaBits System.Int32 zeroExp Returns Type Description System.Single | Improve this Doc View Source SingleToByte(Single, Int32, Int32) Converts a 32 bit to an 8 bit . Values less than zero are all mapped to zero. Values are truncated (rounded down) to the nearest 8 bit value. Values between zero and the smallest representable value are rounded up. Declaration public static byte SingleToByte(float f, int numMantissaBits, int zeroExp) Parameters Type Name Description System.Single f The 32 bit to be converted to an 8 bit ( ). System.Int32 numMantissaBits The number of mantissa bits to use in the byte, with the remainder to be used in the exponent. System.Int32 zeroExp The zero-point in the range of exponent values. Returns Type Description System.Byte The 8 bit float representation. | Improve this Doc View Source SingleToByte315(Single) SingleToSByte((byte)b, mantissaBits=3, zeroExponent=15) smallest non-zero value = 5.820766E-10 largest value = 7.5161928E9 epsilon = 0.125 NOTE: This was floatToByte315() in Lucene Declaration public static byte SingleToByte315(float f) Parameters Type Name Description System.Single f Returns Type Description System.Byte | Improve this Doc View Source SingleToByte52(Single) SingleToByte(b, mantissaBits=5, zeroExponent=2) smallest nonzero value = 0.033203125 largest value = 1984.0 epsilon = 0.03125 NOTE: This was floatToByte52() in Lucene Declaration public static byte SingleToByte52(float f) Parameters Type Name Description System.Single f Returns Type Description System.Byte | Improve this Doc View Source SingleToSByte(Single, Int32, Int32) Converts a 32 bit to an 8 bit . Values less than zero are all mapped to zero. Values are truncated (rounded down) to the nearest 8 bit value. Values between zero and the smallest representable value are rounded up. NOTE: This was floatToByte() in Lucene Declaration public static sbyte SingleToSByte(float f, int numMantissaBits, int zeroExp) Parameters Type Name Description System.Single f The 32 bit to be converted to an 8 bit ( ). System.Int32 numMantissaBits The number of mantissa bits to use in the byte, with the remainder to be used in the exponent. System.Int32 zeroExp The zero-point in the range of exponent values. Returns Type Description System.SByte The 8 bit float representation. | Improve this Doc View Source SingleToSByte315(Single) SingleToSByte(b, mantissaBits=3, zeroExponent=15) smallest non-zero value = 5.820766E-10 largest value = 7.5161928E9 epsilon = 0.125 NOTE: This was floatToByte315() in Lucene Declaration public static sbyte SingleToSByte315(float f) Parameters Type Name Description System.Single f Returns Type Description System.SByte | Improve this Doc View Source SingleToSByte52(Single) SingleToSByte(b, mantissaBits=5, zeroExponent=2) smallest nonzero value = 0.033203125 largest value = 1984.0 epsilon = 0.03125 NOTE: This was floatToByte52() in Lucene Declaration public static sbyte SingleToSByte52(float f) Parameters Type Name Description System.Single f Returns Type Description System.SByte"
  },
  "api/Lucene.Net/Lucene.Net.Util.Sorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Sorter.html",
    "title": "Class Sorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Sorter Base class for sorting algorithms implementations. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Sorter InPlaceMergeSorter IntroSorter TimSorter Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Sorter : object Constructors | Improve this Doc View Source Sorter() Sole constructor, used for inheritance. Declaration protected Sorter() Methods | Improve this Doc View Source Compare(Int32, Int32) Compare entries found in slots i and j . The contract for the returned value is the same as . Declaration protected abstract int Compare(int i, int j) Parameters Type Name Description System.Int32 i System.Int32 j Returns Type Description System.Int32 | Improve this Doc View Source Sort(Int32, Int32) Sort the slice which starts at from (inclusive) and ends at to (exclusive). Declaration public abstract void Sort(int from, int to) Parameters Type Name Description System.Int32 from System.Int32 to | Improve this Doc View Source Swap(Int32, Int32) Swap values at slots i and j . Declaration protected abstract void Swap(int i, int j) Parameters Type Name Description System.Int32 i System.Int32 j"
  },
  "api/Lucene.Net/Lucene.Net.Util.SPIClassIterator-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SPIClassIterator-1.html",
    "title": "Class SPIClassIterator<S> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SPIClassIterator<S> Helper class for loading SPI classes from classpath (META-INF files). This is a light impl of java.util.ServiceLoader but is guaranteed to be bug-free regarding classpath order and does not instantiate or initialize the classes found. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SPIClassIterator<S> Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class SPIClassIterator<S> : IEnumerable<Type> Type Parameters Name Description S Methods | Improve this Doc View Source Get() Declaration public static SPIClassIterator<S> Get() Returns Type Description SPIClassIterator <S> | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<Type> GetEnumerator() Returns Type Description IEnumerator < Type >"
  },
  "api/Lucene.Net/Lucene.Net.Util.StringHelper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.StringHelper.html",
    "title": "Class StringHelper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringHelper Methods for manipulating strings. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object StringHelper Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class StringHelper : object Fields | Improve this Doc View Source GOOD_FAST_HASH_SEED Pass this as the seed to Murmurhash3_x86_32(Byte[], Int32, Int32, Int32) . Declaration public static readonly int GOOD_FAST_HASH_SEED Field Value Type Description System.Int32 Properties | Improve this Doc View Source VersionComparer Returns a IComparer{string} over versioned strings such as X.YY.Z This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static IComparer<string> VersionComparer { get; } Property Value Type Description IComparer < System.String > Methods | Improve this Doc View Source BytesDifference(BytesRef, BytesRef) Compares two BytesRef , element by element, and returns the number of elements common to both arrays. Declaration public static int BytesDifference(BytesRef left, BytesRef right) Parameters Type Name Description BytesRef left The first BytesRef to compare. BytesRef right The second BytesRef to compare. Returns Type Description System.Int32 The number of common elements. | Improve this Doc View Source EndsWith(BytesRef, BytesRef) Returns true if the ref ends with the given suffix . Otherwise false . Declaration public static bool EndsWith(BytesRef ref, BytesRef suffix) Parameters Type Name Description BytesRef ref The BytesRef to test. BytesRef suffix The expected suffix Returns Type Description System.Boolean Returns true if the ref ends with the given suffix . Otherwise false . | Improve this Doc View Source Equals(String, String) Declaration public static bool Equals(string s1, string s2) Parameters Type Name Description System.String s1 System.String s2 Returns Type Description System.Boolean | Improve this Doc View Source Murmurhash3_x86_32(BytesRef, Int32) Returns the MurmurHash3_x86_32 hash. Original source/tests at https://github.com/yonik/java_util/ . Declaration public static int Murmurhash3_x86_32(BytesRef bytes, int seed) Parameters Type Name Description BytesRef bytes System.Int32 seed Returns Type Description System.Int32 | Improve this Doc View Source Murmurhash3_x86_32(Byte[], Int32, Int32, Int32) Returns the MurmurHash3_x86_32 hash. Original source/tests at https://github.com/yonik/java_util/ . Declaration public static int Murmurhash3_x86_32(byte[] data, int offset, int len, int seed) Parameters Type Name Description System.Byte [] data System.Int32 offset System.Int32 len System.Int32 seed Returns Type Description System.Int32 | Improve this Doc View Source StartsWith(BytesRef, BytesRef) Returns true if the ref starts with the given prefix . Otherwise false . Declaration public static bool StartsWith(BytesRef ref, BytesRef prefix) Parameters Type Name Description BytesRef ref The BytesRef to test. BytesRef prefix The expected prefix Returns Type Description System.Boolean Returns true if the ref starts with the given prefix . Otherwise false ."
  },
  "api/Lucene.Net/Lucene.Net.Util.TextWriterInfoStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.TextWriterInfoStream.html",
    "title": "Class TextWriterInfoStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TextWriterInfoStream InfoStream implementation over a such as . NOTE: This is analogous to PrintStreamInfoStream in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object InfoStream TextWriterInfoStream PrintStreamInfoStream Inherited Members InfoStream.NO_OUTPUT InfoStream.Default InfoStream.Dispose() InfoStream.Clone() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class TextWriterInfoStream : InfoStream Constructors | Improve this Doc View Source TextWriterInfoStream(TextWriter) Declaration public TextWriterInfoStream(TextWriter stream) Parameters Type Name Description TextWriter stream | Improve this Doc View Source TextWriterInfoStream(TextWriter, Int32) Declaration public TextWriterInfoStream(TextWriter stream, int messageID) Parameters Type Name Description TextWriter stream System.Int32 messageID Fields | Improve this Doc View Source m_messageID Declaration protected readonly int m_messageID Field Value Type Description System.Int32 | Improve this Doc View Source m_stream Declaration protected readonly TextWriter m_stream Field Value Type Description TextWriter Properties | Improve this Doc View Source IsSystemStream Declaration public virtual bool IsSystemStream { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides InfoStream.Dispose(Boolean) | Improve this Doc View Source IsEnabled(String) Declaration public override bool IsEnabled(string component) Parameters Type Name Description System.String component Returns Type Description System.Boolean Overrides InfoStream.IsEnabled(String) | Improve this Doc View Source Message(String, String) Declaration public override void Message(string component, string message) Parameters Type Name Description System.String component System.String message Overrides InfoStream.Message(String, String)"
  },
  "api/Lucene.Net/Lucene.Net.Util.TimSorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.TimSorter.html",
    "title": "Class TimSorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TimSorter Sorter implementation based on the TimSort algorithm. This implementation is especially good at sorting partially-sorted arrays and sorts small arrays with binary sort. NOTE :There are a few differences with the original implementation: The extra amount of memory to perform merges is configurable. This allows small merges to be very fast while large merges will be performed in-place (slightly slower). You can make sure that the fast merge routine will always be used by having maxTempSlots equal to half of the length of the slice of data to sort. Only the fast merge routine can gallop (the one that doesn't run in-place) and it only gallops on the longest slice. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Sorter TimSorter Inherited Members Sorter.Compare(Int32, Int32) Sorter.Swap(Int32, Int32) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class TimSorter : Sorter Constructors | Improve this Doc View Source TimSorter(Int32) Create a new TimSorter . Declaration protected TimSorter(int maxTempSlots) Parameters Type Name Description System.Int32 maxTempSlots The maximum amount of extra memory to run merges Methods | Improve this Doc View Source CompareSaved(Int32, Int32) Compare element i from the temporary storage with element j from the slice to sort, similarly to Compare(Int32, Int32) . Declaration protected abstract int CompareSaved(int i, int j) Parameters Type Name Description System.Int32 i System.Int32 j Returns Type Description System.Int32 | Improve this Doc View Source Copy(Int32, Int32) Copy data from slot src to slot dest >. Declaration protected abstract void Copy(int src, int dest) Parameters Type Name Description System.Int32 src System.Int32 dest | Improve this Doc View Source Restore(Int32, Int32) Restore element j from the temporary storage into slot i . Declaration protected abstract void Restore(int i, int j) Parameters Type Name Description System.Int32 i System.Int32 j | Improve this Doc View Source Save(Int32, Int32) Save all elements between slots i and i + len into the temporary storage. Declaration protected abstract void Save(int i, int len) Parameters Type Name Description System.Int32 i System.Int32 len | Improve this Doc View Source Sort(Int32, Int32) Sort the slice which starts at from (inclusive) and ends at to (exclusive). Declaration public override void Sort(int from, int to) Parameters Type Name Description System.Int32 from System.Int32 to Overrides Sorter.Sort(Int32, Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.ToStringUtils.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ToStringUtils.html",
    "title": "Class ToStringUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToStringUtils Helper methods to ease implementing . Inheritance System.Object ToStringUtils Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class ToStringUtils : object Methods | Improve this Doc View Source Boost(Single) For printing boost only if not 1.0. Declaration public static string Boost(float boost) Parameters Type Name Description System.Single boost Returns Type Description System.String | Improve this Doc View Source ByteArray(StringBuilder, Byte[]) Declaration public static void ByteArray(StringBuilder buffer, byte[] bytes) Parameters Type Name Description StringBuilder buffer System.Byte [] bytes | Improve this Doc View Source Int64Hex(Int64) NOTE: This was longHex() in Lucene Declaration public static string Int64Hex(long x) Parameters Type Name Description System.Int64 x Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.UnicodeUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.UnicodeUtil.html",
    "title": "Class UnicodeUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnicodeUtil Class to encode .NET's UTF16 char[] into UTF8 byte[] without always allocating a new byte[] as of does. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object UnicodeUtil Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public static class UnicodeUtil : object Fields | Improve this Doc View Source BIG_TERM A binary term consisting of a number of 0xff bytes, likely to be bigger than other terms (e.g. collation keys) one would normally encounter, and definitely bigger than any UTF-8 terms. WARNING: this is not a valid UTF8 Term Declaration public static readonly BytesRef BIG_TERM Field Value Type Description BytesRef | Improve this Doc View Source UNI_REPLACEMENT_CHAR Declaration public const int UNI_REPLACEMENT_CHAR = null Field Value Type Description System.Int32 | Improve this Doc View Source UNI_SUR_HIGH_END Declaration public const int UNI_SUR_HIGH_END = null Field Value Type Description System.Int32 | Improve this Doc View Source UNI_SUR_HIGH_START Declaration public const int UNI_SUR_HIGH_START = null Field Value Type Description System.Int32 | Improve this Doc View Source UNI_SUR_LOW_END Declaration public const int UNI_SUR_LOW_END = null Field Value Type Description System.Int32 | Improve this Doc View Source UNI_SUR_LOW_START Declaration public const int UNI_SUR_LOW_START = null Field Value Type Description System.Int32 Methods | Improve this Doc View Source CodePointCount(BytesRef) Returns the number of code points in this UTF8 sequence. This method assumes valid UTF8 input. This method does not perform full UTF8 validation, it will check only the first byte of each codepoint (for multi-byte sequences any bytes after the head are skipped). Declaration public static int CodePointCount(BytesRef utf8) Parameters Type Name Description BytesRef utf8 Returns Type Description System.Int32 | Improve this Doc View Source NewString(Int32[], Int32, Int32) Cover JDK 1.5 API. Create a String from an array of codePoints . Declaration public static string NewString(int[] codePoints, int offset, int count) Parameters Type Name Description System.Int32 [] codePoints The code array. System.Int32 offset The start of the text in the code point array. System.Int32 count The number of code points. Returns Type Description System.String a String representing the code points between offset and count. | Improve this Doc View Source ToCharArray(Int32[], Int32, Int32) Generates char array that represents the provided input code points. LUCENENET specific. Declaration public static char[] ToCharArray(int[] codePoints, int offset, int count) Parameters Type Name Description System.Int32 [] codePoints The code array. System.Int32 offset The start of the text in the code point array. System.Int32 count The number of code points. Returns Type Description System.Char [] a char array representing the code points between offset and count. | Improve this Doc View Source ToHexString(String) Declaration public static string ToHexString(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source UTF16toUTF8(ICharSequence, Int32, Int32, BytesRef) Encode characters from this ICharSequence , starting at offset for length characters. After encoding, result.Offset will always be 0. Declaration public static void UTF16toUTF8(ICharSequence s, int offset, int length, BytesRef result) Parameters Type Name Description ICharSequence s System.Int32 offset System.Int32 length BytesRef result | Improve this Doc View Source UTF16toUTF8(Char[], Int32, Int32, BytesRef) Encode characters from a char[] source , starting at offset for length chars. After encoding, result.Offset will always be 0. Declaration public static void UTF16toUTF8(char[] source, int offset, int length, BytesRef result) Parameters Type Name Description System.Char [] source System.Int32 offset System.Int32 length BytesRef result | Improve this Doc View Source UTF16toUTF8(String, Int32, Int32, BytesRef) Encode characters from this , starting at offset for length characters. After encoding, result.Offset will always be 0. LUCENENET specific. Declaration public static void UTF16toUTF8(string s, int offset, int length, BytesRef result) Parameters Type Name Description System.String s System.Int32 offset System.Int32 length BytesRef result | Improve this Doc View Source UTF8toUTF16(BytesRef, CharsRef) Utility method for UTF8toUTF16(Byte[], Int32, Int32, CharsRef) Declaration public static void UTF8toUTF16(BytesRef bytesRef, CharsRef chars) Parameters Type Name Description BytesRef bytesRef CharsRef chars See Also UTF8toUTF16(Byte[], Int32, Int32, CharsRef) | Improve this Doc View Source UTF8toUTF16(Byte[], Int32, Int32, CharsRef) Interprets the given byte array as UTF-8 and converts to UTF-16. The CharsRef will be extended if it doesn't provide enough space to hold the worst case of each byte becoming a UTF-16 codepoint. NOTE: Full characters are read, even if this reads past the length passed (and can result in an if invalid UTF-8 is passed). Explicit checks for valid UTF-8 are not performed. Declaration public static void UTF8toUTF16(byte[] utf8, int offset, int length, CharsRef chars) Parameters Type Name Description System.Byte [] utf8 System.Int32 offset System.Int32 length CharsRef chars | Improve this Doc View Source UTF8toUTF32(BytesRef, Int32sRef) This method assumes valid UTF8 input. This method does not perform full UTF8 validation, it will check only the first byte of each codepoint (for multi-byte sequences any bytes after the head are skipped). Declaration public static void UTF8toUTF32(BytesRef utf8, Int32sRef utf32) Parameters Type Name Description BytesRef utf8 Int32sRef utf32 | Improve this Doc View Source ValidUTF16String(ICharSequence) Declaration public static bool ValidUTF16String(ICharSequence s) Parameters Type Name Description ICharSequence s Returns Type Description System.Boolean | Improve this Doc View Source ValidUTF16String(StringBuilder) Declaration public static bool ValidUTF16String(StringBuilder s) Parameters Type Name Description StringBuilder s Returns Type Description System.Boolean | Improve this Doc View Source ValidUTF16String(Char[], Int32) Declaration public static bool ValidUTF16String(char[] s, int size) Parameters Type Name Description System.Char [] s System.Int32 size Returns Type Description System.Boolean | Improve this Doc View Source ValidUTF16String(String) Declaration public static bool ValidUTF16String(string s) Parameters Type Name Description System.String s Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Util.VirtualMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.VirtualMethod.html",
    "title": "Class VirtualMethod | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VirtualMethod A utility for keeping backwards compatibility on previously abstract methods (or similar replacements). Before the replacement method can be made abstract, the old method must kept deprecated. If somebody still overrides the deprecated method in a non-sealed class, you must keep track, of this and maybe delegate to the old method in the subclass. The cost of reflection is minimized by the following usage of this class: Define static readonly fields in the base class ( BaseClass ), where the old and new method are declared: internal static readonly VirtualMethod newMethod = new VirtualMethod(typeof(BaseClass), \"newName\", parameters...); internal static readonly VirtualMethod oldMethod = new VirtualMethod(typeof(BaseClass), \"oldName\", parameters...); this enforces the singleton status of these objects, as the maintenance of the cache would be too costly else. If you try to create a second instance of for the same method/ baseClass combination, an exception is thrown. To detect if e.g. the old method was overridden by a more far subclass on the inheritance path to the current instance's class, use a non-static field: bool isDeprecatedMethodOverridden = oldMethod.GetImplementationDistance(this.GetType()) > newMethod.GetImplementationDistance(this.GetType()); // alternatively (more readable): bool isDeprecatedMethodOverridden = VirtualMethod.CompareImplementationDistance(this.GetType(), oldMethod, newMethod) > 0 GetImplementationDistance(Type) returns the distance of the subclass that overrides this method. The one with the larger distance should be used preferable. this way also more complicated method rename scenarios can be handled (think of 2.9 TokenStream deprecations). This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object VirtualMethod Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class VirtualMethod : object Constructors | Improve this Doc View Source VirtualMethod(Type, String, Type[]) Creates a new instance for the given baseClass and method declaration. Declaration public VirtualMethod(Type baseClass, string method, params Type[] parameters) Parameters Type Name Description Type baseClass System.String method Type [] parameters Methods | Improve this Doc View Source CompareImplementationDistance(Type, VirtualMethod, VirtualMethod) Utility method that compares the implementation/override distance of two methods. Declaration public static int CompareImplementationDistance(Type clazz, VirtualMethod m1, VirtualMethod m2) Parameters Type Name Description Type clazz VirtualMethod m1 VirtualMethod m2 Returns Type Description System.Int32 > 1, iff m1 is overridden/implemented in a subclass of the class overriding/declaring m2 < 1, iff m2 is overridden in a subclass of the class overriding/declaring m1 0, iff both methods are overridden in the same class (or are not overridden at all) | Improve this Doc View Source GetImplementationDistance(Type) Returns the distance from the baseClass in which this method is overridden/implemented in the inheritance path between baseClass and the given subclass subclazz . Declaration public int GetImplementationDistance(Type subclazz) Parameters Type Name Description Type subclazz Returns Type Description System.Int32 0 if and only if not overridden, else the distance to the base class. | Improve this Doc View Source IsOverriddenAsOf(Type) Returns, if this method is overridden/implemented in the inheritance path between baseClass and the given subclass subclazz . You can use this method to detect if a method that should normally be final was overridden by the given instance's class. Declaration public bool IsOverriddenAsOf(Type subclazz) Parameters Type Name Description Type subclazz Returns Type Description System.Boolean false if and only if not overridden."
  },
  "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.Builder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.Builder.html",
    "title": "Class WAH8DocIdSet.Builder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WAH8DocIdSet.Builder A builder for WAH8DocIdSet s. Inheritance System.Object WAH8DocIdSet.WordBuilder WAH8DocIdSet.Builder Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Builder : WAH8DocIdSet.WordBuilder Constructors | Improve this Doc View Source Builder() Sole constructor Declaration public Builder() Methods | Improve this Doc View Source Add(DocIdSetIterator) Add the content of the provided DocIdSetIterator . Declaration public WAH8DocIdSet.Builder Add(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi Returns Type Description WAH8DocIdSet.Builder | Improve this Doc View Source Add(Int32) Add a document to this builder. Documents must be added in order. Declaration public WAH8DocIdSet.Builder Add(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description WAH8DocIdSet.Builder | Improve this Doc View Source Build() Declaration public override WAH8DocIdSet Build() Returns Type Description WAH8DocIdSet Overrides WAH8DocIdSet.WordBuilder.Build() | Improve this Doc View Source SetIndexInterval(Int32) Declaration public override object SetIndexInterval(int indexInterval) Parameters Type Name Description System.Int32 indexInterval Returns Type Description System.Object Overrides WAH8DocIdSet.WordBuilder.SetIndexInterval(Int32)"
  },
  "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.html",
    "title": "Class WAH8DocIdSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WAH8DocIdSet DocIdSet implementation based on word-aligned hybrid encoding on words of 8 bits. This implementation doesn't support random-access but has a fast DocIdSetIterator which can advance in logarithmic time thanks to an index. The compression scheme is simplistic and should work well with sparse and very dense doc id sets while being only slightly larger than a FixedBitSet for incompressible sets (overhead<2% in the worst case) in spite of the index. Format : The format is byte-aligned. An 8-bits word is either clean, meaning composed only of zeros or ones, or dirty, meaning that it contains between 1 and 7 bits set. The idea is to encode sequences of clean words using run-length encoding and to leave sequences of dirty words as-is. TokenClean length+Dirty length+Dirty words 1 byte0-n bytes0-n bytes0-n bytes Token encodes whether clean means full of zeros or ones in the first bit, the number of clean words minus 2 on the next 3 bits and the number of dirty words on the last 4 bits. The higher-order bit is a continuation bit, meaning that the number is incomplete and needs additional bytes to be read. Clean length+ : If clean length has its higher-order bit set, you need to read a vint ( ReadVInt32() ), shift it by 3 bits on the left side and add it to the 3 bits which have been read in the token. Dirty length+ works the same way as Clean length+ but on 4 bits and for the length of dirty words. Dirty words are the dirty words, there are Dirty length of them. This format cannot encode sequences of less than 2 clean words and 0 dirty word. The reason is that if you find a single clean word, you should rather encode it as a dirty word. This takes the same space as starting a new sequence (since you need one byte for the token) but will be lighter to decode. There is however an exception for the first sequence. Since the first sequence may start directly with a dirty word, the clean length is encoded directly, without subtracting 2. There is an additional restriction on the format: the sequence of dirty words is not allowed to contain two consecutive clean words. This restriction exists to make sure no space is wasted and to make sure iterators can read the next doc ID by reading at most 2 dirty words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSet WAH8DocIdSet Inherited Members DocIdSet.Bits DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class WAH8DocIdSet : DocIdSet Fields | Improve this Doc View Source DEFAULT_INDEX_INTERVAL Default index interval. Declaration public const int DEFAULT_INDEX_INTERVAL = null Field Value Type Description System.Int32 Properties | Improve this Doc View Source IsCacheable Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source Cardinality() Return the number of documents in this DocIdSet in constant time. Declaration public int Cardinality() Returns Type Description System.Int32 | Improve this Doc View Source GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source Intersect(ICollection<WAH8DocIdSet>) Same as Intersect(ICollection<WAH8DocIdSet>, Int32) with the default index interval. Declaration public static WAH8DocIdSet Intersect(ICollection<WAH8DocIdSet> docIdSets) Parameters Type Name Description ICollection < WAH8DocIdSet > docIdSets Returns Type Description WAH8DocIdSet | Improve this Doc View Source Intersect(ICollection<WAH8DocIdSet>, Int32) Compute the intersection of the provided sets. This method is much faster than computing the intersection manually since it operates directly at the byte level. Declaration public static WAH8DocIdSet Intersect(ICollection<WAH8DocIdSet> docIdSets, int indexInterval) Parameters Type Name Description ICollection < WAH8DocIdSet > docIdSets System.Int32 indexInterval Returns Type Description WAH8DocIdSet | Improve this Doc View Source RamBytesUsed() Return the memory usage of this class in bytes. Declaration public long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source Union(ICollection<WAH8DocIdSet>) Same as Union(ICollection<WAH8DocIdSet>, Int32) with the default index interval. Declaration public static WAH8DocIdSet Union(ICollection<WAH8DocIdSet> docIdSets) Parameters Type Name Description ICollection < WAH8DocIdSet > docIdSets Returns Type Description WAH8DocIdSet | Improve this Doc View Source Union(ICollection<WAH8DocIdSet>, Int32) Compute the union of the provided sets. This method is much faster than computing the union manually since it operates directly at the byte level. Declaration public static WAH8DocIdSet Union(ICollection<WAH8DocIdSet> docIdSets, int indexInterval) Parameters Type Name Description ICollection < WAH8DocIdSet > docIdSets System.Int32 indexInterval Returns Type Description WAH8DocIdSet"
  },
  "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.WordBuilder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.WordBuilder.html",
    "title": "Class WAH8DocIdSet.WordBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WAH8DocIdSet.WordBuilder Word-based builder. Inheritance System.Object WAH8DocIdSet.WordBuilder WAH8DocIdSet.Builder Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class WordBuilder : object Methods | Improve this Doc View Source Build() Build a new WAH8DocIdSet . Declaration public virtual WAH8DocIdSet Build() Returns Type Description WAH8DocIdSet | Improve this Doc View Source SetIndexInterval(Int32) Set the index interval. Smaller index intervals improve performance of Advance(Int32) but make the DocIdSet larger. An index interval i makes the index add an overhead which is at most 4/i , but likely much less. The default index interval is 8 , meaning the index has an overhead of at most 50%. To disable indexing, you can pass as an index interval. Declaration public virtual object SetIndexInterval(int indexInterval) Parameters Type Name Description System.Int32 indexInterval Returns Type Description System.Object"
  },
  "api/Lucene.Net/Lucene.Net.Util.WeakIdentityMap-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.WeakIdentityMap-2.html",
    "title": "Class WeakIdentityMap<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeakIdentityMap<TKey, TValue> Implements a combination of java.util.WeakHashMap and java.util.IdentityHashMap . Useful for caches that need to key off of a == comparison instead of a .Equals(object) . This class is not a general-purpose implementation! It intentionally violates 's general contract, which mandates the use of the method when comparing objects. This class is designed for use only in the rare cases wherein reference-equality semantics are required. This implementation was forked from Apache CXF but modified to not implement the interface and without any set views on it, as those are error-prone and inefficient, if not implemented carefully. The map only contains implementations on the values and not-GCed keys. Lucene's implementation also supports null keys, but those are never weak! The map supports two modes of operation: reapOnRead = true : This behaves identical to a java.util.WeakHashMap where it also cleans up the reference queue on every read operation ( Get(Object) , ContainsKey(Object) , Count , GetValueEnumerator() ), freeing map entries of already GCed keys. reapOnRead = false : This mode does not call Reap() on every read operation. In this case, the reference queue is only cleaned up on write operations (like Put(TKey, TValue) ). This is ideal for maps with few entries where the keys are unlikely be garbage collected, but there are lots of Get(Object) operations. The code can still call Reap() to manually clean up the queue without doing a write operation. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object WeakIdentityMap<TKey, TValue> Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class WeakIdentityMap<TKey, TValue> : object where TKey : class Type Parameters Name Description TKey TValue Properties | Improve this Doc View Source Count Returns the number of key-value mappings in this map. This result is a snapshot, and may not reflect unprocessed entries that will be removed before next attempted access because they are no longer referenced. NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsEmpty Returns true if this map contains no key-value mappings. Declaration public bool IsEmpty { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Keys Gets an object containing the keys of the WeakIdentityMap<TKey, TValue> . Declaration public IEnumerable<TKey> Keys { get; } Property Value Type Description IEnumerable <TKey> | Improve this Doc View Source Values Gets an object containing the values of the WeakIdentityMap<TKey, TValue> . Declaration public IEnumerable<TValue> Values { get; } Property Value Type Description IEnumerable <TValue> Methods | Improve this Doc View Source Clear() Removes all of the mappings from this map. Declaration public void Clear() | Improve this Doc View Source ContainsKey(Object) Returns true if this map contains a mapping for the specified key. Declaration public bool ContainsKey(object key) Parameters Type Name Description System.Object key Returns Type Description System.Boolean | Improve this Doc View Source Get(Object) Returns the value to which the specified key is mapped. Declaration public TValue Get(object key) Parameters Type Name Description System.Object key Returns Type Description TValue | Improve this Doc View Source GetValueEnumerator() Returns an iterator over all values of this map. This iterator may return values whose key is already garbage collected while iterator is consumed, especially if Lucene.Net.Util.WeakIdentityMap`2.reapOnRead is false . NOTE: This was valueIterator() in Lucene. Declaration public IEnumerator<TValue> GetValueEnumerator() Returns Type Description IEnumerator <TValue> | Improve this Doc View Source NewConcurrentHashMap() Creates a new WeakIdentityMap<TKey, TValue> based on a . The map cleans up the reference queue on every read operation . Declaration public static WeakIdentityMap<TKey, TValue> NewConcurrentHashMap() Returns Type Description WeakIdentityMap <TKey, TValue> | Improve this Doc View Source NewConcurrentHashMap(Boolean) Creates a new WeakIdentityMap<TKey, TValue> based on a . Declaration public static WeakIdentityMap<TKey, TValue> NewConcurrentHashMap(bool reapOnRead) Parameters Type Name Description System.Boolean reapOnRead controls if the map cleans up the reference queue on every read operation . Returns Type Description WeakIdentityMap <TKey, TValue> | Improve this Doc View Source NewHashMap() Creates a new WeakIdentityMap<TKey, TValue> based on a non-synchronized . The map cleans up the reference queue on every read operation . Declaration public static WeakIdentityMap<TKey, TValue> NewHashMap() Returns Type Description WeakIdentityMap <TKey, TValue> | Improve this Doc View Source NewHashMap(Boolean) Creates a new WeakIdentityMap<TKey, TValue> based on a non-synchronized . Declaration public static WeakIdentityMap<TKey, TValue> NewHashMap(bool reapOnRead) Parameters Type Name Description System.Boolean reapOnRead controls if the map cleans up the reference queue on every read operation . Returns Type Description WeakIdentityMap <TKey, TValue> | Improve this Doc View Source Put(TKey, TValue) Associates the specified value with the specified key in this map. If the map previously contained a mapping for this key, the old value is replaced. Declaration public TValue Put(TKey key, TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description TValue | Improve this Doc View Source Reap() This method manually cleans up the reference queue to remove all garbage collected key/value pairs from the map. Calling this method is not needed if reapOnRead = true . Otherwise it might be a good idea to call this method when there is spare time (e.g. from a background thread). Information about the reapOnRead setting Declaration public void Reap() | Improve this Doc View Source Remove(Object) Removes the mapping for a key from this weak hash map if it is present. Returns the value to which this map previously associated the key, or null if the map contained no mapping for the key. A return value of null does not necessarily indicate that the map contained. Declaration public bool Remove(object key) Parameters Type Name Description System.Object key Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/overview.html": {
    "href": "api/Lucene.Net/overview.html",
    "title": "Lucene.Net | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Lucene.Net <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Apache Lucene is a high-performance, full-featured text search engine library. Here's a simple example how to use Lucene for indexing and searching (using JUnit to check if the results are what we expect): <!-- = Java2Html Converter 5.0 [2006-03-04] by Markus Gebhard markus@jave.de = --> Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT); // Store the index in memory: Directory directory = new RAMDirectory(); // To store an index on disk, use this instead: //Directory directory = FSDirectory.open(\"/tmp/testindex\"); IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_CURRENT, analyzer); IndexWriter iwriter = new IndexWriter(directory, config); Document doc = new Document(); String text = \"This is the text to be indexed.\"; doc.add(new Field(\"fieldname\", text, TextField.TYPE_STORED)); iwriter.addDocument(doc); iwriter.close(); // Now search the index: DirectoryReader ireader = DirectoryReader.open(directory); IndexSearcher isearcher = new IndexSearcher(ireader); // Parse a simple query that searches for \"text\": QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, \"fieldname\", analyzer); Query query = parser.parse(\"text\"); ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs; assertEquals(1, hits.length); // Iterate through the results: for (int i = 0; i < hits.length;=\"\" i++)=\"\" {=\"\" document=\"\" hitdoc=\"isearcher.doc(hits[i].doc);\" assertequals(\"this=\"\" is=\"\" the=\"\" text=\"\" to=\"\" be=\"\" indexed.\",=\"\" hitdoc.get(\"fieldname\"));=\"\" }=\"\" ireader.close();=\"\"> The Lucene API is divided into several packages: Lucene.Net.Analysis defines an abstract Analyzer API for converting text from a {@link java.io.Reader} into a TokenStream , an enumeration of token Attribute s. A TokenStream can be composed by applying TokenFilter s to the output of a Tokenizer . Tokenizers and TokenFilters are strung together and applied with an Analyzer . analyzers-common provides a number of Analyzer implementations, including StopAnalyzer and the grammar-based StandardAnalyzer . Lucene.Net.Codecs provides an abstraction over the encoding and decoding of the inverted index structure, as well as different implementations that can be chosen depending upon application needs. Lucene.Net.Documents provides a simple Document class. A Document is simply a set of named Field s, whose values may be strings or instances of {@link java.io.Reader}. Lucene.Net.Index provides two primary classes: IndexWriter , which creates and adds documents to indices; and IndexReader , which accesses the data in the index. Lucene.Net.Search provides data structures to represent queries (ie TermQuery for individual words, PhraseQuery for phrases, and BooleanQuery for boolean combinations of queries) and the IndexSearcher which turns queries into TopDocs . A number of QueryParser s are provided for producing query structures from strings or xml. Lucene.Net.Store defines an abstract class for storing persistent data, the Directory , which is a collection of named files written by an IndexOutput and read by an IndexInput . Multiple implementations are provided, including FSDirectory , which uses a file system directory to store files, and RAMDirectory which implements files as memory-resident data structures. Lucene.Net.Util contains a few handy data structures and util classes, ie OpenBitSet and PriorityQueue . To use Lucene, an application should: Create Document s by adding Field s; Create an IndexWriter and add documents to it with AddDocument ; Call QueryParser.parse() to build a query from a string; and Create an IndexSearcher and pass the query to its Search method. Some simple examples of code which does this are: IndexFiles.java creates an index for all the files contained in a directory. SearchFiles.java prompts for queries and searches an index."
  },
  "cli/analysis/index.html": {
    "href": "cli/analysis/index.html",
    "title": "analysis | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "analysis Description Utilities to manage specialized analyzers. Commands kuromoji-build-dictionary stempel-compile-stems stempel-patch-stems"
  },
  "cli/analysis/kuromoji-build-dictionary.html": {
    "href": "cli/analysis/kuromoji-build-dictionary.html",
    "title": "kuromoji-build-dictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "kuromoji-build-dictionary Name analysis-kuromoji-build-dictionary - Generates a set of custom dictionary files for the Lucene.Net.Analysis.Kuromoji library. Synopsis lucene analysis kuromoji-build-dictionary <FORMAT> <INPUT_DIRECTORY> <OUTPUT_DIRECTORY> [-e|--encoding] [-n|--normalize] [?|-h|--help] Description Generates the following set of binary files: CharacterDefinition.dat ConnectionCosts.dat TokenInfoDictionary$buffer.dat TokenInfoDictionary$fst.dat TokenInfoDictionary$posDict.dat TokenInfoDictionary$targetMap.dat UnknownDictionary$buffer.dat UnknownDictionary$posDict.dat UnknownDictionary$targetMap.dat If these files are placed into a subdirectory of your application named kuromoji-data , they will be used automatically by Lucene.Net.Analysis.Kuromoji features such as the JapaneseAnalyzer or JapaneseTokenizer. To use an alternate directory location, put the path in an environment variable named kuromoji.data.dir . The files must be placed in a subdirectory of this location named kuromoji-data . See this blog post for information about the dictionary format. A sample is available at https://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/ . The Kuromoji project documentation may also be helpful. Arguments FORMAT The dictionary format. Valid values are IPADIC and UNIDIC. If an invalid value is passed, IPADIC is assumed. INPUT_DIRECTORY The directory where the dictionary input files are located. OUTPUT_DIRECTORY The directory to put the dictionary output. Options ?|-h|--help Prints out a short help for the command. -e|--encoding <ENCODING> The file encoding used by the input files. If not supplied, the default value is EUC-JP . -n|--normalize Normalize the entries using normalization form KC. Example lucene analysis kuromoji-build-dictionary IPADIC X:\\kuromoji-data X:\\kuromoji-dictionary --normalize"
  },
  "cli/analysis/stempel-compile-stems.html": {
    "href": "cli/analysis/stempel-compile-stems.html",
    "title": "stempel-compile-stems | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "stempel-compile-stems Name analysis-stempel-compile-stems - Compiles a stemmer table for the Egothor stemmer in the Lucene.Net.Analysis.Stempel project. Synopsis lucene analysis stempel-compile-stems <STEMMING_ALGORITHM> <STEMMER_TABLE_FILE> [-e|--encoding] [?|-h|--help] Description See the Egothor project documentation for more information. Arguments STEMMING_ALGORITHM The name of the desired stemming algorithm to use. Possible values are Multi (which changes the stemmer to use the MultiTrie2 rather than a Trie class to store its data) or 0 which instructs the stemmer to store the original data. Any other supplied value will use the default algorithm. See the Egothor project documentation for more information. STEMMER_TABLE_FILE The path to a file containing a stemmer table. Multiple values can be supplied separated by a space. Options ?|-h|--help Prints out a short help for the command. -e|--encoding <ENCODING> The file encoding used by the stemmer files. If not supplied, the default value is UTF-8 . Note this value can alternatively be supplied by setting the environment variable egothor.stemmer.charset . Example lucene analysis stempel-compile-stems test X:\\stemmer-data\\table1.txt X:\\stemmer-data\\table2.txt"
  },
  "cli/analysis/stempel-patch-stems.html": {
    "href": "cli/analysis/stempel-patch-stems.html",
    "title": "stempel-patch-stems | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "stempel-patch-stems Name analysis-stempel-patch-stems - Generates patch commands from an already prepared stemmer table for the Egothor stemmer in the Lucene.Net.Analysis.Stempel project. Synopsis lucene analysis stempel-patch-stems <STEMMER_TABLE_FILE> [-e|--encoding] [?|-h|--help] Description See the Egothor project documentation for more information. Arguments STEMMER_TABLE_FILE The path to a file containing a stemmer table. Multiple values can be supplied separated by a space. Options ?|-h|--help Prints out a short help for the command. -e|--encoding <ENCODING> The file encoding used by the stemmer files. If not supplied, the default value is UTF-8 . Note this value can alternatively be supplied by setting the environment variable egothor.stemmer.charset . Example lucene analysis stempel-patch-stems X:\\stemmer-data\\table1.txt X:\\stemmer-data\\table2.txt --encoding UTF-16"
  },
  "cli/benchmark/extract-reuters.html": {
    "href": "cli/benchmark/extract-reuters.html",
    "title": "extract-reuters | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "extract-reuters Name benchmark-extract-reuters - Splits Reuters SGML documents into simple text files containing: Title, Date, Dateline, Body. Synopsis lucene benchmark extract-reuters <INPUT_DIRECTORY> <OUTPUT_DIRECTORY> [?|-h|--help] Arguments INPUT_DIRECTORY Path to Reuters SGML files. OUTPUT_DIRECTORY Path to a directory where the output files will be written. Options ?|-h|--help Prints out a short help for the command. Example Extracts the reuters SGML files in the z:\\input directory and places the content in the z:\\output directory. lucene benchmark extract-reuters z:\\input z:\\output"
  },
  "cli/benchmark/extract-wikipedia.html": {
    "href": "cli/benchmark/extract-wikipedia.html",
    "title": "extract-wikipedia | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "extract-wikipedia Name benchmark-extract-wikipedia - Extracts a downloaded Wikipedia dump into separate files for indexing. Synopsis lucene benchmark extract-wikipedia <INPUT_WIKIPEDIA_FILE> <OUTPUT_DIRECTORY> [-d|--discard-image-only-docs] [?|-h|--help] Arguments INPUT_WIKIPEDIA_FILE Input path to a Wikipedia XML file. OUTPUT_DIRECTORY Path to a directory where the output files will be written. Options ?|-h|--help Prints out a short help for the command. -d|--discard-image-only-docs Tells the extractor to skip WIKI docs that contain only images. Example Extracts the c:\\wiki.xml file into the c:\\out directory, skipping any docs that only contain images. lucene benchmark extract-wikipedia c:\\wiki.xml c:\\out -d"
  },
  "cli/benchmark/find-quality-queries.html": {
    "href": "cli/benchmark/find-quality-queries.html",
    "title": "find-quality-queries | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "find-quality-queries Name benchmark-find-quality-queries - Suggests quality queries based on index contents. Used for making quality test benchmarks. Synopsis lucene benchmark find-quality-queries <INPUT_DIRECTORY> [?|-h|--help] Arguments INDEX_DIRECTORY Path to the index. Options ?|-h|--help Prints out a short help for the command. Example Finds quality queries on the c:\\lucene-index index directory. lucene benchmark find-quality-queries c:\\lucene-index"
  },
  "cli/benchmark/index.html": {
    "href": "cli/benchmark/index.html",
    "title": "benchmark | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "benchmark Description Utilities for benchmarking Lucene.Net. Commands extract-reuters extract-wikipedia find-quality-queries run run-trec-eval sample"
  },
  "cli/benchmark/run.html": {
    "href": "cli/benchmark/run.html",
    "title": "run | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "run Name benchmark-run - Runs a benchmark based on an algorithm file. Synopsis lucene benchmark run <ALGORITHM_FILE> <OUTPUT_DIRECTORY> [?|-h|--help] Arguments ALGORITHM_FILE An algorithm file specifying the parameters of the benchmark to run. OUTPUT_DIRECTORY Path to a directory where the output files will be written. Options ?|-h|--help Prints out a short help for the command. Example Runs a benchmark on the c:\\check.alg algorithm file. lucene benchmark run c:\\check.alg"
  },
  "cli/benchmark/run-trec-eval.html": {
    "href": "cli/benchmark/run-trec-eval.html",
    "title": "run-trec-eval | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "run-trec-eval Name benchmark-run-trec-eval - Runs a TREC evaluation. Synopsis lucene benchmark run-trec-eval <INPUT_TOPICS_FILE> <INPUT_QUERY_RELEVANCE_FILE> <OUTPUT_SUBMISSION_FILE> <INDEX_DIRECTORY> [-t|--query-on-title] [-d|--query-on-description] [-n|--query-on-narrative] [?|-h|--help] Arguments INPUT_TOPICS_FILE Input file containing queries. INPUT_QUERY_RELEVANCE_FILE Input file conataining relevance judgements. OUTPUT_SUBMISSION_FILE Output submission file for TREC evaluation. INDEX_DIRECTORY The index directory. Options ?|-h|--help Prints out a short help for the command. -t|--query-on-title Use title field in query. This flag will automatically be on if no other field is specified. -d|--query-on-description Use description field in query. -n|--query-on-narrative Use narrative field in query. Example Runs a TREC evaluation on the c:\\topics queries file and the c:\\queries relevance judgements on the c:\\lucene-index index using the description and narrative fields and places the output in c:\\output.txt . lucene benchmark run-trec-eval c:\\topics.txt c:\\queries.txt c:\\submissions.txt c:\\output.txt c:\\lucene-index -d -n"
  },
  "cli/benchmark/sample.html": {
    "href": "cli/benchmark/sample.html",
    "title": "sample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "sample Name benchmark-sample - Sample of a performance test written programatically instead of using an algorithm file. Synopsis lucene benchmark sample [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example Runs the sample. lucene benchmark sample"
  },
  "cli/demo/associations-facets.html": {
    "href": "cli/demo/associations-facets.html",
    "title": "associations-facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "associations-facets Name demo-associations-facets - Shows example usage of category associations. Synopsis lucene demo associations-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo associations-facets"
  },
  "cli/demo/distance-facets.html": {
    "href": "cli/demo/distance-facets.html",
    "title": "distance-facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "distance-facets Name demo-distance-facets - Shows simple usage of dynamic range faceting, using the expressions module to calculate distance. Synopsis lucene demo distance-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo distance-facets"
  },
  "cli/demo/expression-aggregation-facets.html": {
    "href": "cli/demo/expression-aggregation-facets.html",
    "title": "expression-aggregation-facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "expression-aggregation-facets Name demo-expression-aggregation-facets - Shows facets aggregation by an expression. Synopsis lucene demo expression-aggregation-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo expression-aggregation-facets"
  },
  "cli/demo/index.html": {
    "href": "cli/demo/index.html",
    "title": "demo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "demo Description Demos for various Lucene.Net functionality including C# code samples. Commands associations-facets distance-facets expression-aggregation-facets index-files multi-category-lists-facets range-facets search-files simple-facets simple-sorted-set-facets"
  },
  "cli/demo/index-files.html": {
    "href": "cli/demo/index-files.html",
    "title": "index-files | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "index-files Name demo-index-files - Index all files under a directory. Synopsis lucene demo index-files \\<INDEX_DIRECTORY> \\<SOURCE_DIRECTORY> [-u|--update] [?|-h|--help] lucene demo index-files [-src|--view-source-code] [-out|--output-source-code] Description This demo can be used to learn how to build a Lucene.Net index. After the index has been built, you can run the search-files demo to run queries against it. Arguments INDEX_DIRECTORY The directory of the index. SOURCE_DIRECTORY The source directory containing the files to index. This directory will be analyzed recursively. Options ?|-h|--help Prints out a short help for the command. -u|--update Adds new documents to an existing index. If not supplied, any existing index in the INDEX_DIRECTORY will be overwritten. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example Indexes the contents of C:\\Users\\BGates\\Documents\\ and places the Lucene.Net index in X:\\test-index\\ . lucene demo index-files X:\\test-index C:\\Users\\BGates\\Documents"
  },
  "cli/demo/multi-category-lists-facets.html": {
    "href": "cli/demo/multi-category-lists-facets.html",
    "title": "multi-category-lists-facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "multi-category-lists-facets Name demo-multi-category-lists-facets - Demonstrates indexing categories into different indexed fields. Synopsis lucene demo multi-category-lists-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo multi-category-lists-facets"
  },
  "cli/demo/range-facets.html": {
    "href": "cli/demo/range-facets.html",
    "title": "range-facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "range-facets Name demo-range-facets - Shows simple usage of dynamic range faceting. Synopsis lucene demo range-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo range-facets"
  },
  "cli/demo/search-files.html": {
    "href": "cli/demo/search-files.html",
    "title": "search-files | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "search-files Name demo-search-files - Simple command-line based search demo. Synopsis lucene demo search-files \\<INDEX_DIRECTORY> [-f|--field] [-r|--repeat] [-qf|--queries-file] [-q|--query] [--raw] [-p|--page-size] [?|-h|--help] lucene demo search-files [-src|--view-source-code] [-out|--output-source-code] Description Run the index-files demo first to generate an index to search. NOTE: To run queries interactively in the console, omit both the --queries-file and the --query arguments. Arguments INDEX_DIRECTORY The directory of the index that has previously been created using the index-files demo . Options ?|-h|--help Prints out a short help for the command. -f|--field <FIELD> The index field to use in the search. If not supplied, defaults to contents . -r|--repeat <NUMBER> Repeat the search and time as a benchmark. -qf|--queries-file <PATH> A file containing the queries to perform. -q|--query <QUERY> A query to perform. --raw Output raw format. -p|--page-size <NUMBER> Hits per page to display. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Examples Search the index located in the X:\\test-index directory interactively, showing 15 results per page in raw format: lucene demo search-files X:\\test-index -p 15 --raw Run the query \"foobar\" against the \"path\" field in the index located in the X:\\test-index directory: lucene demo search-files X:\\test-index --field path --query foobar"
  },
  "cli/demo/simple-facets.html": {
    "href": "cli/demo/simple-facets.html",
    "title": "simple-facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "simple-facets Name demo-simple-facets - Shows simple usage of faceted indexing and searching. Synopsis lucene demo simple-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo simple-facets"
  },
  "cli/demo/simple-sorted-set-facets.html": {
    "href": "cli/demo/simple-sorted-set-facets.html",
    "title": "simple-sorted-set-facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "simple-sorted-set-facets Name demo-simple-sorted-set-facets - Shows simple usage of faceted indexing and search using SortedSetDocValuesFacetField and SortedSetDocValuesFacetCounts. Synopsis lucene demo simple-sorted-set-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo simple-sorted-set-facets"
  },
  "cli/index.html": {
    "href": "cli/index.html",
    "title": "Lucene.Net command line interface (CLI) tools | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Lucene.Net command line interface (CLI) tools The Lucene.Net command line interface (CLI) is a new cross-platform toolchain with utilities for maintaining Lucene.Net and demos for learning basic Lucene.Net functionality. Prerequisites .NET Core 3.1.0 Runtime Installation Perform a one-time install of the lucene-cli tool using the following dotnet CLI command: dotnet tool install lucene-cli -g --version 4.8.0-beta00007 You may then use the lucene-cli tool to analyze and update Lucene.Net indexes and use its demos. CLI Commands The following commands are installed: analysis demo index lock Command structure CLI command structure consists of the driver (\"lucene\"), the command, and possibly command arguments and options. You see this pattern in most CLI operations, such as checking a Lucene.Net index for problematic segments and fixing (removing) them: lucene index check C:\\my-index --verbose lucene index fix C:\\my-index"
  },
  "cli/index/check.html": {
    "href": "cli/index/check.html",
    "title": "check | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "check Name index-check - Checks an index for problematic segments. Synopsis lucene index check [<INDEX_DIRECTORY>] [-v|--verbose] [-c|--cross-check-term-vectors] [-dir|--directory-type] [-s|--segment] [?|-h|--help] Description Basic tool to check the health of an index. As this tool checks every byte in the index, on a large index it can take quite a long time to run. Arguments INDEX_DIRECTORY The path to the directory of the index to check. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. -v|--verbose Enable verbose output. -c|--cross-check-term-vectors Cross-check term vectors. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. If ommitted, it defaults to the optimal FSDirectory for your OS platform. -s|--segment <SEGMENT> Only check the specified segment(s). This can be specified multiple times, to check more than one segment, eg --segment _2 --segment _a. Examples Check the index located at X:\\lucenenet-index\\ verbosely, scanning only the segments named _1j_Lucene41_0 and _2u_Lucene41_0 for problems: lucene index check X:\\lucenenet-index -v -s _1j_Lucene41_0 -s _2u_Lucene41_0 Check the index located at C:\\taxonomy\\ using the MMapDirectory memory-mapped directory implementation: lucene index check C:\\taxonomy --directory-type MMapDirectory"
  },
  "cli/index/copy-segments.html": {
    "href": "cli/index/copy-segments.html",
    "title": "copy-segments | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "copy-segments Name index-copy-segments - Copies segments from one index to another index. Synopsis lucene index copy-segments <INPUT_DIRECTORY> <OUTPUT_DIRECTORY> <SEGMENT>[ <SEGMENT_2>...] [?|-h|--help] Description This tool does file-level copying of segments files. This means it's unable to split apart a single segment into multiple segments. For example if your index is a single segment, this tool won't help. Also, it does basic file-level copying (using simple FileStream) so it will not work with non FSDirectory Directory implementations. Arguments INPUT_DIRECTORY The directory of the index to copy. OUTPUT_DIRECTORY The directory of the destination index. SEGMENT, SEGMENT_2 The segments to copy, separated by a space. Options ?|-h|--help Prints out a short help for the command. Example Copy the _71_Lucene41_0 segment from the index located at X:\\lucene-index to the index located at X:\\output : lucene index copy-segments X:\\lucene-index X:\\output _71_Lucene41_0"
  },
  "cli/index/delete-segments.html": {
    "href": "cli/index/delete-segments.html",
    "title": "delete-segments | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "delete-segments Name index-delete-segments - Deletes segments from an index. Synopsis lucene index delete-segments <INDEX_DIRECTORY> <SEGMENT>[ <SEGMENT_2>...] [?|-h|--help] Description You can easily accidentally remove segments from your index, so be careful! Always make a backup of your index first. Arguments INDEX_DIRECTORY The directory of the index. SEGMENT The segments to delete, separated by a space. Options ?|-h|--help Prints out a short help for the command. Example Delete the segments named _8c and _83 from the index located at X:\\category-data\\ : lucene index delete-segments X:\\category-data _8c _83"
  },
  "cli/index/extract-cfs.html": {
    "href": "cli/index/extract-cfs.html",
    "title": "extract-cfs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "extract-cfs Name index-extract-cfs - Extracts sub-files from a .cfs compound file. Synopsis lucene index extract-cfs <CFS_FILE_NAME> [-dir|--directory-type] [?|-h|--help] Description Extracts .cfs compound files (that were created using the CompoundFileDirectory from Lucene.Net.Misc) to the current working directory. In order to make the extracted version of the index work, you have to copy the segments file from the compound index into the directory where the extracted files are stored. Arguments CFS_FILE_NAME The path to a .cfs compound file containing words to parse. Options ?|-h|--help Prints out a short help for the command. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. If ommitted, it defaults to the optimal FSDirectory for your OS platform. Examples Extract the files from the compound file at X:\\lucene-index\\_81.cfs to the current working directory: lucene index extract-cfs X:\\lucene-index_81.cfs Extract the files from the compound file at X:\\lucene-index\\_64.cfs to the current working directory using the SimpleFSDirectory implementation: lucene index extract-cfs X:\\lucene-index_64.cfs --directory-type SimpleFSDirectory"
  },
  "cli/index/fix.html": {
    "href": "cli/index/fix.html",
    "title": "fix | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "fix Name index-fix - Fixes an index by removing problematic segments. Synopsis lucene index fix [<INDEX_DIRECTORY>] [-v|--verbose] [-c|--cross-check-term-vectors] [-dir|--directory-type] [--dry-run] [?|-h|--help] Description Basic tool to write a new segments file that removes reference to problematic segments. As this tool checks every byte in the index, on a large index it can take quite a long time to run. WARNING: This command should only be used on an emergency basis as it will cause documents (perhaps many) to be permanently removed from the index. Always make a backup copy of your index before running this! Do not run this tool on an index that is actively being written to. You have been warned! Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. -v|--verbose Enables verbose output. -c|--cross-check-term-vectors Cross check term vectors. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. If omitted, it defaults to the optimal FSDirectory for your OS platform. --dry-run Doesn't change the index, but reports any actions that would be taken if this option were not supplied. Examples Check what a fix operation would do if run on the index located at X:\\product-index\\ , using verbose output: lucene index fix X:\\product-index --verbose --dry-run Fix the index located at X:\\product-index and cross check term vectors: lucene index fix X:\\product-index -c"
  },
  "cli/index/index.html": {
    "href": "cli/index/index.html",
    "title": "index | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "index Description Utilities to manage specialized analyzers. WARNING: Many of these operations change an index in ways that cannot be reversed. Always make a backup of your index before running these commands. Commands check copy-segments delete-segments extract-cfs fix list-cfs list-high-freq-terms list-segments list-taxonomy-stats list-term-info merge split upgrade"
  },
  "cli/index/list-cfs.html": {
    "href": "cli/index/list-cfs.html",
    "title": "list-cfs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "list-cfs Name index-list-cfs - Lists sub-files from a .cfs compound file. Synopsis lucene index list-cfs <CFS_FILE_NAME> [-dir|--directory-type] [?|-h|--help] Description Prints the filename and size of each file within a given .cfs compound file. The .cfs compound file format is created using the CompoundFileDirectory from Lucene.Net.Misc. Arguments CFS_FILE_NAME The .cfs compound file containing words to parse. Options ?|-h|--help Prints out a short help for the command. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. If omitted, defaults to the optimal FSDirectory for your OS platform. Example Lists the files within the X:\\categories\\_53.cfs compound file using the NIOFSDirectory directory implementation: lucene index list-cfs X:\\categories_53.cfs -dir NIOFSDirectory"
  },
  "cli/index/list-high-freq-terms.html": {
    "href": "cli/index/list-high-freq-terms.html",
    "title": "list-high-freq-terms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "list-high-freq-terms Name index-list-high-freq-terms - Lists the top N most frequent terms by document frequency. Synopsis lucene index list-high-freq-terms [<INDEX_DIRECTORY>] [-t|--total-term-frequency] [-n|--number-of-terms] [-f|--field] [?|-h|--help] Description Extracts the top N most frequent terms (by document frequency) from an existing Lucene index and reports their document frequency. Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. -t|--total-term-frequency Specifies that both the document frequency and term frequency are reported, ordered by descending total term frequency. -n|--number-of-terms <NUMBER> The number of terms to consider. If omitted, defaults to 100. -f|--field <FIELD> The field to consider. If omitted, considers all fields. Examples List the high frequency terms in the index located at F:\\product-index\\ on the description field, reporting both document frequency and term frequency: lucene index list-high-freq-terms F:\\product-index --total-term-frequency --field description List the high frequency terms in the index located at C:\\lucene-index\\ on the name field, tracking 30 terms: lucene index list-high-freq-terms C:\\lucene-index --f name -n 30"
  },
  "cli/index/list-segments.html": {
    "href": "cli/index/list-segments.html",
    "title": "list-segments | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "list-segments Name index-list-segments - Lists segments in an index. Synopsis lucene index list-segments [<INDEX_DIRECTORY>] [?|-h|--help] Description After running this command to view segments, use copy-segments to copy segments from one index directory to another or delete-segments to remove segments from an index. Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. Example List the segments in the index located at X:\\lucene-index\\ : lucene index list-segments X:\\lucene-index"
  },
  "cli/index/list-taxonomy-stats.html": {
    "href": "cli/index/list-taxonomy-stats.html",
    "title": "list-taxonomy-stats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "list-taxonomy-stats Name index-list-taxonomy-stats - Displays the taxonomy statistical information for a taxonomy index. Synopsis lucene index list-taxonomy-stats [<INDEX_DIRECTORY>] [-tree|--show-tree] [?|-h|--help] Description Prints how many ords are under each dimension. Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. NOTE: This directory must be a facet taxonomy directory for the command to succeed. Options ?|-h|--help Prints out a short help for the command. -tree|--show-tree Recursively lists all descendant nodes. Example List the taxonomy statistics from the index located at X:\\category-taxonomy-index\\ , viewing all descendant nodes: lucene index list-taxonomy-stats X:\\category-taxonomy-index -tree"
  },
  "cli/index/list-term-info.html": {
    "href": "cli/index/list-term-info.html",
    "title": "list-term-info | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "list-term-info Name index-list-term-info - Gets document frequency and total number of occurrences of a term. Synopsis lucene index list-term-info <INDEX_DIRECTORY> <FIELD> <TERM> [?|-h|--help] Description Gets document frequency and total number of occurrences (sum of the term frequency for each document) of a term. Arguments INDEX_DIRECTORY The directory of the index. FIELD The field to consider. TERM The term to consider. Options ?|-h|--help Prints out a short help for the command. Example List the term information from the index located at C:\\project-index\\ : lucene index list-term-info C:\\project-index"
  },
  "cli/index/merge.html": {
    "href": "cli/index/merge.html",
    "title": "merge | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "merge Name index-merge - Merges multiple indexes into a single index. Synopsis lucene index merge <OUTPUT_DIRECTORY> <INPUT_DIRECTORY> <INPUT_DIRECTORY_2>[ <INPUT_DIRECTORY_N>...] [?|-h|--help] Description Merges the the input index directories into a combined index at the output directory path. Arguments OUTPUT_DIRECTORY The output directory to merge the input indexes into. INPUT_DIRECTORY, INPUT_DIRECTORY_2, INPUT_DIRECTORY_N Two or more input index directories, separated by a space. Options ?|-h|--help Prints out a short help for the command. Example Merge the indexes C:\\product-index1 and C:\\product-index2 into an index located at X:\\merged-index : lucene index merge X:\\merged-index C:\\product-index1 C:\\product-index2"
  },
  "cli/index/split.html": {
    "href": "cli/index/split.html",
    "title": "split | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "split Name index-split - Splits an index into multiple equal parts. Synopsis lucene index split <OUTPUT_DIRECTORY> <INPUT_DIRECTORY>[ <INPUT_DIRECTORY_2>...] [-n|--number-of-parts] [-s|--sequential] [?|-h|--help] Description Splits the input index into multiple equal parts. The method employed here uses IndexWriter.AddIndexes(IndexReader[]) where the input data comes from the input index with artificially applied deletes to the document ids that fall outside the selected partition. Deletes are only applied to a buffered list of deleted documents and don't affect the source index. This tool works also with read-only indexes. The disadvantage of this tool is that source index needs to be read as many times as there are parts to be created. The multiple passes may be slow. NOTE: This tool is unaware of documents added automatically via IndexWriter.AddDocuments(IEnumerable&lt;IEnumerable&lt;IIndexableField&gt;&gt;, Analyzer) or IndexWriter.UpdateDocuments(Term, IEnumerable&lt;IEnumerable&lt;IIndexableField&gt;&gt;, Analyzer) , which means it can easily break up such document groups. Arguments OUTPUT_DIRECTORY Path to output directory to contain partial indexes. INPUT_DIRECTORY, INPUT_DIRECTORY_2 The path of the source index, which can have deletions and can have multiple segments (or multiple readers). Multiple values can be supplied separated by a space. Options ?|-h|--help Prints out a short help for the command. -n|--number-of-parts <NUMBER> The number of parts (output indices) to produce. If omitted, defaults to 2. -s|--sequential Sequential doc-id range split (default is round-robin). Example Split the index located at X:\\old-index\\ sequentially, placing the resulting 2 indices into the X:\\new-index\\ directory: lucene index split X:\\new-index X:\\old-index --sequential Split the index located at T:\\in\\ into 4 parts and place them into the T:\\out\\ directory: lucene index split T:\\out T:\\in -n 4"
  },
  "cli/index/upgrade.html": {
    "href": "cli/index/upgrade.html",
    "title": "upgrade | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "upgrade Name index-upgrade - Upgrades all segments of an index from previous Lucene.Net versions to the current segment file format. Synopsis lucene index upgrade [<INDEX_DIRECTORY>] [-d|--delete-prior-commits] [-v|--verbose] [-dir|--directory-type] [?|-h|--help] Description This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify --delete-prior-commits to override this, allowing the tool to delete all but the last commit. Specify an FSDirectory implementation through the --directory-type option to force its use. If not qualified by an AssemblyName, the Lucene.Net.dll assembly will be used. WARNING: This tool may reorder document IDs! Be sure to make a backup of your index before you use this. Also, ensure you are using the correct version of this utility to match your application's version of Lucene.Net. This operation cannot be reversed. Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. -d|--delete-prior-commits Deletes prior commits. -v|--verbose Verbose output. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. Defaults to the optional FSDirectory for your OS platform. Examples Upgrade the index format of the index located at X:\\lucene-index\\ to the same version as this tool, using the SimpleFSDirectory implementation: lucene index upgrade X:\\lucene-index -dir SimpleFSDirectory Upgrade the index located at C:\\indexes\\category-index\\ verbosely, deleting all but the last commit: lucene index upgrade C:\\indexes\\category-index --verbose --delete-prior-commits"
  },
  "cli/lock/index.html": {
    "href": "cli/lock/index.html",
    "title": "lock | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "lock Description Utilities for verifying concurrent locking integrity. Commands stress-test verify-server"
  },
  "cli/lock/stress-test.html": {
    "href": "cli/lock/stress-test.html",
    "title": "stress-test | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "stress-test Name lock-stress-test - Simple tool that forever acquires and releases a lock using a specific LockFactory . Synopsis lucene lock stress-test <ID> <VERIFIER_HOST> <VERIFIER_PORT> <LOCK_FACTORY_TYPE> <LOCK_DIRECTORY> <SLEEP_TIME_MS> <TRIES> [?|-h|--help] Description You should run multiple instances of this process, each with its own unique ID, and each pointing to the same lock directory, to verify that locking is working correctly. Make sure you are first running verify-server . Arguments ID An integer from 0 - 255 (should be unique for test process). VERIFIER_HOST Hostname or IP address that verify-server is listening on. VERIFIER_PORT Port that verify-server is listening on. LOCK_FACTORY_TYPE The primary LockFactory implementation that we will use. LOCK_DIRECTORY The path to the lock directory (only utilized if LOCK_FACTORY_TYPE is set to SimpleFSLockFactory or NativeFSLockFactory ). SLEEP_TIME_MS Milliseconds to pause between each lock obtain/release. TRIES Number of locking tries. Options ?|-h|--help Prints out a short help for the command. Example Run the client (stress test), connecting to the server on IP address 127.0.0.4 and port 54464 using the ID 3, the NativeFSLockFactory , specifying the lock directory as F:\\temp , sleep for 50 milliseconds, and try to obtain a lock up to 10 times: lucene lock stress-test 3 127.0.0.4 54464 NativeFSLockFactory F:\\temp 50 10"
  },
  "cli/lock/verify-server.html": {
    "href": "cli/lock/verify-server.html",
    "title": "verify-server | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "verify-server Name lock-verify-server - Server that must be running when you use VerifyingLockFactory (or stress-test ). Synopsis lucene lock verify-server <IP_HOSTNAME> <MAX_CLIENTS> [?|-h|--help] Description This server simply verifies that at most one process holds the lock at a time. Arguments IP_HOSTNAME Hostname or IP address that verify-server will listen on. MAX_CLIENTS The maximum number of threads that are observing the lock from within the verify-server process. When using stress-test , each thread will be used by a single connected client and the server won't start running until this number of clients is reached. Options ?|-h|--help Prints out a short help for the command. Example Run the server on IP 127.0.0.4 with a 10 connected clients: lucene lock verify-server 127.0.0.4 10"
  },
  "index.html": {
    "href": "index.html",
    "title": "Lucene.Net Docs - The documentation website for Lucene.Net | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Apache Lucene.Net 4.8.0 Documentation Lucene is a .NET full-text search engine. Lucene.NET is not a complete application, but rather a code library and API that can easily be used to add search capabilities to applications. This is the official API documentation for Apache Lucene.NET 4.8.0 . Getting Started The following section is intended as a \"getting started\" guide. It has three audiences: first-time users looking to install Apache Lucene in their application; developers looking to modify or base the applications they develop on Lucene; and developers looking to become involved in and contribute to the development of Lucene. The goal is to help you \"get started\". It does not go into great depth on some of the conceptual or inner details of Lucene: Lucene demo, its usage, and sources : Tutorial and walk-through of the command-line Lucene demo. Introduction to Lucene's APIs : High-level summary of the different Lucene packages. Analysis overview : Introduction to Lucene's analysis API. See also the TokenStream consumer workflow . Reference Documents Changes : List of changes in this release. System Requirements: Minimum and supported .NET versions. TODO: Add link Migration Guide: What changed in Lucene 4; how to migrate code from Lucene 3.x. TODO: Add link File Formats : Guide to the supported index format used by Lucene. This can be customized by using an alternate codec . Search and Scoring in Lucene : Introduction to how Lucene scores documents. Classic Scoring Formula : Formula of Lucene's classic Vector Space implementation. (look here for other models) Classic QueryParser Syntax : Overview of the Classic QueryParser's syntax and features. Libraries Lucene.Net - Core library Lucene.Net.Analysis.Common - Analyzers for indexing content in different languages and domains Lucene.Net.Analysis.Kuromoji - Japanese Morphological Analyzer Lucene.Net.Analysis.Morfologik - Analyzer for dictionary stemming, built-in Polish dictionary Lucene.Net.Analysis.OpenNLP - OpenNLP Library Integration Lucene.Net.Analysis.Phonetic - Analyzer for indexing phonetic signatures (for sounds-alike search) Lucene.Net.Analysis.SmartCn - Analyzer for indexing Chinese Lucene.Net.Analysis.Stempel - Analyzer for indexing Polish Lucene.Net.Benchmark - System for benchmarking Lucene Lucene.Net.Classification - Classification module for Lucene Lucene.Net.Codecs - Lucene codecs and postings formats Lucene.Net.Expressions - Dynamically computed values to sort/facet/search on based on a pluggable grammar Lucene.Net.Facet - Faceted indexing and search capabilities Lucene.Net.Grouping - Collectors for grouping search results Lucene.Net.Highlighter - Highlights search keywords in results Lucene.Net.ICU - Specialized ICU (International Components for Unicode) Analyzers and Highlighters Lucene.Net.Join - Index-time and Query-time joins for normalized content Lucene.Net.Memory - Single-document in-memory index implementation Lucene.Net.Misc - Index tools and other miscellaneous code Lucene.Net.Queries - Filters and Queries that add to core Lucene Lucene.Net.QueryParser - Text to Query parsers and parsing framework Lucene.Net.Replicator Files replication utility Lucene.Net.Sandbox - Various third party contributions and new ideas Lucene.Net.Spatial - Geospatial search Lucene.Net.Suggest - Auto-suggest and Spell-checking support Lucene.Net.TestFramework - Framework for testing Lucene-based applications Tools Lucene CLI : Dotnet tool to work with Lucene indexes from the command line Demo : Simple example code"
  }
}